; TODOs: ; - Fix bug with center line coloring being wrong ; - Fix one-pixel offset in pattern (when negative?) ; - Fix visual bugs (16 pixel wide stripe) when going back to fadeout mode ; ; Framework settings IFD FW_DEMO_PART IFD FW_HD_DEMO_PART include "../hamazing/hdtrackmo_settings.i" ELSE include "../hamazing/trackmo_settings.i" ENDC ELSE FW_STANDALONE_FILE_MODE = 1 ; enable standalone (part testing) FW_HD_TRACKMO_MODE = 0 ; DO NOT CHANGE (not supported for standalone mode) FW_MUSIC_SUPPORT = 1 FW_MUSIC_PLAYER_CHOICE = 2 ; 0 = None, 1 = LSP, 2 = LSP_CIA, 3 = P61A, 4 = Pretracker (CPU DMA wait), 5 = Pretracker Turbo (Copper wait) FW_LMB_EXIT_SUPPORT = 1 ; allows abortion of intro with LMB FW_MULTIPART_SUPPORT = 0 ; DO NOT CHANGE (not supported for standalone mode) FW_DYNAMIC_MEMORY_SUPPORT = 1 ; enable dynamic memory allocation. Otherwise, use fw_ChipMemStack/End etc fields. FW_MAX_MEMORY_STATES = 4 ; the amount of memory states FW_TOP_BOTTOM_MEM_SECTIONS = 0 ; allow allocations from both sides of the memory FW_64KB_PAGE_MEMORY_SUPPORT = 0 ; allow allocation of chip memory that doesn't cross the 64 KB page boundary FW_MULTITASKING_SUPPORT = 1 ; enable multitasking FW_ROUNDROBIN_MT_SUPPORT = 0 ; enable fair scheduling among tasks with same priority FW_BLITTERTASK_MT_SUPPORT = 0 ; enable single parallel task during large blits FW_MAX_VPOS_FOR_BG_TASK = 308 ; max vpos that is considered to be worth switching to a background task, if any FW_SINETABLE_SUPPORT = 1 ; enable creation of 1024 entries sin/cos table FW_SCRIPTING_SUPPORT = 1 ; enable simple timed scripting functions FW_PALETTE_LERP_SUPPORT = 1 ; enable basic palette fading functions FW_YIELD_FROM_MAIN_TOO = 0 ; adds additional code that copes with Yield being called from main code instead of task FW_VBL_IRQ_SUPPORT = 1 ; enable custom VBL IRQ routine FW_COPPER_IRQ_SUPPORT = 0 ; enable copper IRQ routine support FW_AUDIO_IRQ_SUPPORT = 0 ; enable audio IRQ support (unimplemented) FW_VBL_MUSIC_IRQ = 0 ; enable calling of VBL based music ticking (disable, if using CIA timing!) FW_BLITTERQUEUE_SUPPORT = 1 ; enable blitter queue support FW_A5_A6_UNTOUCHED = 1 ; speed up blitter queue if registers a5/a6 are never changed in main code FW_LZ4_SUPPORT = 0 ; compile in LZ4 decruncher FW_DOYNAX_SUPPORT = 0 ; compile in doynax decruncher FW_ZX0_SUPPORT = 0 ; compile in ZX0 decruncher FW_DO_FANCY_WORKBENCH_STUFF = 0 ; enable pre- and post-hook (os startup only) ENABLE_PART_MUSIC = 1 PART_MUSIC_START_POS = 10 ENDC STENCIL_WIDTH = 64 STENCIL_HEIGHT = 53 ; actually ((sqrt(3)/2))*64 = 55.425 LCOLBUF_HEIGHT = 64 LCOL_NUM = 10 KALEIDO_WIDTH = 320 KALEIDO_HEIGHT = STENCIL_HEIGHT KALEIDO_VHEIGHT = 180 KALEIDO_PLANES = 6 KALEIDO_BUF_WIDTH = 2*KALEIDO_WIDTH INTRO_SPRITE_WIDTH = 2*STENCIL_WIDTH INTRO_SPRITE_SHEIGHT = 2*STENCIL_HEIGHT-1 INTRO_SPRITE_HEIGHT = KALEIDO_VHEIGHT LAST_SLICE_HEIGHT = KALEIDO_VHEIGHT-(STENCIL_HEIGHT*3-3) KDSPAT_WIDTH = 256 KDSPAT_HEIGHT = 256 KDSPAT_THEIGHT = 3*KDSPAT_HEIGHT NOISE_WIDTH = 128 NOISE_HEIGHT = 1024+KALEIDO_VHEIGHT SPLINE_TABLE_SIZE = 128 NUM_BACK_DUST = 80 NUM_FRONT_DUST = 80 FAIRY_WIDTH = 64 FAIRY_HEIGHT = 64 FAIRY_PLANES = 4 BODY_WIDTH = 48 BODY_HEIGHT = 51 BODY_PLANES = 4 BODY_XOFFSET = 0 BODY_YOFFSET = 5 NUM_BODY_FRAMES = 3 PUFF_WIDTH = 32 PUFF_HEIGHT = 15 PUFF_PLANES = 4 PUFF_XOFFSET = 32 PUFF_YOFFSET = 19 NUM_PUFF_FRAMES = 4 COP_PREAMBLE_INST = 100 ; bplptrs COP_POST_INST = 16 ; wait COP_INST_PER_LINE = 1+10 ; wait, 10 colors COP_INST_PER_INTRO_LINE = 1+3 ; wait, 3 colors COP_INST_PER_PMAIN_LINE = 1+7+1+20 ; wait, 7 colors, 20 sprite pos COP_LIST_SIZE = (COP_PREAMBLE_INST+COP_INST_PER_PMAIN_LINE*KALEIDO_VHEIGHT+COP_POST_INST)*4 STENCILS_BUFFER_SIZE = ((STENCIL_WIDTH/8)*STENCIL_HEIGHT*KALEIDO_PLANES)*2+((STENCIL_WIDTH/8)*STENCIL_HEIGHT)*2 SPRITES_BUFFER_SIZE = (INTRO_SPRITE_WIDTH/16)*((INTRO_SPRITE_HEIGHT+2)*2*2) CHIPMEM_SIZE = COP_LIST_SIZE*2+(KALEIDO_BUF_WIDTH/8)*KALEIDO_HEIGHT*KALEIDO_PLANES*2+STENCILS_BUFFER_SIZE+SPRITES_BUFFER_SIZE*2+4*LCOL_NUM*LCOLBUF_HEIGHT*2*2+NOISE_WIDTH/8*NOISE_HEIGHT+(BODY_WIDTH/8)*BODY_HEIGHT*BODY_PLANES*NUM_BODY_FRAMES+(PUFF_WIDTH/8)*PUFF_HEIGHT*PUFF_PLANES*NUM_PUFF_FRAMES+(FAIRY_WIDTH/8)*FAIRY_HEIGHT*FAIRY_PLANES FASTMEM_SIZE = 2048*4+KDSPAT_WIDTH*KDSPAT_THEIGHT*2 IFND DEBUG_DETAIL DEBUG_DETAIL SET 10 ENDC NEWAGE_DEBUG = 1 include "../framework/framework.i" ; Chip memory use: ; - CHIP DATA: 256 x 256 x 6 x 3 = 147456 (Pattern/Texture) ; ; - CHIP BSS : 320 x 53 x 6 x 2 = 25440 (6x2 db) ; - CHIP BSS : 320 x 53 x 6 x 2 = 25440 (working space) ; - CHIP BSS : 2 x 180 x10 x 2 = 7200 (10 line colors, db) ; - CHIP BSS : 10 x 180 x 2 = 15840 (copperlists) ; ; Total: 207 KB ; ; Fast memory use: ; - FAST BSS : 256 x 256 x 3 = 393216 (True color buffer) ; - FAST BSS : 2000 = 2000 (Blitterqueues) ; ; 0) 1) 2) 3) 4) 5) ; Index = 000 -> 00 (I) -> 00 (I) -> 00 (I) -> 00 (I) -> 00 (I) ; Blue = 101 -> 10 (R) -> 01 (B) -> 11 (G) -> 10 (R) -> 11 (G) ; Red = 110 -> 01 (B) -> 11 (G) -> 10 (R) -> 11 (G) -> 01 (B) ; Green = 111 -> 11 (G) -> 10 (R) -> 01 (B) -> 01 (B) -> 10 (R) ; ; 0) RGB p5 := o5 ; p6 := o6 ; 1) BGR p5 := o6 ; p6 := o5 -> Red <-> Blue ; 2) GRB p5 := o5 ^ o6 ; p6 := o6 -> Red <-> Green ; 3) RBG p5 := o5 ; p6 := o5 ^ o6 -> Green <-> Blue ; 4) GBR p5 := o5 ^ o6 ; p6 := o5 -> Red := Green, Green := Blue, Blue := Red ; 5) BRG p5 := o6 ; p6 := o5 ^ o6 -> Red := Blue , Green := Red , Blue := Green ; start out with 0000/0000, then 1010/1010, then 1010/4040, then 1010/4343, then 1012/4343, then 1012/4345 ; original: 1 0 1 0 ; combos : GRB (2) xor|p6, BRG (5) p6|xor ; changes p5 for 24 after first mirror ; changes p6 for 43 after second mirror and p5 to o5 or o6 (for 4345) ; masks needed: 13, 4, 134, 3 ; buffers needed: p5_xor, p6_xor, p5_org2, p6_xor2, p5_org3 (partial) ; STRUCTURE FairyDust,0 WORD fd_Time ULONG fd_PosY ULONG fd_PosX ULONG fd_SpeedY ULONG fd_SpeedX LABEL fd_SIZEOF STRUCTURE HexagonPattern,0 APTR hp_CopListRoutine ; to be called for every copperlist to update copperlist mirror pointers APTR hp_DrawRoutine APTR hp_FixupRoutine APTR hp_Col2Routine APTR hp_Col3Routine APTR hp_Col4Routine APTR hp_Pos1Routine APTR hp_Pos2Routine STRUCT hp_ColOffs,4*LCOL_NUM*2 ; four mirrors, first hexagon, second hexagon (plus border), third hexagon LABEL hp_SIZEOF STRUCTURE PartData,fw_SIZEOF APTR pd_CurrPlanesPtr APTR pd_LastPlanesPtr APTR pd_CurrP5Xor6PlanePtr APTR pd_CurrP6Xor5PlanePtr APTR pd_CurrP5BonusPlanePtr APTR pd_CurrP5BottomPlanePtr APTR pd_CurrCopListPtr APTR pd_LastCopListPtr APTR pd_CurrTCLineColorsPtr APTR pd_LastTCLineColorsPtr APTR pd_CurrSpriteStencilPtr APTR pd_CurrFairySprite UBYTE pd_DbToggle ALIGNWORD UWORD pd_PartCountDown UWORD pd_TransitionHeight APTR pd_CopperList1 APTR pd_CopperList2 APTR pd_DbBuffer UWORD pd_CopperLinesFixupOffset1 UWORD pd_CopperLinesFixupOffset2 UWORD pd_CopperLinesFixupOffset3 UWORD pd_CopperLinesFixupOffset4 UWORD pd_CopperMirror1P5PtrOffset UWORD pd_CopperMirror2P56PtrOffset UWORD pd_CopperMirror3P5PtrOffset APTR pd_OriginalPattern APTR pd_StencilBuffer1 APTR pd_StencilBuffer2 APTR pd_StencilSprBuffer1 APTR pd_StencilSprBuffer2 APTR pd_TrueColorImage1 APTR pd_TrueColorImage2 APTR pd_TrueColorImage3 APTR pd_TCLineColors1 APTR pd_TCLineColors2 APTR pd_HexagonTopMaskPtr APTR pd_HexagonBottomMaskPtr APTR pd_Hexagon2MaskPtr APTR pd_BonusGridPtr APTR pd_P5Xor6Plane1Ptr APTR pd_P5Xor6Plane2Ptr APTR pd_P6Xor5Plane1Ptr APTR pd_P6Xor5Plane2Ptr APTR pd_P5BonusPlane1Ptr APTR pd_P5BonusPlane2Ptr APTR pd_P5BottomPlane1Ptr APTR pd_P5BottomPlane2Ptr UWORD pd_FairySpriteFrame UWORD pd_PuffSpriteFrame UWORD pd_SplinePos UWORD pd_FairyPosX UWORD pd_FairyPosY UWORD pd_NextFrontDustOffset UWORD pd_NextBackDustOffset ULONG pd_NoiseValueA ULONG pd_NoiseValueB APTR pd_NoiseBuffer UWORD pd_NoiseOffset BOOL pd_EnableMirror1 BOOL pd_EnableMirror2 BOOL pd_EnableMirror3 APTR pd_BigSinCosTable WORD pd_CopperlistUpdate UWORD pd_PosBaseCounter WORD pd_Distance1 UWORD pd_Angle1 WORD pd_Distance2 BOOL pd_InteractiveMode UBYTE pd_OldMouseY UBYTE pd_OldMouseX BYTE pd_DeltaMouseY BYTE pd_DeltaMouseX ULONG pd_StencilOffset1 ULONG pd_StencilOffset2 ULONG pd_StencilOffset3 ULONG pd_StencilOffset6 ULONG pd_StencilOffset7 ULONG pd_StencilOffset8 ULONG pd_StencilTCOffset1 ULONG pd_StencilTCOffset2 ULONG pd_StencilTCOffset3 ULONG pd_StencilTCOffset6 ULONG pd_StencilTCOffset7 ULONG pd_StencilTCOffset8 UWORD pd_StencilShift1 UWORD pd_StencilShift2 UWORD pd_StencilShift3 UWORD pd_StencilShift6 UWORD pd_StencilShift7 UWORD pd_StencilShift8 APTR pd_FairyAnim1 APTR pd_FairyAnim2 APTR pd_FairyAnim3 APTR pd_FairyAnim4 APTR pd_FairyMask1 APTR pd_FairyMask2 APTR pd_FairyMask3 APTR pd_FairyMask4 APTR pd_PuffAnim1 APTR pd_PuffAnim2 APTR pd_PuffAnim3 APTR pd_PuffAnim4 APTR pd_PuffMask1 APTR pd_PuffMask2 APTR pd_PuffMask3 APTR pd_PuffMask4 APTR pd_SpriteCompoBuffer STRUCT pd_PreparationTask,ft_SIZEOF STRUCT pd_IntroPalette,8*cl_SIZEOF STRUCT pd_PatternInfo,hp_SIZEOF STRUCT pd_CompSprites1,8*4 STRUCT pd_CompSprites2,8*4 STRUCT pd_SpriteStencil1Ptrs,8*4 STRUCT pd_SpriteStencil2Ptrs,8*4 STRUCT pd_BQBuffer,2500 STRUCT pd_SMCLine1,(STENCIL_HEIGHT+2)*4 STRUCT pd_SMCLine2,(STENCIL_HEIGHT+2)*4 STRUCT pd_SMCLine3,(STENCIL_HEIGHT+2)*4 STRUCT pd_SMCLineUp1,(STENCIL_HEIGHT+2)*4 STRUCT pd_SMCLineUp2,(STENCIL_HEIGHT+2)*4 STRUCT pd_SMCLineUp3,(STENCIL_HEIGHT+2)*4 STRUCT pd_BackDust,NUM_BACK_DUST*fd_SIZEOF STRUCT pd_FrontDust,NUM_FRONT_DUST*fd_SIZEOF LABEL pd_SIZEOF IFND FW_DEMO_PART include "../framework/framework.asm" ENDC entrypoint: IFD FW_DEMO_PART move.l #pd_SIZEOF,d0 CALLFW InitPart ENDC bsr.s kds_init lea kds_copperlist,a0 CALLFW SetCopper IFND FW_DEMO_PART IFD ENABLE_PART_MUSIC move.l #part_music_data,fw_MusicData(a6) move.l #part_music_smp,fw_MusicSamples(a6) CALLFW StartMusic IFD PART_MUSIC_START_POS moveq.l #PART_MUSIC_START_POS,d0 CALLFW MusicSetPosition move.w #3840,fw_MusicFrameCount(a6) ENDC ENDC ENDC IF 1 bsr kds_intro bsr kds_transition bsr kds_dissolve ELSE lea pd_PreparationTask(a6),a1 CALLFW WaitUntilTaskFinished ENDC move.w #$1fe,kds_extra_copperlist_ptr+8 CALLFW VSyncWithTask bsr kds_pre_main bsr kds_main bsr kds_post_main CALLFW SetBaseCopper rts ;-------------------------------------------------------------------- kds_init: bsr kds_init_vars bsr kds_init_colors bsr kds_clear_sprites bsr kds_init_sine_table bsr kds_generate_stencils bsr kds_generate_spr_stencils bsr kds_generate_hexagonmasks lea .backgroundtasks(pc),a0 lea pd_PreparationTask(a6),a1 CALLFW AddTask rts .backgroundtasks bsr kds_generate_smc_lines move.l pd_OriginalPattern(a6),a0 move.l pd_TrueColorImage1(a6),a1 bsr kds_calc_true_color_image move.l pd_TrueColorImage2(a6),a1 bsr kds_calc_true_color_image move.l pd_TrueColorImage3(a6),a1 bsr kds_calc_true_color_image bsr kds_fill_noise_buffer rts ;-------------------------------------------------------------------- kds_init_vars: lea kds_kaleidoscope_pattern,a0 move.l a0,pd_OriginalPattern(a6) move.l #kds_fairy_body1,pd_FairyAnim1(a6) move.l #kds_fairy_body2,pd_FairyAnim2(a6) move.l #kds_fairy_body3,pd_FairyAnim3(a6) move.l #kds_fairy_body2,pd_FairyAnim4(a6) move.l #kds_puff_sprite1,pd_PuffAnim1(a6) move.l #kds_puff_sprite2,pd_PuffAnim2(a6) move.l #kds_puff_sprite3,pd_PuffAnim3(a6) move.l #kds_puff_sprite4,pd_PuffAnim4(a6) IFD FW_DEMO_PART move.l #(KDSPAT_WIDTH*KDSPAT_HEIGHT*2*2),d0 CALLFW AllocFast PUTMSG 10,<"TrueColorImage %p">,a0 move.l fw_GlobalUserData(a6),pd_TrueColorImage1(a6) move.l a0,pd_TrueColorImage2(a6) add.l #(KDSPAT_WIDTH*KDSPAT_HEIGHT)*2,a0 move.l a0,pd_TrueColorImage3(a6) ELSE move.l #(KDSPAT_WIDTH*KDSPAT_THEIGHT*2),d0 CALLFW AllocFast PUTMSG 10,<"TrueColorImage %p">,a0 move.l a0,pd_TrueColorImage1(a6) add.l #(KDSPAT_WIDTH*KDSPAT_HEIGHT)*2,a0 move.l a0,pd_TrueColorImage2(a6) add.l #(KDSPAT_WIDTH*KDSPAT_HEIGHT)*2,a0 move.l a0,pd_TrueColorImage3(a6) ENDC move.l #(COP_LIST_SIZE*2),d0 CALLFW AllocChip PUTMSG 10,<"Copperlist 1 %p">,a0 move.l a0,pd_CopperList1(a6) move.l a0,pd_CurrCopListPtr(a6) lea COP_LIST_SIZE(a0),a0 PUTMSG 10,<"Copperlist 2 %p">,a0 move.l a0,pd_CopperList2(a6) move.l a0,pd_LastCopListPtr(a6) move.l #(KALEIDO_BUF_WIDTH/8)*KALEIDO_HEIGHT*KALEIDO_PLANES,d0 CALLFW AllocChip PUTMSG 10,<"DbBuffer %p">,a0 move.l a0,pd_DbBuffer(a6) move.l a0,pd_CurrPlanesPtr(a6) lea 1*KALEIDO_WIDTH/8(a0),a1 move.l a1,pd_LastPlanesPtr(a6) lea 1*KALEIDO_WIDTH/8(a0),a1 move.l #(KALEIDO_BUF_WIDTH/8)*KALEIDO_HEIGHT*KALEIDO_PLANES,d0 CALLFW AllocChip PUTMSG 10,<"P5Xor6Plane1Ptr %p">,a0 move.l a0,pd_P5Xor6Plane1Ptr(a6) move.l a0,pd_CurrP5Xor6PlanePtr(a6) lea 1*KALEIDO_WIDTH/8(a0),a0 move.l a0,pd_P5Xor6Plane2Ptr(a6) lea 1*KALEIDO_WIDTH/8(a0),a0 move.l a0,pd_P6Xor5Plane1Ptr(a6) move.l a0,pd_CurrP6Xor5PlanePtr(a6) lea 1*KALEIDO_WIDTH/8(a0),a0 move.l a0,pd_P6Xor5Plane2Ptr(a6) lea 1*KALEIDO_WIDTH/8(a0),a0 move.l a0,pd_P5BonusPlane1Ptr(a6) move.l a0,pd_CurrP5BonusPlanePtr(a6) lea 1*KALEIDO_WIDTH/8(a0),a0 move.l a0,pd_P5BonusPlane2Ptr(a6) lea 1*KALEIDO_WIDTH/8(a0),a0 move.l a0,pd_P5BottomPlane1Ptr(a6) move.l a0,pd_CurrP5BottomPlanePtr(a6) lea 1*KALEIDO_WIDTH/8(a0),a0 move.l a0,pd_P5BottomPlane2Ptr(a6) lea 1*KALEIDO_WIDTH/8(a0),a0 move.l a0,pd_Hexagon2MaskPtr(a6) lea (STENCIL_WIDTH/2)/8(a0),a1 move.l a1,pd_HexagonTopMaskPtr(a6) lea 1*KALEIDO_WIDTH/8(a0),a0 move.l a0,pd_HexagonBottomMaskPtr(a6) lea (3*STENCIL_WIDTH)/8(a0),a1 move.l a1,pd_BonusGridPtr(a6) move.l #((STENCIL_WIDTH/8)*STENCIL_HEIGHT*KALEIDO_PLANES)*2,d0 CALLFW AllocChip PUTMSG 10,<"Stencil %p">,a0 move.l a0,pd_StencilBuffer1(a6) lea ((STENCIL_WIDTH/8)*STENCIL_HEIGHT*KALEIDO_PLANES)(a0),a0 move.l a0,pd_StencilBuffer2(a6) move.l #((STENCIL_WIDTH/8)*STENCIL_HEIGHT)*2,d0 CALLFW AllocChip PUTMSG 10,<"Stencil Spr %p">,a0 move.l a0,pd_StencilSprBuffer1(a6) lea ((STENCIL_WIDTH/8)*STENCIL_HEIGHT)(a0),a0 move.l a0,pd_StencilSprBuffer2(a6) move.l #4*LCOL_NUM*LCOLBUF_HEIGHT*2*2,d0 CALLFW AllocChip PUTMSG 10,<"TCLineColors %p">,a0 move.l a0,pd_TCLineColors1(a6) move.l a0,pd_CurrTCLineColorsPtr(a6) lea 4*LCOL_NUM*LCOLBUF_HEIGHT*2(a0),a0 move.l a0,pd_TCLineColors2(a6) move.l a0,pd_LastTCLineColorsPtr(a6) move.l #SPRITES_BUFFER_SIZE*2,d0 CALLFW AllocChip PUTMSG 10,<"SpriteStencilPtrs %p">,a0 move.l a0,d0 lea pd_SpriteStencil1Ptrs(a6),a1 move.l a1,pd_CurrSpriteStencilPtr(a6) REPT (INTRO_SPRITE_WIDTH/16) move.l a0,(a1)+ lea ((INTRO_SPRITE_HEIGHT+2)*2*2)(a0),a0 ENDR REPT (INTRO_SPRITE_WIDTH/16) move.l a0,(a1)+ lea ((INTRO_SPRITE_HEIGHT+2)*2*2)(a0),a0 ENDR move.l d0,a0 lea pd_CompSprites1(a6),a1 REPT (FAIRY_WIDTH/16)*2 move.l a0,(a1)+ lea ((FAIRY_HEIGHT+2)*2*2)(a0),a0 ENDR REPT (FAIRY_WIDTH/16)*2 move.l a0,(a1)+ lea ((FAIRY_HEIGHT+2)*2*2)(a0),a0 ENDR move.l #(NOISE_WIDTH/8)*NOISE_HEIGHT,d0 CALLFW AllocChip PUTMSG 10,<"NoiseBuffer %p">,a0 move.l a0,pd_NoiseBuffer(a6) move.l #2048*4,d0 CALLFW AllocFast move.l a0,pd_BigSinCosTable(a6) move.l #(BODY_WIDTH/8)*BODY_HEIGHT*BODY_PLANES*NUM_BODY_FRAMES,d0 CALLFW AllocChip PUTMSG 10,<"FairyMasks %p">,a0 move.l a0,pd_FairyMask1(a6) lea (BODY_WIDTH/8)*BODY_HEIGHT*BODY_PLANES(a0),a0 move.l a0,pd_FairyMask2(a6) move.l a0,pd_FairyMask4(a6) lea (BODY_WIDTH/8)*BODY_HEIGHT*BODY_PLANES(a0),a0 move.l a0,pd_FairyMask3(a6) move.l #(PUFF_WIDTH/8)*PUFF_HEIGHT*PUFF_PLANES*NUM_PUFF_FRAMES,d0 CALLFW AllocChip PUTMSG 10,<"PuffMasks %p">,a0 move.l a0,pd_PuffMask1(a6) lea (PUFF_WIDTH/8)*PUFF_HEIGHT*PUFF_PLANES(a0),a0 move.l a0,pd_PuffMask2(a6) lea (PUFF_WIDTH/8)*PUFF_HEIGHT*PUFF_PLANES(a0),a0 move.l a0,pd_PuffMask3(a6) lea (PUFF_WIDTH/8)*PUFF_HEIGHT*PUFF_PLANES(a0),a0 move.l a0,pd_PuffMask4(a6) move.l #(FAIRY_WIDTH/8)*FAIRY_HEIGHT*FAIRY_PLANES,d0 CALLFW AllocChip PUTMSG 10,<"SpriteCompoBuffer %p">,a0 move.l a0,pd_SpriteCompoBuffer(a6) lea kds_setting_1(pc),a0 bsr kds_load_setting move.l #$3eb2427c,pd_NoiseValueA(a6) move.l #$a7f9d461,pd_NoiseValueB(a6) move.l fw_SinTable(a6),a2 move.l fw_CosTable(a6),a3 moveq.l #0,d2 move.w #256,d3 move.w #-420+96,d4 lea pd_FrontDust(a6),a1 moveq.l #NUM_FRONT_DUST-1,d7 .dloop move.w (a2,d2.w),d0 move.w (a3,d2.w),d1 add.w #123*2,d2 and.w #1023*2,d2 muls d3,d0 muls d3,d1 asr.l #7,d0 asr.l #7,d1 move.l d0,fd_SpeedY(a1) move.l d1,fd_SpeedX(a1) addq.w #8,d3 move.w d4,fd_Time(a1) addq.w #2,d4 lea fd_SIZEOF(a1),a1 dbra d7,.dloop rts ;-------------------------------------------------------------------- kds_init_sine_table: move.l fw_SinTable(a6),a0 move.l fw_CosTable(a6),a1 move.w (a1),d2 move.l pd_BigSinCosTable(a6),a2 PUTMSG 10,<"BigSinCosTable %p">,a2 move.w #1023-1,d7 .bloop move.w (a0)+,d0 move.w (a1)+,d1 move.w d0,(a2)+ move.w d1,(a2)+ add.w (a0),d0 add.w (a1),d1 asr.w #1,d0 asr.w #1,d1 move.w d0,(a2)+ move.w d1,(a2)+ dbra d7,.bloop move.w (a0)+,d0 move.w (a1)+,d1 move.w d0,(a2)+ move.w d1,(a2)+ add.w (a0),d0 add.w d2,d1 asr.w #1,d0 asr.w #1,d1 move.w d0,(a2)+ move.w d1,(a2)+ rts ;-------------------------------------------------------------------- kds_init_colors: lea kds_fairy_sprite_palette(pc),a0 lea color+16*2(a5),a1 moveq.l #16-1,d7 .sprpalloop move.w (a0)+,(a1)+ dbra d7,.sprpalloop rts ;-------------------------------------------------------------------- kds_fill_noise_buffer: move.l pd_NoiseBuffer(a6),a0 move.l pd_NoiseValueA(a6),d0 move.l pd_NoiseValueB(a6),d1 move.w #((NOISE_WIDTH/16)*NOISE_HEIGHT)-1,d7 moveq.l #0,d4 .rloop moveq.l #16-1,d6 .wloop move.l d1,d2 swap d2 add.l d0,d1 add.l d2,d0 add.w d3,d3 lsr.w #1,d2 cmp.w d4,d2 bhi.s .noadd1 addq.w #1,d3 .noadd1 dbra d6,.wloop move.w d3,(a0)+ addq.w #4,d4 dbra d7,.rloop move.l d0,pd_NoiseValueA(a6) move.l d1,pd_NoiseValueB(a6) rts ;-------------------------------------------------------------------- kds_intro: PUTMSG 10,<"%d: Intro part started (%d music frames)">,fw_FrameCounterLong(a6),fw_MusicFrameCount-2(a6) move.w #420,pd_PartCountDown(a6) CALLFW SetBlitterQueueSingleFrame bsr kds_prepare_intro_buffers bsr kds_prepare_sprite_masks moveq.l #8,d0 move.w #$fff,d1 lea pd_IntroPalette(a6),a1 CALLFW InitPaletteLerpSameColor moveq.l #8,d0 moveq.l #32,d1 lea kds_intro_palette(pc),a0 lea pd_IntroPalette(a6),a1 CALLFW FadePaletteTo bsr kds_flip_db_frame bsr kds_create_intro_copperlist bsr kds_flip_db_frame bsr kds_create_intro_copperlist .waitloop CALLFW VSyncWithTask cmp.w #4032,fw_MusicFrameCount(a6) blt.s .waitloop PUTMSG 10,<"%d: Intro part launching (%d music frames)">,fw_FrameCounterLong(a6),fw_MusicFrameCount-2(a6) .loop bsr kds_flip_db_frame lea pd_BQBuffer(a6),a4 bsr kds_draw_stencils_intro bsr kds_clear_compobuffer bsr kds_draw_dust bsr kds_draw_fairy_body bsr kds_draw_wand_heat bsr kds_convert_compobuffer_to_sprites bsr kds_calc_stencil_positions1_slow moveq.l #8,d0 lea pd_IntroPalette(a6),a1 CALLFW DoFadePaletteStep bsr kds_calc_spline_pos bsr kds_update_fairy_sprite bsr kds_update_sprites_and_cols_in_copperlist CALLFW JoinBlitterQueue bsr kds_update_copper_list_pointers CALLFW VSyncWithTask subq.w #1,pd_PartCountDown(a6) bne.s .loop rts ;-------------------------------------------------------------------- kds_transition: PUTMSG 10,<"%d: Transition part started (%d music frames)">,fw_FrameCounterLong(a6),fw_MusicFrameCount-2(a6) move.w #260,pd_PartCountDown(a6) CALLFW SetBlitterQueueSingleFrame move.w pd_FairyPosX(a6),d3 move.w pd_FairyPosY(a6),d4 add.w #45,d3 add.w #27,d4 move.l pd_NoiseValueA(a6),d0 move.l pd_NoiseValueB(a6),d1 lea pd_FrontDust(a6),a1 moveq.l #32,d5 moveq.l #NUM_FRONT_DUST-1,d7 .dloop move.w d3,fd_PosX(a1) move.w d4,fd_PosY(a1) move.l d1,d2 swap d2 add.l d0,d1 add.l d2,d0 moveq.l #15,d2 and.w d0,d2 add.w d5,d2 move.w d2,fd_Time(a1) lea fd_SIZEOF(a1),a1 dbra d7,.dloop move.l d0,pd_NoiseValueA(a6) move.l d1,pd_NoiseValueB(a6) .loop bsr kds_flip_db_frame lea pd_BQBuffer(a6),a4 bsr kds_draw_stencils_intro bsr kds_draw_stencils_transition bsr kds_clear_compobuffer bsr kds_draw_dust bsr kds_draw_fairy_body bsr kds_draw_wand_blast bsr kds_draw_puff bsr kds_convert_compobuffer_to_sprites bsr kds_calc_spline_pos bsr kds_update_fairy_sprite bsr kds_create_transition_copperlist bsr kds_calc_stencil_fixup_lines_transition bsr kds_calc_stencil_positions1_slow move.w pd_TransitionHeight(a6),d0 cmp.w #STENCIL_HEIGHT*2-1,d0 bge.s .skipth addq.w #1,d0 move.w d0,pd_TransitionHeight(a6) .skipth CALLFW JoinBlitterQueue bsr kds_update_copper_list_pointers CALLFW VSyncWithTask subq.w #1,pd_PartCountDown(a6) bne.s .loop rts ;-------------------------------------------------------------------- kds_dissolve: PUTMSG 10,<"%d: Dissolve part started (%d music frames)">,fw_FrameCounterLong(a6),fw_MusicFrameCount-2(a6) CALLFW SetBlitterQueueSingleFrame bsr kds_clear_noise_sprite_buffer move.w kds_intro_palette(pc),d0 move.w d0,color+17*2(a5) move.w d0,color+21*2(a5) move.w d0,color+25*2(a5) move.w d0,color+29*2(a5) .loop bsr kds_flip_db_frame move.l pd_CurrSpriteStencilPtr(a6),pd_CurrFairySprite(a6) TERMINATE_BLITTER_QUEUE lea pd_BQBuffer(a6),a4 bsr kds_draw_stencils_intro bsr kds_draw_stencils_transition bsr kds_calc_stencil_fixup_lines_transition bsr kds_calc_stencil_positions1_slow add.w #110,pd_NoiseOffset(a6) moveq.l #INTRO_SPRITE_SHEIGHT,d0 bsr kds_convert_noise_to_sprites bsr kds_update_stencil_sprite ;BLTHOGON ;BLTWAIT ;lea pd_BQBuffer(a6),a0 ;CALLFW TriggerCustomBlitterQueue CALLFW JoinBlitterQueue bsr kds_update_sprites_in_copperlist bsr kds_update_copper_list_pointers CALLFW VSyncWithTask cmp.w #((NOISE_WIDTH/8)*(1024)),pd_NoiseOffset(a6) blt.s .loop rts ;-------------------------------------------------------------------- kds_pre_main: PUTMSG 10,<"%d: Pre Main part started (%d music frames)">,fw_FrameCounterLong(a6),fw_MusicFrameCount-2(a6) CALLFW SetBlitterQueueMultiFrame move.w joy0dat(a5),pd_OldMouseY(a6) move.w #(NOISE_WIDTH/8)*(NOISE_HEIGHT-KALEIDO_VHEIGHT),pd_NoiseOffset(a6) bsr kds_prepare_buffers bsr .prepare bsr .prepare bsr kds_calc_stencil_positions1_std bsr kds_calc_stencil_positions2_std .loop bsr kds_flip_db_frame move.l pd_CurrSpriteStencilPtr(a6),pd_CurrFairySprite(a6) lea pd_BQBuffer(a6),a4 bsr kds_draw_stencils_col0000 bsr kds_draw_stencils_copy_edges bsr kds_calc_stencil_fixup_lines_pre_main bsr kds_calc_stencil_positions1_std bsr kds_calc_stencil_positions2_std sub.w #210,pd_NoiseOffset(a6) bmi.s .exit move.w #INTRO_SPRITE_HEIGHT,d0 bsr kds_convert_noise_to_sprites bsr kds_update_stencil_pre_main_sprite CALLFW JoinBlitterQueue bsr kds_update_sprites_in_copperlist bsr kds_update_copper_list_pointers CALLFW VSyncWithTask bra.s .loop .exit bsr kds_kill_stencil_sprite CALLFW JoinBlitterQueue bsr kds_update_sprites_in_copperlist bsr kds_update_copper_list_pointers CALLFW VSyncWithTask bsr.s .restore .restore bsr kds_flip_db_frame bsr kds_create_kaleidoscope_copperlist move.w #DMAF_SPRITE,dmacon(a5) moveq.l #0,d0 move.w d0,spr+0*8+sd_dataa(a5) move.w d0,spr+1*8+sd_dataa(a5) move.w d0,spr+2*8+sd_dataa(a5) move.w d0,spr+3*8+sd_dataa(a5) move.w d0,spr+4*8+sd_dataa(a5) move.w d0,spr+5*8+sd_dataa(a5) move.w d0,spr+6*8+sd_dataa(a5) move.w d0,spr+7*8+sd_dataa(a5) lea pd_BQBuffer(a6),a4 bsr kds_draw_stencils_col0000 bsr kds_draw_stencils_copy_edges bsr kds_calc_stencil_fixup_lines_generic bsr kds_calc_stencil_positions1_std bsr kds_calc_stencil_positions2_std CALLFW JoinBlitterQueue bsr kds_update_copper_list_pointers CALLFW VSyncWithTask rts .prepare bsr kds_flip_db_frame move.l pd_CurrSpriteStencilPtr(a6),pd_CurrFairySprite(a6) TERMINATE_BLITTER_QUEUE lea pd_BQBuffer(a6),a4 bsr kds_create_pre_main_copperlist move.w #INTRO_SPRITE_HEIGHT,d0 bsr kds_convert_noise_to_sprites bsr kds_update_stencil_pre_main_sprite BLTHOGON BLTWAIT BLTHOGOFF CALLFW TriggerBlitterQueue CALLFW JoinBlitterQueue bsr kds_update_copper_list_pointers CALLFW VSyncWithTask rts ;-------------------------------------------------------------------- kds_post_main: PUTMSG 10,<"%d: Post Main part started (%d music frames)">,fw_FrameCounterLong(a6),fw_MusicFrameCount-2(a6) bsr .prepare bsr .prepare PUTMSG 10,<"%d: Prep done">,fw_FrameCounterLong(a6) .loop bsr kds_flip_db_frame move.l pd_CurrSpriteStencilPtr(a6),pd_CurrFairySprite(a6) lea pd_BQBuffer(a6),a4 bsr kds_draw_stencils_col0000 bsr kds_draw_stencils_copy_edges bsr kds_calc_stencil_fixup_lines_pre_main bsr kds_calc_stencil_positions1_std bsr kds_calc_stencil_positions2_std add.w #164,pd_NoiseOffset(a6) cmp.w #(NOISE_WIDTH/8)*(NOISE_HEIGHT-KALEIDO_VHEIGHT),pd_NoiseOffset(a6) bge.s .exit move.w #INTRO_SPRITE_HEIGHT,d0 bsr kds_convert_noise_to_sprites bsr kds_update_stencil_pre_main_sprite CALLFW JoinBlitterQueue bsr kds_update_sprites_in_copperlist bsr kds_update_copper_list_pointers CALLFW VSyncWithTask bra.s .loop .exit CALLFW JoinBlitterQueue clr.l fw_VBlankIRQ(a6) bsr kds_update_sprites_in_copperlist bsr kds_update_copper_list_pointers CALLFW VSyncWithTask PUTMSG 10,<"%d: Post Main finished (%d music frames)">,fw_FrameCounterLong(a6),fw_MusicFrameCount-2(a6) rts .prepare bsr kds_flip_db_frame move.l pd_CurrSpriteStencilPtr(a6),pd_CurrFairySprite(a6) TERMINATE_BLITTER_QUEUE lea pd_BQBuffer(a6),a4 bsr kds_create_pre_main_copperlist bsr kds_draw_stencils_col0000 bsr kds_draw_stencils_copy_edges bsr kds_calc_stencil_fixup_lines_pre_main bsr kds_calc_stencil_positions1_std bsr kds_calc_stencil_positions2_std bsr kds_clear_bonus_stuff_for_col2 CALLFW JoinBlitterQueue bsr kds_update_copper_list_pointers CALLFW VSyncWithTask rts ;-------------------------------------------------------------------- kds_main: PUTMSG 10,<"%d: Main part started (%d music frames)">,fw_FrameCounterLong(a6),fw_MusicFrameCount-2(a6) CALLFW SetBlitterQueueMultiFrame IF 0 bsr kds_prepare_buffers bsr kds_flip_db_frame bsr kds_create_kaleidoscope_copperlist bsr kds_flip_db_frame bsr kds_create_kaleidoscope_copperlist move.l pd_PatternInfo+hp_Pos1Routine(a6),a0 jsr (a0) move.l pd_PatternInfo+hp_Pos2Routine(a6),a0 jsr (a0) ENDC lea .script(pc),a0 CALLFW InstallMusicScript lea .vblstuff(pc),a0 move.l a0,fw_VBlankIRQ(a6) .loop bsr kds_flip_db_frame CALLFW CheckMusicScript lea pd_BQBuffer(a6),a4 move.l pd_PatternInfo+hp_DrawRoutine(a6),a0 jsr (a0) move.l pd_PatternInfo+hp_FixupRoutine(a6),a0 jsr (a0) move.l pd_PatternInfo+hp_Pos1Routine(a6),a0 jsr (a0) move.l pd_PatternInfo+hp_Pos2Routine(a6),a0 jsr (a0) subq.w #1,pd_CopperlistUpdate(a6) bmi.s .nocoplistupdate move.l pd_PatternInfo+hp_CopListRoutine(a6),a0 jsr (a0) .nocoplistupdate ;lea pd_BQBuffer(a6),a0 ;sub.l a0,a4 ;PUTMSG 10,<"Queue size %ld">,a4 CALLFW JoinBlitterQueue bsr kds_update_copper_list_pointers CALLFW VSyncWithTask cmp.w #6336,fw_MusicFrameCount(a6) blt.s .loop bsr .flash rts .vblstuff PUSHM d4 moveq.l #1,d0 lea pd_IntroPalette(a6),a1 CALLFW DoFadePaletteStep move.w pd_IntroPalette+cl_Color(a6),color(a5) POPM rts .script dc.w 4800+192+24+0*48,.load_setting2-* dc.w 4800+192+24+1*48,.load_setting3-* dc.w 4800+192+24+2*48,.load_setting4-* dc.w 4800+192+24+3*48,.load_setting5-* dc.w 4800+192+24+4*48,.load_setting6-* dc.w 5184+28*6,.jump-* dc.w 5184+29*6,.jump-* dc.w 5184+30*6,.jump-* dc.w 5184+31*6,.jump-* dc.w 5568+28*6,.jump-* dc.w 5568+29*6,.jump-* dc.w 5568+30*6,.jump-* dc.w 5568+31*6,.jump-* dc.w 5952+28*6,.jump-* dc.w 5952+29*6,.jump-* dc.w 5952+30*6,.jump-* dc.w 5952+31*6,.jump-* dc.w 5952+192+24+0*48,.load_setting4-* dc.w 5952+192+24+1*48,.load_setting3-* dc.w 5952+192+24+2*48,.load_setting2-* dc.w 5952+192+24+3*48,.load_setting1-* dc.w 0 .jump add.w #58,pd_Angle1(a6) add.w #550,pd_PosBaseCounter(a6) rts .flash moveq.l #1,d0 move.w #$fff,d1 lea pd_IntroPalette(a6),a1 CALLFW InitPaletteLerpSameColor moveq.l #1,d0 moveq.l #16,d1 lea kds_intro_palette(pc),a0 lea pd_IntroPalette(a6),a1 CALLFW FadePaletteTo rts .load_setting1 bsr .flash lea kds_setting_1(pc),a0 bra kds_load_setting .load_setting2 bsr .flash lea kds_setting_2(pc),a0 bra kds_load_setting .load_setting3 bsr .flash lea kds_setting_3(pc),a0 bra kds_load_setting .load_setting4 bsr .flash lea kds_setting_4(pc),a0 bra kds_load_setting .load_setting5 bsr .flash lea kds_setting_5(pc),a0 bra kds_load_setting .load_setting6 bsr .flash lea kds_setting_6(pc),a0 bra kds_load_setting ;-------------------------------------------------------------------- kds_flip_db_frame: move.l pd_CurrPlanesPtr(a6),pd_LastPlanesPtr(a6) move.l pd_CurrCopListPtr(a6),pd_LastCopListPtr(a6) move.l pd_CurrTCLineColorsPtr(a6),pd_LastTCLineColorsPtr(a6) move.l pd_DbBuffer(a6),a0 not.b pd_DbToggle(a6) beq.s .selb1 lea (KALEIDO_WIDTH/8)(a0),a0 move.l a0,pd_CurrPlanesPtr(a6) move.l pd_P5Xor6Plane2Ptr(a6),pd_CurrP5Xor6PlanePtr(a6) move.l pd_P6Xor5Plane2Ptr(a6),pd_CurrP6Xor5PlanePtr(a6) move.l pd_P5BonusPlane2Ptr(a6),pd_CurrP5BonusPlanePtr(a6) move.l pd_P5BottomPlane2Ptr(a6),pd_CurrP5BottomPlanePtr(a6) move.l pd_CopperList2(a6),pd_CurrCopListPtr(a6) move.l pd_TCLineColors2(a6),pd_CurrTCLineColorsPtr(a6) lea pd_SpriteStencil2Ptrs(a6),a0 move.l a0,pd_CurrSpriteStencilPtr(a6) lea pd_CompSprites2(a6),a0 move.l a0,pd_CurrFairySprite(a6) rts .selb1 move.l a0,pd_CurrPlanesPtr(a6) move.l pd_P5Xor6Plane1Ptr(a6),pd_CurrP5Xor6PlanePtr(a6) move.l pd_P6Xor5Plane1Ptr(a6),pd_CurrP6Xor5PlanePtr(a6) move.l pd_P5BonusPlane1Ptr(a6),pd_CurrP5BonusPlanePtr(a6) move.l pd_P5BottomPlane1Ptr(a6),pd_CurrP5BottomPlanePtr(a6) move.l pd_CopperList1(a6),pd_CurrCopListPtr(a6) move.l pd_TCLineColors1(a6),pd_CurrTCLineColorsPtr(a6) lea pd_SpriteStencil1Ptrs(a6),a0 move.l a0,pd_CurrSpriteStencilPtr(a6) lea pd_CompSprites1(a6),a0 move.l a0,pd_CurrFairySprite(a6) rts ;-------------------------------------------------------------------- kds_update_copper_list_pointers: lea kds_extra_copperlist_ptr+2,a0 move.w pd_CurrCopListPtr(a6),(a0) move.w pd_CurrCopListPtr+2(a6),4(a0) move.w #copjmp2,6(a0) rts ;-------------------------------------------------------------------- kds_load_setting: lea pd_PatternInfo(a6),a1 moveq.l #(hp_SIZEOF/4)-1,d7 .scloop move.l (a0)+,(a1)+ dbra d7,.scloop move.w #2,pd_CopperlistUpdate(a6) rts ;-------------------------------------------------------------------- kds_generate_smc_lines: moveq.l #0,d0 moveq.l #0,d1 moveq.l #(STENCIL_WIDTH/2)-1,d2 moveq.l #STENCIL_HEIGHT-1,d3 lea pd_SMCLine1(a6),a0 move.w #KDSPAT_WIDTH*2,d4 PUSHM d0-d3 bsr kds_bresenham_smc_line_draw POPM lea pd_SMCLineUp1(a6),a0 neg.w d4 bsr kds_bresenham_smc_line_draw moveq.l #STENCIL_WIDTH-1,d0 moveq.l #0,d1 moveq.l #(STENCIL_WIDTH/2),d2 moveq.l #STENCIL_HEIGHT-1,d3 lea pd_SMCLine2(a6),a0 neg.w d4 PUSHM d0-d3 bsr kds_bresenham_smc_line_draw POPM lea pd_SMCLineUp2(a6),a0 neg.w d4 bsr kds_bresenham_smc_line_draw moveq.l #(STENCIL_WIDTH/2),d0 moveq.l #0,d1 moveq.l #(STENCIL_WIDTH/2),d2 moveq.l #STENCIL_HEIGHT-1,d3 lea pd_SMCLine3(a6),a0 neg.w d4 PUSHM d0-d3 bsr kds_bresenham_smc_line_draw POPM lea pd_SMCLineUp3(a6),a0 neg.w d4 bsr kds_bresenham_smc_line_draw CALLFW FlushCaches rts ;-------------------------------------------------------------------- kds_clear_sprites: BLTHOGON BLTWAIT BLTCON_SET D,0,0,0 move.w #0,bltdmod(a5) move.l pd_SpriteStencil1Ptrs(a6),bltdpt(a5) move.w #((INTRO_SPRITE_WIDTH)>>4)|(((INTRO_SPRITE_HEIGHT+2)*2*2)<<6),bltsize(a5) rts ;-------------------------------------------------------------------- kds_generate_stencils: BLTHOGON BLTWAIT BLTCON_SET D,0,0,0 move.w #0,bltdmod(a5) move.l pd_StencilBuffer1(a6),bltdpt(a5) move.w #((STENCIL_WIDTH)>>4)|((STENCIL_HEIGHT*KALEIDO_PLANES*2)<<6),bltsize(a5) moveq.l #(STENCIL_WIDTH/8)*KALEIDO_PLANES,d4 bsr kds_blitter_line_init moveq.l #0,d0 moveq.l #0,d1 moveq.l #(STENCIL_WIDTH/2)-1,d2 moveq.l #STENCIL_HEIGHT-1,d3 move.l pd_StencilBuffer1(a6),a0 bsr kds_draw_blitter_singledot_line moveq.l #(STENCIL_WIDTH/8)*KALEIDO_PLANES,d4 moveq.l #STENCIL_WIDTH-2,d0 moveq.l #0,d1 moveq.l #(STENCIL_WIDTH/2)-1,d2 moveq.l #STENCIL_HEIGHT-1,d3 move.l pd_StencilBuffer1(a6),a0 bsr kds_draw_blitter_singledot_line moveq.l #(STENCIL_WIDTH/8)*KALEIDO_PLANES,d4 moveq.l #(STENCIL_WIDTH/2)-1,d0 moveq.l #0,d1 moveq.l #0,d2 moveq.l #STENCIL_HEIGHT-1,d3 move.l pd_StencilBuffer2(a6),a0 bsr kds_draw_blitter_singledot_line moveq.l #(STENCIL_WIDTH/8)*KALEIDO_PLANES,d4 moveq.l #(STENCIL_WIDTH/2)-1,d0 moveq.l #0,d1 moveq.l #STENCIL_WIDTH-2,d2 moveq.l #STENCIL_HEIGHT-1,d3 move.l pd_StencilBuffer2(a6),a0 bsr kds_draw_blitter_singledot_line move.l pd_StencilBuffer1(a6),a0 lea (STENCIL_WIDTH/8)*(STENCIL_HEIGHT*2-1)*KALEIDO_PLANES+(STENCIL_WIDTH/8)-2(a0),a0 moveq.l #(STENCIL_WIDTH/8)*(KALEIDO_PLANES-1),d0 moveq.l #-1,d2 move.w #((STENCIL_WIDTH)>>4)|((STENCIL_HEIGHT*2)<<6),d3 BLTWAIT BLTCON_SET_X AD,BLT_A,0,0,BLTCON1F_EFE|BLTCON1F_DESC move.l d2,bltafwm(a5) ; also fills bltalwm move.w d0,bltamod(a5) move.w d0,bltdmod(a5) move.l a0,bltapt(a5) move.l a0,bltdpt(a5) move.w d3,bltsize(a5) move.l pd_StencilBuffer1(a6),a0 lea (STENCIL_WIDTH/8)(a0),a1 BLTWAIT BLTCON_SET AD,BLT_A,0,0 move.l a0,bltapt(a5) move.l a1,bltdpt(a5) move.w d3,bltsize(a5) REPT KALEIDO_PLANES-2 lea (STENCIL_WIDTH/8)(a1),a1 BLTWAIT move.l a0,bltapt(a5) move.l a1,bltdpt(a5) move.w d3,bltsize(a5) ENDR rts ;-------------------------------------------------------------------- kds_generate_spr_stencils: BLTHOGON BLTWAIT BLTCON_SET D,0,0,0 move.w #0,bltdmod(a5) move.l pd_StencilSprBuffer1(a6),bltdpt(a5) move.w #((STENCIL_WIDTH)>>4)|((STENCIL_HEIGHT*2)<<6),bltsize(a5) moveq.l #(STENCIL_WIDTH/8),d4 bsr kds_blitter_line_init moveq.l #0,d0 moveq.l #0,d1 moveq.l #(STENCIL_WIDTH/2)-1,d2 moveq.l #STENCIL_HEIGHT-1,d3 move.l pd_StencilSprBuffer1(a6),a0 bsr kds_draw_blitter_singledot_line moveq.l #(STENCIL_WIDTH/8),d4 moveq.l #STENCIL_WIDTH-2,d0 moveq.l #0,d1 moveq.l #(STENCIL_WIDTH/2)-1,d2 moveq.l #STENCIL_HEIGHT-1,d3 move.l pd_StencilSprBuffer1(a6),a0 bsr kds_draw_blitter_singledot_line moveq.l #(STENCIL_WIDTH/8),d4 moveq.l #(STENCIL_WIDTH/2)-1,d0 moveq.l #0,d1 moveq.l #0,d2 moveq.l #STENCIL_HEIGHT-1,d3 move.l pd_StencilSprBuffer2(a6),a0 bsr kds_draw_blitter_singledot_line moveq.l #(STENCIL_WIDTH/8),d4 moveq.l #(STENCIL_WIDTH/2)-1,d0 moveq.l #0,d1 moveq.l #STENCIL_WIDTH-2,d2 moveq.l #STENCIL_HEIGHT-1,d3 move.l pd_StencilSprBuffer2(a6),a0 bsr kds_draw_blitter_singledot_line move.l pd_StencilSprBuffer1(a6),a0 lea (STENCIL_WIDTH/8)*(STENCIL_HEIGHT*2-1)+(STENCIL_WIDTH/8)-2(a0),a0 moveq.l #0,d0 moveq.l #-1,d2 move.w #((STENCIL_WIDTH)>>4)|((STENCIL_HEIGHT*2)<<6),d3 BLTWAIT BLTCON_SET_X AD,BLT_A,0,0,BLTCON1F_IFE|BLTCON1F_DESC move.l d2,bltafwm(a5) ; also fills bltalwm move.l d0,bltamod(a5) ; and bltdmod move.l a0,bltapt(a5) move.l a0,bltdpt(a5) move.w d3,bltsize(a5) BLTWAIT move.l pd_StencilSprBuffer1(a6),a0 bset d0,(STENCIL_WIDTH/8)*(STENCIL_HEIGHT-1)+((STENCIL_WIDTH/2)/8)-1(a0) rts ;-------------------------------------------------------------------- kds_generate_hexagonmasks: BLTHOGON BLTWAIT BLTCON_SET D,0,0,0 move.w #0,bltdmod(a5) move.l pd_P5Xor6Plane1Ptr(a6),bltdpt(a5) move.w #((KALEIDO_BUF_WIDTH)>>4)|((KALEIDO_HEIGHT*KALEIDO_PLANES)<<6),bltsize(a5) moveq.l #-1,d2 move.w #((KALEIDO_BUF_WIDTH*KALEIDO_PLANES-STENCIL_WIDTH)/8),d0 move.w #((STENCIL_WIDTH*KALEIDO_PLANES-STENCIL_WIDTH)/8),d1 move.w #((STENCIL_WIDTH)>>4)|((STENCIL_HEIGHT)<<6),d3 move.l pd_StencilBuffer1(a6),a1 move.l pd_StencilBuffer2(a6),a2 move.l pd_HexagonTopMaskPtr(a6),a0 BLTWAIT BLTCON_SET ACD,BLT_A|BLT_C,0,0 move.l d2,bltafwm(a5) ; also fills bltalwm move.w d1,bltamod(a5) move.w d0,bltcmod(a5) move.w d0,bltdmod(a5) move.l a2,bltapt(a5) move.l a0,bltcpt(a5) move.l a0,bltdpt(a5) move.w d3,bltsize(a5) addq.l #(STENCIL_WIDTH/2)/8,a0 BLTWAIT move.l a1,bltapt(a5) move.l a0,bltcpt(a5) move.l a0,bltdpt(a5) move.w d3,bltsize(a5) addq.l #(STENCIL_WIDTH/2)/8,a0 BLTWAIT move.l a2,bltapt(a5) move.l a0,bltcpt(a5) move.l a0,bltdpt(a5) move.w d3,bltsize(a5) ; bottom move.l pd_HexagonBottomMaskPtr(a6),a0 BLTWAIT move.l a1,bltapt(a5) move.l a0,bltcpt(a5) move.l a0,bltdpt(a5) move.w d3,bltsize(a5) addq.l #(STENCIL_WIDTH/2)/8,a0 BLTWAIT move.l a2,bltapt(a5) move.l a0,bltcpt(a5) move.l a0,bltdpt(a5) move.w d3,bltsize(a5) addq.l #(STENCIL_WIDTH/2)/8,a0 BLTWAIT BLTHOGOFF move.l a1,bltapt(a5) move.l a0,bltcpt(a5) move.l a0,bltdpt(a5) move.w d3,bltsize(a5) rts ;-------------------------------------------------------------------- kds_clear_compobuffer: ADD_TO_BLITTER_QUEUE a4,a3 clr.l (a4)+ move.l #.bq_clear,(a4)+ rts .bq_clear BLTCON_SET D,0,0,0 move.w #0,bltdmod(a5) move.l pd_SpriteCompoBuffer(a6),bltdpt(a5) move.w #(FAIRY_WIDTH>>4)|((FAIRY_HEIGHT*FAIRY_PLANES)<<6),bltsize(a5) rts ;-------------------------------------------------------------------- kds_draw_fairy_body: move.w pd_FairySpriteFrame(a6),d0 addq.w #1*4,d0 and.w #3*(1*4),d0 move.w d0,pd_FairySpriteFrame(a6) lea pd_FairyAnim1(a6),a0 move.l (a0,d0.w),a1 move.l pd_FairyMask1-pd_FairyAnim1(a0,d0.w),a2 move.l pd_SpriteCompoBuffer(a6),a0 lea (BODY_XOFFSET/8)+BODY_YOFFSET*(FAIRY_WIDTH/8)*FAIRY_PLANES(a0),a0 ADD_TO_BLITTER_QUEUE a4,a3 clr.l (a4)+ move.l #.bq_copy_body,(a4)+ move.l a1,(a4)+ move.l a2,(a4)+ move.l a0,(a4)+ rts .bq_copy_body BLTCON_SET ABCD,(BLT_A&BLT_B)|(~BLT_A&BLT_C),0,0 moveq.l #-1,d0 move.l d0,bltafwm(a5) moveq.l #(FAIRY_WIDTH-BODY_WIDTH)/8,d0 move.w d0,bltcmod(a5) move.w d0,bltdmod(a5) moveq.l #0,d0 move.l d0,bltbmod(a5) ; and bltamod move.l (a0)+,bltbpt(a5) move.l (a0)+,bltapt(a5) move.l (a0)+,d0 move.l d0,bltcpt(a5) move.l d0,bltdpt(a5) move.w #(BODY_WIDTH>>4)|((BODY_HEIGHT*BODY_PLANES)<<6),bltsize(a5) rts ;-------------------------------------------------------------------- kds_draw_puff: move.w pd_PuffSpriteFrame(a6),d0 addq.w #1,d0 move.w d0,pd_PuffSpriteFrame(a6) cmp.w #NUM_PUFF_FRAMES*4,d0 blt.s .cont rts .cont and.w #(NUM_PUFF_FRAMES-1)*4,d0 PUTMSG 10,<"Puff %d">,d0 lea pd_PuffAnim1(a6),a0 move.l (a0,d0.w),a1 move.l pd_PuffMask1-pd_PuffAnim1(a0,d0.w),a2 move.l pd_SpriteCompoBuffer(a6),a0 lea (PUFF_XOFFSET/8)+PUFF_YOFFSET*(FAIRY_WIDTH/8)*FAIRY_PLANES(a0),a0 ADD_TO_BLITTER_QUEUE a4,a3 clr.l (a4)+ move.l #.bq_copy_body,(a4)+ move.l a1,(a4)+ move.l a2,(a4)+ move.l a0,(a4)+ rts .bq_copy_body BLTCON_SET ABCD,(BLT_A&BLT_B)|(~BLT_A&BLT_C),0,0 moveq.l #-1,d0 move.l d0,bltafwm(a5) moveq.l #(FAIRY_WIDTH-PUFF_WIDTH)/8,d0 move.w d0,bltcmod(a5) move.w d0,bltdmod(a5) moveq.l #0,d0 move.l d0,bltbmod(a5) ; and bltamod move.l (a0)+,bltbpt(a5) move.l (a0)+,bltapt(a5) move.l (a0)+,d0 move.l d0,bltcpt(a5) move.l d0,bltdpt(a5) move.w #(PUFF_WIDTH>>4)|((PUFF_HEIGHT*PUFF_PLANES)<<6),bltsize(a5) rts ;-------------------------------------------------------------------- kds_draw_dust: lea pd_BackDust(a6),a0 ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_draw,(a4)+ move.l a0,(a4)+ move.w #NUM_BACK_DUST,(a4)+ rts .bq_draw PUSHM a2/d1-d7 move.l (a0)+,a1 move.w (a0)+,d7 move.l pd_SpriteCompoBuffer(a6),a0 move.w pd_FairyPosY(a6),d4 move.w pd_FairyPosX(a6),d5 move.w #FAIRY_WIDTH,d6 ; or height lea kds_dust_twinkle(pc),a2 subq.w #1,d7 .loop subq.w #1,fd_Time(a1) bmi.s .skip movem.l fd_PosY(a1),d0-d3 add.l #3000,d2 add.l d2,d0 add.l d3,d1 movem.l d0-d2,fd_PosY(a1) swap d0 swap d1 sub.w d4,d0 sub.w d5,d1 PUTMSG 40,<"Pos %d,%d">,d1,d0 cmp.w d6,d1 bhs.s .skip cmp.w d6,d0 bhs.s .skip move.w d1,d2 move.b d0,-(sp) move.w (sp)+,d0 move.b d1,d0 lsr.w #3,d0 not.w d2 move.w fd_Time(a1),d3 move.b (a2,d3.w),d3 move.w .table-2(pc,d3.w),d3 jmp .table(pc,d3.w) .skip lea fd_SIZEOF(a1),a1 dbra d7,.loop POPM moveq.l #0,d0 rts .table dc.w .set1-.table dc.w .set2-.table dc.w .set3-.table dc.w .set4-.table dc.w .set5-.table dc.w .set6-.table .set1 bset d2,(a0,d0.w) bra.s .skip .set2 bset d2,1*(FAIRY_WIDTH/8)(a0,d0.w) bra.s .skip .set3 bset d2,(a0,d0.w) bset d2,1*(FAIRY_WIDTH/8)(a0,d0.w) bra.s .skip .set4 bset d2,2*(FAIRY_WIDTH/8)(a0,d0.w) bra.s .skip .set5 bset d2,(a0,d0.w) bset d2,2*(FAIRY_WIDTH/8)(a0,d0.w) bra.s .skip .set6 bset d2,1*(FAIRY_WIDTH/8)(a0,d0.w) bset d2,2*(FAIRY_WIDTH/8)(a0,d0.w) bra.s .skip ;-------------------------------------------------------------------- kds_draw_wand_heat: lea pd_FrontDust(a6),a0 ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_draw,(a4)+ move.l a0,(a4)+ move.w #NUM_FRONT_DUST,(a4)+ rts .bq_draw PUSHM a2/d1-d7 move.l (a0)+,a1 move.w (a0)+,d7 move.l pd_SpriteCompoBuffer(a6),a0 moveq.l #45,d5 moveq.l #27,d4 move.w #FAIRY_WIDTH,d6 ; or height lea kds_dust_burst(pc),a2 subq.w #1,d7 .loop addq.w #1,fd_Time(a1) bmi.s .skip move.w fd_SpeedX(a1),d1 move.w fd_SpeedY(a1),d0 neg.w d1 neg.w d0 move.w d1,fd_SpeedX(a1) move.w d0,fd_SpeedY(a1) add.w d4,d0 add.w d5,d1 PUTMSG 30,<"Pos %d,%d %d">,d1,d0,fd_Time-2(a1) move.w d1,d2 move.b d0,-(sp) move.w (sp)+,d0 move.b d1,d0 lsr.w #3,d0 not.w d2 move.w fd_Time(a1),d3 lsr.w #2,d3 move.b (a2,d3.w),d3 move.w .table-2(pc,d3.w),d3 jmp .table(pc,d3.w) .skip lea fd_SIZEOF(a1),a1 dbra d7,.loop POPM moveq.l #0,d0 rts .table dc.w .set1-.table dc.w .set2-.table dc.w .set3-.table dc.w .set4-.table dc.w .set5-.table dc.w .set6-.table dc.w .set7-.table .set1 ; 1 bset d2,(a0,d0.w) bclr d2,1*(FAIRY_WIDTH/8)(a0,d0.w) bclr d2,2*(FAIRY_WIDTH/8)(a0,d0.w) bclr d2,3*(FAIRY_WIDTH/8)(a0,d0.w) bra.s .skip .set2 ; 2 bclr d2,(a0,d0.w) bset d2,1*(FAIRY_WIDTH/8)(a0,d0.w) bclr d2,2*(FAIRY_WIDTH/8)(a0,d0.w) bclr d2,3*(FAIRY_WIDTH/8)(a0,d0.w) bra.s .skip .set3 ; 8 bclr d2,(a0,d0.w) bclr d2,1*(FAIRY_WIDTH/8)(a0,d0.w) bclr d2,2*(FAIRY_WIDTH/8)(a0,d0.w) bset d2,3*(FAIRY_WIDTH/8)(a0,d0.w) bra.s .skip .set4 ; 11 bset d2,(a0,d0.w) bset d2,1*(FAIRY_WIDTH/8)(a0,d0.w) bclr d2,2*(FAIRY_WIDTH/8)(a0,d0.w) bset d2,3*(FAIRY_WIDTH/8)(a0,d0.w) bra.s .skip .set5 ; 12 bclr d2,(a0,d0.w) bclr d2,1*(FAIRY_WIDTH/8)(a0,d0.w) bset d2,2*(FAIRY_WIDTH/8)(a0,d0.w) bset d2,3*(FAIRY_WIDTH/8)(a0,d0.w) bra.s .skip .set6 ; 13 bset d2,(a0,d0.w) bclr d2,1*(FAIRY_WIDTH/8)(a0,d0.w) bset d2,2*(FAIRY_WIDTH/8)(a0,d0.w) bset d2,3*(FAIRY_WIDTH/8)(a0,d0.w) bra.s .skip .set7 ; 14 bclr d2,(a0,d0.w) bset d2,1*(FAIRY_WIDTH/8)(a0,d0.w) bset d2,2*(FAIRY_WIDTH/8)(a0,d0.w) bset d2,3*(FAIRY_WIDTH/8)(a0,d0.w) bra.s .skip ;-------------------------------------------------------------------- kds_draw_wand_blast: lea pd_FrontDust(a6),a0 ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_draw,(a4)+ move.l a0,(a4)+ move.w #NUM_FRONT_DUST,(a4)+ rts .bq_draw PUSHM a2/d1-d7 move.l (a0)+,a1 move.w (a0)+,d7 move.l pd_SpriteCompoBuffer(a6),a0 move.w pd_FairyPosY(a6),d4 move.w pd_FairyPosX(a6),d5 move.w #FAIRY_WIDTH,d6 ; or height lea kds_dust_burst(pc),a2 subq.w #1,d7 .loop subq.w #1,fd_Time(a1) bmi.s .skip movem.l fd_PosY(a1),d0-d3 add.l d2,d0 add.l d3,d1 movem.l d0-d1,fd_PosY(a1) swap d0 swap d1 sub.w d4,d0 sub.w d5,d1 PUTMSG 30,<"Pos %d,%d">,d1,d0 cmp.w d6,d1 bhs.s .skip cmp.w d6,d0 bhs.s .skip move.w d1,d2 move.b d0,-(sp) move.w (sp)+,d0 move.b d1,d0 lsr.w #3,d0 not.w d2 move.w fd_Time(a1),d3 move.b (a2,d3.w),d3 move.w .table-2(pc,d3.w),d3 jmp .table(pc,d3.w) .skip lea fd_SIZEOF(a1),a1 dbra d7,.loop POPM moveq.l #0,d0 rts .table dc.w .set1-.table dc.w .set2-.table dc.w .set3-.table dc.w .set4-.table dc.w .set5-.table dc.w .set6-.table dc.w .set7-.table .set1 ; 1 bset d2,(a0,d0.w) bclr d2,1*(FAIRY_WIDTH/8)(a0,d0.w) bclr d2,2*(FAIRY_WIDTH/8)(a0,d0.w) bclr d2,3*(FAIRY_WIDTH/8)(a0,d0.w) bra.s .skip .set2 ; 2 bclr d2,(a0,d0.w) bset d2,1*(FAIRY_WIDTH/8)(a0,d0.w) bclr d2,2*(FAIRY_WIDTH/8)(a0,d0.w) bclr d2,3*(FAIRY_WIDTH/8)(a0,d0.w) bra.s .skip .set3 ; 8 bclr d2,(a0,d0.w) bclr d2,1*(FAIRY_WIDTH/8)(a0,d0.w) bclr d2,2*(FAIRY_WIDTH/8)(a0,d0.w) bset d2,3*(FAIRY_WIDTH/8)(a0,d0.w) bra.s .skip .set4 ; 11 bset d2,(a0,d0.w) bset d2,1*(FAIRY_WIDTH/8)(a0,d0.w) bclr d2,2*(FAIRY_WIDTH/8)(a0,d0.w) bset d2,3*(FAIRY_WIDTH/8)(a0,d0.w) bra.s .skip .set5 ; 12 bclr d2,(a0,d0.w) bclr d2,1*(FAIRY_WIDTH/8)(a0,d0.w) bset d2,2*(FAIRY_WIDTH/8)(a0,d0.w) bset d2,3*(FAIRY_WIDTH/8)(a0,d0.w) bra.s .skip .set6 ; 13 bset d2,(a0,d0.w) bclr d2,1*(FAIRY_WIDTH/8)(a0,d0.w) bset d2,2*(FAIRY_WIDTH/8)(a0,d0.w) bset d2,3*(FAIRY_WIDTH/8)(a0,d0.w) bra.s .skip .set7 ; 14 bclr d2,(a0,d0.w) bset d2,1*(FAIRY_WIDTH/8)(a0,d0.w) bset d2,2*(FAIRY_WIDTH/8)(a0,d0.w) bset d2,3*(FAIRY_WIDTH/8)(a0,d0.w) bra.s .skip ;-------------------------------------------------------------------- kds_convert_compobuffer_to_sprites: PREP_ADD_TO_BLITTER_QUEUE a3 move.w #(16>>4)|(FAIRY_HEIGHT<<6),d3 move.l #.bq_generic_ad_with_all,d4 move.l #.bq_generic_ad,d5 move.l pd_SpriteCompoBuffer(a6),a2 move.l pd_CurrFairySprite(a6),a0 moveq.l #(FAIRY_WIDTH/16)-1,d7 .sprloop FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l d4,(a4)+ move.l (a0)+,d0 addq.l #4,d0 move.l a2,(a4)+ move.l d0,(a4)+ move.w d3,(a4)+ move.l d5,d4 lea (FAIRY_WIDTH/8)(a2),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l d4,(a4)+ addq.l #2,d0 move.l a1,(a4)+ move.l d0,(a4)+ move.w d3,(a4)+ lea (FAIRY_WIDTH/8)(a1),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l d4,(a4)+ move.l (a0)+,d0 addq.l #4,d0 move.l a1,(a4)+ move.l d0,(a4)+ move.w d3,(a4)+ lea (FAIRY_WIDTH/8)(a1),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l d4,(a4)+ addq.l #2,d0 move.l a1,(a4)+ move.l d0,(a4)+ move.w d3,(a4)+ addq.w #2,a2 dbra d7,.sprloop clr.l (a3) TERM_ADD_TO_BLITTER_QUEUE a3 rts .bq_generic_ad_with_all BLTHOGOFF BLTCON_SET AD,BLT_A,0,0 moveq.l #-1,d0 move.l d0,bltafwm(a5) move.l #(((FAIRY_WIDTH*FAIRY_PLANES-16)/8)<<16)|2,bltamod(a5) .bq_generic_ad lea bltapt(a5),a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_prepare_buffers: BLTHOGON BLTWAIT BLTCON_SET D,0,0,0 move.w #0,bltdmod(a5) move.l pd_DbBuffer(a6),bltdpt(a5) move.w #((KALEIDO_BUF_WIDTH)>>4)|((KALEIDO_HEIGHT*KALEIDO_PLANES)<<6),bltsize(a5) move.w #(KALEIDO_BUF_WIDTH/8)*KALEIDO_PLANES,d4 bsr kds_blitter_line_init ; line 1 -> 1: bp 1 ; line 2 -> 3: bp 1 & 2 ; line 3 -> 5: bp 1 & 3 moveq.l #0,d0 moveq.l #0,d1 moveq.l #(STENCIL_WIDTH/2)-1,d2 moveq.l #STENCIL_HEIGHT-1,d3 move.l pd_DbBuffer(a6),a0 PUSHM a0/d0-d4 lea 1*(STENCIL_WIDTH/8)(a0),a0 bsr kds_draw_blitter_normal_line POPM PUSHM a0/d0-d4 lea 2*(STENCIL_WIDTH/8)(a0),a0 bsr kds_draw_blitter_normal_line POPM PUSHM a0/d0-d4 lea 3*(STENCIL_WIDTH/8)(a0),a0 bsr kds_draw_blitter_normal_line POPM PUSHM a0/d0-d4 lea 2*(STENCIL_WIDTH/8)+(KALEIDO_BUF_WIDTH/8)(a0),a0 bsr kds_draw_blitter_normal_line POPM PUSHM a0/d0-d4 lea 3*(STENCIL_WIDTH/8)+2*(KALEIDO_BUF_WIDTH/8)(a0),a0 bsr kds_draw_blitter_normal_line POPM PUSHM a0/d0-d4 move.l pd_BonusGridPtr(a6),a0 lea (STENCIL_WIDTH/2)/8(a0),a0 bsr kds_draw_blitter_normal_line POPM ; line 1 -> 2: bp 2 ; line 2 -> 4: bp 3 ; line 3 -> 6: bp 2 & 3 moveq.l #STENCIL_WIDTH-1,d0 moveq.l #0,d1 moveq.l #(STENCIL_WIDTH/2),d2 moveq.l #STENCIL_HEIGHT-1,d3 PUSHM a0/d0-d4 lea 1*(STENCIL_WIDTH/8)+(KALEIDO_BUF_WIDTH/8)(a0),a0 bsr kds_draw_blitter_normal_line POPM PUSHM a0/d0-d4 lea 2*(STENCIL_WIDTH/8)+2*(KALEIDO_BUF_WIDTH/8)(a0),a0 bsr kds_draw_blitter_normal_line POPM PUSHM a0/d0-d4 lea 3*(STENCIL_WIDTH/8)+(KALEIDO_BUF_WIDTH/8)(a0),a0 bsr kds_draw_blitter_normal_line POPM PUSHM a0/d0-d4 lea 3*(STENCIL_WIDTH/8)+2*(KALEIDO_BUF_WIDTH/8)(a0),a0 bsr kds_draw_blitter_normal_line POPM PUSHM a0/d0-d4 move.l pd_BonusGridPtr(a6),a0 lea -(STENCIL_WIDTH/2)/8(a0),a0 bsr kds_draw_blitter_normal_line POPM PUSHM a0/d0-d4 move.l pd_BonusGridPtr(a6),a0 lea (STENCIL_WIDTH/2)/8(a0),a0 bsr kds_draw_blitter_normal_line POPM moveq.l #-1,d2 move.w #((16)>>4)|((KALEIDO_HEIGHT)<<6),d3 BLTHOGON BLTWAIT BLTCON_SET AD,BLT_A|BLT_C,0,0 move.l d2,bltafwm(a5) ; also fills bltalwm move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-16)/8,bltamod(a5) move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-16)/8,bltdmod(a5) move.w #$8000,bltcdat(a5) move.l a0,bltapt(a5) move.l a0,bltdpt(a5) move.w d3,bltsize(a5) lea (KALEIDO_BUF_WIDTH/8)(a0),a1 BLTHOGON BLTWAIT move.l a1,bltapt(a5) move.l a1,bltdpt(a5) move.w d3,bltsize(a5) lea 2*(KALEIDO_BUF_WIDTH/8)(a0),a1 BLTHOGON BLTWAIT move.l a1,bltapt(a5) move.l a1,bltdpt(a5) move.w d3,bltsize(a5) lea (KALEIDO_WIDTH/8)(a0),a1 BLTHOGON BLTWAIT BLTCON_SET AD,BLT_A,0,0 move.w #(KALEIDO_WIDTH/8),bltamod(a5) move.w #(KALEIDO_WIDTH/8),bltdmod(a5) move.l a0,bltapt(a5) move.l a1,bltdpt(a5) move.w #((KALEIDO_WIDTH)>>4)|((KALEIDO_HEIGHT*KALEIDO_PLANES)<<6),bltsize(a5) rts ;-------------------------------------------------------------------- kds_prepare_sprite_masks: move.l pd_FairyAnim1(a6),a0 move.l pd_FairyMask1(a6),a1 moveq.l #BODY_WIDTH,d0 moveq.l #BODY_HEIGHT,d1 bsr .makemask move.l pd_FairyAnim2(a6),a0 move.l pd_FairyMask2(a6),a1 moveq.l #BODY_WIDTH,d0 moveq.l #BODY_HEIGHT,d1 bsr .makemask move.l pd_FairyAnim3(a6),a0 move.l pd_FairyMask3(a6),a1 moveq.l #BODY_WIDTH,d0 moveq.l #BODY_HEIGHT,d1 bsr .makemask move.l pd_PuffAnim1(a6),a0 move.l pd_PuffMask1(a6),a1 moveq.l #PUFF_WIDTH,d0 moveq.l #PUFF_HEIGHT,d1 bsr .makemask move.l pd_PuffAnim2(a6),a0 move.l pd_PuffMask2(a6),a1 moveq.l #PUFF_WIDTH,d0 moveq.l #PUFF_HEIGHT,d1 bsr .makemask move.l pd_PuffAnim3(a6),a0 move.l pd_PuffMask3(a6),a1 moveq.l #PUFF_WIDTH,d0 moveq.l #PUFF_HEIGHT,d1 bsr .makemask move.l pd_PuffAnim4(a6),a0 move.l pd_PuffMask4(a6),a1 moveq.l #PUFF_WIDTH,d0 moveq.l #PUFF_HEIGHT,d1 .makemask lsr.w #3,d0 move.w d0,d3 lea (a0,d0.w),a2 lea (a2,d0.w),a3 lea (a3,d0.w),a4 lsr.w #1,d0 lsl.w #6,d1 add.w d0,d1 move.w d3,d2 add.w d3,d3 add.w d2,d3 ; for four bitplanes, so modulo is three times add.w d0,d0 moveq.l #-1,d2 BLTHOGON BLTWAIT BLTCON_SET ABCD,BLT_A|BLT_B|BLT_C,0,0 move.l d2,bltafwm(a5) move.w d3,bltamod(a5) move.w d3,bltbmod(a5) move.w d3,bltcmod(a5) move.w d3,bltdmod(a5) move.l a0,bltapt(a5) move.l a2,bltbpt(a5) move.l a3,bltcpt(a5) move.l a1,bltdpt(a5) move.w d1,bltsize(a5) BLTWAIT BLTCON0_SET ACD,BLT_A|BLT_C,0 move.l a4,bltapt(a5) move.l a1,bltcpt(a5) move.l a1,bltdpt(a5) move.w d1,bltsize(a5) lea (a1,d0.w),a0 BLTWAIT BLTCON0_SET AD,BLT_A,0 move.l a1,bltapt(a5) move.l a0,bltdpt(a5) move.w d1,bltsize(a5) REPT 2 lea (a0,d0.w),a0 BLTWAIT BLTCON0_SET AD,BLT_A,0 move.l a1,bltapt(a5) move.l a0,bltdpt(a5) move.w d1,bltsize(a5) ENDR rts ;-------------------------------------------------------------------- kds_prepare_intro_buffers: BLTHOGON BLTWAIT BLTCON_SET D,0,0,0 move.w #0,bltdmod(a5) move.l pd_DbBuffer(a6),bltdpt(a5) move.w #((KALEIDO_BUF_WIDTH)>>4)|((KALEIDO_HEIGHT*KALEIDO_PLANES)<<6),bltsize(a5) move.w #(KALEIDO_BUF_WIDTH/8)*KALEIDO_PLANES,d4 bsr kds_blitter_line_init ; line 1 -> 1: bp 1 ; line 2 -> 3: bp 1 & 2 ; line 3 -> 5: bp 1 & 3 moveq.l #0,d0 moveq.l #0,d1 moveq.l #(STENCIL_WIDTH/2)-1,d2 moveq.l #STENCIL_HEIGHT-1,d3 move.l pd_DbBuffer(a6),a0 PUSHM a0/d0-d4 lea (128+(STENCIL_WIDTH/2))/8+(KALEIDO_BUF_WIDTH/8)(a0),a0 bsr kds_draw_blitter_normal_line POPM ; line 1 -> 2: bp 2 ; line 2 -> 4: bp 3 ; line 3 -> 6: bp 2 & 3 moveq.l #STENCIL_WIDTH-1,d0 moveq.l #0,d1 moveq.l #(STENCIL_WIDTH/2),d2 moveq.l #STENCIL_HEIGHT-1,d3 PUSHM a0/d0-d4 lea ((128-(STENCIL_WIDTH/2))/8)(a0),a0 bsr kds_draw_blitter_normal_line POPM PUSHM a0/d0-d4 lea ((128+(STENCIL_WIDTH/2))/8)(a0),a0 bsr kds_draw_blitter_normal_line POPM PUSHM a0/d0-d4 lea ((128+(STENCIL_WIDTH/2))/8)+1*(KALEIDO_BUF_WIDTH/8)(a0),a0 bsr kds_draw_blitter_normal_line POPM lea (KALEIDO_WIDTH/8)(a0),a1 BLTHOGON BLTWAIT BLTCON_SET AD,BLT_A,0,0 move.w #(KALEIDO_WIDTH/8),bltamod(a5) move.w #(KALEIDO_WIDTH/8),bltdmod(a5) move.l a0,bltapt(a5) move.l a1,bltdpt(a5) move.w #((KALEIDO_WIDTH)>>4)|((KALEIDO_HEIGHT*KALEIDO_PLANES)<<6),bltsize(a5) rts ;-------------------------------------------------------------------- CALC_STENCIL_POS MACRO move.w 2(a2,d7.w),d0 muls d6,d0 swap d0 move.w (a2,d7.w),d1 muls d6,d1 swap d1 PUTMSG 30,<"\1 %d,%d">,d0,d1 add.w #(KDSPAT_WIDTH/2)+(\2),d0 ble.s .clipxleft\@ cmp.w #KDSPAT_WIDTH-STENCIL_WIDTH-1,d0 ble.s .noclipx\@ move.w #KDSPAT_WIDTH-STENCIL_WIDTH-1,d0 bra.s .noclipx\@ .clipxleft\@ moveq.l #1,d0 .noclipx\@ ext.l d0 add.w #(KDSPAT_HEIGHT/2)+(\3),d1 ble.s .clipytop\@ cmp.w #KDSPAT_HEIGHT-STENCIL_HEIGHT-1,d1 ble.s .noclipy\@ move.w #KDSPAT_HEIGHT-STENCIL_HEIGHT-1,d1 bra.s .noclipy\@ .clipytop\@ moveq.l #1,d1 .noclipy\@ ext.l d1 lsl.l #8,d1 ; * KDSPAT_WIDTH move.l d1,d2 add.l d2,d2 ; *2 add.l d1,d2 ; *3 add.l d2,d2 ; *6 move.b d0,d1 add.l d0,d2 add.l d1,d1 move.l d1,pd_StencilTCOffset\1(a6) subq.w #1,d2 asr.l #4,d2 add.l d2,d2 IFNE \4 add.l #(\4)*KDSPAT_WIDTH*KALEIDO_PLANES/8,d2 ENDC move.l d2,pd_StencilOffset\1(a6) moveq.l #15,d2 neg.w d0 and.w d0,d2 ror.w #4,d2 move.w d2,pd_StencilShift\1(a6) ENDM kds_calc_stencil_positions1_std: move.l pd_BigSinCosTable(a6),a2 bsr kds_calc_mouse tst.w pd_InteractiveMode(a6) beq.s .automode move.w pd_Distance1(a6),d6 move.b pd_DeltaMouseY(a6),d1 ext.w d1 asr.w #2,d1 add.w d1,d6 bpl.s .nolimit0 moveq.l #0,d6 .nolimit0 cmp.w #1200/4,d6 bls.s .nolimit move.w #1200/4,d6 .nolimit move.w d6,pd_Distance1(a6) move.b pd_DeltaMouseX(a6),d0 ext.w d0 move.w pd_Angle1(a6),d7 add.w d0,d7 and.w #2047*4,d7 move.w d7,pd_Angle1(a6) clr.w pd_DeltaMouseY(a6) PUTMSG 30,<"%d (%d), %d (%d)">,d6,d1,d7,d0 bra.s .mancont .automode move.w pd_PosBaseCounter(a6),d6 add.w #18,d6 move.w d6,pd_PosBaseCounter(a6) and.w #2047*4,d6 move.w (a2,d6.w),d6 muls #1080,d6 swap d6 move.w d6,pd_Distance1(a6) move.w pd_Angle1(a6),d7 add.w #15*4,d7 and.w #2047*4,d7 move.w d7,pd_Angle1(a6) .mancont ; first angle, from bottom/mid to top/left corner CALC_STENCIL_POS 1,-(STENCIL_WIDTH/2),-STENCIL_HEIGHT,1*KDSPAT_HEIGHT ; second angle, from bottom/left to top/left corner move.w #(((-120)*2048+180)/360)*4,d7 sub.w pd_Angle1(a6),d7 and.w #2047*4,d7 CALC_STENCIL_POS 6,0,-STENCIL_HEIGHT,2*KDSPAT_HEIGHT ; third angle, from bottom/right to top/left corner move.w #(((120)*2048+180)/360)*4,d7 sub.w pd_Angle1(a6),d7 and.w #2047*4,d7 CALC_STENCIL_POS 8,-STENCIL_WIDTH,-STENCIL_HEIGHT,0*KDSPAT_HEIGHT rts kds_calc_stencil_positions1_slow: move.l pd_BigSinCosTable(a6),a2 move.w pd_PosBaseCounter(a6),d6 add.w #9,d6 move.w d6,pd_PosBaseCounter(a6) and.w #2047*4,d6 move.w (a2,d6.w),d6 muls #1080,d6 swap d6 move.w d6,pd_Distance1(a6) ;and.w #$ff,d6 move.w pd_Angle1(a6),d7 ;move.w #2*256*4,d7 sub.w #6*4,d7 and.w #2047*4,d7 move.w d7,pd_Angle1(a6) ; first angle, from bottom/mid to top/left corner CALC_STENCIL_POS 1,-(STENCIL_WIDTH/2),-STENCIL_HEIGHT,1*KDSPAT_HEIGHT ; second angle, from bottom/left to top/left corner move.w #(((-120)*2048+180)/360)*4,d7 sub.w pd_Angle1(a6),d7 and.w #2047*4,d7 CALC_STENCIL_POS 6,0,-STENCIL_HEIGHT,2*KDSPAT_HEIGHT ; third angle, from bottom/right to top/left corner move.w #(((120)*2048+180)/360)*4,d7 sub.w pd_Angle1(a6),d7 and.w #2047*4,d7 CALC_STENCIL_POS 8,-STENCIL_WIDTH,-STENCIL_HEIGHT,0*KDSPAT_HEIGHT rts kds_calc_stencil_positions2_std: move.w pd_Distance1(a6),d6 move.w pd_Angle1(a6),d7 ; first angle, from top/mid to top/left corner CALC_STENCIL_POS 7,-(STENCIL_WIDTH/2),0,1*KDSPAT_HEIGHT ; second angle, from top/right to top/left corner move.w #(((120)*2048+180)/360)*4,d7 sub.w pd_Angle1(a6),d7 and.w #2047*4,d7 CALC_STENCIL_POS 2,-STENCIL_WIDTH,0,0*KDSPAT_HEIGHT ; third angle, from top/left to top/left corner move.w #(((-120)*2048+180)/360)*4,d7 sub.w pd_Angle1(a6),d7 and.w #2047*4,d7 CALC_STENCIL_POS 3,0,0,2*KDSPAT_HEIGHT rts ;-------------------------------------------------------------------- kds_calc_mouse: move.w joy0dat(a5),d1 move.w pd_OldMouseY(a6),d0 move.w d1,pd_OldMouseY(a6) sub.w d0,d1 add.w d1,pd_DeltaMouseY(a6) cmp.b #32,d1 blt.s .skip st pd_InteractiveMode(a6) .skip rts ;-------------------------------------------------------------------- kds_calc_stencil_fixup_lines_transition: move.w pd_TransitionHeight(a6),d5 bne.s .cont rts .cont PREP_ADD_TO_BLITTER_QUEUE a3 move.l #.bq_ad_copy,d6 move.l pd_CurrTCLineColorsPtr(a6),a2 ; first hexagon, first line, color 6 lea 0*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_TrueColorImage1(a6),a0 add.l pd_StencilTCOffset8(a6),a0 lea -(STENCIL_WIDTH/2)*2(a0),a0 jsr pd_SMCLine2(a6) ; first hexagon, second line, color 1 lea 1*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_TrueColorImage2(a6),a0 add.l pd_StencilTCOffset1(a6),a0 jsr pd_SMCLine1(a6) ; first hexagon, third line, color 2 lea 2*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_TrueColorImage3(a6),a0 add.l pd_StencilTCOffset6(a6),a0 lea -(STENCIL_WIDTH/2)*2(a0),a0 jsr pd_SMCLine2(a6) ; now copy colors to copperlist for each mirror move.w d5,d3 cmp.w #STENCIL_HEIGHT,d3 blt.s .nomax1 moveq.l #STENCIL_HEIGHT,d3 .nomax1 lsl.w #6,d3 addq.w #1,d3 move.l pd_CurrCopListPtr(a6),a1 adda.w pd_CopperLinesFixupOffset1(a6),a1 move.l a1,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(0+0*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_ad_copy_all,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ REPT 2 addq.l #4,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(REPTN+1+0*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l d6,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ ENDR move.w d5,d3 sub.w #STENCIL_HEIGHT,d3 ble.s .skip ; --------------------- ; mirror 1 lsl.w #6,d3 addq.w #1,d3 move.l pd_CurrCopListPtr(a6),a1 adda.w pd_CopperLinesFixupOffset2(a6),a1 move.l a1,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(0+1*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_ad_copy_backwards,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ REPT 2 addq.l #4,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(REPTN+1+1*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l d6,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ ENDR .skip clr.l (a3) TERM_ADD_TO_BLITTER_QUEUE a3 rts .bq_ad_copy_all move.l #(BLTEN_AD+BLT_A)<<16,bltcon0(a5) moveq.l #-1,d0 move.l d0,bltafwm(a5) ; bltafwm move.l #(0<<16)|((COP_INST_PER_INTRO_LINE*4)-2),bltamod(a5) ; and bltdmod .bq_ad_copy lea bltapt(a5),a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts .bq_ad_copy_backwards move.l #(BLTEN_AD+BLT_A)<<16,bltcon0(a5) moveq.l #-1,d0 move.l d0,bltafwm(a5) ; bltafwm move.l #(-4<<16)|((4*4)-2),bltamod(a5) ; and bltdmod lea bltapt(a5),a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_calc_stencil_fixup_lines_pre_main: PREP_ADD_TO_BLITTER_QUEUE a3 move.l #.bq_ad_copy,d6 move.w #(1|(STENCIL_HEIGHT<<6)),d3 move.l pd_CurrTCLineColorsPtr(a6),a2 ; first hexagon, first line, color 6 lea 0*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_TrueColorImage1(a6),a0 add.l pd_StencilTCOffset8(a6),a0 lea -(STENCIL_WIDTH/2)*2(a0),a0 jsr pd_SMCLine2(a6) ; first hexagon, second line, color 1 lea 1*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_TrueColorImage2(a6),a0 add.l pd_StencilTCOffset1(a6),a0 jsr pd_SMCLine1(a6) ; first hexagon, third line, color 2 lea 2*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_TrueColorImage3(a6),a0 add.l pd_StencilTCOffset6(a6),a0 lea -(STENCIL_WIDTH/2)*2(a0),a0 jsr pd_SMCLine2(a6) ; second hexagon, first line, color 3 lea 3*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_TrueColorImage1(a6),a0 add.l pd_StencilTCOffset2(a6),a0 jsr pd_SMCLineUp1(a6) ; second hexagon, second line, color 4 lea 4*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_TrueColorImage2(a6),a0 add.l pd_StencilTCOffset7(a6),a0 lea -(STENCIL_WIDTH/2)*2(a0),a0 jsr pd_SMCLineUp2(a6) ; second hexagon, border line, color 7 lea 5*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_TrueColorImage2(a6),a0 add.l pd_StencilTCOffset7(a6),a0 jsr pd_SMCLineUp3(a6) ; second hexagon, third line, color 5 lea 6*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_TrueColorImage3(a6),a0 add.l pd_StencilTCOffset3(a6),a0 jsr pd_SMCLineUp1(a6) ; now copy colors to copperlist for each mirror move.l pd_CurrCopListPtr(a6),a1 adda.w pd_CopperLinesFixupOffset1(a6),a1 move.l a1,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(0+0*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_ad_copy_all,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ REPT LCOL_NUM-4 addq.l #4,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(REPTN+1+0*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l d6,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ ENDR ; --------------------- ; mirror 1 move.w #(1|((STENCIL_HEIGHT-1)<<6)),d3 move.l pd_CurrCopListPtr(a6),a1 adda.w pd_CopperLinesFixupOffset2(a6),a1 move.l a1,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(0+1*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_ad_copy_backwards,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ REPT LCOL_NUM-4 addq.l #4,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(REPTN+1+1*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l d6,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ ENDR ; mirror 2 move.l pd_CurrCopListPtr(a6),a1 adda.w pd_CopperLinesFixupOffset3(a6),a1 move.l a1,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(0+2*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_ad_copy_all,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ REPT LCOL_NUM-4 addq.l #4,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(REPTN+1+2*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l d6,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ ENDR ; mirror 3 move.w #(1|((LAST_SLICE_HEIGHT)<<6)),d3 move.l pd_CurrCopListPtr(a6),a1 adda.w pd_CopperLinesFixupOffset4(a6),a1 move.l a1,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(0+3*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_ad_copy_backwards,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ REPT LCOL_NUM-4 addq.l #4,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(REPTN+1+3*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l d6,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ ENDR clr.l (a3) TERM_ADD_TO_BLITTER_QUEUE a3 rts .bq_ad_copy_all move.l #(BLTEN_AD+BLT_A)<<16,bltcon0(a5) moveq.l #-1,d0 move.l d0,bltafwm(a5) ; bltafwm move.l #(0<<16)|((COP_INST_PER_PMAIN_LINE*4)-2),bltamod(a5) ; and bltdmod .bq_ad_copy lea bltapt(a5),a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts .bq_ad_copy_backwards move.l #(BLTEN_AD+BLT_A)<<16,bltcon0(a5) moveq.l #-1,d0 move.l d0,bltafwm(a5) ; bltafwm move.l #(-4<<16)|((COP_INST_PER_PMAIN_LINE*4)-2),bltamod(a5) ; and bltdmod lea bltapt(a5),a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_calc_stencil_fixup_lines_generic: PREP_ADD_TO_BLITTER_QUEUE a3 move.l #.bq_ad_copy,d6 move.w #(1|(STENCIL_HEIGHT<<6)),d3 move.l pd_CurrTCLineColorsPtr(a6),a2 ; first hexagon, first line, color 6 lea 0*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_PatternInfo+hp_Col2Routine(a6),a0 jsr (a0) move.l pd_TrueColorImage1(a6),a0 add.l pd_StencilTCOffset8(a6),a0 lea -(STENCIL_WIDTH/2)*2(a0),a0 jsr pd_SMCLine2(a6) ; first hexagon, second line, color 1 lea 1*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_PatternInfo+hp_Col2Routine(a6),a0 jsr (a0) move.l pd_TrueColorImage2(a6),a0 add.l pd_StencilTCOffset1(a6),a0 jsr pd_SMCLine1(a6) ; first hexagon, third line, color 2 lea 2*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_PatternInfo+hp_Col2Routine(a6),a0 jsr (a0) move.l pd_TrueColorImage3(a6),a0 add.l pd_StencilTCOffset6(a6),a0 lea -(STENCIL_WIDTH/2)*2(a0),a0 jsr pd_SMCLine2(a6) ; second hexagon, first line, color 3 lea 3*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_PatternInfo+hp_Col3Routine(a6),a0 jsr (a0) move.l pd_TrueColorImage1(a6),a0 add.l pd_StencilTCOffset2(a6),a0 jsr pd_SMCLineUp1(a6) ; second hexagon, second line, color 4 lea 4*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_PatternInfo+hp_Col3Routine(a6),a0 jsr (a0) move.l pd_TrueColorImage2(a6),a0 add.l pd_StencilTCOffset7(a6),a0 lea -(STENCIL_WIDTH/2)*2(a0),a0 jsr pd_SMCLineUp2(a6) ; second hexagon, border line, color 7 lea 5*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_PatternInfo+hp_Col3Routine(a6),a0 jsr (a0) move.l pd_TrueColorImage2(a6),a0 add.l pd_StencilTCOffset7(a6),a0 jsr pd_SMCLineUp3(a6) ; second hexagon, third line, color 5 lea 6*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_PatternInfo+hp_Col3Routine(a6),a0 jsr (a0) move.l pd_TrueColorImage3(a6),a0 add.l pd_StencilTCOffset3(a6),a0 jsr pd_SMCLineUp1(a6) ; now copy colors to copperlist for each mirror move.l pd_CurrCopListPtr(a6),a1 adda.w pd_CopperLinesFixupOffset1(a6),a1 move.l a1,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(0+0*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_ad_copy_all,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ REPT LCOL_NUM-4 addq.l #4,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(REPTN+1+0*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l d6,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ ENDR ; --------------------- ; mirror 1 move.w #(1|((STENCIL_HEIGHT-1)<<6)),d3 move.l pd_CurrCopListPtr(a6),a1 adda.w pd_CopperLinesFixupOffset2(a6),a1 move.l a1,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(0+1*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_ad_copy_backwards,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ REPT LCOL_NUM-4 addq.l #4,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(REPTN+1+1*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l d6,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ ENDR ; mirror 2 move.l pd_CurrCopListPtr(a6),a1 adda.w pd_CopperLinesFixupOffset3(a6),a1 move.l a1,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(0+2*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_ad_copy_all,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ REPT LCOL_NUM-4 addq.l #4,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(REPTN+1+2*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l d6,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ ENDR ; mirror 3 move.w #(1|((LAST_SLICE_HEIGHT)<<6)),d3 move.l pd_CurrCopListPtr(a6),a1 adda.w pd_CopperLinesFixupOffset4(a6),a1 move.l a1,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(0+3*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_ad_copy_backwards,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ REPT LCOL_NUM-4 addq.l #4,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(REPTN+1+3*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l d6,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ ENDR clr.l (a3) TERM_ADD_TO_BLITTER_QUEUE a3 rts .bq_ad_copy_all move.l #(BLTEN_AD+BLT_A)<<16,bltcon0(a5) moveq.l #-1,d0 move.l d0,bltafwm(a5) ; bltafwm move.l #(0<<16)|((COP_INST_PER_LINE*4)-2),bltamod(a5) ; and bltdmod .bq_ad_copy lea bltapt(a5),a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts .bq_ad_copy_backwards move.l #(BLTEN_AD+BLT_A)<<16,bltcon0(a5) moveq.l #-1,d0 move.l d0,bltafwm(a5) ; bltafwm move.l #(-4<<16)|((COP_INST_PER_LINE*4)-2),bltamod(a5) ; and bltdmod lea bltapt(a5),a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_calc_stencil_fixup_lines_bonus: PREP_ADD_TO_BLITTER_QUEUE a3 move.l #.bq_ad_copy,d6 move.w #(1|(STENCIL_HEIGHT<<6)),d3 move.l pd_CurrTCLineColorsPtr(a6),a2 ; first hexagon, first line, color 6 lea 0*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_PatternInfo+hp_Col2Routine(a6),a0 jsr (a0) move.l pd_TrueColorImage1(a6),a0 add.l pd_StencilTCOffset8(a6),a0 lea -(STENCIL_WIDTH/2)*2(a0),a0 jsr pd_SMCLine2(a6) ; first hexagon, second line, color 1 lea 1*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_PatternInfo+hp_Col2Routine(a6),a0 jsr (a0) move.l pd_TrueColorImage2(a6),a0 add.l pd_StencilTCOffset1(a6),a0 jsr pd_SMCLine1(a6) ; first hexagon, third line, color 2 lea 2*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_PatternInfo+hp_Col2Routine(a6),a0 jsr (a0) move.l pd_TrueColorImage3(a6),a0 add.l pd_StencilTCOffset6(a6),a0 lea -(STENCIL_WIDTH/2)*2(a0),a0 jsr pd_SMCLine2(a6) ; second hexagon, first line, color 3 lea 3*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_PatternInfo+hp_Col3Routine(a6),a0 jsr (a0) move.l pd_TrueColorImage1(a6),a0 add.l pd_StencilTCOffset2(a6),a0 jsr pd_SMCLineUp1(a6) ; second hexagon, second line, color 4 lea 4*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_PatternInfo+hp_Col3Routine(a6),a0 jsr (a0) move.l pd_TrueColorImage2(a6),a0 add.l pd_StencilTCOffset7(a6),a0 lea -(STENCIL_WIDTH/2)*2(a0),a0 jsr pd_SMCLineUp2(a6) ; second hexagon, border line, color 7 lea 5*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_PatternInfo+hp_Col3Routine(a6),a0 jsr (a0) move.l pd_TrueColorImage2(a6),a0 add.l pd_StencilTCOffset7(a6),a0 jsr pd_SMCLineUp3(a6) ; second hexagon, third line, color 5 lea 6*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_PatternInfo+hp_Col3Routine(a6),a0 jsr (a0) move.l pd_TrueColorImage3(a6),a0 add.l pd_StencilTCOffset3(a6),a0 jsr pd_SMCLineUp1(a6) IF 0 ; third hexagon, first line, color 6 lea 7*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_PatternInfo+hp_Col2Routine(a6),a0 jsr (a0) move.l pd_TrueColorImage1(a6),a0 add.l pd_StencilTCOffset8(a6),a0 lea -(STENCIL_WIDTH/2)*2(a0),a0 jsr pd_SMCLine2(a6) ; third hexagon, second line, color 9 lea 8*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_PatternInfo+hp_Col2Routine(a6),a0 jsr (a0) move.l pd_TrueColorImage2(a6),a0 add.l pd_StencilTCOffset1(a6),a0 jsr pd_SMCLine1(a6) ; third hexagon, third line, color 10 lea 9*4*LCOLBUF_HEIGHT*2(a2),a1 move.l pd_PatternInfo+hp_Col2Routine(a6),a0 jsr (a0) move.l pd_TrueColorImage3(a6),a0 add.l pd_StencilTCOffset6(a6),a0 lea -(STENCIL_WIDTH/2)*2(a0),a0 jsr pd_SMCLine2(a6) ENDC ; now copy colors to copperlist for each mirror move.l pd_CurrCopListPtr(a6),a1 adda.w pd_CopperLinesFixupOffset1(a6),a1 move.l a1,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(0+0*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_ad_copy_all,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ REPT LCOL_NUM-1 addq.l #4,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(REPTN+1+0*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l d6,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ ENDR ; --------------------- ; mirror 1 move.w #(1|((STENCIL_HEIGHT-1)<<6)),d3 move.l pd_CurrCopListPtr(a6),a1 adda.w pd_CopperLinesFixupOffset2(a6),a1 move.l a1,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(0+1*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_ad_copy_backwards,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ REPT LCOL_NUM-1 addq.l #4,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(REPTN+1+1*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l d6,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ ENDR ; mirror 2 move.l pd_CurrCopListPtr(a6),a1 adda.w pd_CopperLinesFixupOffset3(a6),a1 move.l a1,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(0+2*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_ad_copy_all,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ REPT LCOL_NUM-1 addq.l #4,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(REPTN+1+2*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l d6,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ ENDR ; mirror 3 move.w #(1|((LAST_SLICE_HEIGHT)<<6)),d3 move.l pd_CurrCopListPtr(a6),a1 adda.w pd_CopperLinesFixupOffset4(a6),a1 move.l a1,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(0+3*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_ad_copy_backwards,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ REPT LCOL_NUM-1 addq.l #4,d4 move.l a2,a1 add.w pd_PatternInfo+hp_ColOffs+(REPTN+1+3*LCOL_NUM)*2(a6),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l d6,(a4)+ move.l a1,(a4)+ move.l d4,(a4)+ move.w d3,(a4)+ ENDR clr.l (a3) TERM_ADD_TO_BLITTER_QUEUE a3 rts .bq_ad_copy_all move.l #(BLTEN_AD+BLT_A)<<16,bltcon0(a5) moveq.l #-1,d0 move.l d0,bltafwm(a5) ; bltafwm move.l #(0<<16)|((COP_INST_PER_LINE*4)-2),bltamod(a5) ; and bltdmod .bq_ad_copy lea bltapt(a5),a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts .bq_ad_copy_backwards move.l #(BLTEN_AD+BLT_A)<<16,bltcon0(a5) moveq.l #-1,d0 move.l d0,bltafwm(a5) ; bltafwm move.l #(-4<<16)|((COP_INST_PER_LINE*4)-2),bltamod(a5) ; and bltdmod lea bltapt(a5),a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_swap_rgb_to_bgr: ; R>>8|0G0 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_acd_rgb_to_00r_or_0g0,(a4)+ move.l a1,(a4)+ move.l a1,(a4)+ lea 3*LCOLBUF_HEIGHT*2(a1),a1 move.l a1,(a4)+ move.w d3,(a4)+ ; B<<8|0GR FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_acd_0gr_merge_with_b00,(a4)+ lea STENCIL_HEIGHT*2-2(a1),a1 move.l a1,(a4)+ lea -3*LCOLBUF_HEIGHT*2(a1),a1 move.l a1,(a4)+ move.l a1,(a4)+ move.w d3,(a4)+ lea -STENCIL_HEIGHT*2+2(a1),a1 rts .bq_acd_rgb_to_00r_or_0g0 move.l #((BLTEN_ACD+((BLT_A|(BLT_B&BLT_C))))<<16)|(8<<28),bltcon0(a5) move.l #$0f000f00,bltafwm(a5) ; bltafwm moveq.l #0,d0 move.l d0,bltamod(a5) ; and bltdmod move.w d0,bltcmod(a5) move.w #$0f0,bltbdat(a5) lea bltcpt(a5),a1 move.l (a0)+,(a1)+ ; bltcpt addq.l #4,a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts .bq_acd_0gr_merge_with_b00 move.l #((BLTEN_ACD+(((BLT_A|BLT_C)))&$ff)<<16)|(8<<28)|BLTCON1F_DESC,bltcon0(a5) lea bltafwm(a5),a1 move.l #$000f000f,(a1)+ ; bltafwm move.l (a0)+,(a1)+ ; bltcpt addq.l #4,a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_swap_rgb_to_bgr_and_gbr: FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_acd_gbr,(a4)+ lea STENCIL_HEIGHT*2(a1),a1 move.l a1,(a4)+ subq.w #2,a1 move.l a1,(a4)+ lea 1*LCOLBUF_HEIGHT*2+2(a1),a1 move.l a1,(a4)+ add.w #1<<6,d3 move.w d3,(a4)+ sub.w #1<<6,d3 lea -(1*LCOLBUF_HEIGHT*2+STENCIL_HEIGHT*2)(a1),a1 bra kds_swap_rgb_to_bgr .bq_acd_gbr lea bltcon0(a5),a1 move.l #((BLTEN_ABD+((BLT_A|(BLT_B&BLT_C))))<<16)|(8<<28)|(4<<12)|BLTCON1F_DESC,(a1)+ move.l #$0f000f00,(a1)+ ; bltafwm/bltafwm moveq.l #0,d0 move.l d0,bltamod(a5) ; and bltdmod move.w d0,bltbmod(a5) move.w #$ff0,bltcdat(a5) addq.l #4,a1 move.l (a0)+,(a1)+ ; bltbpt move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_swap_rgb_to_rbg: ; G>>4|R00 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_acd_rgb_to_00g_or_r00,(a4)+ move.l a1,(a4)+ move.l a1,(a4)+ lea 3*LCOLBUF_HEIGHT*2(a1),a1 move.l a1,(a4)+ move.w d3,(a4)+ ; B<<4|R0G FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_acd_r0g_merge_with_0b0,(a4)+ lea STENCIL_HEIGHT*2-2(a1),a1 move.l a1,(a4)+ lea -3*LCOLBUF_HEIGHT*2(a1),a1 move.l a1,(a4)+ lea 1*LCOLBUF_HEIGHT*2(a1),a1 move.l a1,(a4)+ move.w d3,(a4)+ lea -(1*LCOLBUF_HEIGHT*2+STENCIL_HEIGHT*2)+2(a1),a1 rts .bq_acd_rgb_to_00g_or_r00 lea bltcon0(a5),a1 move.l #((BLTEN_ACD+((BLT_A|(BLT_B&BLT_C))))<<16)|(4<<28),(a1)+ move.l #$00f000f0,(a1)+ ; bltafwm/bltafwm moveq.l #0,d0 move.l d0,bltamod(a5) ; and bltdmod move.w d0,bltcmod(a5) move.w #$f00,bltbdat(a5) move.l (a0)+,(a1)+ ; bltcpt addq.l #4,a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts .bq_acd_r0g_merge_with_0b0 lea bltcon0(a5),a1 move.l #((BLTEN_ACD+(((BLT_A|BLT_C)))&$ff)<<16)|(4<<28)|BLTCON1F_DESC,(a1)+ move.l #$000f000f,(a1)+ ; bltafwm/bltafwm move.l (a0)+,(a1)+ ; bltcpt addq.l #4,a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_swap_rgb_to_rbg_and_grb: bsr kds_swap_rgb_to_rbg bra kds_swap_rgb_to_grb ;-------------------------------------------------------------------- kds_swap_rgb_to_rbg_and_grb_and_brg: bsr kds_swap_rgb_to_rbg bsr kds_swap_rgb_to_grb FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_acd_rgb_to_brg,(a4)+ move.l a1,(a4)+ addq.w #2,a1 move.l a1,(a4)+ lea 3*LCOLBUF_HEIGHT*2-2(a1),a1 move.l a1,(a4)+ move.w d3,(a4)+ lea -(3*LCOLBUF_HEIGHT*2)(a1),a1 rts .bq_acd_rgb_to_brg ; (r<<8)|(bg>>4) -> (b<<8)|(rg>>4) move.l #((BLTEN_ABD+((BLT_A|(BLT_B&BLT_C))))<<16)|(8<<28)|(4<<12),bltcon0(a5) move.l #$000f000f,bltafwm(a5) ; bltafwm moveq.l #0,d0 move.l d0,bltamod(a5) ; and bltdmod move.w d0,bltbmod(a5) move.w #$0ff,bltcdat(a5) lea bltbpt(a5),a1 move.l (a0)+,(a1)+ ; bltbpt move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_swap_rgb_to_grb: ; R>>4|00B FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_acd_rgb_to_0r0_or_00b,(a4)+ move.l a1,(a4)+ move.l a1,(a4)+ lea 3*LCOLBUF_HEIGHT*2(a1),a1 move.l a1,(a4)+ move.w d3,(a4)+ ; G<<4|0RB FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_acd_0rb_merge_with_g00,(a4)+ lea STENCIL_HEIGHT*2-2(a1),a1 move.l a1,(a4)+ lea -3*LCOLBUF_HEIGHT*2(a1),a1 move.l a1,(a4)+ lea 2*LCOLBUF_HEIGHT*2(a1),a1 move.l a1,(a4)+ move.w d3,(a4)+ lea -(2*LCOLBUF_HEIGHT*2+STENCIL_HEIGHT*2)+2(a1),a1 rts .bq_acd_rgb_to_0r0_or_00b lea bltcon0(a5),a1 move.l #((BLTEN_ACD+((BLT_A|(BLT_B&BLT_C))))<<16)|(4<<28),(a1)+ move.l #$0f000f00,(a1)+ ; bltafwm/bltafwm moveq.l #0,d0 move.l d0,bltamod(a5) ; and bltdmod move.w d0,bltcmod(a5) move.w #$00f,bltbdat(a5) move.l (a0)+,(a1)+ ; bltcpt addq.l #4,a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts .bq_acd_0rb_merge_with_g00 lea bltcon0(a5),a1 move.l #((BLTEN_ACD+(((BLT_A|BLT_C)))&$ff)<<16)|(4<<28)|BLTCON1F_DESC,(a1)+ move.l #$00f000f0,(a1)+ ; bltafwm/bltafwm move.l (a0)+,(a1)+ ; bltcpt addq.l #4,a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- ; blit order: merge: 1 2 3 6 7 5b 8a, copy 3 to 0, copy 1 to 4 ; \0/5\1/6\2/7\3/8\4/ ; / \ / \ / \ / \ / \ ; kds_draw_stencils_col1010: move.w #((STENCIL_WIDTH+16)>>4)|((STENCIL_HEIGHT*KALEIDO_PLANES)<<6),d3 move.w #(KDSPAT_WIDTH-STENCIL_WIDTH-16)/8,d6 move.w #(KALEIDO_BUF_WIDTH-STENCIL_WIDTH-16)/8,d7 ; first row move.l pd_OriginalPattern(a6),a0 move.l pd_CurrPlanesPtr(a6),a1 move.l pd_StencilBuffer1(a6),a2 subq.w #2,a1 subq.w #2,a2 addq.w #STENCIL_WIDTH/8,a1 FIRST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd_with_all,(a4)+ move.w #BLTEN_ABCD+(((BLT_B&BLT_A)|(BLT_C&~BLT_A))&$ff),(a4)+ move.l #$0000ffff,(a4)+ ; bltafwm move.w d7,(a4)+ ; bltcmod move.w d6,(a4)+ ; bltbmod move.w #-2,(a4)+ ; bltamod move.w d7,(a4)+ ; bltdmod move.w pd_StencilShift1(a6),(a4)+ ; bltcon1 move.l a1,(a4)+ ; bltcpt move.l a0,d5 add.l pd_StencilOffset1(a6),d5 move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize ; second row move.l pd_CurrPlanesPtr(a6),a1 move.l pd_StencilBuffer2(a6),a2 lea (STENCIL_WIDTH+STENCIL_WIDTH/2)/8-2(a1),a1 subq.w #2,a2 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd_with_bltcon1,(a4)+ move.w pd_StencilShift6(a6),(a4)+ ; bltcon1 move.l a1,(a4)+ ; bltcpt move.l a0,d5 add.l pd_StencilOffset6(a6),d5 move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize move.w #(((STENCIL_WIDTH/2)+16)>>4)|((STENCIL_HEIGHT*KALEIDO_PLANES)<<6),d3 move.w #(KDSPAT_WIDTH-((STENCIL_WIDTH/2)+16))/8,d6 move.w #(KALEIDO_BUF_WIDTH-((STENCIL_WIDTH/2)+16))/8,d7 move.l pd_CurrPlanesPtr(a6),a1 move.l pd_StencilBuffer2(a6),a2 lea (STENCIL_WIDTH)/8-2(a1),a1 lea (STENCIL_WIDTH/2)/8-2(a2),a2 PUSHM a0/a1 BLTHOGON BLTWAIT lea pd_BQBuffer(a6),a0 CALLFW TriggerCustomBlitterQueue POPM FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd_with_mods,(a4)+ move.w d7,(a4)+ ; bltcmod move.w d6,(a4)+ ; bltbmod move.w #((STENCIL_WIDTH/2)-16)/8,(a4)+ ; bltamod move.w d7,(a4)+ ; bltdmod move.w pd_StencilShift8(a6),(a4)+ ; bltcon1 move.l a1,(a4)+ ; bltcpt move.l a0,d5 add.l pd_StencilOffset8(a6),d5 addq.l #(STENCIL_WIDTH/2)/8,d5 move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize subq.w #(STENCIL_WIDTH/2)/8,a0 lea (2*STENCIL_WIDTH+STENCIL_WIDTH/2)/8(a1),a1 lea -(STENCIL_WIDTH/2)/8(a2),a2 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt subq.l #(STENCIL_WIDTH/2)/8,d5 move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize ; mirrored and swapped p5/p6 addq.w #(STENCIL_WIDTH/2)/8,a0 move.w #((STENCIL_WIDTH+16)>>4)|((STENCIL_HEIGHT)<<6),d3 move.w #(-KDSPAT_WIDTH*KALEIDO_PLANES-((STENCIL_WIDTH)+16))/8,d6 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-((STENCIL_WIDTH)+16))/8,d7 move.l pd_StencilBuffer1(a6),a2 move.l pd_CurrPlanesPtr(a6),a1 lea 2*(STENCIL_WIDTH/8)-2(a1),a1 subq.w #2,a2 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd_with_mods,(a4)+ move.w d7,(a4)+ ; bltcmod move.w d6,(a4)+ ; bltbmod move.w #((STENCIL_WIDTH*KALEIDO_PLANES)-(STENCIL_WIDTH+16))/8,(a4)+ ; bltamod move.w d7,(a4)+ ; bltdmod move.w pd_StencilShift2(a6),(a4)+ ; bltcon1 move.l a1,(a4)+ ; bltcpt move.l a0,d5 add.l pd_StencilOffset2(a6),d5 move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize REPT 3 lea (KALEIDO_BUF_WIDTH/8)(a1),a1 add.l #KDSPAT_WIDTH/8,d5 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize ENDR lea 2*(KALEIDO_BUF_WIDTH/8)(a1),a1 add.l #KDSPAT_WIDTH/8,d5 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize lea -(KALEIDO_BUF_WIDTH/8)(a1),a1 add.l #KDSPAT_WIDTH/8,d5 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize ; next one move.l pd_CurrPlanesPtr(a6),a1 lea 3*(STENCIL_WIDTH/8)-2(a1),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd_with_bltcon1,(a4)+ move.w pd_StencilShift3(a6),(a4)+ ; bltcon1 move.l a1,(a4)+ ; bltcpt move.l a0,d5 add.l pd_StencilOffset3(a6),d5 move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize REPT 3 lea (KALEIDO_BUF_WIDTH/8)(a1),a1 add.l #KDSPAT_WIDTH/8,d5 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize ENDR lea 2*(KALEIDO_BUF_WIDTH/8)(a1),a1 add.l #KDSPAT_WIDTH/8,d5 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize lea -(KALEIDO_BUF_WIDTH/8)(a1),a1 add.l #KDSPAT_WIDTH/8,d5 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize ; next one move.l pd_StencilBuffer2(a6),a2 move.l pd_CurrPlanesPtr(a6),a1 subq.w #2,a2 lea (STENCIL_WIDTH*2+STENCIL_WIDTH/2)/8-2(a1),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd_with_bltcon1,(a4)+ move.w pd_StencilShift7(a6),(a4)+ ; bltcon1 move.l a1,(a4)+ ; bltcpt move.l a0,d5 add.l pd_StencilOffset7(a6),d5 move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize REPT 3 lea (KALEIDO_BUF_WIDTH/8)(a1),a1 add.l #KDSPAT_WIDTH/8,d5 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize ENDR lea 2*(KALEIDO_BUF_WIDTH/8)(a1),a1 add.l #KDSPAT_WIDTH/8,d5 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize lea -(KALEIDO_BUF_WIDTH/8)(a1),a1 add.l #KDSPAT_WIDTH/8,d5 LAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize rts .bq_generic_abcd_with_all BLTHOGOFF move.w (a0)+,bltcon0(a5) move.l (a0)+,bltafwm(a5) .bq_generic_abcd_with_mods move.l (a0)+,bltcmod(a5) ; bltcmod/bltbmod move.l (a0)+,bltamod(a5) ; bltamod/bltdmod .bq_generic_abcd_with_bltcon1 move.w (a0)+,bltcon1(a5) .bq_generic_abcd lea bltcpt(a5),a1 move.l (a0)+,(a1)+ ; bltcpt move.l (a0)+,(a1)+ ; bltbpt move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- ;-------------------------------------------------------------------- ; blit order: merge: 1 2 3 6 7 5b 8a, copy 3 to 0, copy 1 to 4 ; \0/5\1/6\2/7\3/8\4/ ; / \ / \ / \ / \ / \ ; kds_draw_stencils_col0000: move.w #((STENCIL_WIDTH+16)>>4)|((STENCIL_HEIGHT*KALEIDO_PLANES)<<6),d3 move.w #(KDSPAT_WIDTH-STENCIL_WIDTH-16)/8,d6 move.w #(KALEIDO_BUF_WIDTH-STENCIL_WIDTH-16)/8,d7 ; first row move.l pd_OriginalPattern(a6),a0 move.l pd_CurrPlanesPtr(a6),a1 move.l pd_StencilBuffer1(a6),a2 subq.w #2,a1 subq.w #2,a2 addq.w #STENCIL_WIDTH/8,a1 FIRST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd_with_all,(a4)+ move.w #BLTEN_ABCD+(((BLT_B&BLT_A)|(BLT_C&~BLT_A))&$ff),(a4)+ move.l #$0000ffff,(a4)+ ; bltafwm move.w d7,(a4)+ ; bltcmod move.w d6,(a4)+ ; bltbmod move.w #-2,(a4)+ ; bltamod move.w d7,(a4)+ ; bltdmod move.w pd_StencilShift1(a6),(a4)+ ; bltcon1 move.l a1,(a4)+ ; bltcpt move.l a0,d5 add.l pd_StencilOffset1(a6),d5 move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize ; second row move.l pd_CurrPlanesPtr(a6),a1 move.l pd_StencilBuffer2(a6),a2 lea (STENCIL_WIDTH+STENCIL_WIDTH/2)/8-2(a1),a1 subq.w #2,a2 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd_with_bltcon1,(a4)+ move.w pd_StencilShift6(a6),(a4)+ ; bltcon1 move.l a1,(a4)+ ; bltcpt move.l a0,d5 add.l pd_StencilOffset6(a6),d5 move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize move.w #(((STENCIL_WIDTH/2)+16)>>4)|((STENCIL_HEIGHT*KALEIDO_PLANES)<<6),d3 move.w #(KDSPAT_WIDTH-((STENCIL_WIDTH/2)+16))/8,d6 move.w #(KALEIDO_BUF_WIDTH-((STENCIL_WIDTH/2)+16))/8,d7 move.l pd_CurrPlanesPtr(a6),a1 move.l pd_StencilBuffer2(a6),a2 lea (STENCIL_WIDTH)/8-2(a1),a1 lea (STENCIL_WIDTH/2)/8-2(a2),a2 PUSHM a0/a1 BLTHOGON BLTWAIT lea pd_BQBuffer(a6),a0 CALLFW TriggerCustomBlitterQueue POPM FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd_with_mods,(a4)+ move.w d7,(a4)+ ; bltcmod move.w d6,(a4)+ ; bltbmod move.w #((STENCIL_WIDTH/2)-16)/8,(a4)+ ; bltamod move.w d7,(a4)+ ; bltdmod move.w pd_StencilShift8(a6),(a4)+ ; bltcon1 move.l a1,(a4)+ ; bltcpt move.l a0,d5 add.l pd_StencilOffset8(a6),d5 addq.l #(STENCIL_WIDTH/2)/8,d5 move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize subq.w #(STENCIL_WIDTH/2)/8,a0 lea (2*STENCIL_WIDTH+STENCIL_WIDTH/2)/8(a1),a1 lea -(STENCIL_WIDTH/2)/8(a2),a2 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt subq.l #(STENCIL_WIDTH/2)/8,d5 move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize ; mirrored and unswapped p5/p6 addq.w #(STENCIL_WIDTH/2)/8,a0 move.w #((STENCIL_WIDTH+16)>>4)|((STENCIL_HEIGHT)<<6),d3 move.w #(-KDSPAT_WIDTH*KALEIDO_PLANES-((STENCIL_WIDTH)+16))/8,d6 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-((STENCIL_WIDTH)+16))/8,d7 move.l pd_StencilBuffer1(a6),a2 move.l pd_CurrPlanesPtr(a6),a1 lea 2*(STENCIL_WIDTH/8)-2(a1),a1 subq.w #2,a2 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd_with_mods,(a4)+ move.w d7,(a4)+ ; bltcmod move.w d6,(a4)+ ; bltbmod move.w #((STENCIL_WIDTH*KALEIDO_PLANES)-(STENCIL_WIDTH+16))/8,(a4)+ ; bltamod move.w d7,(a4)+ ; bltdmod move.w pd_StencilShift2(a6),(a4)+ ; bltcon1 move.l a1,(a4)+ ; bltcpt move.l a0,d5 add.l pd_StencilOffset2(a6),d5 move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize REPT 3 lea (KALEIDO_BUF_WIDTH/8)(a1),a1 add.l #KDSPAT_WIDTH/8,d5 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize ENDR lea 1*(KALEIDO_BUF_WIDTH/8)(a1),a1 add.l #KDSPAT_WIDTH/8,d5 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize lea 1*(KALEIDO_BUF_WIDTH/8)(a1),a1 add.l #KDSPAT_WIDTH/8,d5 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize ; next one move.l pd_CurrPlanesPtr(a6),a1 lea 3*(STENCIL_WIDTH/8)-2(a1),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd_with_bltcon1,(a4)+ move.w pd_StencilShift3(a6),(a4)+ ; bltcon1 move.l a1,(a4)+ ; bltcpt move.l a0,d5 add.l pd_StencilOffset3(a6),d5 move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize REPT 3 lea (KALEIDO_BUF_WIDTH/8)(a1),a1 add.l #KDSPAT_WIDTH/8,d5 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize ENDR lea 1*(KALEIDO_BUF_WIDTH/8)(a1),a1 add.l #KDSPAT_WIDTH/8,d5 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize lea 1*(KALEIDO_BUF_WIDTH/8)(a1),a1 add.l #KDSPAT_WIDTH/8,d5 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize ; next one move.l pd_StencilBuffer2(a6),a2 move.l pd_CurrPlanesPtr(a6),a1 subq.w #2,a2 lea (STENCIL_WIDTH*2+STENCIL_WIDTH/2)/8-2(a1),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd_with_bltcon1,(a4)+ move.w pd_StencilShift7(a6),(a4)+ ; bltcon1 move.l a1,(a4)+ ; bltcpt move.l a0,d5 add.l pd_StencilOffset7(a6),d5 move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize REPT 3 lea (KALEIDO_BUF_WIDTH/8)(a1),a1 add.l #KDSPAT_WIDTH/8,d5 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize ENDR lea 1*(KALEIDO_BUF_WIDTH/8)(a1),a1 add.l #KDSPAT_WIDTH/8,d5 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize lea 1*(KALEIDO_BUF_WIDTH/8)(a1),a1 add.l #KDSPAT_WIDTH/8,d5 LAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize rts .bq_generic_abcd_with_all BLTHOGOFF move.w (a0)+,bltcon0(a5) move.l (a0)+,bltafwm(a5) .bq_generic_abcd_with_mods move.l (a0)+,bltcmod(a5) ; bltcmod/bltbmod move.l (a0)+,bltamod(a5) ; bltamod/bltdmod .bq_generic_abcd_with_bltcon1 move.w (a0)+,bltcon1(a5) .bq_generic_abcd lea bltcpt(a5),a1 move.l (a0)+,(a1)+ ; bltcpt move.l (a0)+,(a1)+ ; bltbpt move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_draw_stencils_intro: move.w #((STENCIL_WIDTH+16)>>4)|((STENCIL_HEIGHT)<<6),d3 move.w #(KDSPAT_WIDTH*KALEIDO_PLANES-(STENCIL_WIDTH+16))/8,d6 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-(STENCIL_WIDTH+16))/8,d7 moveq.l #(KDSPAT_WIDTH/8),d4 move.l pd_OriginalPattern(a6),a0 lea 2*(KDSPAT_WIDTH/8)(a0),a0 move.l pd_CurrPlanesPtr(a6),a1 lea 1*(KALEIDO_BUF_WIDTH/8)(a1),a1 ; second row move.l pd_StencilSprBuffer2(a6),a2 ; copy left part of triangle as background FIRST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_mask_only,(a4)+ move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt ; copy right part of triangle as background lea (STENCIL_WIDTH+STENCIL_WIDTH/2)/8(a1),a1 addq.l #(STENCIL_WIDTH/2)/8,a2 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_mask_only_more,(a4)+ move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt ; fill center part subq.l #(STENCIL_WIDTH)/8,a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_fill,(a4)+ move.l a1,(a4)+ ; bltdpt PUSHM a0/a1 BLTHOGON BLTWAIT lea pd_BQBuffer(a6),a0 CALLFW TriggerCustomBlitterQueue POPM ; second row lea 1*(KALEIDO_BUF_WIDTH/8)+(STENCIL_WIDTH/2)/8-2(a1),a1 subq.l #(STENCIL_WIDTH/2)/8+2,a2 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd_with_all,(a4)+ move.w #BLTEN_ABD+((BLT_B&BLT_A)),(a4)+ move.l #$0000ffff,(a4)+ ; bltafwm move.w d7,(a4)+ ; bltcmod move.w d6,(a4)+ ; bltbmod move.w #-2,(a4)+ ; bltamod move.w d7,(a4)+ ; bltdmod move.w pd_StencilShift6(a6),(a4)+ ; bltcon1 move.l a1,(a4)+ ; bltcpt move.l a0,d5 add.l pd_StencilOffset6(a6),d5 move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize lea 1*(KALEIDO_BUF_WIDTH/8)(a1),a1 add.l d4,d5 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize lea -1*(KALEIDO_BUF_WIDTH/8)-(STENCIL_WIDTH)/8(a1),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd_with_bltcon1,(a4)+ move.w pd_StencilShift8(a6),(a4)+ ; bltcon1 move.l a1,(a4)+ ; bltcpt move.l a0,d5 add.l pd_StencilOffset8(a6),d5 move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize lea 1*(KALEIDO_BUF_WIDTH/8)(a1),a1 add.l d4,d5 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize ; first row move.l pd_StencilSprBuffer1(a6),a2 subq.w #2,a2 lea -1*(KALEIDO_BUF_WIDTH/8)+(STENCIL_WIDTH/2)/8(a1),a1 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd_with_bltcon01,(a4)+ move.w #BLTEN_ABCD+(((BLT_B&BLT_A)|(BLT_C&~BLT_A))&$ff),(a4)+ move.w pd_StencilShift1(a6),(a4)+ ; bltcon1 move.l a1,(a4)+ ; bltcpt move.l a0,d5 add.l pd_StencilOffset1(a6),d5 move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize lea 1*(KALEIDO_BUF_WIDTH/8)(a1),a1 add.l d4,d5 LAST_ADD_TO_BLITTER_QUEUE a4,a3 clr.l (a4)+ move.l #.bq_generic_abcd,(a4)+ move.l a1,(a4)+ ; bltcpt move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize rts .bq_mask_only BLTHOGOFF BLTCON_SET AD,BLT_A,0,0 moveq.l #-1,d0 move.l d0,bltafwm(a5) move.l #(((STENCIL_WIDTH-STENCIL_WIDTH/2)/8)<<16)|((KALEIDO_BUF_WIDTH*KALEIDO_PLANES-(STENCIL_WIDTH/2))/8),bltamod(a5) .bq_mask_only_more lea bltapt(a5),a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w #((STENCIL_WIDTH/2)>>4)|((STENCIL_HEIGHT)<<6),(a1)+ ; bltsize rts .bq_fill BLTCON0_SET D,255,0 move.w #((KALEIDO_BUF_WIDTH*KALEIDO_PLANES-(STENCIL_WIDTH))/8),bltdmod(a5) move.l (a0)+,bltdpt(a5) move.w #((STENCIL_WIDTH)>>4)|((STENCIL_HEIGHT)<<6),bltsize(a5) rts .bq_generic_abcd_with_all move.w (a0)+,bltcon0(a5) move.l (a0)+,bltafwm(a5) move.l (a0)+,bltcmod(a5) ; bltcmod/bltbmod move.l (a0)+,bltamod(a5) ; bltamod/bltdmod .bq_generic_abcd_with_bltcon1 move.w (a0)+,bltcon1(a5) .bq_generic_abcd lea bltcpt(a5),a1 move.l (a0)+,(a1)+ ; bltcpt move.l (a0)+,(a1)+ ; bltbpt move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts .bq_generic_abcd_with_bltcon01 move.l (a0)+,bltcon0(a5) lea bltcpt(a5),a1 move.l (a0)+,(a1)+ ; bltcpt move.l (a0)+,(a1)+ ; bltbpt move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_draw_stencils_transition: move.w #((STENCIL_WIDTH+16)>>4)|((STENCIL_HEIGHT*KALEIDO_PLANES)<<6),d3 move.w #(KDSPAT_WIDTH-STENCIL_WIDTH-16)/8,d6 move.w #(KALEIDO_BUF_WIDTH-STENCIL_WIDTH-16)/8,d7 ; first row move.l pd_OriginalPattern(a6),a0 move.l pd_CurrPlanesPtr(a6),a1 move.l pd_StencilBuffer1(a6),a2 lea (128/8)-2(a1),a1 subq.w #2,a2 addq.w #(STENCIL_WIDTH/2)/8,a1 SAFE_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd_with_all,(a4)+ move.w #BLTEN_ABCD+(((BLT_B&BLT_A)|(BLT_C&~BLT_A))&$ff),(a4)+ move.l #$0000ffff,(a4)+ ; bltafwm move.w d7,(a4)+ ; bltcmod move.w d6,(a4)+ ; bltbmod move.w #-2,(a4)+ ; bltamod move.w d7,(a4)+ ; bltdmod move.w pd_StencilShift1(a6),(a4)+ ; bltcon1 move.l a1,(a4)+ ; bltcpt move.l a0,d5 add.l pd_StencilOffset1(a6),d5 move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize ; second row move.l pd_StencilBuffer2(a6),a2 lea (STENCIL_WIDTH/2)/8(a1),a1 subq.w #2,a2 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd_with_bltcon1,(a4)+ move.w pd_StencilShift6(a6),(a4)+ ; bltcon1 move.l a1,(a4)+ ; bltcpt move.l a0,d5 add.l pd_StencilOffset6(a6),d5 move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize lea -(STENCIL_WIDTH)/8(a1),a1 LAST_ADD_TO_BLITTER_QUEUE a4,a3 clr.l (a4)+ move.l #.bq_generic_abcd_with_bltcon1,(a4)+ move.w pd_StencilShift8(a6),(a4)+ ; bltcon1 move.l a1,(a4)+ ; bltcpt move.l a0,d5 add.l pd_StencilOffset8(a6),d5 move.l d5,(a4)+ ; bltbpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize rts .bq_generic_abcd_with_all BLTHOGOFF move.w (a0)+,bltcon0(a5) move.l (a0)+,bltafwm(a5) move.l (a0)+,bltcmod(a5) ; bltcmod/bltbmod move.l (a0)+,bltamod(a5) ; bltamod/bltdmod .bq_generic_abcd_with_bltcon1 move.w (a0)+,bltcon1(a5) lea bltcpt(a5),a1 move.l (a0)+,(a1)+ ; bltcpt move.l (a0)+,(a1)+ ; bltbpt move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_clear_noise_sprite_buffer: BLTHOGON BLTWAIT BLTHOGOFF BLTCON_SET D,0,0,0 move.w #0,bltdmod(a5) move.l pd_SpriteStencil1Ptrs(a6),bltdpt(a5) move.w #(INTRO_SPRITE_WIDTH>>4)|(((INTRO_SPRITE_HEIGHT+2)*2*2)<<6),bltsize(a5) rts ;-------------------------------------------------------------------- kds_convert_noise_to_sprites: move.w d0,d3 lsl.w #6,d3 addq.w #1,d3 move.l pd_NoiseBuffer(a6),a2 adda.w pd_NoiseOffset(a6),a2 move.l #.bq_generic_ad_with_all,d4 move.l #.bq_generic_ad,d5 move.l pd_CurrSpriteStencilPtr(a6),a3 moveq.l #8-1,d7 .sprloop move.l a4,a0 clr.l (a4)+ move.l d4,(a4)+ move.l (a3)+,d0 addq.w #4,d0 move.l a2,(a4)+ move.l d0,(a4)+ move.w d3,(a4)+ addq.w #2,a2 CALLFW AddToBlitterQueue move.l d5,d4 dbra d7,.sprloop rts .bq_generic_ad_with_all move.l #(BLTEN_AD+BLT_A)<<16,bltcon0(a5) moveq.l #-1,d0 move.l d0,bltafwm(a5) move.l #(((NOISE_WIDTH-16)/8)<<16)|2,bltamod(a5) .bq_generic_ad lea bltapt(a5),a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_draw_stencils_copy_edges: ; copy stuff over move.l pd_CurrPlanesPtr(a6),a1 lea 3*STENCIL_WIDTH/8(a1),a0 move.w #((16)>>4)|((STENCIL_HEIGHT*KALEIDO_PLANES)<<6),d3 move.w #(KALEIDO_BUF_WIDTH-16)/8,d6 PREP_ADD_TO_BLITTER_QUEUE a3 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_acd_copy_without_left,(a4)+ move.w d6,(a4)+ ; bltcmod move.w d6,(a4)+ ; bltbmod move.w d6,(a4)+ ; bltamod move.w d6,(a4)+ ; bltdmod move.l a1,(a4)+ ; bltcpt move.l a0,(a4)+ ; bltbpt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize addq.w #2,a1 addq.w #2,a0 move.w #((STENCIL_WIDTH-16)>>4)|((STENCIL_HEIGHT*KALEIDO_PLANES)<<6),d3 move.w #(KALEIDO_BUF_WIDTH-(STENCIL_WIDTH-16))/8,d6 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_ad_copy_with_all,(a4)+ move.w d6,(a4)+ ; bltamod move.w d6,(a4)+ ; bltdmod move.l a0,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize lea (STENCIL_WIDTH/8)-2(a1),a1 lea (STENCIL_WIDTH/8)-2(a0),a0 move.w #((STENCIL_WIDTH)>>4)|((STENCIL_HEIGHT*KALEIDO_PLANES)<<6),d3 move.w #(KALEIDO_BUF_WIDTH-(STENCIL_WIDTH))/8,d6 LAST_ADD_TO_BLITTER_QUEUE a4,a3 clr.l (a4)+ move.l #.bq_ad_copy_with_mods,(a4)+ move.w d6,(a4)+ ; bltamod move.w d6,(a4)+ ; bltdmod move.l a1,(a4)+ ; bltapt move.l a0,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize rts .bq_acd_copy_without_left move.l #(BLTEN_ACD+(((BLT_A&BLT_B)|(BLT_C&~BLT_B))&$ff))<<16,bltcon0(a5) move.l (a0)+,bltcmod(a5) ; and bltbmod move.l (a0)+,bltamod(a5) ; and bltdmod moveq.l #-1,d0 lea bltafwm(a5),a1 move.l d0,(a1)+ ; bltafwm/bltalwm move.w #$7fff,bltbdat(a5) move.l (a0)+,(a1)+ ; bltcpt addq.l #4,a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts .bq_ad_copy_with_all move.w #(BLTEN_AD+BLT_A),bltcon0(a5) .bq_ad_copy_with_mods move.l (a0)+,bltamod(a5) ; and bltdmod .bq_ad_copy lea bltapt(a5),a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_draw_bonus_stuff_for_col2: ; copy stuff over move.l pd_CurrPlanesPtr(a6),a1 lea 4*(KALEIDO_BUF_WIDTH/8)+(3*STENCIL_WIDTH+(STENCIL_WIDTH/2))/8(a1),a1 lea 1*(KALEIDO_BUF_WIDTH/8)(a1),a2 move.w #((STENCIL_WIDTH+(STENCIL_WIDTH/2))>>4)|((STENCIL_HEIGHT)<<6),d3 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-(STENCIL_WIDTH+(STENCIL_WIDTH/2)))/8,d6 PREP_ADD_TO_BLITTER_QUEUE a3 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_abcd_xor,(a4)+ move.w d6,(a4)+ ; bltcmod move.w d6,(a4)+ ; bltbmod move.w d6,(a4)+ ; bltamod move.w d6,(a4)+ ; bltdmod move.l a1,(a4)+ ; bltcpt move.l a2,(a4)+ ; bltbpt move.l pd_HexagonTopMaskPtr(a6),(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize move.l pd_CurrPlanesPtr(a6),a1 lea 3*(KALEIDO_BUF_WIDTH/8)+(3*STENCIL_WIDTH+(STENCIL_WIDTH/2))/8(a1),a1 move.l pd_BonusGridPtr(a6),a2 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_acd_merge,(a4)+ move.l a1,(a4)+ ; bltcpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize move.w #((STENCIL_WIDTH/2)>>4)|((STENCIL_HEIGHT)<<6),d3 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-(STENCIL_WIDTH/2))/8,d6 move.l pd_CurrPlanesPtr(a6),a1 lea 3*(KALEIDO_BUF_WIDTH/8)+(STENCIL_WIDTH/2)/8(a1),a1 LAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_acd_clear,(a4)+ move.w d6,(a4)+ ; bltcmod move.w d6,(a4)+ ; bltamod move.w d6,(a4)+ ; bltdmod move.l a1,(a4)+ ; bltcpt move.l a2,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize rts .bq_abcd_xor lea bltcon0(a5),a1 move.l #(BLTEN_ABCD+((BLT_A&(BLT_B^BLT_C)|(BLT_C&~BLT_A))&$ff))<<16,(a1)+ move.l (a0)+,bltcmod(a5) ; and bltbmod move.l (a0)+,bltamod(a5) ; and bltdmod moveq.l #-1,d0 move.l d0,(a1)+ ; bltafwm/bltalwm move.l (a0)+,(a1)+ ; bltcpt move.l (a0)+,(a1)+ ; bltbpt move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts .bq_acd_merge move.l #(BLTEN_ACD+((BLT_A|BLT_C)&$ff))<<16,bltcon0(a5) lea bltcpt(a5),a1 move.l (a0)+,(a1)+ ; bltcpt addq.l #4,a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts .bq_acd_clear move.l #(BLTEN_ACD+((~BLT_A&BLT_C)&$ff))<<16,bltcon0(a5) move.w (a0)+,bltcmod(a5) move.l (a0)+,bltamod(a5) ; and bltdmod lea bltcpt(a5),a1 move.l (a0)+,(a1)+ ; bltcpt addq.l #4,a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_draw_bonus_stuff_for_col5: ; copy stuff over move.l pd_CurrP5BonusPlanePtr(a6),a1 lea (STENCIL_WIDTH/2)/8(a1),a1 move.l pd_CurrPlanesPtr(a6),a2 lea 5*(KALEIDO_BUF_WIDTH/8)+(STENCIL_WIDTH/2)/8(a2),a2 move.w #((2*STENCIL_WIDTH)>>4)|((STENCIL_HEIGHT)<<6),d3 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-(2*STENCIL_WIDTH))/8,d6 ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_abcd_xor,(a4)+ move.w d6,(a4)+ ; bltcmod move.w d6,(a4)+ ; bltbmod move.w d6,(a4)+ ; bltamod move.w d6,(a4)+ ; bltdmod move.l a1,(a4)+ ; bltcpt move.l a2,(a4)+ ; bltbpt move.l pd_HexagonTopMaskPtr(a6),(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize move.l pd_CurrPlanesPtr(a6),a2 lea 5*(KALEIDO_BUF_WIDTH/8)(a2),a2 ; plane 6 move.l pd_CurrP5BottomPlanePtr(a6),a1 move.l pd_HexagonTopMaskPtr(a6),a0 lea (KALEIDO_BUF_WIDTH/8)*KALEIDO_PLANES*(KALEIDO_HEIGHT-LAST_SLICE_HEIGHT)+(STENCIL_WIDTH/2)/8(a1),a1 lea (KALEIDO_BUF_WIDTH/8)*KALEIDO_PLANES*(KALEIDO_HEIGHT-LAST_SLICE_HEIGHT)+(STENCIL_WIDTH/2)/8(a2),a2 lea (KALEIDO_BUF_WIDTH/8)*KALEIDO_PLANES*(KALEIDO_HEIGHT-LAST_SLICE_HEIGHT)(a0),a0 move.w #(2*STENCIL_WIDTH>>4)|((LAST_SLICE_HEIGHT)<<6),d3 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-2*STENCIL_WIDTH)/8,d6 ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_abcd_xor,(a4)+ move.w d6,(a4)+ ; bltcmod move.w d6,(a4)+ ; bltbmod move.w d6,(a4)+ ; bltamod move.w d6,(a4)+ ; bltdmod move.l a1,(a4)+ ; bltcpt move.l a2,(a4)+ ; bltbpt move.l a0,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize rts .bq_abcd_xor lea bltcon0(a5),a1 move.l #(BLTEN_ABCD+(((BLT_A&BLT_B)|(BLT_C&~BLT_A))&$ff))<<16,(a1)+ move.l (a0)+,bltcmod(a5) ; and bltbmod move.l (a0)+,bltamod(a5) ; and bltdmod moveq.l #-1,d0 move.l d0,(a1)+ ; bltafwm/bltalwm move.l (a0)+,(a1)+ ; bltcpt move.l (a0)+,(a1)+ ; bltbpt move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_clear_bonus_stuff_for_col2: ; clear extra line stuff in bitplane 4 from col2/5 move.w #((STENCIL_WIDTH+(STENCIL_WIDTH/2))>>4)|((STENCIL_HEIGHT)<<6),d3 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-(STENCIL_WIDTH+(STENCIL_WIDTH/2)))/8,d6 move.l pd_CurrPlanesPtr(a6),a1 lea 3*(KALEIDO_BUF_WIDTH/8)+(3*STENCIL_WIDTH+(STENCIL_WIDTH/2))/8(a1),a1 PREP_ADD_TO_BLITTER_QUEUE a3 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_d_clear,(a4)+ move.w d6,(a4)+ ; bltdmod move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize move.w #((STENCIL_WIDTH/2)>>4)|((STENCIL_HEIGHT)<<6),d3 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-(STENCIL_WIDTH/2))/8,d6 move.l pd_CurrPlanesPtr(a6),a1 lea 3*(KALEIDO_BUF_WIDTH/8)+(STENCIL_WIDTH/2)/8(a1),a1 LAST_ADD_TO_BLITTER_QUEUE a4,a3 clr.l (a4)+ move.l #.bq_d_clear,(a4)+ move.w d6,(a4)+ ; bltdmod move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize rts .bq_d_clear BLTCON_SET D,0,0,0 move.w (a0)+,bltdmod(a5) move.l (a0)+,bltdpt(a5) move.w (a0)+,bltsize(a5) rts ;-------------------------------------------------------------------- kds_draw_p5_flip13: move.l pd_CurrPlanesPtr(a6),a1 lea 4*(KALEIDO_BUF_WIDTH/8)+(2*STENCIL_WIDTH)/8(a1),a1 ; plane 5 lea (KALEIDO_BUF_WIDTH/8)(a1),a2 ; plane 6 move.l pd_CurrP5Xor6PlanePtr(a6),a0 lea (2*STENCIL_WIDTH/8)(a0),a0 move.w #((2*STENCIL_WIDTH)>>4)|((KALEIDO_HEIGHT)<<6),d3 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-2*STENCIL_WIDTH)/8,d0 PREP_ADD_TO_BLITTER_QUEUE a3 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_xor_abcd_with_all,(a4)+ move.w d0,(a4)+ ; bltcmod move.w d0,(a4)+ ; bltbmod move.w d0,(a4)+ ; bltamod move.w d0,(a4)+ ; bltdmod move.l a1,(a4)+ ; bltcpt move.l a2,(a4)+ ; bltbpt move.l pd_HexagonBottomMaskPtr(a6),(a4)+ ; bltapt move.l a0,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize move.w #((STENCIL_WIDTH)>>4)|((KALEIDO_HEIGHT)<<6),d3 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-STENCIL_WIDTH)/8,d0 lea (2*STENCIL_WIDTH)/8(a1),a1 lea (2*STENCIL_WIDTH)/8(a0),a0 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_copy_ad_with_all,(a4)+ move.w d0,(a4)+ ; bltamod move.w d0,(a4)+ ; bltdmod move.l a1,(a4)+ ; bltapt move.l a0,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize move.w #((2*STENCIL_WIDTH)>>4)|((KALEIDO_HEIGHT)<<6),d3 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-2*STENCIL_WIDTH)/8,d0 lea -(STENCIL_WIDTH)/8(a0),a0 lea -(3*STENCIL_WIDTH)/8(a0),a1 LAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_copy_ad_without_left,(a4)+ move.w d0,(a4)+ ; bltamod move.w d0,(a4)+ ; bltdmod move.l a0,(a4)+ ; bltapt move.l a1,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize rts .bq_xor_abcd_with_all lea bltcon0(a5),a1 move.l #(BLTEN_ABCD+((BLT_C^(BLT_B&BLT_A))&$ff))<<16,(a1)+ move.l (a0)+,bltcmod(a5) ; bltcmod/bltbmod move.l (a0)+,bltamod(a5) ; bltamod/bltdmod moveq.l #-1,d0 move.l d0,(a1)+ ; bltafwm/bltalwm move.l (a0)+,(a1)+ ; bltcpt move.l (a0)+,(a1)+ ; bltbpt move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts .bq_copy_ad_with_all BLTCON0_SET AD,BLT_A,0 move.l (a0)+,bltamod(a5) ; bltamod/bltdmod lea bltapt(a5),a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts .bq_copy_ad_without_left BLTCON0_SET AD,BLT_A,0 move.w #$7fff,bltafwm(a5) move.l (a0)+,bltamod(a5) ; bltamod/bltdmod lea bltapt(a5),a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_draw_p5_flip134: move.l pd_CurrPlanesPtr(a6),a1 lea 4*(KALEIDO_BUF_WIDTH/8)(a1),a1 ; plane 5 lea (KALEIDO_BUF_WIDTH/8)(a1),a2 ; plane 6 move.w #((KALEIDO_WIDTH)>>4)|((KALEIDO_HEIGHT)<<6),d3 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-KALEIDO_WIDTH)/8,d0 ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_xor_abcd_with_all,(a4)+ move.w d0,(a4)+ ; bltcmod move.w d0,(a4)+ ; bltbmod move.w d0,(a4)+ ; bltamod move.w d0,(a4)+ ; bltdmod move.l a1,(a4)+ ; bltcpt move.l a2,(a4)+ ; bltbpt move.l pd_Hexagon2MaskPtr(a6),(a4)+ ; bltapt move.l pd_CurrP5Xor6PlanePtr(a6),(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize rts .bq_xor_abcd_with_all lea bltcon0(a5),a1 move.l #(BLTEN_ABCD+(((BLT_A&BLT_C)|(~BLT_A&(BLT_C^BLT_B)))&$ff))<<16,(a1)+ move.l (a0)+,bltcmod(a5) ; bltcmod/bltbmod move.l (a0)+,bltamod(a5) ; bltamod/bltdmod moveq.l #-1,d0 move.l d0,(a1)+ ; bltafwm/bltalwm move.l (a0)+,(a1)+ ; bltcpt move.l (a0)+,(a1)+ ; bltbpt move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_draw_p5_flip4_to_bonus: move.l pd_CurrP5Xor6PlanePtr(a6),a1 move.l pd_CurrP5BonusPlanePtr(a6),a2 move.w #((KALEIDO_WIDTH-(STENCIL_WIDTH+STENCIL_WIDTH/2))>>4)|((KALEIDO_HEIGHT)<<6),d3 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-(KALEIDO_WIDTH-(STENCIL_WIDTH+STENCIL_WIDTH/2)))/8,d0 PREP_ADD_TO_BLITTER_QUEUE a3 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_copy_ad_with_all,(a4)+ move.w d0,(a4)+ ; bltamod move.w d0,(a4)+ ; bltdmod move.l a1,(a4)+ ; bltapt move.l a2,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize move.w #((STENCIL_WIDTH+STENCIL_WIDTH/2)>>4)|((KALEIDO_HEIGHT)<<6),d3 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-(STENCIL_WIDTH+STENCIL_WIDTH/2))/8,d0 lea (STENCIL_WIDTH/2)/8(a1),a1 lea (KALEIDO_WIDTH-(STENCIL_WIDTH+STENCIL_WIDTH/2))/8(a2),a2 LAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_copy_ad_with_all,(a4)+ move.w d0,(a4)+ ; bltamod move.w d0,(a4)+ ; bltdmod move.l a1,(a4)+ ; bltapt move.l a2,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize rts .bq_copy_ad_with_all lea bltcon0(a5),a1 move.l #(BLTEN_AD+BLT_A)<<16,(a1)+ move.l (a0)+,bltamod(a5) ; bltamod/bltdmod moveq.l #-1,d0 move.l d0,(a1)+ ; bltafwm/bltalwm addq.l #8,a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_draw_p5_flip4_to_bottom: move.l pd_CurrPlanesPtr(a6),a1 lea 4*(KALEIDO_BUF_WIDTH/8)(a1),a1 ; plane 5 move.l pd_CurrP5BottomPlanePtr(a6),a2 lea (KALEIDO_BUF_WIDTH/8)*KALEIDO_PLANES*(KALEIDO_HEIGHT-LAST_SLICE_HEIGHT)(a1),a1 lea (KALEIDO_BUF_WIDTH/8)*KALEIDO_PLANES*(KALEIDO_HEIGHT-LAST_SLICE_HEIGHT)(a2),a2 move.w #(KALEIDO_WIDTH>>4)|((LAST_SLICE_HEIGHT)<<6),d3 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-KALEIDO_WIDTH)/8,d0 ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_copy_ad_with_all,(a4)+ move.w d0,(a4)+ ; bltamod move.w d0,(a4)+ ; bltdmod move.l a1,(a4)+ ; bltapt move.l a2,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize rts .bq_copy_ad_with_all lea bltcon0(a5),a1 move.l #(BLTEN_AD+BLT_A)<<16,(a1)+ move.l (a0)+,bltamod(a5) ; bltamod/bltdmod moveq.l #-1,d0 move.l d0,(a1)+ ; bltafwm/bltalwm addq.l #8,a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_draw_p5_flip5_to_bottom: move.l pd_CurrPlanesPtr(a6),a1 lea 4*(KALEIDO_BUF_WIDTH/8)(a1),a1 ; plane 5 move.l pd_CurrP5BottomPlanePtr(a6),a2 lea (KALEIDO_BUF_WIDTH/8)*KALEIDO_PLANES*(KALEIDO_HEIGHT-LAST_SLICE_HEIGHT)(a1),a1 lea (KALEIDO_BUF_WIDTH/8)*KALEIDO_PLANES*(KALEIDO_HEIGHT-LAST_SLICE_HEIGHT)(a2),a2 move.w #(KALEIDO_WIDTH>>4)|((LAST_SLICE_HEIGHT)<<6),d3 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-KALEIDO_WIDTH)/8,d0 ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_copy_ad_with_all,(a4)+ move.w d0,(a4)+ ; bltamod move.w d0,(a4)+ ; bltdmod move.l a1,(a4)+ ; bltapt move.l a2,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize rts .bq_copy_ad_with_all lea bltcon0(a5),a1 move.l #(BLTEN_AD+BLT_A)<<16,(a1)+ move.l (a0)+,bltamod(a5) ; bltamod/bltdmod moveq.l #-1,d0 move.l d0,(a1)+ ; bltafwm/bltalwm addq.l #8,a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_draw_p6_flip24: move.l pd_CurrPlanesPtr(a6),a1 lea 4*(KALEIDO_BUF_WIDTH/8)+(STENCIL_WIDTH/2)/8(a1),a1 ; plane 5 lea (KALEIDO_BUF_WIDTH/8)(a1),a2 ; plane 6 move.l pd_CurrP6Xor5PlanePtr(a6),a0 lea (STENCIL_WIDTH/2)/8(a0),a0 move.w #((2*STENCIL_WIDTH)>>4)|((KALEIDO_HEIGHT)<<6),d3 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-2*STENCIL_WIDTH)/8,d0 PREP_ADD_TO_BLITTER_QUEUE a3 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_xor_abcd_with_all,(a4)+ move.w d0,(a4)+ ; bltcmod move.w d0,(a4)+ ; bltbmod move.w d0,(a4)+ ; bltamod move.w d0,(a4)+ ; bltdmod move.l a1,(a4)+ ; bltcpt move.l a2,(a4)+ ; bltbpt move.l pd_HexagonTopMaskPtr(a6),(a4)+ ; bltapt move.l a0,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize move.w #((STENCIL_WIDTH)>>4)|((KALEIDO_HEIGHT)<<6),d3 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-STENCIL_WIDTH)/8,d0 lea (2*STENCIL_WIDTH)/8(a2),a2 lea (2*STENCIL_WIDTH)/8(a0),a0 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_copy_ad_with_all,(a4)+ move.w d0,(a4)+ ; bltamod move.w d0,(a4)+ ; bltdmod move.l a2,(a4)+ ; bltapt move.l a0,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize move.w #((STENCIL_WIDTH+STENCIL_WIDTH/2)>>4)|((KALEIDO_HEIGHT)<<6),d3 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-(STENCIL_WIDTH+STENCIL_WIDTH/2))/8,d0 lea (1*STENCIL_WIDTH)/8(a0),a0 lea -(3*STENCIL_WIDTH)/8(a0),a2 FAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_copy_ad_with_mods,(a4)+ move.w d0,(a4)+ ; bltamod move.w d0,(a4)+ ; bltdmod move.l a2,(a4)+ ; bltapt move.l a0,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize move.w #((STENCIL_WIDTH)>>4)|((KALEIDO_HEIGHT)<<6),d3 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-STENCIL_WIDTH)/8,d0 lea -(3*STENCIL_WIDTH+STENCIL_WIDTH/2)/8(a0),a0 lea (3*STENCIL_WIDTH)/8(a0),a2 LAST_ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_copy_ad_without_left,(a4)+ move.w d0,(a4)+ ; bltamod move.w d0,(a4)+ ; bltdmod move.l a2,(a4)+ ; bltapt move.l a0,(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize rts .bq_xor_abcd_with_all lea bltcon0(a5),a1 move.l #(BLTEN_ABCD+((BLT_B^(BLT_C&BLT_A))&$ff))<<16,(a1)+ ; bltcon0/1 move.l (a0)+,bltcmod(a5) ; bltcmod/bltbmod move.l (a0)+,bltamod(a5) ; bltamod/bltdmod moveq.l #-1,d0 move.l d0,(a1)+ ; bltafwm/bltalwm move.l (a0)+,(a1)+ ; bltcpt move.l (a0)+,(a1)+ ; bltbpt move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts .bq_copy_ad_with_all BLTCON0_SET AD,BLT_A,0 .bq_copy_ad_with_mods move.l (a0)+,bltamod(a5) ; bltamod/bltdmod lea bltapt(a5),a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts .bq_copy_ad_without_left BLTCON0_SET AD,BLT_A,0 move.w #$7fff,bltafwm(a5) move.l (a0)+,bltamod(a5) ; bltamod/bltdmod lea bltapt(a5),a1 move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_draw_p6_flip2: move.l pd_CurrPlanesPtr(a6),a1 lea 4*(KALEIDO_BUF_WIDTH/8)(a1),a1 ; plane 5 lea (KALEIDO_BUF_WIDTH/8)(a1),a2 ; plane 6 move.w #((KALEIDO_WIDTH)>>4)|((KALEIDO_HEIGHT)<<6),d3 move.w #(KALEIDO_BUF_WIDTH*KALEIDO_PLANES-KALEIDO_WIDTH)/8,d0 ADD_TO_BLITTER_QUEUE a4,a3 addq.l #4,a4 move.l #.bq_generic_abcd_with_all,(a4)+ move.l #(BLTEN_ABCD+((BLT_B^(BLT_C&BLT_A))&$ff))<<16,(a4)+ move.w d0,(a4)+ ; bltcmod move.w d0,(a4)+ ; bltbmod move.w d0,(a4)+ ; bltamod move.w d0,(a4)+ ; bltdmod move.l a1,(a4)+ ; bltcpt move.l a2,(a4)+ ; bltbpt move.l pd_HexagonTopMaskPtr(a6),(a4)+ ; bltapt move.l pd_CurrP6Xor5PlanePtr(a6),(a4)+ ; bltdpt move.w d3,(a4)+ ; bltsize rts .bq_generic_abcd_with_all lea bltcon0(a5),a1 move.l (a0)+,(a1)+ ; bltcon0/1 move.l (a0)+,bltcmod(a5) ; bltcmod/bltbmod move.l (a0)+,bltamod(a5) ; bltamod/bltdmod moveq.l #-1,d0 move.l d0,(a1)+ ; bltafwm/bltalwm move.l (a0)+,(a1)+ ; bltcpt move.l (a0)+,(a1)+ ; bltbpt move.l (a0)+,(a1)+ ; bltapt move.l (a0)+,(a1)+ ; bltdpt move.w (a0)+,(a1)+ ; bltsize rts ;-------------------------------------------------------------------- kds_calc_spline_pos: move.w pd_SplinePos(a6),d0 addq.w #2,d0 move.w d0,pd_SplinePos(a6) move.w #(SPLINE_TABLE_SIZE-1)*2,d1 and.w d0,d1 lea kds_bernstein0(pc),a0 adda.w d1,a0 lsr.w #6,d0 and.w #-4,d0 move.w d0,d1 add.w d1,d1 add.w d0,d1 ; *12 lea kds_fairy_points(pc),a1 movem.w (a1,d1.w),d0-d7 PUTMSG 20,<"%d,%d %d,%d %d,%d %d,%d">,d0,d1,d2,d3,d4,d5,d6,d7 mulu (a0),d0 mulu (a0),d1 mulu kds_bernstein1-kds_bernstein0(a0),d2 mulu kds_bernstein1-kds_bernstein0(a0),d3 add.l d2,d0 add.l d3,d1 move.w kds_bernstein2-kds_bernstein0(a0),d2 mulu d2,d4 mulu d2,d5 add.l d4,d0 add.l d5,d1 move.w kds_bernstein3-kds_bernstein0(a0),d2 mulu d2,d6 mulu d2,d7 add.l d6,d0 add.l d7,d1 move.l #$8000,d2 add.l d2,d0 add.l d2,d1 swap d0 swap d1 PUTMSG 20,<"XY %d,%d">,d0,d1 sub.w #KALEIDO_WIDTH/2,d0 sub.w #KALEIDO_VHEIGHT/2,d1 move.w d0,d3 move.w d1,d4 move.w d0,pd_FairyPosX(a6) move.w d1,pd_FairyPosY(a6) bsr.s .plant move.w pd_FairyPosX(a6),d3 move.w pd_FairyPosY(a6),d4 .plant lea pd_BackDust(a6),a1 move.w pd_NextBackDustOffset(a6),d2 add.w #fd_SIZEOF,d2 cmp.w #fd_SIZEOF*NUM_BACK_DUST,d2 bne.s .cont moveq.l #0,d2 .cont move.w d2,pd_NextBackDustOffset(a6) adda.w d2,a1 move.l pd_NoiseValueA(a6),d0 move.l pd_NoiseValueB(a6),d1 lea kds_dust_pos(pc),a0 moveq.l #15,d2 and.w d0,d2 add.w d2,d2 PUTMSG 20,<"Dustpos %d">,d2 add.w (a0,d2.w),d3 add.w 2*16(a0,d2.w),d4 moveq.l #31,d2 and.w d1,d2 add.w #32,d2 move.w d2,fd_Time(a1) move.w d3,fd_PosX(a1) move.w d4,fd_PosY(a1) move.l d1,d2 swap d2 add.l d0,d1 add.l d2,d0 move.l d0,pd_NoiseValueA(a6) move.l d1,pd_NoiseValueB(a6) swap d0 swap d1 asr.w #1,d0 asr.w #2,d1 ext.l d0 ext.l d1 move.l d0,fd_SpeedX(a1) move.l d1,fd_SpeedY(a1) rts ;-------------------------------------------------------------------- kds_update_fairy_sprite: move.w pd_FairyPosX(a6),d4 move.w pd_FairyPosY(a6),d1 IF 0 move.w pd_FairySpriteFrame(a6),d0 add.w #8*4,d0 and.w #3*(8*4),d0 move.w d0,pd_FairySpriteFrame(a6) lea pd_FairySprites1(a6),a2 adda.w d0,a2 move.l a2,pd_CurrFairySprite(a6) ENDC move.l pd_CurrFairySprite(a6),a2 add.w #128-(FAIRY_WIDTH/2),d4 add.w #$52-(FAIRY_HEIGHT/2),d1 ;add.w #$52,d1 move.w d1,d2 add.w #FAIRY_HEIGHT,d2 moveq.l #0,d0 lsl.w #8,d1 ; sv7-sv0 in d1 addx.w d0,d0 ; sv8 lsl.w #8,d2 ; ev7-ev0 in d2 addx.w d0,d0 ; ev8 lsr.w #1,d4 ; sh8-sh1 in d4 addx.w d0,d0 ; sh0 or.w d2,d0 ; ev7-ev0, sv8, ev8, sh0 in d0 or.w d1,d4 ; sv7-sv0, sh8-sh1 in d4 tas d0 ; att TAS sets bit 7 .filldata REPT (FAIRY_WIDTH/16) move.l (a2)+,a0 move.l (a2)+,a1 move.w d4,(a0)+ move.w d0,(a0)+ move.w d4,(a1)+ move.w d0,(a1)+ addq.w #8,d4 ENDR rts ;-------------------------------------------------------------------- kds_update_stencil_sprite: move.l pd_CurrSpriteStencilPtr(a6),a2 move.w #128+96,d0 move.w #$52+37,d1 move.w d1,d2 add.w #INTRO_SPRITE_SHEIGHT,d2 moveq.l #0,d3 lsl.w #8,d1 ; sv7-sv0 in d1 addx.w d3,d3 ; sv8 lsl.w #8,d2 ; ev7-ev0 in d2 addx.w d3,d3 ; ev8 lsr.w #1,d0 ; sh8-sh1 in d0 addx.w d3,d3 ; sh0 or.w d2,d3 ; ev7-ev0, sv8, ev8, sh0 in d3 or.w d1,d0 ; sv7-sv0, sh8-sh1 in d0 ;tas d3 ; att TAS sets bit 7 .filldata REPT 8 move.l (a2)+,a0 move.w d0,(a0)+ move.w d3,(a0)+ addq.w #8,d0 ENDR rts ;-------------------------------------------------------------------- kds_update_stencil_pre_main_sprite: move.l pd_CurrSpriteStencilPtr(a6),a2 move.w #128,d0 move.w #$52,d1 move.w d1,d2 add.w #INTRO_SPRITE_HEIGHT,d2 moveq.l #0,d3 lsl.w #8,d1 ; sv7-sv0 in d1 addx.w d3,d3 ; sv8 lsl.w #8,d2 ; ev7-ev0 in d2 addx.w d3,d3 ; ev8 lsr.w #1,d0 ; sh8-sh1 in d0 addx.w d3,d3 ; sh0 or.w d2,d3 ; ev7-ev0, sv8, ev8, sh0 in d3 or.w d1,d0 ; sv7-sv0, sh8-sh1 in d0 ;tas d3 ; att TAS sets bit 7 .filldata REPT 8 move.l (a2)+,a0 move.w d0,(a0)+ move.w d3,(a0)+ addq.w #8,d0 ENDR rts ;-------------------------------------------------------------------- kds_kill_stencil_sprite: move.l pd_CurrSpriteStencilPtr(a6),a2 moveq.l #0,d0 REPT 8 move.l (a2)+,a0 move.l d0,(a0) ENDR rts ;-------------------------------------------------------------------- kds_update_sprites_and_cols_in_copperlist: move.l pd_CurrCopListPtr(a6),a0 move.l pd_CurrFairySprite(a6),a1 move.w #sprpt,d1 moveq.l #(FAIRY_WIDTH/16)*4-1,d7 .sprloop move.w d1,(a0)+ move.w (a1)+,(a0)+ addq.w #2,d1 dbra d7,.sprloop lea pd_IntroPalette(a6),a1 REPT 8 move.w REPTN*cl_SIZEOF+cl_Color(a1),REPTN*4+2(a0) ENDR rts ;-------------------------------------------------------------------- kds_update_sprites_in_copperlist: move.l pd_CurrCopListPtr(a6),a0 move.l pd_CurrFairySprite(a6),a1 move.w #sprpt,d1 moveq.l #(INTRO_SPRITE_WIDTH/16)*2-1,d7 .sprloop move.w d1,(a0)+ move.w (a1)+,(a0)+ addq.w #2,d1 dbra d7,.sprloop rts ;-------------------------------------------------------------------- kds_create_intro_copperlist: move.l pd_CurrCopListPtr(a6),a0 move.l pd_CurrFairySprite(a6),a1 move.w #sprpt,d1 moveq.l #(FAIRY_WIDTH/16)*4-1,d7 .sprloop move.w d1,(a0)+ move.w (a1)+,(a0)+ addq.w #2,d1 dbra d7,.sprloop lea pd_IntroPalette(a6),a1 moveq.l #8-1,d7 move.w #color,d0 .blloop move.w d0,(a0)+ move.w cl_Color(a1),(a0)+ lea cl_SIZEOF(a1),a1 addq.w #2,d0 dbra d7,.blloop COPIMOVE DMAF_SETCLR|DMAF_SPRITE,dmacon ; enable sprite dma ; screen width : 128 -> offset +96 ; screen height: 53*2-1 = 105 -> offset +37 COPIMOVE $3200,bplcon0 COPIMOVE $0081+((($52+37)&$ff)<<8),diwstrt COPIMOVE $00c1+((($06-38)&$ff)<<8),diwstop COPIMOVE $0038+(96/2),ddfstrt COPIMOVE $00d0-(96/2),ddfstop move.l pd_CurrPlanesPtr(a6),d0 add.l #1*(KALEIDO_BUF_WIDTH/8),d0 ; select p2/p3/p4 moveq.l #KALEIDO_BUF_WIDTH/8,d2 move.w #bplpt,d1 moveq.l #3-1,d7 .bplloop move.w d1,(a0)+ swap d0 move.w d0,(a0)+ addq.w #2,d1 move.w d1,(a0)+ swap d0 move.w d0,(a0)+ addq.w #2,d1 add.l d2,d0 dbra d7,.bplloop moveq.l #-2,d3 COPIMOVE (KALEIDO_BUF_WIDTH*KALEIDO_PLANES-128)/8,bpl1mod COPIMOVE (KALEIDO_BUF_WIDTH*KALEIDO_PLANES-128)/8,bpl2mod move.w #$0037+((($51)&$ff)<<8),d0 move.w #$100,d2 moveq.l #37+STENCIL_HEIGHT,d7 bsr .dolines move.w #$07+((($51+37+STENCIL_HEIGHT)&$ff)<<8),(a0)+ move.w d3,(a0)+ COPIMOVE (-1*KALEIDO_BUF_WIDTH*KALEIDO_PLANES-128)/8,bpl1mod COPIMOVE (-1*KALEIDO_BUF_WIDTH*KALEIDO_PLANES-128)/8,bpl2mod moveq.l #STENCIL_HEIGHT,d7 bsr .dolines move.l d3,(a0)+ rts .dolines .cprloop move.w d0,(a0)+ move.w d3,(a0)+ COPIMOVE $0000,bpldat+2*2 COPIMOVE $0000,bpldat+1*2 COPIMOVE $0000,bpldat add.w d2,d0 dbra d7,.cprloop rts ;-------------------------------------------------------------------- kds_create_transition_copperlist: move.l pd_CurrCopListPtr(a6),a0 move.l a0,a2 move.l pd_CurrFairySprite(a6),a1 move.w #sprpt,d1 moveq.l #(FAIRY_WIDTH/16)*4-1,d7 .sprloop move.w d1,(a0)+ move.w (a1)+,(a0)+ addq.w #2,d1 dbra d7,.sprloop COPIMOVE DMAF_SETCLR|DMAF_SPRITE,dmacon ; enable sprite dma ; screen width : 128 -> offset +96 ; screen height: 53*2-1 = 105 -> offset +37 COPIMOVE $0081+((($52+37)&$ff)<<8),diwstrt COPIMOVE $00c1+((($06-38)&$ff)<<8),diwstop COPIMOVE $0038+(96/2),ddfstrt COPIMOVE $00d0-(96/2),ddfstop move.w pd_TransitionHeight(a6),d4 beq.s .noham move.l pd_CurrPlanesPtr(a6),d0 addq.l #(128/8)/2,d0 addq.l #(128/8)/2,d0 move.w #$6a00,d3 moveq.l #KALEIDO_PLANES-1,d7 bra.s .didham .noham bsr .dopal move.w #$4200,d3 moveq.l #4-1,d7 move.l pd_CurrPlanesPtr(a6),d0 .didham COPRMOVE d3,bplcon0 moveq.l #KALEIDO_BUF_WIDTH/8,d2 move.w #bplpt,d1 .bplloop move.w d1,(a0)+ swap d0 move.w d0,(a0)+ addq.w #2,d1 move.w d1,(a0)+ swap d0 move.w d0,(a0)+ addq.w #2,d1 add.l d2,d0 dbra d7,.bplloop moveq.l #-2,d3 move.w #$00d5+((($51+37)&$ff)<<8),d0 move.w #$100,d2 COPIMOVE (KALEIDO_BUF_WIDTH*KALEIDO_PLANES-128)/8,bpl1mod COPIMOVE (KALEIDO_BUF_WIDTH*KALEIDO_PLANES-128)/8,bpl2mod move.l a0,d1 sub.l a2,d1 addq.w #4+2,d1 move.w d1,pd_CopperLinesFixupOffset1(a6) move.w d4,d7 beq.s .skip1 cmp.w #STENCIL_HEIGHT,d7 blt.s .nomax1 moveq.l #STENCIL_HEIGHT,d7 .nomax1 subq.w #1,d7 bsr .dolines cmp.w #STENCIL_HEIGHT,d4 bgt.s .skip1b blt.s .normalskip COPIMOVE (-1*KALEIDO_BUF_WIDTH*KALEIDO_PLANES-128-128)/8,bpl1mod COPIMOVE (-1*KALEIDO_BUF_WIDTH*KALEIDO_PLANES-128-128)/8,bpl2mod bra.s .matchskip .normalskip COPIMOVE (KALEIDO_BUF_WIDTH*KALEIDO_PLANES-128-128)/8,bpl1mod COPIMOVE (KALEIDO_BUF_WIDTH*KALEIDO_PLANES-128-128)/8,bpl2mod .matchskip move.w d0,d1 move.b #$c1,d1 move.w d1,(a0)+ move.w d3,(a0)+ COPIMOVE $4200,bplcon0 cmp.w #STENCIL_HEIGHT,d4 bne.s .normalskip2 COPIMOVE (-1*KALEIDO_BUF_WIDTH*KALEIDO_PLANES-128)/8,bpl1mod COPIMOVE (-1*KALEIDO_BUF_WIDTH*KALEIDO_PLANES-128)/8,bpl2mod bra.s .matchskip2 .normalskip2 COPIMOVE (KALEIDO_BUF_WIDTH*KALEIDO_PLANES-128)/8,bpl1mod COPIMOVE (KALEIDO_BUF_WIDTH*KALEIDO_PLANES-128)/8,bpl2mod .matchskip2 bsr .dopal cmp.w #STENCIL_HEIGHT,d4 beq.s .modsset .skip1 move.w #$07+((($51+37+STENCIL_HEIGHT)&$ff)<<8),(a0)+ move.w d3,(a0)+ .skip1b COPIMOVE (-1*KALEIDO_BUF_WIDTH*KALEIDO_PLANES-128)/8,bpl1mod COPIMOVE (-1*KALEIDO_BUF_WIDTH*KALEIDO_PLANES-128)/8,bpl2mod .modsset move.l a0,d1 sub.l a2,d1 addq.w #4+2,d1 move.w d1,pd_CopperLinesFixupOffset2(a6) move.w d4,d7 sub.w #STENCIL_HEIGHT,d7 ble.s .skip2 subq.w #1,d7 bsr .dolines COPIMOVE (-1*KALEIDO_BUF_WIDTH*KALEIDO_PLANES-128-128)/8,bpl1mod COPIMOVE (-1*KALEIDO_BUF_WIDTH*KALEIDO_PLANES-128-128)/8,bpl2mod move.w d0,d1 move.b #$c1,d1 move.w d1,(a0)+ move.w d3,(a0)+ COPIMOVE $4200,bplcon0 COPIMOVE (-1*KALEIDO_BUF_WIDTH*KALEIDO_PLANES-128)/8,bpl1mod COPIMOVE (-1*KALEIDO_BUF_WIDTH*KALEIDO_PLANES-128)/8,bpl2mod bsr.s .dopal .skip2 move.l d3,(a0)+ rts .dolines .cprloop move.w d0,(a0)+ move.w d3,(a0)+ COPIMOVE $400,(color+1*2) COPIMOVE $080,(color+2*2) COPIMOVE $00c,(color+3*2) add.w d2,d0 dbra d7,.cprloop rts .dopal lea kds_intro_palette(pc),a1 moveq.l #8-1,d7 move.w #color,d0 .blloop move.w d0,(a0)+ move.w (a1)+,(a0)+ addq.w #4,d0 dbra d7,.blloop rts ;-------------------------------------------------------------------- kds_create_pre_main_copperlist: move.l pd_CurrCopListPtr(a6),a0 move.l a0,a2 move.l pd_CurrFairySprite(a6),a1 move.w #sprpt,d1 moveq.l #(FAIRY_WIDTH/16)*4-1,d7 .sprloop move.w d1,(a0)+ move.w (a1)+,(a0)+ addq.w #2,d1 dbra d7,.sprloop COPIMOVE DMAF_SETCLR|DMAF_SPRITE,dmacon ; enable sprite dma move.l #$1fe0000,d4 COPIMOVE $6a00,bplcon0 move.l pd_CurrPlanesPtr(a6),d0 moveq.l #KALEIDO_PLANES-1,d7 move.w #bplpt,d1 moveq.l #KALEIDO_BUF_WIDTH/8,d2 .bplloop move.w d1,(a0)+ swap d0 move.w d0,(a0)+ addq.w #2,d1 move.w d1,(a0)+ swap d0 move.w d0,(a0)+ addq.w #2,d1 add.l d2,d0 dbra d7,.bplloop moveq.l #-2,d3 move.w #$51d5,d0 move.w #$100,d2 COPIMOVE (KALEIDO_BUF_WIDTH*KALEIDO_PLANES-KALEIDO_WIDTH)/8,bpl1mod COPIMOVE (KALEIDO_BUF_WIDTH*KALEIDO_PLANES-KALEIDO_WIDTH)/8,bpl2mod move.l a0,d1 sub.l a2,d1 addq.w #4+2,d1 move.w d1,pd_CopperLinesFixupOffset1(a6) moveq.l #STENCIL_HEIGHT-1,d7 bsr .dolines ;COPIMOVE $0200,bplcon0 ;move.l d3,(a0)+ move.l a0,d1 sub.l a2,d1 move.w d1,pd_CopperMirror1P5PtrOffset(a6) move.l d4,(a0)+ move.l d4,(a0)+ COPIMOVE (-1*KALEIDO_BUF_WIDTH*KALEIDO_PLANES-KALEIDO_WIDTH)/8,bpl1mod COPIMOVE (-1*KALEIDO_BUF_WIDTH*KALEIDO_PLANES-KALEIDO_WIDTH)/8,bpl2mod move.l a0,d1 sub.l a2,d1 addq.w #4+2,d1 move.w d1,pd_CopperLinesFixupOffset2(a6) moveq.l #STENCIL_HEIGHT-1-1,d7 bsr .dolines COPIMOVE (KALEIDO_BUF_WIDTH*KALEIDO_PLANES-KALEIDO_WIDTH)/8,bpl1mod COPIMOVE (KALEIDO_BUF_WIDTH*KALEIDO_PLANES-KALEIDO_WIDTH)/8,bpl2mod move.l a0,d1 sub.l a2,d1 addq.w #4+2,d1 move.w d1,pd_CopperLinesFixupOffset3(a6) moveq.l #STENCIL_HEIGHT-1-1,d7 bsr .dolines COPIMOVE (-1*KALEIDO_BUF_WIDTH*KALEIDO_PLANES-KALEIDO_WIDTH)/8,bpl1mod COPIMOVE (-1*KALEIDO_BUF_WIDTH*KALEIDO_PLANES-KALEIDO_WIDTH)/8,bpl2mod move.l a0,d1 sub.l a2,d1 addq.w #4+2,d1 move.w d1,pd_CopperLinesFixupOffset4(a6) moveq.l #(LAST_SLICE_HEIGHT)-1,d7 bsr .dolines move.l d3,(a0)+ rts .dolines .cprloop move.w d0,(a0)+ move.w d3,(a0)+ add.w d2,d0 COPIMOVE $346,(color+6*2) COPIMOVE $346,(color+1*2) COPIMOVE $346,(color+2*2) COPIMOVE $346,(color+3*2) COPIMOVE $346,(color+4*2) COPIMOVE $346,(color+7*2) COPIMOVE $346,(color+5*2) move.w d0,d1 move.b #$1b,d1 move.w d1,(a0)+ move.w d3,(a0)+ COPIMOVE $5240,spr+sd_pos+0*sd_SIZEOF COPIMOVE $5248,spr+sd_pos+1*sd_SIZEOF COPIMOVE $5250,spr+sd_pos+2*sd_SIZEOF COPIMOVE $5258,spr+sd_pos+3*sd_SIZEOF COPIMOVE $5260,spr+sd_pos+4*sd_SIZEOF COPIMOVE $5268,spr+sd_pos+5*sd_SIZEOF COPIMOVE $5270,spr+sd_pos+6*sd_SIZEOF COPIMOVE $5278,spr+sd_pos+7*sd_SIZEOF COPIMOVE $5280,spr+sd_pos+0*sd_SIZEOF COPIMOVE $5288,spr+sd_pos+1*sd_SIZEOF COPIMOVE $5290,spr+sd_pos+2*sd_SIZEOF COPIMOVE $5298,spr+sd_pos+3*sd_SIZEOF COPIMOVE $52a0,spr+sd_pos+4*sd_SIZEOF COPIMOVE $52a8,spr+sd_pos+5*sd_SIZEOF COPIMOVE $52b0,spr+sd_pos+6*sd_SIZEOF COPIMOVE $52b8,spr+sd_pos+7*sd_SIZEOF COPIMOVE $52c0,spr+sd_pos+0*sd_SIZEOF COPIMOVE $52c8,spr+sd_pos+1*sd_SIZEOF COPIMOVE $52d0,spr+sd_pos+2*sd_SIZEOF COPIMOVE $52d8,spr+sd_pos+3*sd_SIZEOF dbra d7,.cprloop rts ;-------------------------------------------------------------------- kds_create_kaleidoscope_copperlist: move.l pd_CurrCopListPtr(a6),a0 move.l a0,a2 move.l #$1fe0000,d4 COPIMOVE DMAF_SPRITE,dmacon ; disable sprite dma COPIMOVE $6a00,bplcon0 move.l pd_CurrPlanesPtr(a6),d0 moveq.l #KALEIDO_PLANES-1,d7 move.w #bplpt,d1 moveq.l #KALEIDO_BUF_WIDTH/8,d2 .bplloop move.w d1,(a0)+ swap d0 move.w d0,(a0)+ addq.w #2,d1 move.w d1,(a0)+ swap d0 move.w d0,(a0)+ addq.w #2,d1 add.l d2,d0 dbra d7,.bplloop moveq.l #-2,d3 move.w #$51d5,d0 move.w #$100,d2 COPIMOVE (KALEIDO_BUF_WIDTH*KALEIDO_PLANES-KALEIDO_WIDTH)/8,bpl1mod COPIMOVE (KALEIDO_BUF_WIDTH*KALEIDO_PLANES-KALEIDO_WIDTH)/8,bpl2mod move.l a0,d1 sub.l a2,d1 addq.w #4+2,d1 move.w d1,pd_CopperLinesFixupOffset1(a6) moveq.l #STENCIL_HEIGHT-1,d7 bsr .dolines move.l a0,d1 sub.l a2,d1 move.w d1,pd_CopperMirror1P5PtrOffset(a6) move.l d4,(a0)+ move.l d4,(a0)+ COPIMOVE (-1*KALEIDO_BUF_WIDTH*KALEIDO_PLANES-KALEIDO_WIDTH)/8,bpl1mod COPIMOVE (-1*KALEIDO_BUF_WIDTH*KALEIDO_PLANES-KALEIDO_WIDTH)/8,bpl2mod move.l a0,d1 sub.l a2,d1 addq.w #4+2,d1 move.w d1,pd_CopperLinesFixupOffset2(a6) moveq.l #STENCIL_HEIGHT-1-1,d7 bsr .dolines move.l a0,d1 sub.l a2,d1 move.w d1,pd_CopperMirror2P56PtrOffset(a6) move.l d4,(a0)+ move.l d4,(a0)+ move.l d4,(a0)+ move.l d4,(a0)+ COPIMOVE (KALEIDO_BUF_WIDTH*KALEIDO_PLANES-KALEIDO_WIDTH)/8,bpl1mod COPIMOVE (KALEIDO_BUF_WIDTH*KALEIDO_PLANES-KALEIDO_WIDTH)/8,bpl2mod move.l a0,d1 sub.l a2,d1 addq.w #4+2,d1 move.w d1,pd_CopperLinesFixupOffset3(a6) moveq.l #STENCIL_HEIGHT-1-1,d7 bsr .dolines move.l a0,d1 sub.l a2,d1 move.w d1,pd_CopperMirror3P5PtrOffset(a6) move.l d4,(a0)+ move.l d4,(a0)+ COPIMOVE (-1*KALEIDO_BUF_WIDTH*KALEIDO_PLANES-KALEIDO_WIDTH)/8,bpl1mod COPIMOVE (-1*KALEIDO_BUF_WIDTH*KALEIDO_PLANES-KALEIDO_WIDTH)/8,bpl2mod move.l a0,d1 sub.l a2,d1 addq.w #4+2,d1 move.w d1,pd_CopperLinesFixupOffset4(a6) moveq.l #(LAST_SLICE_HEIGHT)-1,d7 bsr .dolines move.l d3,(a0)+ rts .dolines .cprloop move.w d0,(a0)+ move.w d3,(a0)+ COPIMOVE $346,(color+6*2) COPIMOVE $346,(color+1*2) COPIMOVE $346,(color+2*2) COPIMOVE $346,(color+3*2) COPIMOVE $346,(color+4*2) COPIMOVE $346,(color+7*2) COPIMOVE $346,(color+5*2) COPIMOVE $346,(color+14*2) COPIMOVE $346,(color+9*2) COPIMOVE $346,(color+10*2) add.w d2,d0 dbra d7,.cprloop rts ;-------------------------------------------------------------------- kds_calc_true_color_image: PUTMSG 10,<"TC Image %p">,a1 move.w #KDSPAT_HEIGHT,-(sp) .lineloop moveq.l #(KDSPAT_WIDTH/16)-1,d7 move.w (a2),d6 ; background color swap d6 .wordloop move.w 5*(KDSPAT_WIDTH/8)(a0),d5 move.w 4*(KDSPAT_WIDTH/8)(a0),d4 move.w 3*(KDSPAT_WIDTH/8)(a0),d3 move.w 2*(KDSPAT_WIDTH/8)(a0),d2 move.w 1*(KDSPAT_WIDTH/8)(a0),d1 move.w (a0)+,d0 swap d7 move.w #15,d7 .pixelloop clr.w d6 add.w d3,d3 addx.w d6,d6 add.w d2,d2 addx.w d6,d6 add.w d1,d1 addx.w d6,d6 add.w d0,d0 addx.w d6,d6 add.w d5,d5 bcc.s .blue .greenOrRed add.w d4,d4 bcs.s .green .red PUTMSG 50,<"Red %d">,d6 move.b d6,(a1) swap d6 move.b d6,1(a1) move.w (a1)+,d6 bra.s .contloop .green PUTMSG 50,<"Green %d">,d6 move.w d7,a4 move.w d6,d7 lsl.w #4,d7 swap d6 and.w #$f0f,d6 or.w d7,d6 move.w d6,(a1)+ move.w a4,d7 bra.s .contloop .blue add.w d4,d4 PUTMSG 50,<"Blue %d">,d6 move.w d7,a4 move.w d6,d7 swap d6 and.w #$ff0,d6 or.w d7,d6 move.w d6,(a1)+ move.w a4,d7 .contloop swap d6 dbra d7,.pixelloop swap d7 dbra d7,.wordloop .nextline lea 5*(KDSPAT_WIDTH/8)(a0),a0 subq.w #1,(sp) bne .lineloop addq.w #2,sp rts ;-------------------------------------------------------------------- ;-------------------------------------------------------------------- ;-------------------------------------------------------------------- ; a0: SMC buffer ; d0-d3: x1,y1 - x2,y2 ; d4: lineinc ; d7 high word not trashed kds_bresenham_smc_line_draw: PUTMSG 10,<"SMC Buffer %p">,a0 moveq.l #2,d5 sub.w d1,d3 sub.w d0,d2 bpl.s .rightwards moveq.l #-2,d5 neg.w d2 .rightwards add.w d0,d0 move.w d3,d1 ; error term move.w d3,d7 add.w d2,d2 ; dx * 2 add.w d3,d3 ; dy * 2 .lineloop move.w #$32e8,(a0)+ ; move.w x(a0),(a1)+ move.w d0,(a0)+ add.w d4,d0 sub.w d2,d1 dble d7,.lineloop add.w d3,d1 add.w d5,d0 subq.w #1,d7 bpl.s .lineloop .done1 move.w #$4e75,(a0)+ ; rts rts kds_setting1_coplist: kds_setting2_coplist: move.l pd_CurrCopListPtr(a6),a2 move.l a2,a0 move.w #$1fe,d0 adda.w pd_CopperMirror1P5PtrOffset(a6),a0 move.w d0,(a0) move.w d0,4(a0) move.l a2,a0 adda.w pd_CopperMirror2P56PtrOffset(a6),a0 move.w d0,(a0) move.w d0,4(a0) move.w d0,8(a0) move.w d0,12(a0) adda.w pd_CopperMirror3P5PtrOffset(a6),a2 move.w d0,(a2) move.w d0,4(a2) rts kds_setting3_coplist: move.l pd_CurrCopListPtr(a6),a2 move.l a2,a0 adda.w pd_CopperMirror1P5PtrOffset(a6),a0 move.l pd_CurrP5Xor6PlanePtr(a6),a1 lea (STENCIL_HEIGHT-1)*(KALEIDO_BUF_WIDTH/8)*KALEIDO_PLANES(a1),a1 move.l a1,d0 swap d0 move.w #bplpt+4*4,(a0)+ move.w d0,(a0)+ move.w #bplpt+4*4+2,(a0)+ move.w a1,(a0)+ move.w #$1fe,d0 move.l a2,a0 adda.w pd_CopperMirror2P56PtrOffset(a6),a0 move.w d0,(a0) move.w d0,4(a0) move.w d0,8(a0) move.w d0,12(a0) adda.w pd_CopperMirror3P5PtrOffset(a6),a2 move.l pd_CurrPlanesPtr(a6),a1 lea (STENCIL_HEIGHT-1)*(KALEIDO_BUF_WIDTH/8)*KALEIDO_PLANES+4*(KALEIDO_BUF_WIDTH/8)(a1),a1 move.l a1,d0 swap d0 move.w #bplpt+4*4,(a2)+ move.w d0,(a2)+ move.w #bplpt+4*4+2,(a2)+ move.w a1,(a2)+ rts kds_setting4_coplist: move.l pd_CurrCopListPtr(a6),a2 move.l a2,a0 adda.w pd_CopperMirror1P5PtrOffset(a6),a0 move.l pd_CurrP5Xor6PlanePtr(a6),a1 lea (STENCIL_HEIGHT-1)*(KALEIDO_BUF_WIDTH/8)*KALEIDO_PLANES(a1),a1 move.l a1,d0 swap d0 move.w #bplpt+4*4,(a0)+ move.w d0,(a0)+ move.w #bplpt+4*4+2,(a0)+ move.w a1,(a0)+ move.l a2,a0 adda.w pd_CopperMirror2P56PtrOffset(a6),a0 move.w #bplpt+5*4,(a0)+ move.w pd_CurrP6Xor5PlanePtr(a6),(a0)+ move.w #bplpt+5*4+2,(a0)+ move.w pd_CurrP6Xor5PlanePtr+2(a6),(a0)+ move.w #$1fe,d0 move.w d0,(a0) move.w d0,4(a0) adda.w pd_CopperMirror3P5PtrOffset(a6),a2 move.l pd_CurrPlanesPtr(a6),a1 lea (STENCIL_HEIGHT-1)*(KALEIDO_BUF_WIDTH/8)*KALEIDO_PLANES+4*(KALEIDO_BUF_WIDTH/8)(a1),a1 move.l a1,d0 swap d0 move.w #bplpt+4*4,(a2)+ move.w d0,(a2)+ move.w #bplpt+4*4+2,(a2)+ move.w a1,(a2)+ rts kds_setting5_coplist: kds_setting6_coplist: move.l pd_CurrCopListPtr(a6),a2 move.l a2,a0 adda.w pd_CopperMirror1P5PtrOffset(a6),a0 move.l pd_CurrP5Xor6PlanePtr(a6),a1 lea (STENCIL_HEIGHT-1)*(KALEIDO_BUF_WIDTH/8)*KALEIDO_PLANES(a1),a1 move.l a1,d0 swap d0 move.w #bplpt+4*4,(a0)+ move.w d0,(a0)+ move.w #bplpt+4*4+2,(a0)+ move.w a1,(a0)+ move.l a2,a0 adda.w pd_CopperMirror2P56PtrOffset(a6),a0 move.w #bplpt+4*4,(a0)+ move.w pd_CurrP5BonusPlanePtr(a6),(a0)+ move.w #bplpt+4*4+2,(a0)+ move.w pd_CurrP5BonusPlanePtr+2(a6),(a0)+ move.w #bplpt+5*4,(a0)+ move.w pd_CurrP6Xor5PlanePtr(a6),(a0)+ move.w #bplpt+5*4+2,(a0)+ move.w pd_CurrP6Xor5PlanePtr+2(a6),(a0)+ adda.w pd_CopperMirror3P5PtrOffset(a6),a2 move.l pd_CurrP5BottomPlanePtr(a6),a1 lea (STENCIL_HEIGHT-1)*(KALEIDO_BUF_WIDTH/8)*KALEIDO_PLANES(a1),a1 move.l a1,d0 swap d0 move.w #bplpt+4*4,(a2)+ move.w d0,(a2)+ move.w #bplpt+4*4+2,(a2)+ move.w a1,(a2)+ rts kds_setting1_draw: bsr kds_draw_stencils_col0000 bra kds_draw_stencils_copy_edges kds_setting2_draw: bsr kds_draw_stencils_col1010 bra kds_draw_stencils_copy_edges kds_setting3_draw: bsr kds_draw_stencils_col1010 bsr kds_draw_stencils_copy_edges bra kds_draw_p5_flip13 kds_setting4_draw: bsr kds_draw_stencils_col1010 bsr kds_draw_stencils_copy_edges bsr kds_draw_p5_flip13 bra kds_draw_p6_flip24 kds_setting5_draw: pea kds_draw_bonus_stuff_for_col2(pc) pea kds_draw_p6_flip24(pc) pea kds_draw_p5_flip4_to_bottom(pc) pea kds_draw_p5_flip4_to_bonus(pc) pea kds_draw_p5_flip134(pc) pea kds_draw_stencils_copy_edges(pc) bra kds_draw_stencils_col1010 kds_setting6_draw: pea kds_draw_bonus_stuff_for_col5(pc) pea kds_draw_bonus_stuff_for_col2(pc) pea kds_draw_p6_flip24(pc) pea kds_draw_p5_flip5_to_bottom(pc) pea kds_draw_p5_flip4_to_bonus(pc) pea kds_draw_p5_flip134(pc) pea kds_draw_stencils_copy_edges(pc) bra kds_draw_stencils_col1010 kds_setting_nop: rts ;-------------------------------------------------------------------- include "blitterline_sync.asm" ;******************************************************************** LCOLDEF MACRO IF \1==0 dc.w (\2)*LCOLBUF_HEIGHT*2 dc.w (\3)*LCOLBUF_HEIGHT*2 dc.w (\4)*LCOLBUF_HEIGHT*2 dc.w (\5)*LCOLBUF_HEIGHT*2 dc.w (\6)*LCOLBUF_HEIGHT*2 dc.w (\7)*LCOLBUF_HEIGHT*2 dc.w (\8)*LCOLBUF_HEIGHT*2 dc.w (\2)*LCOLBUF_HEIGHT*2 dc.w (\3)*LCOLBUF_HEIGHT*2 dc.w (\4)*LCOLBUF_HEIGHT*2 ENDC IF \1==1 dc.w \1*((STENCIL_HEIGHT-1)*2-2)+(\2)*LCOLBUF_HEIGHT*2 dc.w \1*((STENCIL_HEIGHT-1)*2-2)+(\3)*LCOLBUF_HEIGHT*2 dc.w \1*((STENCIL_HEIGHT-1)*2-2)+(\4)*LCOLBUF_HEIGHT*2 dc.w \1*((STENCIL_HEIGHT-1)*2-2)+(\5)*LCOLBUF_HEIGHT*2 dc.w \1*((STENCIL_HEIGHT-1)*2-2)+(\6)*LCOLBUF_HEIGHT*2 dc.w \1*((STENCIL_HEIGHT-1)*2-2)+(\7)*LCOLBUF_HEIGHT*2 dc.w \1*((STENCIL_HEIGHT-1)*2-2)+(\8)*LCOLBUF_HEIGHT*2 dc.w \1*((STENCIL_HEIGHT-1)*2-2)+(\2)*LCOLBUF_HEIGHT*2 dc.w \1*((STENCIL_HEIGHT-1)*2-2)+(\3)*LCOLBUF_HEIGHT*2 dc.w \1*((STENCIL_HEIGHT-1)*2-2)+(\4)*LCOLBUF_HEIGHT*2 ENDC IF \1==2 dc.w 2+(\2)*LCOLBUF_HEIGHT*2 dc.w 2+(\3)*LCOLBUF_HEIGHT*2 dc.w 2+(\4)*LCOLBUF_HEIGHT*2 dc.w 2+(\5)*LCOLBUF_HEIGHT*2 dc.w 2+(\6)*LCOLBUF_HEIGHT*2 dc.w 2+(\7)*LCOLBUF_HEIGHT*2 dc.w 2+(\8)*LCOLBUF_HEIGHT*2 dc.w 2+(\2)*LCOLBUF_HEIGHT*2 dc.w 2+(\3)*LCOLBUF_HEIGHT*2 dc.w 2+(\4)*LCOLBUF_HEIGHT*2 ENDC ENDM LCOLDEX MACRO IF \1==0 dc.w (\2)*LCOLBUF_HEIGHT*2 dc.w (\3)*LCOLBUF_HEIGHT*2 dc.w (\4)*LCOLBUF_HEIGHT*2 dc.w (\5)*LCOLBUF_HEIGHT*2 dc.w (\6)*LCOLBUF_HEIGHT*2 dc.w (\7)*LCOLBUF_HEIGHT*2 dc.w (\8)*LCOLBUF_HEIGHT*2 dc.w (\9)*LCOLBUF_HEIGHT*2 dc.w (\a)*LCOLBUF_HEIGHT*2 dc.w (\b)*LCOLBUF_HEIGHT*2 ENDC IF \1==1 dc.w \1*((STENCIL_HEIGHT-1)*2-2)+(\2)*LCOLBUF_HEIGHT*2 dc.w \1*((STENCIL_HEIGHT-1)*2-2)+(\3)*LCOLBUF_HEIGHT*2 dc.w \1*((STENCIL_HEIGHT-1)*2-2)+(\4)*LCOLBUF_HEIGHT*2 dc.w \1*((STENCIL_HEIGHT-1)*2-2)+(\5)*LCOLBUF_HEIGHT*2 dc.w \1*((STENCIL_HEIGHT-1)*2-2)+(\6)*LCOLBUF_HEIGHT*2 dc.w \1*((STENCIL_HEIGHT-1)*2-2)+(\7)*LCOLBUF_HEIGHT*2 dc.w \1*((STENCIL_HEIGHT-1)*2-2)+(\8)*LCOLBUF_HEIGHT*2 dc.w \1*((STENCIL_HEIGHT-1)*2-2)+(\9)*LCOLBUF_HEIGHT*2 dc.w \1*((STENCIL_HEIGHT-1)*2-2)+(\a)*LCOLBUF_HEIGHT*2 dc.w \1*((STENCIL_HEIGHT-1)*2-2)+(\b)*LCOLBUF_HEIGHT*2 ENDC IF \1==2 dc.w 2+(\2)*LCOLBUF_HEIGHT*2 dc.w 2+(\3)*LCOLBUF_HEIGHT*2 dc.w 2+(\4)*LCOLBUF_HEIGHT*2 dc.w 2+(\5)*LCOLBUF_HEIGHT*2 dc.w 2+(\6)*LCOLBUF_HEIGHT*2 dc.w 2+(\7)*LCOLBUF_HEIGHT*2 dc.w 2+(\8)*LCOLBUF_HEIGHT*2 dc.w 2+(\9)*LCOLBUF_HEIGHT*2 dc.w 2+(\a)*LCOLBUF_HEIGHT*2 dc.w 2+(\b)*LCOLBUF_HEIGHT*2 ENDC ENDM kds_setting_1: dc.l kds_setting1_coplist dc.l kds_setting1_draw dc.l kds_calc_stencil_fixup_lines_bonus dc.l kds_setting_nop,kds_setting_nop,kds_setting_nop dc.l kds_calc_stencil_positions1_std,kds_calc_stencil_positions2_std LCOLDEF 0,0,4,8,12,16,20,24 LCOLDEF 1,0,4,8,12,16,20,24 LCOLDEF 2,0,4,8,12,16,20,24 LCOLDEF 1,0,4,8,12,16,20,24 kds_setting_2: dc.l kds_setting2_coplist dc.l kds_setting2_draw dc.l kds_calc_stencil_fixup_lines_bonus dc.l kds_setting_nop,kds_swap_rgb_to_bgr,kds_setting_nop dc.l kds_calc_stencil_positions1_std,kds_calc_stencil_positions2_std LCOLDEF 0,0,4,8,12,16,20,24 LCOLDEF 1,0,4,8,12,16,20,24 LCOLDEF 2,0,4,8,12,16,20,24 LCOLDEF 1,0,4,8,12,16,20,24 kds_setting_3: dc.l kds_setting3_coplist dc.l kds_setting3_draw dc.l kds_calc_stencil_fixup_lines_bonus dc.l kds_setting_nop,kds_swap_rgb_to_bgr_and_gbr,kds_setting_nop dc.l kds_calc_stencil_positions1_std,kds_calc_stencil_positions2_std LCOLDEF 0,0,4,8,12,16,20,24 LCOLDEF 1,0,4,8,13,17,21,25 LCOLDEF 2,0,4,8,13,17,21,25 LCOLDEF 1,0,4,8,12,16,20,24 kds_setting_4: dc.l kds_setting4_coplist dc.l kds_setting4_draw dc.l kds_calc_stencil_fixup_lines_bonus dc.l kds_swap_rgb_to_rbg,kds_swap_rgb_to_bgr_and_gbr,kds_setting_nop dc.l kds_calc_stencil_positions1_std,kds_calc_stencil_positions2_std LCOLDEF 0,0,4,8,12,16,20,24 LCOLDEF 1,0,4,8,13,17,21,25 LCOLDEF 2,1,5,9,13,17,21,25 LCOLDEF 1,1,5,9,12,16,20,24 kds_setting_5: dc.l kds_setting5_coplist dc.l kds_setting5_draw dc.l kds_calc_stencil_fixup_lines_bonus dc.l kds_swap_rgb_to_rbg_and_grb,kds_swap_rgb_to_bgr_and_gbr,kds_setting_nop dc.l kds_calc_stencil_positions1_std,kds_calc_stencil_positions2_std LCOLDEX 0,0,4,8,12,16,20,24,2,6,10 LCOLDEX 1,0,4,8,13,17,21,25,2,6,10 LCOLDEX 2,1,5,9,13,17,21,25,1,5,9 LCOLDEX 1,1,5,9,12,16,20,24,1,5,9 kds_setting_6: dc.l kds_setting6_coplist dc.l kds_setting6_draw dc.l kds_calc_stencil_fixup_lines_bonus dc.l kds_swap_rgb_to_rbg_and_grb_and_brg,kds_swap_rgb_to_bgr_and_gbr,kds_setting_nop dc.l kds_calc_stencil_positions1_std,kds_calc_stencil_positions2_std LCOLDEX 0,0,4,8,12,16,20,24,2,6,10 LCOLDEX 1,0,4,8,13,17,21,25,2,6,10 LCOLDEX 2,3,7,11,13,17,21,25,1,5,9 LCOLDEX 1,3,7,11,12,16,20,24,1,5,9 ;******************************************************************** kds_intro_palette: dc.w $346,$458,$89b,$89b,$bbe,$bbe,$9ac,$9ac kds_bright_transition_palette: dc.w $68c,$68c,$9f4,$9f4,$fff,$fff,$ffc,$ffc kds_fairy_sprite_palette: incbin "../data/kaleidoscope/fairy1_48x51x16.PAL" ; Points kds_fairy_points: dc.w 129,239,183,208,225,103,203,117,181,131,317,140,308,161,299,182 dc.w 283,141,280,169,277,197,257,189,294,205,331,221,361,137,445,172 dc.w 529,207,635,136,577,184 ; 16 X and 16 Y coords kds_dust_pos: dc.w 31,22,18,20,21,22,23,25,25,23,22,30,30,29,26,26 dc.w 6,8,7,12,15,18,22,24,29,33,38,35,39,44,51,54 kds_dust_twinkle: dc.b 6*2,6*2,5*2,6*2,6*2,6*2,6*2,5*2,6*2,6*2,5*2 ;,4*2,6*2,6*2,5*2,4*2 dc.b 6*2,5*2,5*2,6*2,5*2,5*2,4*2,5*2,5*2,6*2,5*2 ;,4*2,4*2,5*2,5*2,5*2 dc.b 5*2,4*2,4*2,5*2,5*2,4*2,3*2,5*2,4*2,3*2,5*2 ;,4*2,3*2,4*2,3*2,3*2 dc.b 5*2,4*2,3*2,4*2,4*2,3*2,4*2,3*2,2*2,5*2,4*2 ;,3*2,3*2,4*2,4*2,3*2 dc.b 2*2,4*2,3*2,3*2,2*2,4*2,4*2,3*2,4*2,3*2,2*2 ;,4*2,3*2,2*2,1*2,1*2 dc.b 1*2,3*2,2*2,2*2,1*2,3*2,2*2,1*2,2*2,3*2,2*2 ;,1*2,2*2,3*2,2*2,1*2 kds_dust_burst: dc.b 7*2,7*2,7*2,7*2,7*2,7*2,6*2,7*2 dc.b 6*2,6*2,7*2,6*2,6*2,6*2,5*2,6*2 dc.b 5*2,5*2,6*2,5*2,5*2,5*2,4*2,5*2 dc.b 4*2,4*2,5*2,4*2,4*2,4*2,3*2,4*2 dc.b 3*2,3*2,4*2,3*2,3*2,3*2,2*2,3*2 dc.b 2*2,2*2,3*2,2*2,2*2,2*2,1*2,2*2 dc.b 1*2,1*2,2*2,1*2,1*2,1*2,1*2,1*2 dc.b 1*2,1*2,2*2,1*2,1*2,1*2,1*2,1*2 dc.b 1*2,1*2,2*2,1*2,1*2,1*2,1*2,1*2 kds_bernstein0: ; Bernstein 0 dc.w $ffff,$fa0c,$f430,$ee6b,$e8be,$e328,$dda9,$d841,$d2f0,$cdb5,$c891,$c382,$be8a,$b9a7,$b4da,$b023 dc.w $ab80,$a6f2,$a27a,$9e16,$99c6,$958b,$9163,$8d50,$8950,$8564,$818b,$7dc5,$7a12,$7672,$72e4,$6f69 dc.w $6c00,$68a9,$6564,$6230,$5f0e,$5bfd,$58fd,$560e,$5330,$5062,$4da5,$4af7,$485a,$45cc,$434e,$40e0 dc.w $3e80,$3c2f,$39ee,$37bb,$3596,$3380,$3177,$2f7d,$2d90,$2bb1,$29df,$281a,$2662,$24b7,$2318,$2186 dc.w $2000,$1e86,$1d18,$1bb5,$1a5e,$1912,$17d1,$169b,$1570,$144f,$1339,$122c,$112a,$1031,$0f42,$0e5d dc.w $0d80,$0cac,$0be2,$0b20,$0a66,$09b5,$090b,$086a,$07d0,$073e,$06b3,$062f,$05b2,$053c,$04cc,$0463 dc.w $0400,$03a3,$034c,$02fa,$02ae,$0267,$0225,$01e8,$01b0,$017c,$014d,$0121,$00fa,$00d6,$00b6,$009a dc.w $0080,$0069,$0056,$0045,$0036,$002a,$001f,$0017,$0010,$000b,$0007,$0004,$0002,$0001,$0000,$0000 kds_bernstein1: ; Bernstein 1 dc.w $0000,$05e8,$0ba1,$112b,$1686,$1bb4,$20b4,$2588,$2a30,$2eac,$32fe,$3725,$3b22,$3ef6,$42a1,$4624 dc.w $4980,$4cb5,$4fc3,$52ab,$556e,$580c,$5a86,$5cdd,$5f10,$6121,$6310,$64dd,$668a,$6816,$6983,$6ad1 dc.w $6c00,$6d11,$6e05,$6edc,$6f96,$7035,$70b8,$7121,$7170,$71a5,$71c2,$71c6,$71b2,$7187,$7145,$70ed dc.w $7080,$6ffe,$6f67,$6ebc,$6dfe,$6d2d,$6c4a,$6b56,$6a50,$693a,$6814,$66de,$659a,$6447,$62e7,$617a dc.w $6000,$5e7a,$5ce9,$5b4d,$59a6,$57f6,$563c,$547a,$52b0,$50de,$4f06,$4d27,$4b42,$4958,$4769,$4576 dc.w $4380,$4187,$3f8b,$3d8d,$3b8e,$398e,$378e,$358f,$3390,$3193,$2f98,$2d9f,$2baa,$29b8,$27cb,$25e3 dc.w $2400,$2223,$204d,$1e7e,$1cb6,$1af7,$1940,$1793,$15f0,$1457,$12ca,$1148,$0fd2,$0e69,$0d0d,$0bbf dc.w $0a80,$0950,$082f,$071e,$061e,$052f,$0452,$0388,$02d0,$022c,$019c,$0120,$00ba,$0069,$002f,$000c kds_bernstein2: ; Bernstein 2 dc.w $0000,$000c,$002f,$0069,$00ba,$0120,$019c,$022c,$02d0,$0388,$0452,$052f,$061e,$071e,$082f,$0950 dc.w $0a80,$0bbf,$0d0d,$0e69,$0fd2,$1148,$12ca,$1457,$15f0,$1793,$1940,$1af7,$1cb6,$1e7e,$204d,$2223 dc.w $2400,$25e3,$27cb,$29b8,$2baa,$2d9f,$2f98,$3193,$3390,$358f,$378e,$398e,$3b8e,$3d8d,$3f8b,$4187 dc.w $4380,$4576,$4769,$4958,$4b42,$4d27,$4f06,$50de,$52b0,$547a,$563c,$57f6,$59a6,$5b4d,$5ce9,$5e7a dc.w $6000,$617a,$62e7,$6447,$659a,$66de,$6814,$693a,$6a50,$6b56,$6c4a,$6d2d,$6dfe,$6ebc,$6f67,$6ffe dc.w $7080,$70ed,$7145,$7187,$71b2,$71c6,$71c2,$71a5,$7170,$7121,$70b8,$7035,$6f96,$6edc,$6e05,$6d11 dc.w $6c00,$6ad1,$6983,$6816,$668a,$64dd,$6310,$6121,$5f10,$5cdd,$5a86,$580c,$556e,$52ab,$4fc3,$4cb5 dc.w $4980,$4624,$42a1,$3ef6,$3b22,$3725,$32fe,$2eac,$2a30,$2588,$20b4,$1bb4,$1686,$112b,$0ba1,$05e8 kds_bernstein3: ; Bernstein 3 dc.w $0000,$0000,$0000,$0001,$0002,$0004,$0007,$000b,$0010,$0017,$001f,$002a,$0036,$0045,$0056,$0069 dc.w $0080,$009a,$00b6,$00d6,$00fa,$0121,$014d,$017c,$01b0,$01e8,$0225,$0267,$02ae,$02fa,$034c,$03a3 dc.w $0400,$0463,$04cc,$053c,$05b2,$062f,$06b3,$073e,$07d0,$086a,$090b,$09b5,$0a66,$0b20,$0be2,$0cac dc.w $0d80,$0e5d,$0f42,$1031,$112a,$122c,$1339,$144f,$1570,$169b,$17d1,$1912,$1a5e,$1bb5,$1d18,$1e86 dc.w $2000,$2186,$2318,$24b7,$2662,$281a,$29df,$2bb1,$2d90,$2f7d,$3177,$3380,$3596,$37bb,$39ee,$3c2f dc.w $3e80,$40e0,$434e,$45cc,$485a,$4af7,$4da5,$5062,$5330,$560e,$58fd,$5bfd,$5f0e,$6230,$6564,$68a9 dc.w $6c00,$6f69,$72e4,$7672,$7a12,$7dc5,$818b,$8564,$8950,$8d50,$9163,$958b,$99c6,$9e16,$a27a,$a6f2 dc.w $ab80,$b023,$b4da,$b9a7,$be8a,$c382,$c891,$cdb5,$d2f0,$d841,$dda9,$e328,$e8be,$ee6b,$f430,$fa0c ;-------------------------------------------------------------------- section "kds_copper",data,chip kds_copperlist: COP_MOVE dmacon,DMAF_BLITHOG ; disable blitter hogging to avoid interrupt latency COP_MOVE diwstrt,$5281 ; window start COP_MOVE diwstop,$06c1 ; window stop COP_MOVE ddfstrt,$0038 ; bitplane start COP_MOVE ddfstop,$00d0 ; bitplane stop COP_MOVE bplcon3,$0c00 COP_MOVE fmode,$0000 ; fixes the aga modulo problem COP_MOVE bplcon0,$0200 COP_MOVE bplcon1,$0000 COP_MOVE bplcon2,$0024 ; turn off all bitplanes, set scroll values to 0, sprites in front kds_extra_copperlist_ptr: COP_MOVE cop2lc,0 COP_MOVE cop2lc+2,0 COP_MOVE $1fe,0 COP_END kds_fairy_body1: incbin "../data/kaleidoscope/fairy1_48x51x16.BPL" kds_fairy_body2: incbin "../data/kaleidoscope/fairy2_48x51x16.BPL" kds_fairy_body3: incbin "../data/kaleidoscope/fairy3_48x51x16.BPL" kds_puff_sprite1: incbin "../data/kaleidoscope/puff1_32x15x16.BPL" kds_puff_sprite2: incbin "../data/kaleidoscope/puff2_32x15x16.BPL" kds_puff_sprite3: incbin "../data/kaleidoscope/puff3_32x15x16.BPL" kds_puff_sprite4: incbin "../data/kaleidoscope/puff4_32x15x16.BPL" kds_kaleidoscope_pattern: incbin "../data/kaleidoscope/plt_neuro2_ham.raw" blitter_temp_output_word: dc.w 0 IFND FW_DEMO_PART IFD ENABLE_PART_MUSIC section "part_music_samples",data,chip ; section for music playback part_music_smp: incbin "../data/music/desire_demo_68k_v6.lsbank" section "part_music_data",data ; section for music playback part_music_data: incbin "../data/music/desire_demo_68k_v6.lsmusic" ENDC ENDC END