******************************************************************************* * Party-Demo * Code by Readysoft. 10.11.91.-11.11.91. * 14.12.91.- * 25.01.92.- * ******************************************************************************* ;>EXTERN 'sindat_h',rsindat_h ;>EXTERN 'sindat_v',rsindat_v ;>EXTERN 'sinus.dat',dat ;>EXTERN 'sphere2.dat',rSphere ;>EXTERN 'sphere2.mask',rSphereMask ;>EXTERN 'FI-RE.logo',rFIRElogo ;>EXTERN 'RS.logo',RSlogo+40 ;>EXTERN 'charset3.dat',rCharset ;>EXTERN 'WB.pic',WBpic ;>EXTERN 'WB.disk2',WBdisk2 ;>EXTERN 'WB.window',WBwindow ;>EXTERN 'WB.music',WBmusic ;>EXTERN 'WB.demo',WBdemo ;>EXTERN 'WB.music2',WBmusic2 ;>EXTERN 'WB.demo2',WBdemo2 ;>EXTERN 'WB.way',WBway ; Tracks 0-1 2 BOOT ; 2-8 7 Code ; 9 1 Charset 1 map ; 10-21 12 WBpic WBdisk2 WBway ; 22-24 3 WBwindow ; 25 1 WBmusic[2] WBdemo[2] ; 26-37 12 rs_track1 ; 38-47 10 Credits.logo ; 48-53 6 Mindcrime.logo ; 54-62 9 Plasma.logo ; 63-79 17 Memberlist.code+data ; 80-81 2 Root sector of system ; 82-101 20 Heli ; ; 124-159 36 Music_Player and module ; ORG $4a000 LOAD $4a000 TRACK EQU 0 trackre mentéshez 1 MUSIC EQU 0 zene ki/be TL_work equ $7c000 $e00 Music_Add equ $4000 $4000-$38000 rPlayfield1 equ $61800 rPlayfield2 equ $69000 rPlayfield2b equ $70800 LineMap equ $78000 Width equ 40 byte Height equ 256 line MapSize equ Width*Height WBpic equ $64000 WBcolors equ WBpic+61440 WBdisk2 equ WBcolors+16 WBway equ WBdisk2+192 WBwindow equ WBway+1280 WBdemo equ WBwindow+13800 WBmusic equ WBdemo+1260 WBdemo2 equ WBmusic+1260 WBmusic2 equ WBdemo2+1260 rs_track1 equ $52000 adatok rsindat_h equ rs_track1 rsindat_v equ rs_track1+$400 dat equ rs_track1+$800 rSphere equ rs_track1+$1000 rSphereMask equ rs_track1+$1180 rFIRElogo equ rs_track1+$1300 RSlogo equ rs_track1+$7740 rCharset equ rs_track1+$7900 rChar_1_Map equ $48000 Closed equ 25 ennyit vár zárva UP equ 0 DOWN equ 1 RIGHT equ 2 LEFT equ 3 ******************************************************************************* * Macros ******************************************************************************* C MACRO ; move.w #\1,$180(a6) ENDM W_BLIT MACRO blitter várakozás btst #14,2(a6) bne.s *-6 ENDM W_RAST MACRO raster várakozás MOUSE btst #0,$05(a6) beq.s *-6 cmpi.b #\1,$06(a6) bne.s *-6 ENDM WAIT MACRO FOR \1 W_RAST $30 W_RAST $2f NEXT ENDM MOUSE MACRO egérgomb figyelése btst #6,$bfe001 beq rExit ENDM TLOAD MACRO move.w #\1,d0 start track move.w #\2,d1 no. of tracks -1 lea \3,a0 address to load to lea \4,a1 address of workspace bsr TrackLoader ENDM POINTER MACRO move.l #\1,d0 nyíl vagy zz move.w d0,rc0_spr+6 swap d0 move.w d0,rc0_spr+2 ENDM B_COPY MACRO W_BLIT W_RAST $30 move.l #$09f00000,$40(a6) move.l #$ffffffff,$44(a6) move.l #\1,$50(a6) move.l #\2,$54(a6) move.l #\3,$64(a6) move.w #\4,$58(a6) ENDM FOR MACRO ciklus kezdete move.w #\1,d7 rcy SET * ENDM NEXT MACRO ciklus vége dbf d7,rcy ENDM OPEN_W MACRO ablak nyitás subq.w #2,rmw_windowpos bsr rMoveWindow ENDM CLOSE_W MACRO ablak zárás addq.w #2,rmw_windowpos bsr rMoveWindow ENDM FRESH_W MACRO ablak frissítés bsr rMoveWindow ENDM COLORS MACRO színek beállítása lea rcd_colordat\1(pc),a0 lea rc1_colors+2(pc),a1 moveq #31,d7 move.w (a0)+,(a1)+ addq.l #2,a1 dbf d7,*-4 ENDM CLEAR MACRO törlés movem.l d7/a0,-(a7) lea \1,a0 move.w #7679,d7 30720 byte clr.l (a0)+ dbf d7,*-2 movem.l (a7)+,d7/a0 ENDM TEXT MACRO TEXT(text,open,wait) CLEAR rPlayfield1 CLEAR rPlayfield2 lea \1(pc),a0 bsr rText COLORS T move.w #$5200,rc1_mode move.w #160,rc1_mirror move.w #160,rc1_modulo+2 move.w #160,rc1_modulo+6 FORM rcd_normal WAIT Closed FOR \2 W_RAST $30 W_RAST $31 subq.w #2,rmw_windowpos bsr rTextWindow bsr Stars NEXT lea \1(pc),a0 bsr TextMove FOR \3 W_RAST $30 W_RAST $31 bsr Stars NEXT FOR \2 W_RAST $30 W_RAST $31 addq.w #2,rmw_windowpos bsr rTextWindow bsr Stars NEXT move.w #80,rc1_mirror move.w #80,rc1_modulo+2 move.w #0,rc1_modulo+6 CLEAR rPlayfield1 CLEAR rPlayfield2 CLEAR rPlayfield2b FORM rcd_dual ENDM OBJECT MACRO moveq #\1,d0 bsr SetObj ENDM FORM MACRO lea \1(pc),a0 lea rc1_bpl1(pc),a1 moveq #23,d0 move.w (a0)+,(a1)+ dbf d0,*-2 ENDM SPRITE_ON MACRO move.w #$8020,$96(a6) ENDM SPRITE_OFF MACRO move.w #$0020,$96(a6) lea $140(a6),a0 sprite-ok törlése moveq #31,d0 clr.w (a0)+ dbf d0,*-2 ENDM ******************************************************************************* * Call from AsmOne ******************************************************************************* J Start IF TRACK=1 PRINTT 'Ha futtatod, ird át a TRACK-et 0-ra !!!!!!' bra Program ENDIF lea $dff000,a6 move.w #$7fff,$9a(a6) move.w #$7fff,$96(a6) move.l $6c,rIntV3 bsr Program rExit IF MUSIC=1 jsr Music_Add+12 end music ENDIF move.w #$7fff,$9a(a6) move.w #$7fff,$96(a6) move.l rIntV3,$6c move.l $4,a0 move.l (a0),a0 move.l (a0),a0 move.l 38(a0),$dff080 move.w #$e03c,$dff09a move.w #$87f0,$dff096 rts rIntV3 dc.l 0 ******************************************************************************* * Program ******************************************************************************* Program move.l a7,StackPointer lea $140(a6),a0 sprite-ok és színek moveq #63,d0 törlése rsu_clrspr clr.w (a0)+ dbf d0,rsu_clrspr ;------------------------------------------------------------------------------ ; WorkBench Screen and load ;------------------------------------------------------------------------------ bsr Track0 TLOAD 9,1,rChar_1_Map,TL_work 1 map charset TLOAD 10,12,WBpic,TL_work move.l #sprite7,d0 sprite címek copperbe lea rc0_spr(pc),a0 üres sprite-ok moveq #7,d7 rwb_c_wspr move.w d0,6(a0) swap d0 move.w d0,2(a0) swap d0 addq.l #8,a0 dbf d7,rwb_c_wspr move.l #WBspr0,d0 használt sprite lea rc0_spr(pc),a0 move.w d0,6(a0) swap d0 move.w d0,2(a0) move.l #WBpic,d0 WorkBench pic címe lea rc0_bpls+2(pc),a0 moveq #2,d7 rwb_bpls move.w d0,4(a0) swap d0 move.w d0,(a0) swap d0 add.l #80,d0 addq.l #8,a0 dbf d7,rwb_bpls move.l #rCopper0,$80(a6) move.w #$87c0,$96(a6) WAIT 20 moveq #15,d6 logo színei rwb_c_logo lea WBcolors+8,a0 4-7 színek lea rc0_colors+18(pc),a1 moveq #3,d7 rwb_c_logoc move.w (a0),d0 move.w (a1),d1 and.w #$00f,d0 and.w #$00f,d1 cmp.w d0,d1 beq.s rwb_okb addq.w #$001,(a1) rwb_okb move.w (a0),d0 move.w (a1),d1 and.w #$0f0,d0 and.w #$0f0,d1 cmp.w d0,d1 beq.s rwb_okg add.w #$010,(a1) rwb_okg move.w (a0),d0 move.w (a1),d1 and.w #$f00,d0 and.w #$f00,d1 cmp.w d0,d1 beq.s rwb_okr add.w #$100,(a1) rwb_okr addq.l #2,a0 addq.l #4,a1 dbf d7,rwb_c_logoc W_RAST $30 W_RAST $2f W_RAST $2e W_RAST $2d dbf d6,rwb_c_logo WAIT 100 lea WBcolors,a0 0-3 színek lea rc0_colors+2(pc),a1 moveq #3,d7 rwb_c_logoc2 move.w (a0)+,(a1) addq.l #4,a1 dbf d7,rwb_c_logoc2 SPRITE_ON sprite on WAIT 50 lea WBway,a0 rwb_move1 W_RAST $2c lemezre W_RAST $2b MOUSE move.l (a0)+,d0 cmpi.l #$ffffffff,d0 beq.s rwb_xmove1 move.l d0,WBspr0 move.l d0,WBspr1 bra rwb_move1 rwb_xmove1 move.l a0,rwb_pos WAIT 10 B_COPY WBdisk2,WBpic+10628,$4c,$c02 POINTER WBspr1 TLOAD 22,3,WBwindow,TL_work B_COPY WBwindow,WBpic+12246,$22,$4b17 TLOAD 25,1,WBdemo,TL_work B_COPY WBmusic,WBpic+18026,$46,$1f85 TLOAD 25,1,WBdemo,TL_work B_COPY WBdemo,WBpic+18012,$46,$1f85 POINTER WBspr0 move.l rwb_pos,a0 rwb_move2 W_RAST $2c music-ra W_RAST $2b MOUSE move.l (a0)+,d0 cmpi.l #$ffffffff,d0 beq.w rwb_xmove2 move.l d0,WBspr0 move.l d0,WBspr1 bra rwb_move2 rwb_xmove2 move.l a0,rwb_pos WAIT 10 B_COPY WBmusic2,WBpic+18026,$46,$1f85 POINTER WBspr1 IF MUSIC=1 TLOAD 124,36,Music_Add,TL_Work load player and module jsr Music_Add start music (init) move.b #$ff,$80 go ENDIF POINTER WBspr0 move.l rwb_pos,a0 rwb_move3 W_RAST $2c demo-ra W_RAST $2b MOUSE move.l (a0)+,d0 cmpi.l #$ffffffff,d0 beq.s rwb_xmove3 move.l d0,WBspr0 move.l d0,WBspr1 bra rwb_move3 rwb_xmove3 move.l a0,rwb_pos B_COPY WBdemo2,WBpic+18012,$46,$1f85 POINTER WBspr1 TLOAD 26,12,rs_track1,TL_work load main data POINTER WBspr0 WAIT 100 moveq #15,d6 rwb_co_logo lea rc0_colors+2(pc),a1 moveq #10,d7 11 szín elsötétítése rwb_co_logoc move.w (a1),d1 and.w #$00f,d1 beq.w rwb_okbd subq.w #$001,(a1) rwb_okbd move.w (a1),d1 and.w #$0f0,d1 beq.s rwb_okgd sub.w #$010,(a1) rwb_okgd move.w (a1),d1 and.w #$f00,d1 beq.s rwb_okrd sub.w #$100,(a1) rwb_okrd addq.l #4,a1 dbf d7,rwb_co_logoc W_RAST $30 W_RAST $2f W_RAST $2e W_RAST $2d W_RAST $2c W_RAST $2b dbf d6,rwb_co_logo WAIT 80 ;------------------------------------------------------------------------------ ; Init main copper ;------------------------------------------------------------------------------ move.l #sprite7,d0 sprite címek copperbe lea rc1_spr(pc),a0 üres sprite-ok moveq #7,d7 rsu_c_wspr move.w d0,6(a0) swap d0 move.w d0,2(a0) swap d0 addq.l #8,a0 dbf d7,rsu_c_wspr move.l #sprite0,d0 használt sprite-ok lea rc1_spr(pc),a0 move.w d0,6(a0) spr 4 swap d0 move.w d0,2(a0) move.l #sprite2,d0 move.w d0,22(a0) spr 5 swap d0 move.w d0,18(a0) move.l #sprite4,d0 move.w d0,38(a0) spr 6 swap d0 move.w d0,34(a0) move.l #rFIRElogo+200,d0 logo bittérképcímei lea rc1_logo_bpl+2(pc),a0 moveq #4,d7 rsu_c_logob move.w d0,4(a0) swap d0 move.w d0,(a0) swap d0 add.l #40,d0 addq.l #8,a0 dbf d7,rsu_c_logob move.w #128,rmw_windowpos ablak zárva bsr rMoveWindow bsr rBplAdd CLEAR rPlayfield1,a0 törli az összes képet CLEAR rPlayfield2,a0 CLEAR rPlayfield2b,a0 CLEAR LineMap,a0 move.l #rCopper1,$80(a6) ;------------------------------------------------------------------------------ ; Main program ;------------------------------------------------------------------------------ rMain WAIT 50 FOR 11 READYSOFT W_RAST $30 W_RAST $2f W_RAST $2e W_RAST $2d W_RAST $2c W_RAST $2b addq.w #1,rc1_rscolor+2 NEXT WAIT 50 moveq #15,d6 logo színei rsu_c_logo lea rFIRElogo+25600,a0 lea rc1_logo_col+2(pc),a1 moveq #31,d7 rsu_c_logoc move.w (a0),d0 move.w (a1),d1 and.w #$00f,d0 and.w #$00f,d1 cmp.w d0,d1 beq.s rsu_okb addq.w #$001,(a1) rsu_okb move.w (a0),d0 move.w (a1),d1 and.w #$0f0,d0 and.w #$0f0,d1 cmp.w d0,d1 beq.s rsu_okg add.w #$010,(a1) rsu_okg move.w (a0),d0 move.w (a1),d1 and.w #$f00,d0 and.w #$f00,d1 cmp.w d0,d1 beq.s rsu_okr add.w #$100,(a1) rsu_okr addq.l #2,a0 addq.l #4,a1 dbf d7,rsu_c_logoc W_RAST $30 W_RAST $2f W_RAST $2e W_RAST $2d W_RAST $2c W_RAST $2b dbf d6,rsu_c_logo WAIT 100 FOR 6 W_RAST $30 W_RAST $2f W_RAST $2e W_RAST $2d W_RAST $2c W_RAST $2b add.w #$111,rc1_windowt+6 add.w #$111,rc1_windowb+10 NEXT WAIT 20 TEXT rtx_1,50,127 FI-RE Crew presents SPRITE_OFF FORM rcd_normal normál képmód move.w #80,rc1_modulo+6 move.w #$3200,rc1_mode move.l #rvs_text1,rvs_txadd FI-RE COLORS B WAIT Closed FOR 49 W_RAST $30 W_RAST $31 OPEN_W NEXT FOR 339 MOUSE bsr rVScroll NEXT FOR 49 W_RAST $30 W_RAST $31 CLOSE_W NEXT TLOAD 38,10,rPlayfield1,TL_work Credits.pic lea rPlayfield1+51200,a0 lea rc2_logo_col+2(pc),a1 lea rc1_colors+2(pc),a2 FOR 31 move.w (a0),(a1)+ move.w (a0)+,(a2)+ addq.l #2,a1 addq.l #2,a2 NEXT lea rcd_colordatT(pc),a0 lea rc2_text_col+2(pc),a1 FOR 31 move.w (a0)+,(a1)+ addq.l #2,a1 NEXT lea rc2_logo_bpl(pc),a0 move.l #rPlayfield1,d0 FOR 4 move.w d0,6(a0) swap d0 move.w d0,2(a0) swap d0 add.l #40,d0 addq.l #8,a0 NEXT move.w #$5200,rc1_mode move.w #160,rc1_mirror move.w #160,rc1_modulo+2 move.w #160,rc1_modulo+6 FORM rcd_normal FOR 63 W_RAST $30 W_RAST $31 subq.w #2,rmw_windowpos bsr rTextWindow NEXT move.l #rCopper2,$80(a6) lea rtx_cr1(pc),a0 rcr_cycle FOR 43 W_RAST $30 W_RAST $31 subq.b #1,rc2_windowb subq.b #1,rc2_windowb2 subq.b #1,rc2_bottom NEXT lea rPlayfield1+42000,a1 move.w #2299,d7 rcr_clear clr.l (a1)+ dbf d7,rcr_clear move.l a0,-(a7) bsr rTextCr move.l (a7)+,a0 lea 10(a0),a0 FOR 43 W_RAST $30 W_RAST $31 addq.b #1,rc2_windowb addq.b #1,rc2_windowb2 addq.b #1,rc2_bottom NEXT WAIT 50 tst.b (a0) bpl rcr_cycle move.l #rCopper1,$80(a6) FOR 63 W_RAST $30 W_RAST $31 addq.w #2,rmw_windowpos bsr rTextWindow NEXT CLEAR rPlayfield1 CLEAR rPlayfield2 CLEAR rPlayfield2b CLEAR LineMap SPRITE_ON TEXT rtx_2,50,95 move.l #wr_txt1,wr_Pointer move.w #$5600,rc1_mode move.w #0,rc1_bplcon2 COLORS 5 OBJECT 0 kocka bsr DistMax WAIT Closed FOR 58 W_RAST $30 OPEN_W bsr Stars bsr Fill3D bsr DistD bsr DistD NEXT FOR 359 W_RAST $30 FRESH_W bsr Write bsr Stars bsr Fill3D NEXT FOR 58 W_RAST $30 CLOSE_W bsr Stars bsr Fill3D NEXT CLEAR rPlayfield1 move.l #wr_txt2,wr_Pointer move.w #0,wr_Counter move.w #$2000,c2_Dist OBJECT 4 ship2 COLORS 4 WAIT Closed FOR 58 W_RAST $30 OPEN_W bsr Stars bsr Fill3D NEXT FOR 359 W_RAST $30 FRESH_W bsr Write bsr Stars bsr Fill3D NEXT FOR 58 W_RAST $30 CLOSE_W bsr Stars bsr Fill3D NEXT TEXT rtx_3,34,95 show background !! SPRITE_OFF COLORS 3 OBJECT 2 nyolcas háttéren move.w #-160,rc1_mirror move.w #$40,rc1_bplcon2 move.w #$5600,rc1_mode move.w #$1f00,c2_Dist WAIT Closed FOR 58 W_RAST $30 OPEN_W bsr rSetSphere bsr Fill3D NEXT FOR 511 W_RAST $30 FRESH_W bsr rSetSphere bsr Fill3D NEXT FOR 58 W_RAST $30 CLOSE_W bsr rSetSphere bsr Fill3D NEXT move.w #$1c00,c2_Dist OBJECT 1 gúla háttéren COLORS 1 WAIT Closed FOR 58 W_RAST $30 OPEN_W bsr rSetSphere bsr Fill3D NEXT FOR 511 W_RAST $30 FRESH_W bsr rSetSphere bsr Fill3D NEXT FOR 58 W_RAST $30 CLOSE_W bsr rSetSphere bsr Fill3D NEXT CLEAR rPlayfield1 Mindcrime.logo CLEAR rPlayfield2 TLOAD 48,6,rPlayfield1+10800,TL_work lea rPlayfield1+10800+29600,a0 lea rc1_colors+2(pc),a1 FOR 31 move.w (a0),(a1)+ clr.w (a0)+ addq.l #2,a1 NEXT move.w #$5200,rc1_mode move.w #160,rc1_mirror move.w #160,rc1_modulo+2 move.w #160,rc1_modulo+6 FORM rcd_normal FOR 49 W_RAST $30 W_RAST $31 subq.w #2,rmw_windowpos bsr rTextWindow NEXT WAIT 136 FOR 49 W_RAST $30 W_RAST $31 addq.w #2,rmw_windowpos bsr rTextWindow NEXT CLEAR rPlayfield1 CLEAR rPlayfield2 CLEAR rPlayfield2b CLEAR LineMap SPRITE_ON TEXT rtx_4,20,95 SPRITE_OFF COLORS 2 32 színü move.w #-160,rc1_mirror move.w #$5200,rc1_mode move.w #$1600,c2_Dist OBJECT 5 stencil ship1 FOR 99 bsr rSetSphere NEXT WAIT 10 FOR 58 W_RAST $30 OPEN_W bsr rSetSphere bsr Fill3D NEXT FOR 399 W_RAST $30 FRESH_W bsr rSetSphere bsr Fill3D NEXT FOR 58 W_RAST $30 CLOSE_W bsr rSetSphere bsr Fill3D NEXT move.w #$1c00,c2_Dist COLORS 6 move.w #64,na_XangC OBJECT 3 kör stencil WAIT Closed FOR 58 W_RAST $30 OPEN_W bsr rSetSphere bsr Fill3D NEXT FOR 399 W_RAST $30 FRESH_W bsr rSetSphere bsr Fill3D NEXT FOR 58 W_RAST $30 CLOSE_W bsr rSetSphere bsr Fill3D NEXT TLOAD 54,9,rPlayfield1+2600,TL_work Plasma.logo lea rPlayfield1+46000+2600,a0 lea rc1_colors+2(pc),a1 FOR 31 move.w (a0),(a1) clr.w (a0)+ addq.l #4,a1 NEXT move.w #$5200,rc1_mode move.w #160,rc1_mirror move.w #160,rc1_modulo+2 move.w #160,rc1_modulo+6 FORM rcd_normal FOR 115 W_RAST $30 W_RAST $31 W_RAST $32 subq.w #1,rmw_windowpos bsr rTextWindow bsr rPlasma NEXT FOR 180 W_RAST $30 W_RAST $31 bsr rPlasma NEXT FOR 115 W_RAST $30 W_RAST $31 W_RAST $32 addq.w #1,rmw_windowpos bsr rTextWindow bsr rPlasma NEXT CLEAR rPlayfield1 CLEAR rPlayfield2 CLEAR rPlayfield2b CLEAR LineMap move.w #16,na_XangC SPRITE_ON TEXT rtx_5,34,95 COLORS 7 SPRITE_ON move.w #$5600,rc1_mode move.w #80,rc1_mirror move.w #0,rc1_bplcon2 move.l #wr_txt3,wr_Pointer move.w #0,wr_Counter bsr DistMax OBJECT 0 kocka transform WAIT Closed FOR 58 W_RAST $30 OPEN_W bsr Stars bsr Trans bsr Fill3D bsr DistD bsr DistD NEXT FOR 719 W_RAST $30 FRESH_W bsr Stars bsr Write bsr Trans bsr Fill3D NEXT FOR 58 W_RAST $30 CLOSE_W bsr Stars bsr Trans bsr DistI bsr DistI bsr Fill3D NEXT TEXT rtx_6,34,95 move.w #80,rc1_mirror FORM rcd_normal normál képmód move.w #80,rc1_modulo+6 move.w #$3200,rc1_mode SPRITE_OFF move.l #rvs_text2,rvs_txadd DO YOU LIKE COLORS F WAIT Closed bset #7,rvs_FillEna Fill mehet a vs-ban move.w #$2800,rvs_Dist clr.l rvs_Line0 space karakterek clr.l rvs_Line1 clr.l rvs_Line2 clr.l rvs_Line3 clr.l rvs_Line4 move.w #16,rvs_Zadd FOR 49 W_RAST $30 W_RAST $31 OPEN_W NEXT FOR 329 MOUSE bsr rVScroll NEXT move.w #4,rvs_Yadd FOR 299 MOUSE bsr rVScroll NEXT FOR 49 W_RAST $30 W_RAST $31 CLOSE_W NEXT TLOAD 63,18,$5c000,TL_work FOR 6 W_RAST $30 W_RAST $2f W_RAST $2e W_RAST $2d W_RAST $2c W_RAST $2b W_RAST $2a sub.w #$111,rc1_windowt+6 sub.w #$111,rc1_windowb+10 NEXT moveq #15,d6 logo színei rdn_c_logo lea rc1_logo_col+2(pc),a1 moveq #31,d7 rdn_c_logoc move.w (a1),d1 and.w #$00f,d1 beq.s rdn_okb subq.w #$001,(a1) rdn_okb move.w (a1),d1 and.w #$0f0,d1 beq.s rdn_okg sub.w #$010,(a1) rdn_okg move.w (a1),d1 and.w #$f00,d1 beq.s rdn_okr sub.w #$100,(a1) rdn_okr addq.l #4,a1 dbf d7,rdn_c_logoc W_RAST $30 W_RAST $2f W_RAST $2e W_RAST $2d W_RAST $2c W_RAST $2b dbf d6,rdn_c_logo FOR 11 READYSOFT W_RAST $30 W_RAST $2f W_RAST $2e W_RAST $2d W_RAST $2c W_RAST $2b subq.w #1,rc1_rscolor+2 NEXT SPRITE_ON move.w #$0070,$9a(a6) int. disabled move.l StackPointer,a7 jmp $5c000 StackPointer dc.l 0 rwb_pos dc.l 0 ;------------------------------------------------------------------------------ ; MoveWindow ;------------------------------------------------------------------------------ rMoveWindow movem.l d0/a0,-(a7) move.w #$29,d0 add.w rmw_windowpos,d0 move.b d0,rc1_windowc addq.b #2,d0 lea rc1_windowt(pc),a0 move.b d0,(a0) ; szürke csík addq.b #1,d0 ; fekete move.b d0,8(a0) clr.b rc1_windowm move.w #$2c,d0 sub.w rmw_windowpos,d0 bmi.s row_less move.b #$ff,rc1_windowm row_less lea rc1_windowb(pc),a0 move.b d0,(a0) ; szürke csík addq.b #1,d0 move.b d0,12(a0) ; fekete add.b #10,d0 ; READYSOFT felirat move.b d0,rc1_windowrs bsr rBplAdd movem.l (a7)+,d0/a0 rts rmw_windowpos dc.w 0 ;------------------------------------------------------------------------------ ; BplAdd pos(d0) set bpladdresses in copperlist ;------------------------------------------------------------------------------ rBplAdd movem.l d0-d2/a0-a1,-(a7) lea rc1_bpl1+2,a0 lea rc1_bpl2+2,a1 move.w rmw_windowpos,d0 move.l d0,d1 mulu #120,d0 mulu #40,d1 add.l Pf1Mapb,d0 add.l Pf2Mapb,d1 moveq #2,d2 rba_c_bpl12 move.w d0,4(a0) swap d0 move.w d0,(a0) swap d0 add.l #40,d0 addq.l #8,a0 move.w d1,4(a1) swap d1 move.w d1,(a1) swap d1 add.l #10240,d1 addq.l #8,a1 dbf d2,rba_c_bpl12 movem.l (a7)+,d0-d2/a0-a1 rts Pf1Map dc.l rPlayfield2 Pf1Mapb dc.l rPlayfield1 Pf2Map dc.l rPlayfield2 Pf2Mapb dc.l rPlayfield2b ;------------------------------------------------------------------------------ ; SetSphere set spheres to the next position ;------------------------------------------------------------------------------ rSetSphere movem.l d0-d2/a0,-(a7) move.w rss_hcountadd,d0 add.w d0,rss_hcount cmpi.w #1023,rss_hcount ble.s rss_hcok sub.w #1023,rss_hcount rss_hcok move.w rss_vcountadd,d0 add.w d0,rss_vcount cmpi.w #1023,rss_vcount ble.s rss_vcok sub.w #1023,rss_vcount rss_vcok move.w rss_vcount,d2 lea rsindat_v,a0 moveq #0,d0 move.b 0(a0,d2.w),d0 mulu #120,d0 add.l #rPlayfield1,d0 move.w rss_hcount,d2 lea rsindat_h,a0 moveq #0,d1 move.b 0(a0,d2.w),d1 move.l d1,d2 lsr.w #4,d1 add.l d1,d0 add.l d1,d0 and.w #$000f,d2 ror.w #4,d2 move.l #$00000fca,d1 or.w d2,d1 swap d1 or.w d2,d1 W_BLIT move.l #$ffff0000,$44(a6) move.l #$fffe0022,$64(a6) move.l #$0022fffe,$60(a6) move.l d1,$40(a6) move.l #rSphereMask,$50(a6) ; A maszk move.l #rSphere,$4c(a6) ; B gömb move.l d0,$48(a6) ; C kép move.l d0,$54(a6) ; D kép move.w #$1803,$58(a6) move.w rss_vcount,d2 ; másik oldalra is lea rsindat_v,a0 moveq #0,d0 move.b 0(a0,d2.w),d0 mulu #120,d0 add.l #rPlayfield1,d0 move.w rss_hcount,d2 lea rsindat_h,a0 moveq #0,d1 move.b 0(a0,d2.w),d1 neg.w d1 add.w #288,d1 ; 288-hpos move.l d1,d2 lsr.w #4,d1 add.l d1,d0 add.l d1,d0 and.w #$000f,d2 ror.w #4,d2 move.l #$00000fca,d1 or.w d2,d1 swap d1 or.w d2,d1 W_BLIT move.l d1,$40(a6) move.l #rSphereMask,$50(a6) ; A maszk move.l #rSphere,$4c(a6) ; B gömb move.l d0,$48(a6) ; C kép move.l d0,$54(a6) ; D kép move.w #$1803,$58(a6) movem.l (a7)+,d0-d2/a0 W_BLIT rts rss_hcountadd dc.w 18 rss_vcountadd dc.w 17 rss_hcount dc.w 255 rss_vcount dc.w 255 ;------------------------------------------------------------------------------ ; MoveTextWindow ;------------------------------------------------------------------------------ rTextWindow movem.l d0/a0,-(a7) move.w #$29,d0 add.w rmw_windowpos,d0 move.b d0,rc1_windowc addq.b #2,d0 lea rc1_windowt(pc),a0 move.b d0,(a0) ; szürke csík addq.b #1,d0 ; fekete move.b d0,8(a0) clr.b rc1_windowm move.w #$2c,d0 sub.w rmw_windowpos,d0 bmi.s rtw_less move.b #$ff,rc1_windowm rtw_less lea rc1_windowb(pc),a0 move.b d0,(a0) ; szürke csík addq.b #1,d0 move.b d0,12(a0) ; fekete add.b #10,d0 ; READYSOFT felirat move.b d0,rc1_windowrs lea rc1_bpl1+2,a0 move.w rmw_windowpos,d0 mulu #200,d0 ; 5 bpl * 4 add.l #rPlayfield1,d0 moveq #4,d2 rtw_c_bpl1 move.w d0,4(a0) swap d0 move.w d0,(a0) swap d0 add.l #40,d0 addq.l #8,a0 dbf d2,rtw_c_bpl1 movem.l (a7)+,d0/a0 rts ;------------------------------------------------------------------------------ ; Text ;------------------------------------------------------------------------------ rText movem.l d0-d2/a0-a1,-(a7) W_BLIT move.l #$09f00000,$40(a6) move.l #$ffffffff,$44(a6) move.l #$00240024,$64(a6) lea rtx_letofs(pc),a1 moveq #79,d2 80 karakter kiírása rtx_c_2 moveq #0,d0 move.b 0(a0,d2.w),d0 karakter-kód sub.b #32,d0 beq rtx_next lsl.w #1,d0 move.w 0(a1,d0.w),d0 ofset add.l #rCharset,d0 W_BLIT move.l d0,$50(a6) move.l d2,d0 divu #10,d0 sorszám move.l d0,d1 swap d1 oszlopszám mulu #6400,d0 32 sor * 5 bmap rtx_ofs equ *+2 add.l #rPlayfield1,d0 mulu #4,d1 add.l d1,d0 move.l d0,$54(a6) move.w #$2802,$58(a6) rtx_next dbf d2,rtx_c_2 movem.l (a7)+,d0-d2/a0-a1 rts t1 equ 6400 t2 equ 12800 t3 equ 19200 rtx_letofs dc.w 0,t1,0,0,0,0,0,0,0,0,0,0,t3+36,t1+8,0 dc.w 0,t2+28,0,4,8,12,16,20,24,28,32,36,0,0,0,0,t1+4 dc.w 0,t1+12,t1+16,t1+20,t1+24,t1+28,t1+32,t1+36 dc.w t2,t2+4,t2+8,t2+12,t2+16,t2+20,t2+24,t2+28,t2+32,t2+36 dc.w t3,t3+4,t3+8,t3+12,t3+16,t3+20,t3+24,t3+28,t3+32 rtx_1 dc.b " " dc.b "FI-RE CREW" dc.b " " dc.b " PRESENTS " dc.b "A NEW DEMO" dc.b " " dc.b " CALLED " dc.b " " dc.b -1,-1 rtx_2 dc.b " " dc.b " AT FIRST " dc.b " " dc.b " SOME " dc.b " SIMPLE " dc.b " VILL " dc.b " FECTOR " dc.b " " dc.b 43,LEFT,42,LEFT,52,UP,42,RIGHT,41,DOWN,51,RIGHT,-1,-1 rtx_3 dc.b " " dc.b " " dc.b " SHOW " dc.b "BACKGROUND" dc.b " ! " dc.b " ! ! ! " dc.b " " dc.b " " dc.b 34,DOWN,47,LEFT,-1,-1 rtx_4 dc.b " " dc.b " " dc.b " " dc.b " STENCIL " dc.b " PLEASE ! " dc.b " " dc.b " " dc.b " " dc.b -1,-1 rtx_5 dc.b " " dc.b " " dc.b " SHAPE- " dc.b " CHAGNE " dc.b " " dc.b " GO ! " dc.b " " dc.b " " dc.b 25,DOWN,26,LEFT,35,RIGHT,36,UP,-1,-1 rtx_6 dc.b " " dc.b " " dc.b " A ESHOR " dc.b " VCTORT " dc.b " C R LL " dc.b " S ?O? " dc.b " " dc.b " " dc.b 23,LEFT,28,UP,32,RIGHT,13,DOWN,45,UP dc.b 42,UP,46,LEFT,-1,-1 rtx_cr0 blk.b 80,32 rtx_cr1 dc.b " CREDITS " dc.b " CODE BY " dc.b "READYSOFT " dc.b " CRASH " dc.b " GFX BY " dc.b "FRICFORCE " dc.b "MR PIXEL " dc.b "MINDCRIME " dc.b "MUSIC BY " dc.b "DR VICTOR " dc.b " " dc.w -1 rTextCr lea rtx_cr0+70(pc),a1 moveq #9,d7 rtc_copy move.b (a0)+,(a1)+ dbf d7,rtc_copy lea rtx_cr0(pc),a0 sub.l #2000-2,rtx_ofs bsr rText add.l #2000-2,rtx_ofs rts ;------------------------------------------------------------------------------ ; TextMove ;------------------------------------------------------------------------------ TextMove lea 80(a0),a0 tm_next tst.b (a0) bmi tm_Exit moveq #0,d0 move.b (a0)+,d0 divu #10,d0 sorszám move.l d0,d1 swap d1 oszlopszám mulu #6400,d0 32 sor * 5 bmap add.l #rPlayfield1+6400,d0 mulu #4,d1 add.l d1,d0 a karakter címe move.b (a0)+,d1 irány moveq #31,d7 tm_c_move W_RAST $30 bsr Stars cmp.b #UP,d1 beq tm_Up cmp.b #DOWN,d1 beq tm_Down cmp.b #RIGHT,d1 beq tm_Right cmp.b #LEFT,d1 beq tm_Left bra tm_Exit tm_Up W_BLIT move.l #$09f00000,$40(a6) move.l #$ffffffff,$44(a6) move.l d0,d2 sub.l #$1900-200,d2 move.l d2,$50(a6) sub.l #200,d2 move.l d2,$54(a6) move.l #$00240024,$64(a6) move.w #$5002,$58(a6) dbf d7,tm_c_move bra tm_next tm_Down W_BLIT move.l #$09f00002,$40(a6) move.l #$ffffffff,$44(a6) move.l d0,d2 add.l #$3200-200+2,d2 move.l d2,$50(a6) add.l #200,d2 move.l d2,$54(a6) move.l #$00240024,$64(a6) move.w #$5002,$58(a6) dbf d7,tm_c_move bra tm_next tm_Right W_BLIT move.l #$19f00000,$40(a6) move.l #$ffffffff,$44(a6) move.l d0,$50(a6) move.l d0,$54(a6) move.l #$00200020,$64(a6) move.w #$2804,$58(a6) dbf d7,tm_c_move bra tm_next tm_Left W_BLIT move.l #$19f00002,$40(a6) move.l #$ffffffff,$44(a6) move.l d0,d2 add.l #$18da,d2 move.l d2,$50(a6) move.l d2,$54(a6) move.l #$00200020,$64(a6) move.w #$2804,$58(a6) dbf d7,tm_c_move bra tm_next tm_Exit rts ;------------------------------------------------------------------------------ ; Write ;------------------------------------------------------------------------------ Write movem.l d0-d7/a0-a6,-(a7) subq.w #1,wr_Counter bpl wr_exit move.w #15,wr_Counter 32 vblank-onként megy move.l wr_Pointer,a0 moveq #0,d0 move.b (a0)+,d0 pozíció 0-59 cmpi.w #60,d0 > 60 ?, ha igen vár bmi wr_noWait move.b (a0)+,wr_Counter+1 ennyit move.l a0,wr_Pointer bra wr_exit wr_noWait divu #10,d0 sorszám move.l d0,d1 swap d1 oszlopszám mulu #3840,d0 32 sor * 3 bmap add.l #rPlayfield1+3840,d0 mulu #4,d1 add.l d1,d0 ide írja moveq #0,d1 move.b (a0)+,d1 move.l a0,wr_Pointer sub.b #32,d1 lsl.w #1,d1 lea rtx_letofs2(pc),a1 move.w 0(a1,d1.w),d1 ofset lea rChar_1_Map,a0 1 bmap charset add.l d1,a0 move.l d0,a1 moveq #31,d7 32 sor/char wr_c_7 move.l (a0),(a1) adda.l #40,a0 adda.l #120,a1 dbf d7,wr_c_7 wr_exit movem.l (a7)+,d0-d7/a0-a6 rts wr_Counter dc.w 0 wr_Pointer dc.l 0 wr_txt1 dc.b -1,15,11,'S',12,'E',13,'E',15,'?',$ff,63 dc.b 32,'A',34,'C',35,'U',36,'B',37,'E',-1,-1,-1,-1 wr_txt2 dc.b -1,15,1,'W',2,'E',3,'L',4,'L',$ff,15 dc.b 23,'N',24,'I',25,'C',26,'E',27,44 dc.b 41,'B',42,'U',43,'T',45,'N',46,'O',47,'W',49,'!' dc.b -1,-1,-1,-1 wr_txt3 dc.b -1,15,1,'A',2,'R',3,'E',5,'Y',6,'O',7,'U' dc.b 12,'R',13,'E',14,'A',15,'D',16,'Y',18,'?' dc.b 32,'C',33,'A',34,'U',35,'S',36,'E' dc.b 44,'I',46,'A',47,'M',49,'!',-1,-1,-1,-1 t21 equ 1280 t22 equ 2560 t23 equ 3840 rtx_letofs2 dc.w 0,t21,0,0,0,0,0,0,0,0,0,0,t23+36,t21+8,0 dc.w 0,t22+28,0,4,8,12,16,20,24,28,32,36,0,0,0,0,t21+4 dc.w 0,t21+12,t21+16,t21+20,t21+24,t21+28,t21+32,t21+36 dc.w t22,t22+4,t22+8,t22+12,t22+16,t22+20,t22+24 dc.w t22+28,t22+32,t22+36,t23 dc.w t23+4,t23+8,t23+12,t23+16,t23+20,t23+24,t23+28,t23+32 ;------------------------------------------------------------------------------ ; Plasma.logo routine ;------------------------------------------------------------------------------ rPlasma bchg #0,rpl_cnt beq.s rpl_Exit movem.l d0-d1/d7/a0,-(a7) lea rc1_Colors+6(pc),a0 move.w (a0),d0 FOR 29 move.w 4(a0),(a0) addq.l #4,a0 NEXT move.w d0,(a0) movem.l (a7)+,d0-d1/d7/a0 rpl_Exit rts rpl_cnt dc.w 0 ;------------------------------------------------------------------------------ ; Vector-Scroll ;------------------------------------------------------------------------------ rVScroll movem.l d0-d7/a0-a6,-(a7) move.w #$0060,$9a(a6) btst #7,rvs_FillEna beq rvs_noFill bsr rvf_FillObj rvs_wfill cmpi.b #$ff,6(a6) bne.s rvs_wfill lea rBallData,a0 maszk készítés lea rBallMask,a1 moveq #15,d7 rvs_c_mask move.w (a0)+,d0 or.w (a0)+,d0 or.w (a0)+,d0 move.w d0,(a1)+ move.w d0,(a1)+ move.w d0,(a1)+ dbf d7,rvs_c_mask rvs_noFill subq.w #4,rvs_hicount 16 lépésenként új bpl.w rvs_okcount oszlop jön move.w #12,rvs_hicount movem.l rvs_line0,d0-d4 eltolás ror.l #1,d0 ror.l #1,d1 ror.l #1,d2 ror.l #1,d3 ror.l #1,d4 movem.l d0-d4,rvs_line0 subq.w #1,rvs_locount 6 oszloponként új bpl.s rvs_okcount karakter move.w #6,rvs_locount rvs_restart move.l rvs_txadd,a0 moveq #0,d0 move.b (a0)+,d0 bne.s rvs_okchar move.l #rvs_text,rvs_txadd bra.s rvs_restart rvs_okchar move.l a0,rvs_txadd sub.b #64,d0 bpl.s rvs_nospace moveq #0,d0 move.w #6,rvs_locount a space csak 4 széles rvs_nospace mulu #5,d0 lea char(pc),a0 új karakter beírása add.l d0,a0 rvs_write lea rvs_line0(pc),a1 move.b (a0)+,(a1) move.b (a0)+,4(a1) move.b (a0)+,8(a1) move.b (a0)+,12(a1) move.b (a0)+,16(a1) rvs_okcount rvs_Zadd equ *+2 add.w #6,rvs_Zang az új szögek szorzó rvs_Yadd equ *+2 értékeit add.w #0,rvs_Yang írja be a Calc2D-be lea Dat,a0 move.w #$8000,d0 rvs_Yang EQU *+2 move.w #0,d3 and.w #$7FE,d3 szöghöz tartozó szorzó move.w 0(a0,d3.w),d4 érték megkeresése add.w #$200,d3 and.w #$7FE,d3 move.w 0(a0,d3.w),d5 add.w d0,d4 add.w d0,d5 move.w d4,rvs_Ycos move.w d5,rvs_Ysin move.w d4,rvf_f_Ycos move.w d5,rvf_f_Ysin rvs_Zang EQU *+2 move.w #0,d3 and.w #$7FE,d3 szöghöz tartozó szorzó move.w 0(a0,d3.w),d4 érték megkeresése add.w #$200,d3 and.w #$7FE,d3 move.w 0(a0,d3.w),d5 add.w d0,d4 add.w d0,d5 move.w d4,rvs_Zcos move.w d5,rvs_Zsin move.w d4,rvf_f_Zcos move.w d5,rvf_f_Zsin W_BLIT move.l #$01000000,$40(a6) blitter init move.l #$ffff0000,$44(a6) move.w #-2,$64(a6) move.w #36,$60(a6) move.w #-2,$62(a6) move.w #36,$66(a6) bchg #0,rvs_Cycle beq.s rvs_even lea rvs_Clear(pc),a1 lea rvs_ClearAdd(pc),a2 bra.s rvs_odd rvs_even lea rvs_Clearb(pc),a1 lea rvs_ClearAddb(pc),a2 rvs_odd move.l a1,a3 move.l (a2),d0 C $0f0 rvs_nxclear cmpa.l d0,a3 kell törölni ? beq rvs_noclear W_BLIT move.l (a3)+,$54(a6) move.w #$b42,$58(a6) bra.s rvs_nxclear rvs_noclear C $f00 lea rvs_line0(pc),a3 moveq #21,d7 23 oszlop rvs_c_col move.w d7,d0 lsl.w #4,d0 oszlop * 16 sub.w #192,d0 add.w rvs_hicount,d0 0-15 pozíció lsl.w #4,d0 x koordináta moveq #0,d2 z koordináta rvs_Ycos EQU *+2 move.w #0,d4 rvs_Ysin EQU *+2 move.w #$7fff,d5 move.w d0,d3 move.w d2,d6 muls d5,d0 muls d4,d6 sub.l d6,d0 lsl.l #1,d0 swap d0 elforgatott x muls d3,d4 muls d5,d2 add.l d4,d2 lsl.l #1,d2 swap d2 elforgatott z move.w d0,a4 eltárolja x,z-t move.w d2,a5 moveq #4,d6 5 sor rvs_c_line movem.w d6-d7,-(a7) move.w a4,d0 elöveszi x,z-t move.w a5,d2 move.w d6,d1 lsl.w #2,d1 sor * 4 move.l 0(a3,d1.w),d3 btst d7,d3 van itt pont ? beq rvs_nodraw lsl.w #2,d1 sor * 16 sub.w #40,d1 y koordináta lsl.w #4,d1 rvs_Zcos EQU *+2 move.w #0,d4 rvs_Zsin EQU *+2 move.w #$7fff,d5 move.w d1,d3 move.w d0,d6 muls d5,d1 muls d4,d6 sub.l d6,d1 lsl.l #1,d1 swap d1 elforgatott y muls d3,d4 muls d5,d0 add.l d4,d0 lsl.l #1,d0 swap d0 elforgatott z rvs_Dist EQU *+2 add.w #$2000,d2 ext.l d0 ext.l d1 asl.l #8,d0 asl.l #8,d1 asl.l #5,d0 asl.l #5,d1 divs d2,d0 divs d2,d1 add.w #$a00,d0 368*16 x add.w #$800,d1 332*16 y lsr.w #4,d0 lsr.w #4,d1 tst.w d0 bal oldalon kilóg ? bmi rvs_nodraw cmpi.w #304,d0 jobb oldalon kilóg ? bcc rvs_nodraw cmpi.w #16,d1 fent kilóg ? bcs rvs_nodraw cmpi.w #224,d1 alul kilóg ? bcc rvs_nodraw move.w d0,d2 and.w #$f,d2 ror.w #4,d2 move.w #$0fca,d3 or.w d2,d3 swap d3 clr.w d3 or.w d2,d3 lsr.w #3,d0 bclr #0,d0 mulu #120,d1 add.w d0,d1 add.l Pf1Map,d1 kép báziscím move.l d1,(a1)+ --> BLTBDPTHL W_BLIT move.l d3,$40(a6) move.l d1,$48(a6) C move.l d1,$54(a6) D move.l #rBallData,$4c(a6) B : ball címe move.l #rBallMask,$50(a6) A : maszk move.w #$b42,$58(a6) rvs_nodraw movem.w (a7)+,d6-d7 dbf d6,rvs_c_line dbf d7,rvs_c_col move.l a1,(a2) rvsClearAdd[b] move.l Pf1Map,d0 move.l Pf1Mapb,Pf1Map move.l d0,Pf1Mapb lea rc1_bpl1+2,a0 move.w rmw_windowpos,d0 mulu #120,d0 add.l Pf1Mapb,d0 moveq #2,d2 rvs_c_bpl12 move.w d0,4(a0) swap d0 move.w d0,(a0) swap d0 add.l #40,d0 addq.l #8,a0 dbf d2,rvs_c_bpl12 rvs_wait btst #0,$05(a6) beq.s rvs_wait cmpi.b #$32,$06(a6) bne.s rvs_wait C 0 rvs_exit movem.l (a7)+,d0-d7/a0-a6 rts rvs_FillEna dc.w 0 rvs_Cycle dc.b 0,0 rvs_hicount dc.w 0 rvs_locount dc.w 0 rvs_line0 dc.l 0 rvs_line1 dc.l 0 rvs_line2 dc.l 0 rvs_line3 dc.l 0 rvs_line4 dc.l 0 rvs_Queue dc.w 0 char dc.b 0,0,0,0,0 dc.b 14,17,31,17,17,15,17,15,17,15,30,1,1,1,30 ;ABC dc.b 15,17,17,17,15,31,1,7,1,31,31,1,7,1,1 ;DEF dc.b 30,1,25,17,14,17,17,31,17,17,14,4,4,4,14 ;GHI dc.b 31,16,16,16,15,17,9,7,9,17,1,1,1,1,31 ;JKL dc.b 17,27,21,17,17,17,19,21,25,17,14,17,17,17,14 ;MNO dc.b 15,17,15,1,1,14,17,21,25,14,15,17,15,9,17 ;PQR dc.b 30,1,14,16,15,31,4,4,4,4,17,17,17,17,14 ;STU dc.b 17,17,17,10,4,17,17,17,21,10,17,10,4,10,17 ;VWX dc.b 17,17,14,4,4,31,8,4,2,31,4,4,4,0,4 ;YZ! dc.b 14,17,8,4,4 ;? even rvs_Coords3DN dc.w 0 rvs_Coords3D blk.b 720,0 x,y,z rvs_Coords2DZ blk.b 720,0 z,x,y rvs_ClearAdd dc.l rvs_Clear rvs_Clear blk.b 480,0 rvs_ClearAddb dc.l rvs_Clearb rvs_Clearb blk.b 480,0 rvs_txadd dc.l rvs_text rvs_text dc.b "ABCDEFGHIJKLMNOPQRSTUVWXYZ@",0 rvs_text1 dc.b "FIRE LAND ",0 rvs_text2 dc.b "CODED BY READYSOFT ",0 even rvf_LineMap blk.b 96,$ff rBallData dc.l $05C00440,$03C01B50,$1F3000F0,$39E82798,$00785DB4 dc.l $638C007C,$4914778C,$007C409A,$7F86807E,$15923F8E dc.l $C07E7F3A,$7F0680FE,$AAF62A8E,$D57E006E,$8016FFFE dc.l $15D4402C,$7FFC5FAC,$605C7FFC,$2A983578,$3FF81870 dc.l $1FF01FF0,$07C007C0,$07C00000,0 rBallMask dc.l $07C007C0,$07C01FF0,$1FF01FF0,$3FF83FF8,$3FF87FFC dc.l $7FFC7FFC,$7FFC7FFC,$7FFCFFFE,$FFFEFFFE,$FFFEFFFE dc.l $FFFEFFFE,$FFFEFFFE,$FFFEFFFE,$FFFEFFFE,$FFFEFFFE dc.l $7FFC7FFC,$7FFC7FFC,$7FFC7FFC,$3FF83FF8,$3FF81FF0 dc.l $1FF01FF0,$07C007C0,$07C00000,0 rBallColors dc.l $00000FFF,$0F400D30,$0B200810,$06000400 rBallData0 dc.l $000007C0,$07C00610,$1E3019F0,$1E182638,$31F83E7C dc.l $423C61FC,$3CBC747C,$43FC397E,$B8FEC7FE,$03F680FE dc.l $FFFE05C2,$83FEFFFE,$73828FFE,$FFFE0F02,$FFFEFFFE dc.l $7E047FFC,$7FFC7E04,$7FFC7FFC,$3C083FF8,$3FF81E30 dc.l $1FF01FF0,$07C007C0,$07C00000,0 ;------------------------------------------------------------------------------ ; Copper0 Loader ;------------------------------------------------------------------------------ rCopper0 dc.w $9c,$8008 rc0_spr dc.w $120,0,$122,0,$124,0,$126,0,$128,0,$12a,0,$12c,0,$12e,0 dc.w $130,0,$132,0,$134,0,$136,0,$138,0,$13a,0,$13c,0,$13e,0 dc.w $8e,$2c81,$90,$2cc1,$92,$3c,$94,$d4 dc.w $108,160,$10a,160,$102,0,$104,$24 rc0_colors dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $1a2,$d22,$1a4,$666,$1a6,$fc0 rc0_bpls dc.w $e0,0,$e2,0,$e4,0,$e6,0,$e8,0,$ea,0 dc.w $100,$b200 dc.w $ffff,$fffe ;------------------------------------------------------------------------------ ; Copper1 Dual-Playfield ;------------------------------------------------------------------------------ rCopper1 dc.w $9c,$8008 rc1_spr dc.w $120,0,$122,0,$124,0,$126,0,$128,0,$12a,0,$12c,0,$12e,0 dc.w $130,0,$132,0,$134,0,$136,0,$138,0,$13a,0,$13c,0,$13e,0 rc1_windowrs EQU *+6 dc.w $8e,$2c81,$90,$36c1,$92,$38,$94,$d0 rc1_logo_col dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 rc1_logo_bpl dc.w $e0,0,$e2,0,$e4,0,$e6,0,$e8,0,$ea,0 dc.w $ec,0,$ee,0,$f0,0,$f2,0 dc.w $108,160,$10a,160,$100,$5200 rc1_windowc dc.w $2901,$fffe,$100,$0200,$180,0 rc1_colors dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $102,0,$104,$40 rc1_bplcon2 EQU *-2 rc1_modulo dc.w $108,80,$10a,0 rc1_bpl1 dc.w $e0,0,$e2,0,$e8,0,$ea,0,$f0,0,$f2,0 rc1_bpl2 dc.w $e4,0,$e6,0,$ec,0,$ee,0,$f4,0,$f6,0 rc1_windowt dc.w $2b01,$fffe,$180,$000,$2c01,$fffe,$180,$000 rc1_mode equ *+2 dc.w $100,$5600 rc1_mirror equ *+6 dc.w $ac01,$fffe,$108,-160 rc1_windowm dc.w $ffdf,$fffe rc1_windowb dc.w $2c01,$fffe,$100,$0200,$180,$000 dc.w $2d01,$fffe,$180,$000 rsh equ RSlogo/65536 rsl equ RSlogo-[rsh*65536] dc.w $e0,rsh,$e2,rsl,$100,$1200,$108,0 rc1_rscolor dc.w $182,$000 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 dc.w $ffff,$fffe ;------------------------------------------------------------------------------ ; Copper2 Credits ;------------------------------------------------------------------------------ rCopper2 dc.w $9c,$8008 rc2_bottom equ *+6 dc.w $8e,$2c81,$90,$36c1,$92,$38,$94,$d0 rc2_logo_col dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 rc2_logo_bpl dc.w $e0,0,$e2,0,$e4,0,$e6,0,$e8,0,$ea,0 dc.w $ec,0,$ee,0,$f0,0,$f2,0 dc.w $108,160,$10a,160,$100,$5200 dc.w $2b01,$fffe,$180,$777,$2c01,$fffe,$180,0 dc.w $ffdf,$fffe dc.w $0001,$fffe rc2_text_col dc.w $180,0,$182,0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0 dc.w $190,0,$192,0,$194,0,$196,0,$198,0,$19a,0,$19c,0,$19e,0 dc.w $1a0,0,$1a2,0,$1a4,0,$1a6,0,$1a8,0,$1aa,0,$1ac,0,$1ae,0 dc.w $1b0,0,$1b2,0,$1b4,0,$1b6,0,$1b8,0,$1ba,0,$1bc,0,$1be,0 rc2_windowb dc.w $2c01,$fffe,$100,$0200,$180,$777 rc2_windowb2 dc.w $2d01,$fffe,$180,$000 dc.w $e0,rsh,$e2,rsl,$100,$1200,$108,0 rc2_rscolor dc.w $182,$00c dc.w $ffff,$fffe ;------------------------------------------------------------------------------ ; Copper1 adatok ;------------------------------------------------------------------------------ rcd_normal dc.w $e0,0,$e2,0,$e4,0,$e6,0,$e8,0,$ea,0 dc.w $ec,0,$ee,0,$f0,0,$f2,0,$f4,0,$f6,0 rcd_dual dc.w $e0,0,$e2,0,$e8,0,$ea,0,$f0,0,$f2,0 dc.w $e4,0,$e6,0,$ec,0,$ee,0,$f4,0,$f6,0 rcd_colordat1 dc.w $000,$fff,$f00,$c00,$a00,$800,$600,$400 dc.w $000,$ccc,$888,$666,$000,$000,$000,$000 dc.w $000,$f00,$0f0,$00f,$000,$000,$000,$000 dc.w $000,$f00,$0f0,$00f,$000,$000,$000,$000 rcd_colordat2 dc.w $000,$000,$00d,$ccf,$000,$000,$aaf,$88f dc.w $0d0,$cfc,$d00,$fcc,$afa,$8f8,$faa,$f88 dc.w $000,$000,$66f,$44f,$000,$000,$22f,$00f dc.w $6f6,$4f4,$f66,$f44,$2f2,$0f0,$f22,$f00 rcd_colordat3 dc.w $000,$2ff,$04f,$02c,$00a,$008,$006,$004 dc.w $000,$975,$864,$753,$000,$000,$000,$000 dc.w $000,$f00,$0f0,$00f,$000,$000,$000,$000 dc.w $000,$f00,$0f0,$00f,$000,$000,$000,$000 rcd_colordat4 dc.w $000,$4f4,$04f,$02c,$00a,$008,$006,$004 dc.w $000,$808,$c0c,$f00,$000,$000,$000,$000 dc.w $542,$652,$653,$764,$864,$875,$986,$a97 dc.w $a97,$ba8,$cb9,$cca,$dcb,$edc,$eee,$fff rcd_colordat5 dc.w $000,$db0,$04f,$02c,$00a,$008,$006,$004 dc.w $000,$00f,$00c,$008,$000,$000,$000,$000 dc.w $542,$652,$653,$764,$864,$875,$986,$a97 dc.w $a97,$ba8,$cb9,$cca,$dcb,$edc,$eee,$fff rcd_colordat6 dc.w $000,$000,$770,$ee0,$000,$000,$cc0,$aa0 dc.w $707,$e0e,$d00,$fcc,$c0c,$a0a,$faa,$f88 dc.w $000,$000,$880,$660,$000,$000,$440,$220 dc.w $808,$606,$f66,$f44,$404,$202,$f22,$f00 rcd_colordat7 dc.w $000,$0ae,$864,$753,$000,$000,$000,$000 dc.w $000,$975,$864,$753,$000,$000,$000,$000 dc.w $542,$652,$653,$764,$864,$875,$986,$a97 dc.w $a97,$ba8,$cb9,$cca,$dcb,$edc,$eee,$fff rcd_colordatB dc.w $000,$aaa,$d00,$b00,$900,$700,$500,$300 dc.w $000,$f00,$0f0,$00f,$000,$000,$000,$000 dc.w $000,$f00,$0f0,$00f,$000,$000,$000,$000 dc.w $000,$f00,$0f0,$00f,$000,$000,$000,$000 rcd_colordatF dc.w $000,$00e,$000,$008,$000,$000,$000,$000 dc.w $000,$f00,$0f0,$00f,$000,$000,$000,$000 dc.w $000,$f00,$0f0,$00f,$000,$000,$000,$000 dc.w $000,$f00,$0f0,$00f,$000,$000,$000,$000 rcd_colordatT dc.w $000,$eee,$ccc,$aaa,$888,$777,$555,$333 dc.w $db0,$110,$210,$220,$320,$331,$431,$442 dc.w $542,$652,$653,$764,$864,$875,$986,$a97 dc.w $a97,$ba8,$cb9,$cca,$dcb,$edc,$eee,$fff ******************************************************************************* * Fill3D ******************************************************************************* Fill3D movem.l d0-d7/a0-a6,-(a7) move.l #Int3_4,$6c move.w #$c060,$9a(a6) ma_wait tst.w Int3Cnt fill vége ? beq.s ma_wait ha 0, még nem bsr CalcBorder fill méretét számítja bsr GoInt3 indítja a fillezést bsr NewAngles új szögek bsr Calc2D 2d koordináták bsr TestSurfaces lapok vizsgálata bsr ColorTest melyik vonalat kell ? bsr Wait_Int3 fill vége ? bsr NextLines új vonalak felrajzolása clr.w Int3Cnt fill start move.l Pf2Map,d0 move.l Pf2Mapb,Pf2Map move.l d0,Pf2Mapb movem.l (a7)+,d0-d7/a0-a6 rts ******************************************************************************* * CalcBorder ******************************************************************************* CalcBorder movem.w Border2_1(pc),d0-d3 movem.w Border3_1(pc),d4-d7 movem.w d0-d3,Border3_1 movem.w Border1_1(pc),d0-d3 movem.w d0-d3,Border2_1 bsr.s cb_comp movem.w d4-d7,Border1_1 movem.w Border2_2(pc),d0-d3 movem.w Border3_2(pc),d4-d7 movem.w d0-d3,Border3_2 movem.w Border1_2(pc),d0-d3 movem.w d0-d3,Border2_2 bsr.s cb_comp movem.w d4-d7,Border1_2 rts ;------------------------------------------------------------------------------ ; Compare borders ;------------------------------------------------------------------------------ cb_comp cmp.w d0,d4 bls.s cb_okminx move.w d0,d4 cb_okminx cmp.w d1,d5 bls.s cb_okminy move.w d1,d5 cb_okminy cmp.w d2,d6 bcc.s cb_okmaxx move.w d2,d6 cb_okmaxx cmp.w d3,d7 bcc.s cb_okmaxy move.w d3,d7 cb_okmaxy rts ******************************************************************************* * GoInt3 ******************************************************************************* GoInt3 move.l #Int3_1,$6C fill két bittérképen move.w #$0060,$9A(a6) blit, wblank off move.w #$8040,$9C(a6) blit only move.w #$8040,$9A(a6) rts ;------------------------------------------------------------------------------ ; Fill bitmap 1 ;------------------------------------------------------------------------------ Int3_1 movem.l d0-d2/a0/a1,-(sp) move.l #Int3_2,$6C move.w #$40,$9C(a6) clr blit int req tst.w Minx1 bmi NextRq move.l Pf2Map,a1 itt fillez lea LineMap,a0 line munkaterulet move.w Miny1(pc),d0 moveq #0,d1 move.w Maxy1(pc),d1 move.w d1,d2 sub.w d0,d2 Maxy1-Miny1 bmi NextRq addq.w #1,d2 d2=Maxy1-Miny1+1 mulu #Width,d1 d1=Maxy1*Width move.w Maxx1(pc),d0 add.w #$10,d0 lsr.w #3,d0 bclr #0,d0 ext.l d0 (Maxx1+16)/8 páros ! add.l d0,d1 Maxy1*64+(Maxx1+16)/8 subq.l #2,d1 -2, utolsó wordre mutat add.l d1,a0 --> a0=line terület add.l d1,a1 --> a1=kép címe move.w Minx1(pc),d1 lsr.w #3,d1 bclr #0,d1 sub.w d1,d0 (Maxx1+16)/8-(Minx1/8) move.w d0,d1 páros! lsr.w #1,d1 d1=ennyi word széles lsl.w #6,d2 d2=(Maxy1-Miny1+1)*64 add.w d1,d2 --> d2=BLTSIZE neg.w d0 add.w #Width,d0 --> d0=Width-szélesség bra GoBlit ;------------------------------------------------------------------------------ ; Fill bitmap 2 ;------------------------------------------------------------------------------ Int3_2 movem.l d0-d2/a0/a1,-(sp) move.l #Int3_4,$6C move.w #$40,$9A(a6) move.w #$60,$9C(a6) move.w #$8020,$9A(a6) tst.w Minx2 bmi NextRq move.l Pf2Map,a1 adda.l #MapSize,a1 lea LineMap+MapSize,a0 move.w Miny2(pc),d0 moveq #0,d1 move.w Maxy2(pc),d1 move.w d1,d2 sub.w d0,d2 bmi NextRq addq.w #1,d2 mulu #Width,d1 move.w Maxx2(pc),d0 add.w #$10,d0 lsr.w #3,d0 bclr #0,d0 ext.l d0 add.l d0,d1 subq.l #2,d1 add.l d1,a0 add.l d1,a1 move.w Minx2(pc),d1 lsr.w #3,d1 bclr #0,d1 sub.w d1,d0 move.w d0,d1 lsr.w #1,d1 lsl.w #6,d2 add.w d1,d2 neg.w d0 add.w #Width,d0 GoBlit move.w d0,$64(a6) move.w d0,$66(a6) move.l #$09F0001A,$40(a6) move.l #$ffffffff,$44(a6) move.l a0,$50(a6) move.l a1,$54(a6) move.w d2,$58(a6) xInt3 movem.l (sp)+,d0-d2/a0/a1 rte ;------------------------------------------------------------------------------ ; Next Interrupt Request ;------------------------------------------------------------------------------ NextRq move.w #$8040,$9C(a6) következö intreq movem.l (sp)+,d0-d2/a0/a1 rte ;------------------------------------------------------------------------------ ; End Filling BitMaps ;------------------------------------------------------------------------------ Int3_4 addq.w #1,Int3Cnt ha nem 0, végzett move.w #$4060,$9C(a6) rte Int3Cnt dc.w 0 ******************************************************************************* * NewAngles ******************************************************************************* NewAngles na_ZangC EQU *+2 x add.w #8,na_Zang szögek szorzó értékeit na_YangC EQU *+2 y add.w #12,na_Yang írja be a Calc2D-be na_XangC EQU *+2 z add.w #16,na_Xang lea Dat,a0 move.w #$8000,d0 na_Xang EQU *+2 move.w #0,d3 and.w #$7FE,d3 szöghöz tartozó szorzó move.w 0(a0,d3.w),d4 érték megkeresése add.w #$200,d3 and.w #$7FE,d3 move.w 0(a0,d3.w),d5 add.w d0,d4 add.w d0,d5 move.w d4,c2_Xcos move.w d5,c2_Xsin na_Yang EQU *+2 move.w #0,d3 and.w #$7FE,d3 szöghöz tartozó szorzó move.w 0(a0,d3.w),d4 érték megkeresése add.w #$200,d3 and.w #$7FE,d3 move.w 0(a0,d3.w),d5 add.w d0,d4 add.w d0,d5 move.w d4,c2_Ycos move.w d5,c2_Ysin na_Zang EQU *+2 move.w #0,d3 and.w #$7FE,d3 szöghöz tartozó szorzó move.w 0(a0,d3.w),d4 érték megkeresése add.w #$200,d3 and.w #$7FE,d3 move.w 0(a0,d3.w),d5 add.w d0,d4 add.w d0,d5 move.w d4,c2_Zcos move.w d5,c2_Zsin rts ******************************************************************************* * Calc 2D coordinates and test surfaces ******************************************************************************* Calc2D move.l Coord3D(pc),a0 innen 3 lea Coord2D(pc),a1 ide 2 move.w (a0)+,d7 ennyi db van c2_c_Calc movem.w (a0)+,d0-d2 xyz c2_Xcos EQU *+2 move.w #0,d4 c2_Xsin EQU *+2 move.w #$7fff,d5 move.w d0,d3 move.w d1,d6 muls d5,d0 muls d4,d6 sub.l d6,d0 lsl.l #1,d0 swap d0 muls d4,d3 muls d5,d1 add.l d3,d1 lsl.l #1,d1 swap d1 c2_Ycos EQU *+2 move.w #0,d4 c2_Ysin EQU *+2 move.w #$7fff,d5 move.w d0,d3 move.w d2,d6 muls d5,d0 muls d4,d6 sub.l d6,d0 lsl.l #1,d0 swap d0 muls d3,d4 muls d5,d2 add.l d4,d2 lsl.l #1,d2 swap d2 c2_Zcos EQU *+2 move.w #0,d4 c2_Zsin EQU *+2 move.w #$7fff,d5 move.w d1,d3 move.w d2,d6 muls d5,d1 muls d4,d6 sub.l d6,d1 lsl.l #1,d1 swap d1 muls d3,d4 muls d5,d2 add.l d4,d2 lsl.l #1,d2 swap d2 c2_Dist EQU *+2 add.w #$1c00,d2 ext.l d0 ext.l d1 asl.l #8,d0 asl.l #8,d1 asl.l #5,d0 asl.l #5,d1 divs d2,d0 divs d2,d1 add.w #$a00,d0 368*16 add.w #$800,d1 332*16 move.w d0,(a1)+ move.w d1,(a1)+ dbra d7,c2_c_Calc rts ;------------------------------------------------------------------------------ ; Test surfaces ;------------------------------------------------------------------------------ TestSurfaces move.l Surfaces(pc),a0 lea Coord2D(pc),a1 move.w (a0)+,d7 ennyi lap van c2_c_TstSf move.w 8(a0),d0 1. pontja lsl.w #2,d0 movem.w 0(a1,d0.w),d1/d2 x1,y1 move.w 10(a0),d0 2. pontja lsl.w #2,d0 movem.w 0(a1,d0.w),d3/d4 x2,y2 move.w 12(a0),d0 3. pontja lsl.w #2,d0 movem.w 0(a1,d0.w),d5/d6 x3,y3 sub.w d1,d3 x2-x1 sub.w d2,d4 y2-y1 sub.w d1,d5 x3-x1 sub.w d2,d6 y3-y1 muls d3,d6 (x2-x1)(y3-y1) muls d4,d5 (y2-y1)(x3-x1) sub.l d6,d5 (y2-y1)(x3-x1)- bmi.s c2_nOk -(x2-x1)(y3-y1) and.w #$7FFF,(a0) a szín word 15. bitje 0 lea 14(a0),a0 dbra d7,c2_c_TstSf rts c2_nOk or.w #$8000,(a0) a szín word 15. bitje 1 lea 14(a0),a0 dbra d7,c2_c_TstSf rts ******************************************************************************* * ColorTest ******************************************************************************* ColorTest move.l Surfaces(pc),a0 move.w (a0)+,d7 ennyi lap van ct_c_7 move.w (a0)+,d6 color bmi.s ct_nobpl2 movem.w (a0),d0-d2 line 0-2 lsl.w #1,d0 vonal száma * 2 lsl.w #1,d1 lsl.w #1,d2 lsr.w #1,d6 color -> bcc.s ct_nobpl1 bpl1 ? lea LineCoDat1(pc),a1 not.w 0(a1,d0.w) not.w 0(a1,d1.w) not.w 0(a1,d2.w) ct_nobpl1 lsr.w #1,d6 bcc.s ct_nobpl2 bpl2 ? lea LineCoDat2(pc),a1 not.w 0(a1,d0.w) not.w 0(a1,d1.w) not.w 0(a1,d2.w) ct_nobpl2 lea 12(a0),a0 dbra d7,ct_c_7 rts ******************************************************************************* * Wait_Int3 ******************************************************************************* Wait_Int3 move.w #$8400,$96(a6) w_6c cmp.l #Int3_4,$6C bne.s w_6c rts ******************************************************************************* * NextLines ******************************************************************************* NextLines W_BLIT moveq #-1,d1 move.l d1,$44(a6) BLTAFWM,BLTALWM move.l d1,Minx1 move.l d1,Minx2 moveq #0,d1 move.l d1,Maxx1 move.l d1,Maxx2 move.w #$8000,$74(a6) LineDraw move.w #Width,$60(a6) Width move.w #$FFFF,$72(a6) texture lea Coord2D(pc),a4 ;------------------------------------------------------------------------------ ; Lines to bitmap 1 ;------------------------------------------------------------------------------ lea LineMap,a5 work_area bmap 1 lea LineBlDat1(pc),a0 vonalak blitter adatai move.l LineBlDatP1(pc),d5 blit adatok vége cmp.l a0,d5 kell vonalat törölni ? beq.s nl_n_clrl1 nl_c_clrl1 W_BLIT move.w (a0)+,$52(a6) egy vonal letörlése move.w (a0)+,$62(a6) move.w (a0)+,$64(a6) move.l (a0)+,$40(a6) move.l (a0),$48(a6) move.l (a0)+,$54(a6) move.w (a0)+,$58(a6) cmp.l a0,d5 van még ? bne.s nl_c_clrl1 nl_n_clrl1 lea LineCoDat1(pc),a0 lea LineBlDat1(pc),a2 move.l Lines(pc),a3 move.w (a3)+,d5 ennyi vonal van nl_c_Line1 tst.w (a0)+ beq.s nl_exLine1 clr.w -2(a0) move.w (a3),d6 a kezdöpont száma lsl.w #2,d6 movem.w 0(a4,d6.w),d0/d1 sx,sy move.w 2(a3),d6 a végpont száma lsl.w #2,d6 movem.w 0(a4,d6.w),d2/d3 ex,ey asr.w #4,d0 /16 asr.w #4,d1 asr.w #4,d2 asr.w #4,d3 cmp.w d1,d3 csak lefele mehet bhi.s nl_Ldown1 exg d2,d0 exg d3,d1 nl_Ldown1 cmp.w Minx1(pc),d0 sx < Minx ? bcc.s nl_nsnx1 move.w d0,Minx1 nl_nsnx1 cmp.w Minx1(pc),d2 ex < Minx ? bcc.s nl_nenx1 move.w d2,Minx1 nl_nenx1 cmp.w Maxx1(pc),d0 sx > Maxx ? bls.s nl_nsxx1 move.w d0,Maxx1 nl_nsxx1 cmp.w Maxx1(pc),d2 ex > Maxx ? bls.s nl_nexx1 move.w d2,Maxx1 nl_nexx1 cmp.w Miny1(pc),d1 sy < Miny ? bcc.s nl_nsny1 move.w d1,Miny1 nl_nsny1 cmp.w Maxy1(pc),d3 ey > Maxy ? bls.s nl_nexy1 move.w d3,Maxy1 nl_nexy1 bsr LineDraw nl_exLine1 addq.w #4,a3 dbra d5,nl_c_Line1 move.l a2,LineBlDatP1 ;------------------------------------------------------------------------------ ; Lines to bitmap 2 ;------------------------------------------------------------------------------ lea LineMap+MapSize,a5 work_area bmap 2 lea LineBlDat2(pc),a0 move.l LineBlDatP2(pc),d5 cmp.l a0,d5 kell vonalat törölni ? beq.s nl_n_clrl2 nl_c_clrl2 W_BLIT move.w (a0)+,$52(a6) move.w (a0)+,$62(a6) move.w (a0)+,$64(a6) move.l (a0)+,$40(a6) move.l (a0),$48(a6) move.l (a0)+,$54(a6) move.w (a0)+,$58(a6) cmp.l a0,d5 van még ? bne.s nl_c_clrl2 nl_n_clrl2 lea LineCoDat2(pc),a0 lea LineBlDat2(pc),a2 move.l Lines(pc),a3 move.w (a3)+,d5 ennyi vonal van nl_c_Line2 tst.w (a0)+ beq.s nl_exLine2 clr.w -2(a0) move.w (a3),d6 a kezdöpont száma lsl.w #2,d6 movem.w 0(a4,d6.w),d0/d1 sx,sy move.w 2(a3),d6 a végpont száma lsl.w #2,d6 movem.w 0(a4,d6.w),d2/d3 ex,ey asr.w #4,d0 /16 asr.w #4,d1 asr.w #4,d2 asr.w #4,d3 cmp.w d1,d3 csak lefele mehet bhi.s nl_Ldown2 exg d2,d0 exg d3,d1 nl_Ldown2 cmp.w Minx2(pc),d0 Minx,Miny,Maxx,Maxy bcc.s nl_nsnx2 keresés move.w d0,Minx2 nl_nsnx2 cmp.w Minx2(pc),d2 bcc.s nl_nenx2 move.w d2,Minx2 nl_nenx2 cmp.w Maxx2(pc),d0 bls.s nl_nsxx2 move.w d0,Maxx2 nl_nsxx2 cmp.w Maxx2(pc),d2 bls.s nl_nexx2 move.w d2,Maxx2 nl_nexx2 cmp.w Miny2(pc),d1 bcc.s nl_nsny2 move.w d1,Miny2 nl_nsny2 cmp.w Maxy2(pc),d3 bls.s nl_nexy2 move.w d3,Maxy2 nl_nexy2 bsr LineDraw nl_exLine2 addq.w #4,a3 dbra d5,nl_c_Line2 move.l a2,LineBlDatP2 rts ******************************************************************************* * LineDraw rutin (d0/d1/d2/d3 sx,sy,ex,ey a5 bmapaddr.) ******************************************************************************* LineDraw sub.w d3,d1 dy ext.l d3 mulu #Width,d3 ey*Width moveq #15,d4 and.w d2,d4 d4=(ex AND 15) sub.w d2,d0 dx blt.s ld_left balra megy a vonal ? ld_right tst.w d1 dy blt.s ld_ru cmp.w d0,d1 dx,dy bge.s ld_rd2 moveq #$13,d7 jobbra le dy>dx bra.s ld_okOct ld_rd2 moveq #3,d7 jobbra le dx>dy exg d1,d0 bra.s ld_okOct ld_ru neg.w d1 |dy| cmp.w d0,d1 dx,dy bge.s ld_ru2 moveq #$1B,d7 jobbra fel dx>dy bra.s ld_okOct ld_ru2 moveq #7,d7 jobbra fel dy>dx exg d1,d0 bra.s ld_okOct ld_left neg.w d0 |dx| tst.w d1 blt.s ld_lu cmp.w d0,d1 bge.s ld_ld2 moveq #$17,d7 balra le dx>dy bra.s ld_okOct ld_ld2 moveq #11,d7 balra le dy>dx exg d1,d0 bra.s ld_okOct ld_lu neg.w d1 cmp.w d0,d1 bge.s ld_lu2 moveq #$1F,d7 balra fel dx>dy bra.s ld_okOct ld_lu2 moveq #15,d7 balra fel dy>dy exg d1,d0 ld_okOct add.w d1,d1 2Y asr.w #3,d2 ex*8 ext.l d2 add.l d2,d3 d3=ex*8+ey*64 move.w d1,d2 sub.w d0,d2 d2=2Y-X bge.s ld_nsign or.w #$40,d7 SIGN bit ld_nsign W_BLIT move.w d2,$52(a6) 2Y-X move.w d2,(a2)+ --> 2Y-X $52 move.w d1,$62(a6) 2Y sub.w d0,d2 move.w d2,$64(a6) 2Y-2X move.w d1,(a2)+ --> 2Y $62 move.w d2,(a2)+ --> 2Y-2X $64 asl.w #6,d0 add.w #$42,d0 d0=dx*64+66 (BLTSIZE) move.w d4,d1 d1=eltolási érték 0-15 swap d4 asr.l #4,d4 or.w #$B4A,d4 swap d7 move.w d4,d7 swap d7 add.l a5,d3 a5-ben a kép báziscíme move.l d7,$40(a6) BLTCON01 move.l d3,$48(a6) move.l d3,$54(a6) move.l d3,a1 not.b d1 bchg d1,(a1) move.w d0,$58(a6) and.l #$FF00FFFF,d7 move.l d7,(a2)+ --> BLTCON01 $40 move.l d3,(a2)+ --> Address $48,$54 move.w d0,(a2)+ --> BLTSIZE $58 rts ; ; Új object adatainak beírása ; SetObj lea Obj_0(pc),a0 ha igen, elölröl mulu #12,d0 kezdödik adda.l d0,a0 lea Surfaces(pc),a1 move.l (a0)+,(a1)+ Surfaces move.l (a0)+,(a1)+ Lines move.l (a0)+,(a1)+ Coord3D rts ; ; Az aktuális tárgy adatainak címei ; Surfaces dc.l 0 Lines dc.l 0 Coord3D dc.l 0 ; ; Object adatok (1 obj. 4 longword P(Surfaces), P(Lines), P(3Dcoord).) ; Obj_0 dc.l Obj0_S,Obj0_L,Obj0_D kocka dc.l Obj1_S,Obj1_L,Obj1_D gúla dc.l Obj2_S,Obj2_L,Obj2_D nyolcas dc.l Obj3_S,Obj3_L,Obj3_D kor dc.l Obj4_S,Obj4_L,Obj4_D ship1 dc.l Obj5_S,Obj5_L,Obj5_D ship2 ; ; Távolság beállítása ; DistD sub.w #$100,c2_Dist közeledik DistD2 cmp.w #$1c00,c2_Dist bcc.s xDistD DistMin move.w #$1c00,c2_Dist minimális távolság xDistD rts DistDS sub.w #$20,c2_Dist lassan közeledik bra.s DistD2 DistI add.w #$100,c2_Dist távolodik a tárgy DistI2 cmp.w #$7A00,c2_Dist bls.s xDistI DistMax move.w #$7A00,c2_Dist xDistI rts DistIS add.w #$20,c2_Dist lassan távolodik bra.s DistI2 ; ; Átalakulás ; Trans movem.l d0-d1/a0-a1,-(a7) subq.w #1,TransCount bpl.s TransOk move.w #124,TransCount bsr TransN TransOk lea Obj0_D0(pc),a0 ez volt move.l TransA,a1 ez lesz move.l (a1),a1 move.w Obj0_D,d1 ennyi pont van + 1 cTrans move.w (a0),d0 x jelenlegi cmp.w (a1),d0 ez lesz az x beq.s Xadd bmi.s Xsub sub.w #8,(a0) bra.s Xadd Xsub add.w #8,(a0) Xadd addq.l #2,a0 addq.l #2,a1 move.w (a0),d0 x jelenlegi cmp.w (a1),d0 ez lesz az x beq.s Yadd bmi.s Ysub sub.w #8,(a0) bra.s Yadd Ysub add.w #8,(a0) Yadd addq.l #2,a0 addq.l #2,a1 move.w (a0),d0 x jelenlegi cmp.w (a1),d0 ez lesz az x beq.s Zadd bmi.s Zsub sub.w #8,(a0) bra.s Zadd Zsub add.w #8,(a0) Zadd addq.l #2,a0 addq.l #2,a1 dbf d1,cTrans movem.l (a7)+,d0-d1/a0-a1 rts TransCount dc.w 120 ; ; A kovetkezo atalakulasi fazis cimet irja be ; TransN move.l TransA,a0 addq.l #4,a0 move.l (a0),d0 bne.s okTrn move.l #TransD,a0 okTrn move.l a0,TransA rts TransA dc.l TransD TransD dc.l Obj0_D1,Obj0_D2,Obj0_D3 dc.l Obj0_D4,Obj0_DS,0 ; ; A tárgyak adatai ; Obj0_S dc.w 11,1,0,1,4,0,1,2,1,4,2,3,2,3,0,2,2,5,6,2,6,3 dc.w 2,6,8,7,6,7,3,1,9,8,15,6,5,7,1,13,16,15,5,4,7 dc.w 2,11,12,13,5,1,4,2,0,12,14,1,0,4,3,9,10,11,1,5,6 dc.w 3,1,5,10,1,6,2,3,14,16,17,0,7,4,3,17,7,3,0,3,7 Obj0_L dc.w $11,0,1,1,2,2,3,3,0,0,2,2,6,3,6,3,7,6,7,5,6,1,6,1,5 dc.w 1,4,5,4,0,4,5,7,4,7,0,7 Obj0_D dc.w 7 Obj0_D0 dc.w 960,960,960,-960,960,960 dc.w -960,-960,960,960,-960,960,960,960,-960 dc.w -960,960,-960,-960,-960,-960,960,-960,-960 Obj0_D1 dc.w 60,960,960,-60,960,960 dc.w -60,-960,960,60,-960,960,960,960,-960 dc.w -960,960,-960,-960,-960,-960,960,-960,-960 Obj0_D2 dc.w 60,960,960,-60,960,960 dc.w -60,-960,960,60,-960,960,60,960,-960 dc.w -60,960,-960,-60,-960,-960,60,-960,-960 Obj0_D3 dc.w 60,60,960,-60,60,960 dc.w -60,-60,960,60,-60,960,960,960,-960 dc.w -960,960,-960,-960,-960,-960,960,-960,-960 Obj0_D4 dc.w 60,60,960,-60,60,960 dc.w -60,-60,960,60,-60,960,60,60,-960 dc.w -60,60,-960,-60,-60,-960,60,-60,-960 Obj0_DS dc.w 960,960,960,-960,960,960 dc.w -960,-960,960,960,-960,960,960,960,-960 dc.w -960,960,-960,-960,-960,-960,960,-960,-960 Obj1_S dc.w 5,1,3,4,7,0,4,3,2,0,4,5,0,1,4,1,1,5,6,1,2,4,2,2,6,7 dc.w 2,3,4,3,0,3,8,3,1,0,3,1,2,8,3,2,1 Obj1_D dc.w 4,$FC18,$FC18,$FCE0,$3E8,$FC18,$FCE0,$3E8,$3E8 dc.w $FCE0,$FC18,$3E8,$FCE0,0,0,$320 Obj1_L dc.w 8,0,1,1,2,2,3,3,0,0,4,1,4,2,4,3,4,1,3 Obj2_D dc.w 9,-576,1408,0,576,1408,0,1408,576,0,1408,-576,0 dc.w 576,-1408,0,-576,-1408,0,-1408,-576,0 dc.w -1408,576,0,0,0,-800,0,0,800 Obj2_L dc.w 23,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,0,9,0,9,1,9,2,9,3 dc.w 9,4,9,5,9,6,9,7,8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7 Obj2_S dc.w 15 dc.w 1,0,9,8,0,1,9,2,1,10,9,1,2,9 dc.w 1,2,11,10,2,3,9,2,3,12,11,3,4,9 dc.w 1,4,13,12,4,5,9,2,5,14,13,5,6,9 dc.w 1,6,15,14,6,7,9,2,7,8,15,7,0,9 dc.w 2,0,17,16,0,8,1,3,1,18,17,1,8,2 dc.w 2,2,19,18,2,8,3,3,3,20,19,3,8,4 dc.w 2,4,21,20,4,8,5,3,5,22,21,5,8,6 dc.w 2,6,23,22,6,8,7,3,7,16,23,7,8,0 Obj3_D dc.w 17,0,1280,0,480,1184,0,896,896,0,1184,480,0 dc.w 1280,0,0,1184,-480,0,896,-896,0,480,-1184,0,0 dc.w -1280,0,-480,-1184,0,-896,-896,0,-1184,-480,0 dc.w -1280,0,0,-1184,480,0,-896,896,0,-480,1184,0 dc.w 0,0,1280,0,0,0 Obj3_L dc.w 47,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10 dc.w 11,11,12,12,13,13,14,14,15,15,0,$10,0,$10,1,$10,2 dc.w $10,3,$10,4,$10,5,$10,6,$10,7,$10,8,$10,9,$10,10 dc.w $10,11,$10,12,$10,13,$10,14,$10,15,$11,0,$11 dc.w 1,$11,2,$11,3,$11,4,$11,5,$11,6,$11,7,$11,8,$11,9 dc.w $11,10,$11,11,$11,12,$11,13,$11,14,$11,15 Obj3_S dc.w 31 dc.w 1,0,33,32,1,0,17,1,1,34,33,2,1,17 dc.w 1,2,35,34,3,2,17,1,3,36,35,4,3,17 dc.w 1,4,37,36,5,4,17,1,5,38,37,6,5,17 dc.w 1,6,39,38,7,6,17,1,7,40,39,8,7,17 dc.w 1,8,41,40,9,8,17,1,9,42,41,10,9,17 dc.w 1,10,43,42,11,10,17,1,11,44,43,12,11,17 dc.w 1,12,45,44,13,12,17,1,13,46,45,14,13,17 dc.w 1,14,47,46,15,14,17,1,15,32,47,0,15,17 dc.w 2,0,33,32,0,1,17,2,1,34,33,1,2,17 dc.w 2,2,35,34,2,3,17,2,3,36,35,3,4,17 dc.w 2,4,37,36,4,5,17,2,5,38,37,5,6,17 dc.w 2,6,39,38,6,7,17,2,7,40,39,7,8,17 dc.w 2,8,41,40,8,9,17,2,9,42,41,9,10,17 dc.w 2,10,43,42,10,11,17,2,11,44,43,11,12,17 dc.w 2,12,45,44,12,13,17,2,13,46,45,13,14,17 dc.w 2,14,47,46,14,15,17,2,15,32,47,15,0,17 Not_Used dc.w 1,0,17,16,0,1,16,2,1,18,17,1,2,16 dc.w 1,2,19,18,2,3,16,2,3,20,19,3,4,16 dc.w 1,4,21,20,4,5,16,2,5,22,21,5,6,16 dc.w 1,6,23,22,6,7,16,2,7,24,23,7,8,16 dc.w 1,8,25,24,8,9,16,2,9,26,25,9,10,16 dc.w 1,10,27,26,10,11,16,2,11,28,27,11,12,16 dc.w 1,12,29,28,12,13,16,2,13,30,29,13,14,16 dc.w 1,14,31,30,14,15,16,2,15,16,31,15,0,16 Obj4_S dc.w 5 dc.w 3,1,$12,0,0,3,1 dc.w 3,$12,2,3,1,3,2 dc.w 1,3,12,10,1,2,4 dc.w 1,11,1,13,4,3,0 dc.w 2,2,11,12,2,3,4 dc.w 2,0,10,13,0,1,4 Obj4_D dc.w 14,$FA60,0,$FB50,0,$FDA8,$F9E8,$5A0,0,$FB50,0,$258 dc.w $F9E8,0,0,$560,$78,$FE98,$FA00,$3C0,0,$FAD8,$78 dc.w $168,$FA00,$FF88,$168,$FA00,$FF88,$FE98,$FA00,$FC40 dc.w 0,$FAD8,$258,$FF04,$FCD0,$FDA8,$FF04,$FCD0,0,$FF28 dc.w $168,0,$FE74,$FE08 Obj4_L dc.w $13,0,1,0,3,3,2,2,1,10,9,9,8,8,10,5,7,7,6,6,5,1,4,3 dc.w 4,2,4,0,4,12,14,14,11,11,13,13,12,1,3,14,13,5,10 Obj5_S dc.w 7 dc.w 3,0,5,7,0,1,5 dc.w 2,1,7,8,5,3,0 dc.w 1,4,5,9,1,2,5 dc.w 1,2,6,8,5,4,3 dc.w 2,3,6,9,2,4,5 dc.w 3,1,2,$12,0,3,4 dc.w 3,0,$11,$12,4,1,0 dc.w 3,3,4,$11,2,1,4 Obj5_L dc.w $17,0,1,0,3,3,4,4,2,2,1,1,5,4,5,0,5,3,5,2,5,6,8,8,9 dc.w 9,10,10,7,7,6,6,9,6,10,1,4,4,0,11,14,14,13,13,12,12 dc.w 11,14,12 Obj5_D dc.w 14,$FE20,$FE98,$FCB8,$1E0,$FE98,$FCB8,$378,$FF58 dc.w $FCB8,$FC88,$FF58,$FCB8,0,$138,$FCB8,0,0,$400,0,$78 dc.w $FCB8,$1E0,$FF94,$FCB8,$FE20,$FF94,$FCB8,$FF10 dc.w $FF10,$FCB8,$F0,$FF10,$FCB8,$FF4C,$FF28,0,$B4,$FF28 dc.w 0,$12C,$FEC8,$FDE4,$FED4,$FEC8,$FDE4 Border2_1 blk.w 2,$FFFF blk.w 2,0 Border3_1 blk.w 2,$FFFF blk.w 2,0 Border2_2 blk.w 2,$FFFF blk.w 2,0 Border3_2 blk.w 2,$FFFF blk.w 2,0 Border1_1 Minx1 dc.w 0 Miny1 dc.w 0 Maxx1 dc.w 0 Maxy1 dc.w 0 Border1_2 Minx2 dc.w 0 Miny2 dc.w 0 Maxx2 dc.w 0 Maxy2 dc.w 0 Coord2D blk.l $32,$FFFFFFFF pontok 2D koordinátái LineBlDatP1 dc.l LineBlDat1 blit adatok végének LineBlDatP2 dc.l LineBlDat2 mutatói LineBlDat1 blk.b 400,0 blit adatok vonal LineBlDat2 blk.b 400,0 törléshez LineCoDat1 blk.b 128,0 kell-e ide ez a vonal ? LineCoDat2 blk.b 128,0 ******************************************************************************* * Trackloader Coded by ADT\Soc.Brigade. ******************************************************************************* ; ; In : d0 start half-track ; d1 number of half-tracks load ; a0 address to load to ; a1 address of workspace ; TrackLoader movem.l a0-a6/d0-d7,-(a7) subq.w #1,d1 bsr.L initdr bsr.L positor read btst #5,$f01(a5) read a half-track bne.s read move.w #$8210,$96(a6) move.w #$4489,$7e(a6) move.w #$9500,$9e(a6) move.w #$4000,$24(a6) move.l a1,$20(a6) move.w #$9900,$24(a6) move.w #$9900,$24(a6) move.w #2,$9c(a6) red btst #1,$1e+1(a6) beq.s red move.w d2,$9c(a6) move.w #$4000,$24(a6) move.w #$400,$9e(a6) move.l a1,a2 moveq #10,d5 fisync cmpi.w #$4489,(a2)+ bne.s fisync cmpi.w #$4489,(a2) bne.s nosync addq.l #2,a2 nosync move.l (a2),d3 move.l 4(a2),d4 asl.w #1,d3 andi.w #$aaaa,d3 andi.w #$5555,d4 or.w d4,d3 asr.w #8,d3 move.l a0,a3 mulu #$200,d3 adda.w d3,a3 lea 56(a2),a2 moveq #$7f,d6 sector move.l 512(a2),d3 move.l (a2)+,d4 asl.l #1,d4 andi.l #$aaaaaaaa,d4 andi.l #$55555555,d3 or.l d3,d4 move.l d4,(a3)+ dbf d6,sector dbf d5,fisync lea $1600(a0),a0 addq #1,d0 step bchg #2,(a5) step to next head btst #0,d0 or track bne.s headok bclr #1,(a5) bclr #0,(a5) nop nop bset #0,(a5) bsr.s timer addq.w #1,(a4) headok dbf d1,read allri bset #3,(a5) nop nop bset #7,(a5) nop nop bclr #3,(a5) movem.l (a7)+,a0-a6/d0-d7 rts timer move.b #$7f,$c00(a5) CIA timming! bset #3,$d00(a5) move.b #$ff,$300(a5) move.b #$a,$400(a5) t btst #0,$c00(a5) beq.s t rts positor move.w d0,d2 asr.w #1,d2 cmp.w (a4),d2 beq.s trkok blt.s revpos bclr #1,(a5) stepin bclr #0,(a5) nop nop bset #0,(a5) bsr.s timer addq.w #1,(a4) cmp.w (a4),d2 bne.s stepin bra.s trkok revpos bset #1,(a5) stepout bclr #0,(a5) nop nop bset #0,(a5) bsr.s timer subq.w #1,(a4) cmp.w (a4),d2 bne.s stepout trkok btst #0,d0 select head bne.s head1 bset #2,(a5) head 0 rts head1 bclr #2,(a5) head 1 rts initdr lea $bfd100,a5 lea $dff000,a6 lea curtrk,a4 or.b #$78,(a5) nop nop bclr #3,(a5) nop nop bset #3,(a5) nop nop bclr #7,(a5) nop nop bclr #3,(a5) rts track0 bsr.s initdr bset #1,(a5) stout btst #4,$f01(a5) beq.s t0 bclr #0,(a5) nop nop bset #0,(a5) bsr.L timer bra.s stout t0 clr.w (a4) rts curtrk dc.w 0 ******************************************************************************* * A csillagok mozgatása ******************************************************************************* Stars movem.l d0/a0-a2,-(a7) move.l #sprite0+1,a0 move.l #sprite2+1,a1 move.l #sprite4+1,a2 move.w #107,d0 st_mov subq.b #1,(a0) subq.b #2,(a1) subq.b #3,(a2) addq.l #8,a0 addq.l #8,a1 addq.l #8,a2 dbf d0,st_mov movem.l (a7)+,d0/a0-a2 rts ******************************************************************************* * Sprite adatok ******************************************************************************* sprite0 dc.l $30383100,1,$33783400,1,$35e43600,1,$37453800,1 dc.l $39673a00,1,$3c733d00,1,$3f474000,1,$42844300,1 dc.l $44d44500,1,$46874700,1,$48284900,1,$4a534b00,1 dc.l $4c7f4d00,1,$4e014f00,1,$50655100,1,$52c75300,1 dc.l $55b35600,1,$58475900,1,$5a745b00,1,$5de45e00,1 dc.l $5f586000,1,$61986200,1,$64f56500,1,$66c96700,1 dc.l $68276900,1,$6b636c00,1,$6db46e00,1,$70177100,1 dc.l $726f7300,1,$74947500,1,$76347700,1,$78527900,1 dc.l $7ad47b00,1,$7c757d00,1,$7efc7f00,1,$80438100,1 dc.l $82388300,1,$84788500,1,$86e48700,1,$88458900,1 dc.l $8a678b00,1,$8c738d00,1,$8f479000,1,$92849300,1 dc.l $94d49500,1,$96879700,1,$98289900,1,$9a539b00,1 dc.l $9c7f9d00,1,$9e019f00,1,$a065a100,1,$a2c7a300,1 dc.l $a5b3a600,1,$a847a900,1,$aa74ab00,1,$ade4ae00,1 dc.l $af58b000,1,$b198b200,1,$b4f5b500,1,$b6c9b700,1 dc.l $b827b900,1,$bb63bc00,1,$bdb4be00,1,$c017c100,1 dc.l $c26fc300,1,$c494c500,1,$c634c700,1,$c852c900,1 dc.l $cad4cb00,1,$cc75cd00,1,$cefccf00,1,$d043d100,1 dc.l $d238d300,1,$d478d500,1,$d6e4d700,1,$d845d900,1 dc.l $da67db00,1,$dc73dd00,1,$df47e000,1,$e284e300,1 dc.l $e4d4e500,1,$e687e700,1,$e828e900,1,$ea53eb00,1 dc.l $ec7fed00,1,$ee01ef00,1,$f065f100,1,$f2c7f300,1 dc.l $f5b3f600,1,$f847f900,1,$fa74fb00,1,$fde4fe00,1 dc.l $ff580002,1,$01980206,1,$04f50506,1,$06c90706,1 dc.l $08270906,1,$0b630c06,1,$0db40e06,1,$10171106,1 dc.l $126f1306,1,$14941506,1,$16341706,1,$18521906,1 dc.l $1ad41b06,1,$1c751d06,1,$1efc1f06,1,$20432106,1 dc.l 0 sprite2 dc.l $323a3300,1,$34d53500,1,$37c53800,1,$3a673b00,1 dc.l $3c783d00,1,$3eb43f00,1,$40034100,1,$42374300,1 dc.l $45a84600,1,$47c94800,1,$49194a00,1,$4b7a4c00,1 dc.l $4e454f00,1,$51855200,1,$53965400,1,$55275600,1 dc.l $57265800,1,$59185a00,1,$5b415c00,1,$5d975e00,1 dc.l $605f6100,1,$62e86300,1,$64b36500,1,$66c96700,1 dc.l $68ba6900,1,$6ae16b00,1,$6c456d00,1,$6e756f00,1 dc.l $70377100,1,$72d37300,1,$74587500,1,$76977700,1 dc.l $78a87900,1,$7b057c00,1,$7e5f7f00,1,$80298100,1 dc.l $823a8300,1,$84d58500,1,$87c58800,1,$8a678b00,1 dc.l $8c788d00,1,$8eb48f00,1,$90039100,1,$92379300,1 dc.l $95a89600,1,$97c99800,1,$99199a00,1,$9b7a9c00,1 dc.l $9e459f00,1,$a185a200,1,$a396a400,1,$a527a600,1 dc.l $a726a800,1,$a918aa00,1,$ab41ac00,1,$ad97ae00,1 dc.l $b05fb100,1,$b2e8b300,1,$b4b3b500,1,$b6c9b700,1 dc.l $b8bab900,1,$bae1bb00,1,$bc45bd00,1,$be75bf00,1 dc.l $c037c100,1,$c2d3c300,1,$c458c500,1,$c697c700,1 dc.l $c8a8c900,1,$cb05cc00,1,$ce5fcf00,1,$d029d100,1 dc.l $d23ad300,1,$d4d5d500,1,$d7c5d800,1,$da67db00,1 dc.l $dc78dd00,1,$deb4df00,1,$e003e100,1,$e237e300,1 dc.l $e5a8e600,1,$e7c9e800,1,$e919ea00,1,$eb7aec00,1 dc.l $ee45ef00,1,$f185f200,1,$f396f400,1,$f527f600,1 dc.l $f726f800,1,$f918fa00,1,$fb41fc00,1,$fd97fe00,1 dc.l $005f0106,1,$02e80306,1,$04b30506,1,$06c90706,1 dc.l $08ba0906,1,$0ae10b06,1,$0c450d06,1,$0e750f06,1 dc.l $10371106,1,$12d31306,1,$14581506,1,$16971706,1 dc.l $18a81906,1,$1b051c06,1,$1e5f1f06,1,$20292106,1 dc.l 0 sprite4 dc.l $31ca3200,1,$34353500,1,$36483700,1,$380f3900,1 dc.l $3ae43b00,1,$3c243d00,1,$3f784000,1,$41394200,1 dc.l $43654400,1,$45b84600,1,$47194800,1,$4a7a4b00,1 dc.l $4dd54e00,1,$4f2f5000,1,$51c85200,1,$53145400,1 dc.l $55f35600,1,$57385800,1,$5a995b00,1,$5c395d00,1 dc.l $5eb85f00,1,$60df6100,1,$62e96300,1,$641a6500,1 dc.l $66556700,1,$68886900,1,$6b346c00,1,$6da86e00,1 dc.l $6fc97000,1,$714c7200,1,$739f7400,1,$75fe7600,1 dc.l $77987800,1,$7a197b00,1,$7c397d00,1,$7fd38000,1 dc.l $81ca8200,1,$84358500,1,$86488700,1,$880f8900,1 dc.l $8ae48b00,1,$8c248d00,1,$8f789000,1,$91399200,1 dc.l $93659400,1,$95b89600,1,$97199800,1,$9a7a9b00,1 dc.l $9dd59e00,1,$9f2fa000,1,$a1c8a200,1,$a314a400,1 dc.l $a5f3a600,1,$a738a800,1,$aa99ab00,1,$ac39ad00,1 dc.l $aeb8af00,1,$b0dfb100,1,$b2e9b300,1,$b41ab500,1 dc.l $b655b700,1,$b888b900,1,$bb34bc00,1,$bda8be00,1 dc.l $bfc9c000,1,$c14cc200,1,$c39fc400,1,$c5fec600,1 dc.l $c798c800,1,$ca19cb00,1,$cc39cd00,1,$cfd3d000,1 dc.l $d1cad200,1,$d435d500,1,$d648d700,1,$d80fd900,1 dc.l $dae4db00,1,$dc24dd00,1,$df78e000,1,$e139e200,1 dc.l $e365e400,1,$e5b8e600,1,$e719e800,1,$ea7aeb00,1 dc.l $edd5ee00,1,$ef2ff000,1,$f1c8f200,1,$f314f400,1 dc.l $f5f3f600,1,$f738f800,1,$fa99fb00,1,$fc39fd00,1 dc.l $feb8ff00,1,$00df0106,1,$02e90306,1,$041a0506,1 dc.l $06550706,1,$08880906,1,$0b340c06,1,$0da80e06,1 dc.l $0fc91006,1,$114c1206,1,$139f1406,1,$15fe1606,1 dc.l $17981806,1,$1a191b06,1,$1c391d06,1,$1fd32006,1 dc.l 0 sprite7 dc.l $fe00ff00,0,0 WBspr0 dc.l $2c404200,$FC00,$7C00FE00,$7C008600,$78008C00 dc.l $7C008600,$6E009300,$7006980,$38004C0,$1C00260 dc.l $800140,$80,0,0,0,0,0,0,0,0,0,0,0,0 WBspr1 dc.l $2c404200,$6000600,$F400F40,$3FE03FE0,$7FE07FE0 dc.l $61F07FF0,$7BF87FF8,$F7F8FFF8,$61FC7FFC,$7F0C7FFC dc.l $3FDE3FFE,$7FBC7FFC,$3F0C3FFC,$1FF81FF8,$7F007F0 dc.l $1C001C0,$7000700,$FC00FC0,$6800680,0,$C000C0 dc.l $E000E0,$400040,0 blk.b 1024,0 only for clearing EE ******************************************************************************* * Constant definitions ******************************************************************************* rvf_Width EQU 2 byte rvf_Height EQU 16 line rvf_MapSize EQU rvf_Width*rvf_Height rvf_LineMap1 EQU rvf_LineMap rvf_LineMap2 EQU rvf_LineMap1+2 rvf_LineMap3 EQU rvf_LineMap1+4 rvf_FillMap EQU rvf_LineMap+[rvf_MapSize*3] rvf_FillMap1 EQU rvf_FillMap rvf_FillMap2 EQU rvf_FillMap1+2 rvf_FillMap3 EQU rvf_FillMap1+4 ******************************************************************************* * FillObject for VectorScroll ******************************************************************************* rvf_FillObj cmpi.b #$80,$dff006 bne rvf_FillObj ; ; Calc 2D coordinates and test surfaces ; rvf_Calc2D move.l rvf_Coord3D(pc),a0 innen 3 lea rvf_Coord2D(pc),a1 ide 2 move.w (a0)+,d7 ennyi db van rvf_c_Calc movem.w (a0)+,d0-d2 xyz rvf_f_Ycos EQU *+2 move.w #0,d4 rvf_f_Ysin EQU *+2 move.w #$7fff,d5 move.w d0,d3 move.w d2,d6 muls d5,d0 muls d4,d6 sub.l d6,d0 lsl.l #1,d0 swap d0 muls d3,d4 muls d5,d2 add.l d4,d2 lsl.l #1,d2 swap d2 rvf_f_Zcos EQU *+2 move.w #$7fff,d4 rvf_f_Zsin EQU *+2 move.w #0,d5 move.w d1,d3 move.w d0,d6 muls d5,d1 muls d4,d6 sub.l d6,d1 lsl.l #1,d1 swap d1 muls d3,d4 muls d5,d0 add.l d4,d0 lsl.l #1,d0 swap d0 add.w #$6800,d2 ext.l d0 ext.l d1 asl.l #8,d0 asl.l #8,d1 asl.l #5,d0 asl.l #5,d1 divs d2,d0 divs d2,d1 add.w #8*16,d0 Width/2/2 add.w #8*16,d1 Height/2 move.w d0,(a1)+ move.w d1,(a1)+ dbra d7,rvf_c_Calc ;------------------------------------------------------------------------------ ; Test surfaces ;------------------------------------------------------------------------------ move.l rvf_Surfaces(pc),a0 lea rvf_Coord2D(pc),a1 move.w (a0)+,d7 ennyi lap van rvf_c_TstSf move.w 8(a0),d0 1. pontja lsl.w #2,d0 movem.w 0(a1,d0.w),d1/d2 x1,y1 move.w 10(a0),d0 2. pontja lsl.w #2,d0 movem.w 0(a1,d0.w),d3/d4 x2,y2 move.w 12(a0),d0 3. pontja lsl.w #2,d0 movem.w 0(a1,d0.w),d5/d6 x3,y3 sub.w d1,d3 x2-x1 sub.w d2,d4 y2-y1 sub.w d1,d5 x3-x1 sub.w d2,d6 y3-y1 muls d3,d6 (x2-x1)(y3-y1) muls d4,d5 (y2-y1)(x3-x1) sub.l d6,d5 (y2-y1)(x3-x1)- bmi.s rvf_c2_nOk -(x2-x1)(y3-y1) and.w #$7FFF,(a0) szín word 15. bitje 0 lea 14(a0),a0 dbra d7,rvf_c_TstSf bra rvf_c2_exit rvf_c2_nOk or.w #$8000,(a0) szín word 15. bitje 1 lea 14(a0),a0 dbra d7,rvf_c_TstSf rvf_c2_exit ; ; ColorTest ; move.l rvf_Surfaces(pc),a0 move.w (a0)+,d7 ennyi lap van rvf_ct_c_7 move.w (a0)+,d6 color bmi.s rvf_ct_nobpl2 movem.w (a0),d0-d2 line 0-2 lsl.w #1,d0 vonal száma * 2 lsl.w #1,d1 lsl.w #1,d2 lsr.w #1,d6 color -> bcc.s rvf_ct_nobpl1 bpl1 ? lea rvf_LineCoDat1(pc),a1 not.w 0(a1,d0.w) not.w 0(a1,d1.w) not.w 0(a1,d2.w) rvf_ct_nobpl1 lsr.w #1,d6 bcc.s rvf_ct_nobpl2 bpl2 ? lea rvf_LineCoDat2(pc),a1 not.w 0(a1,d0.w) not.w 0(a1,d1.w) not.w 0(a1,d2.w) rvf_ct_nobpl2 lea 12(a0),a0 dbra d7,rvf_ct_c_7 ; ; NextLines ; lea rvf_LineMap,a0 moveq #7,d0 rvf_cnl clr.l (a0)+ clr.l (a0)+ clr.l (a0)+ dbf d0,rvf_cnl W_BLIT move.l #-1,$44(a6) BLTAFWM,BLTALWM move.w #$8000,$74(a6) LineDraw move.w #rvf_Width*3,$60(a6) Width move.w #$FFFF,$72(a6) texture lea rvf_Coord2D(pc),a4 ;------------------------------------------------------------------------------ ; Lines to bitmap 1 ;------------------------------------------------------------------------------ lea rvf_LineMap1,a5 work_area bmap 1 lea rvf_LineCoDat1(pc),a0 move.l rvf_Lines(pc),a3 move.w (a3)+,d5 ennyi vonal van rvf_nl_c_Line1 tst.w (a0)+ beq.s rvf_nl_exLine1 clr.w -2(a0) move.w (a3),d6 a kezdöpont száma lsl.w #2,d6 movem.w 0(a4,d6.w),d0/d1 sx,sy move.w 2(a3),d6 a végpont száma lsl.w #2,d6 movem.w 0(a4,d6.w),d2/d3 ex,ey asr.w #4,d0 /16 asr.w #4,d1 asr.w #4,d2 asr.w #4,d3 cmp.w d1,d3 csak lefele mehet bhi.s rvf_nl_Ldown1 exg d2,d0 exg d3,d1 rvf_nl_Ldown1 bsr rvf_LineDraw rvf_nl_exLine1 addq.w #4,a3 dbra d5,rvf_nl_c_Line1 ;------------------------------------------------------------------------------ ; Lines to bitmap 2 ;------------------------------------------------------------------------------ lea rvf_LineMap2,a5 work_area bmap 2 lea rvf_LineCoDat2(pc),a0 move.l rvf_Lines(pc),a3 move.w (a3)+,d5 ennyi vonal van rvf_nl_c_Line2 tst.w (a0)+ beq.s rvf_nl_exLine2 clr.w -2(a0) move.w (a3),d6 a kezdöpont száma lsl.w #2,d6 movem.w 0(a4,d6.w),d0/d1 sx,sy move.w 2(a3),d6 a végpont száma lsl.w #2,d6 movem.w 0(a4,d6.w),d2/d3 ex,ey asr.w #4,d0 /16 asr.w #4,d1 asr.w #4,d2 asr.w #4,d3 cmp.w d1,d3 csak lefele mehet bhi.s rvf_nl_Ldown2 exg d2,d0 exg d3,d1 rvf_nl_Ldown2 bsr rvf_LineDraw rvf_nl_exLine2 addq.w #4,a3 dbra d5,rvf_nl_c_Line2 ; ; Fill ; W_BLIT lea rvf_FillMap+96-2,a1 itt fillez lea rvf_LineMap+96-2,a0 line munkaterulet moveq #0,d0 move.w #$0c01,d2 move.w d0,$64(a6) move.w d0,$66(a6) move.l #$9F00012,$40(a6) move.l a0,$50(a6) move.l a1,$54(a6) move.w d2,$58(a6) rts ; ; LineDraw rutin (d0/d1/d2/d3 sx,sy,ex,ey a5 bmapaddr.) ; rvf_LineDraw sub.w d3,d1 dy ext.l d3 mulu #6,d3 *Width moveq #15,d4 and.w d2,d4 d4=(ex AND 15) sub.w d2,d0 dx blt.s rvf_ld_left ha balra megy a vonal, ugrik rvf_ld_right tst.w d1 dy blt.s rvf_ld_ru cmp.w d0,d1 dx,dy bge.s rvf_ld_rd2 moveq #$13,d7 jobbra le dy>dx bra.s rvf_ld_okOct rvf_ld_rd2 moveq #3,d7 jobbra le dx>dy exg d1,d0 bra.s rvf_ld_okOct rvf_ld_ru neg.w d1 |dy| cmp.w d0,d1 dx,dy bge.s rvf_ld_ru2 moveq #$1B,d7 jobbra fel dx>dy bra.s rvf_ld_okOct rvf_ld_ru2 moveq #7,d7 jobbra fel dy>dx exg d1,d0 bra.s rvf_ld_okOct rvf_ld_left neg.w d0 |dx| tst.w d1 blt.s rvf_ld_lu cmp.w d0,d1 bge.s rvf_ld_ld2 moveq #$17,d7 balra le dx>dy bra.s rvf_ld_okOct rvf_ld_ld2 moveq #11,d7 balra le dy>dx exg d1,d0 bra.s rvf_ld_okOct rvf_ld_lu neg.w d1 cmp.w d0,d1 bge.s rvf_ld_lu2 moveq #$1F,d7 balra fel dx>dy bra.s rvf_ld_okOct rvf_ld_lu2 moveq #15,d7 balra fel dy>dy exg d1,d0 rvf_ld_okOct add.w d1,d1 2Y asr.w #3,d2 ex*8 ext.l d2 add.l d2,d3 d3=ex*8+ey*64 move.w d1,d2 sub.w d0,d2 d2=2Y-X bge.s rvf_ld_nsign or.w #$40,d7 SIGN bit rvf_ld_nsign W_BLIT move.w d2,$52(a6) 2Y-X move.w d1,$62(a6) 2Y sub.w d0,d2 move.w d2,$64(a6) 2Y-2X asl.w #6,d0 add.w #$42,d0 d0=dx*64+66 (BLTSIZE) move.w d4,d1 d1=eltolási érték (0-15) swap d4 asr.l #4,d4 or.w #$B4A,d4 swap d7 move.w d4,d7 swap d7 add.l a5,d3 a5-ben a kép báziscíme move.l d7,$40(a6) BLTCON01 move.l d3,$48(a6) move.l d3,$54(a6) move.l d3,a1 not.b d1 bchg d1,(a1) move.w d0,$58(a6) and.l #$FF00FFFF,d7 rts ; ; Az aktuális tárgy adatainak címei ; rvf_Surfaces dc.l rvf_Obj1_S rvf_Lines dc.l rvf_Obj1_L rvf_Coord3D dc.l rvf_Obj1_D ; ; A tárgyak adatai ; rvf_Obj1_S dc.w 11,1,0,1,4,0,1,2,1,4,2,3,2,3,0,2,2,5,6,2,6,3,2,6,8 dc.w 7,6,7,3,1,9,8,15,6,5,7,1,13,$10,15,5,4,7,2,11,12,13 dc.w 5,1,4,2,0,12,14,1,0,4,3,9,10,11,1,5,6,3,1,5,10,1,6 dc.w 2,3,14,$10,$11,0,7,4,3,$11,7,3,0,3,7 rvf_Obj1_L dc.w $11,0,1,1,2,2,3,3,0,0,2,2,6,3,6,3,7,6,7,5,6,1,6,1,5 dc.w 1,4,5,4,0,4,5,7,4,7,0,7 rvf_Obj1_D dc.w 7,240,240,240,-240,240,240,-240,-240,240 dc.w 240,-240,240,240,240,-240,-240,240,-240 dc.w -240,-240,-240,240,-240,-240 rvf_Coord2D blk.l 16,$FFFFFFFF pontok 2D koordinátái rvf_LineCoDat1 blk.b 64,$ff kell-e ide ez a vonal ? rvf_LineCoDat2 blk.b 64,$ff