Hamazing/source/gotham/gotham.asm
chrisly42 9c48c11cd1 Big "squashed" update to latest version of Framework.
- Bugfix: WaitForFrame was completely broken. Now also caters for race-condition that would have waited one extra frame.
- Bugfix: InitPart would overwrite innocent memory (reported by Gigabates and Losso)
- Bugfix: Palette LERP had wrong bias.
- Removed extra paths in include statement, use default include paths instead
- Added Raspberry Casket no-jitter background calc mode (FW_MUSIC_PLAYER_CHOICE = 6)
- Updated Raspberry Casket to V2.0 presto branch (WIP)
- Removed fw_FrameCounterLong, use fw_FrameCounter-2 for debug purposes
- Support for blue noise palette LERPing (like in Is Real). Provide your own blue noise table (4 KB), stuff it into fw_BlueNoiseTablePtr, set FW_PALETTE_LERP_SUPPORT to 2
- Music tick routine is now replaceable during runtime (fw_MusicTickRoutine)
- Support for softints and audio interrupts
- LMB exit can also be disabled dynamically when using FW_LMB_EXIT_SUPPORT = 2 and fw_DisableLMBExit != 0
- Added LSP Micro support and LSP Nano (custom format that uses note pitches instead of periods)
- Minor other things
2024-09-15 17:43:33 +02:00

974 lines
25 KiB
NASM

; 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 = 0
FW_MUSIC_PLAYER_CHOICE = 0 ; 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 = 0 ; 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 = 1 ; 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 = 0
ENDC
GOTHAM_WIDTH = 320
GOTHAM_HEIGHT = 180
GOTHAM_PLANES = 2
HAM_TECH_SAMPLE_SIZE = 24064
COP_LIST_SIZE = 100*4
GOTHAM_BQ_SIZE = 2048
CHIPMEM_SIZE = COP_LIST_SIZE*2+2*(GOTHAM_WIDTH/8)*GOTHAM_HEIGHT*GOTHAM_PLANES
FASTMEM_SIZE = 2048*4+4*GOTHAM_BQ_SIZE
IFND DEBUG_DETAIL
DEBUG_DETAIL SET 10
ENDC
NEWAGE_DEBUG = 1
include "framework.i"
; Memory use:
; Playfields:
; - 320 x 180 x 3 x 2 = 43200
STRUCTURE PartData,fw_SIZEOF
APTR pd_CurrPlanesPtr
APTR pd_LastPlanesPtr
APTR pd_CurrCopListPtr
APTR pd_LastCopListPtr
APTR pd_CurrBQPtr
APTR pd_LastBQPtr
APTR pd_LastLastBQPtr
UBYTE pd_DbToggle
ALIGNWORD
UWORD pd_BqToggle
UWORD pd_PartCountDown
UWORD pd_HamRotation
UWORD pd_HamZoom
UWORD pd_LinePattern
BOOL pd_EnableHamZoom
APTR pd_Blend1Ptr
APTR pd_Blend2Ptr
APTR pd_CopperList1
APTR pd_CopperList2
APTR pd_DbBuffer1
APTR pd_DbBuffer2
APTR pd_BQBuffer1
APTR pd_BQBuffer2
APTR pd_BQBuffer3
APTR pd_BQBuffer4
APTR pd_HamTechSample
STRUCT pd_MeanwhilePalette,3*cl_SIZEOF
STRUCT pd_BlendPalette,15*cl_SIZEOF
STRUCT pd_HamTechPalette,15*cl_SIZEOF
APTR pd_BigSinCosTable
LABEL pd_SIZEOF
IFND FW_DEMO_PART
include "framework.asm"
ENDC
entrypoint:
IFD FW_DEMO_PART
move.l #pd_SIZEOF,d0
CALLFW InitPart
ENDC
bsr.s gth_init_vars
lea gth_copperlist,a0
CALLFW SetCopper
bsr gth_texts
bsr gth_init_sine_table
bsr gth_main
CALLFW SetBaseCopper
rts
;--------------------------------------------------------------------
gth_init_vars:
IFD FW_DEMO_PART
move.l fw_GlobalUserData(a6),pd_HamTechSample(a6)
ELSE
move.l #gth_psenough_ham,pd_HamTechSample(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 #2*(GOTHAM_WIDTH/8)*GOTHAM_HEIGHT*GOTHAM_PLANES,d0
CALLFW AllocChip
PUTMSG 10,<"DbBuffer %p">,a0
move.l a0,pd_DbBuffer1(a6)
move.l a0,pd_CurrPlanesPtr(a6)
lea (GOTHAM_WIDTH/8)*GOTHAM_HEIGHT*GOTHAM_PLANES(a0),a0
move.l a0,pd_DbBuffer2(a6)
move.l a0,pd_LastPlanesPtr(a6)
move.l #2048*4,d0
CALLFW AllocFast
move.l a0,pd_BigSinCosTable(a6)
move.l #4*GOTHAM_BQ_SIZE,d0
CALLFW AllocFast
move.l a0,pd_BQBuffer1(a6)
move.l a0,pd_CurrBQPtr(a6)
clr.l (a0)
lea GOTHAM_BQ_SIZE(a0),a0
move.l a0,pd_BQBuffer2(a6)
move.l a0,pd_LastBQPtr(a6)
clr.l (a0)
lea GOTHAM_BQ_SIZE(a0),a0
move.l a0,pd_BQBuffer3(a6)
move.l a0,pd_LastLastBQPtr(a6)
clr.l (a0)
lea GOTHAM_BQ_SIZE(a0),a0
move.l a0,pd_BQBuffer4(a6)
clr.l (a0)
rts
;--------------------------------------------------------------------
gth_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
;--------------------------------------------------------------------
gth_texts:
move.w #500,pd_PartCountDown(a6)
move.l #gth_gothamcity_text,pd_Blend1Ptr(a6)
move.l #gth_gotham_text,pd_Blend2Ptr(a6)
moveq.l #3+15,d0
moveq.l #0,d1
lea pd_MeanwhilePalette(a6),a1
CALLFW InitPaletteLerpSameColor
moveq.l #3,d0
moveq.l #32,d1
lea gth_red_palette(pc),a0
lea pd_MeanwhilePalette(a6),a1
CALLFW FadePaletteTo
lea .script(pc),a0
CALLFW InstallScript
.loop CALLFW VSyncWithTask
bsr gth_flip_db_frame
CALLFW CheckScript
moveq.l #3,d0
lea pd_MeanwhilePalette(a6),a1
CALLFW DoFadePaletteStep
moveq.l #15,d0
lea pd_BlendPalette(a6),a1
CALLFW DoFadePaletteStep
bsr gth_create_texts_copperlist
bsr gth_update_copper_list_pointers
subq.w #1,pd_PartCountDown(a6)
bne .loop
rts
.script
dc.w 30,.fade_in_blend1_slow-*
dc.w 160,.fade_in_blend2-*
dc.w 180,.fade_in_blend1-*
dc.w 195,.fade_in_blend2-*
dc.w 220,.fade_in_blend1-*
dc.w 228,.fade_in_blend2-*
dc.w 280,.gotham-*
dc.w 300,.fade_in_blend1-*
dc.w 310,.fade_in_blend2-*
dc.w 330,.fade_in_greenish_blend1-*
dc.w 340,.fade_in_blend2-*
dc.w 355,.fade_in_greenish_blend1-*
dc.w 410,.ham-*
dc.w 420,.fade_out_meanwhile-*
dc.w 425,.fade_in_blend1-*
dc.w 430,.fade_in_greenish_blend1-*
dc.w 435,.fade_in_blend1-*
dc.w 450,.fade_in_blend2-*
dc.w 0
.fade_in_blend1
moveq.l #32,d1
lea gth_red_blend1_palette(pc),a0
bra.s .fade
.fade_in_blend1_slow
moveq.l #64,d1
lea gth_red_blend1_palette(pc),a0
bra.s .fade
.fade_in_greenish_blend1
moveq.l #32,d1
lea gth_greenish_blend1_palette(pc),a0
bra.s .fade
.fade_in_blend2
moveq.l #32,d1
lea gth_red_blend2_palette(pc),a0
.fade
moveq.l #15,d0
lea pd_BlendPalette(a6),a1
CALLFW FadePaletteTo
rts
.fade_out_meanwhile
moveq.l #3,d0
moveq.l #32,d1
lea gth_black_palette(pc),a0
lea pd_MeanwhilePalette(a6),a1
CALLFW FadePaletteTo
rts
.gotham move.l #gth_hameelinna_text,pd_Blend1Ptr(a6)
rts
.ham move.l #gth_ham_text,pd_Blend2Ptr(a6)
rts
;--------------------------------------------------------------------
gth_main:
move.w #170,pd_PartCountDown(a6)
CALLFW SetBlitterQueueSingleFrame
bsr gth_clear_db_buffers
move.w #$8000,pd_LinePattern(a6)
move.w #288,pd_HamZoom(a6)
moveq.l #15,d0
lea gth_invisible_line_palette(pc),a0
lea pd_BlendPalette(a6),a1
CALLFW InitPaletteLerp
moveq.l #15,d0
moveq.l #32,d1
lea gth_white_line_palette(pc),a0
lea pd_BlendPalette(a6),a1
CALLFW FadePaletteTo
moveq.l #15,d0
lea gth_black_palette(pc),a0
lea pd_HamTechPalette(a6),a1
CALLFW InitPaletteLerp
moveq.l #15,d0
moveq.l #32,d1
lea gth_ham_tech_palette(pc),a0
lea pd_HamTechPalette(a6),a1
CALLFW FadePaletteTo
lea .script(pc),a0
CALLFW InstallScript
TERMINATE_BLITTER_QUEUE
.loop CALLFW VSyncWithTask
bsr gth_flip_db_frame
bsr gth_flip_bq_buffer
move.l pd_LastLastBQPtr(a6),a0
tst.l (a0)
beq.s .skipempty
BLTWAIT
CALLFW TriggerCustomBlitterQueue
.skipempty
CALLFW CheckScript
move.l pd_CurrBQPtr(a6),a4
bsr gth_draw_ham
TERMINATE_BLITTER_QUEUE
ror.w pd_LinePattern(a6)
tst.w pd_EnableHamZoom(a6)
beq.s .nohamzoom
move.w pd_HamZoom(a6),d0
move.w d0,d1
lsr.w #5,d1
add.w d1,d0
move.w d0,pd_HamZoom(a6)
.nohamzoom
CALLFW JoinBlitterQueue
BLTWAIT
move.l pd_CurrBQPtr(a6),a0
CALLFW TriggerCustomBlitterQueue
bsr gth_fix_bq_for_clear
moveq.l #15,d0
lea pd_BlendPalette(a6),a1
CALLFW DoFadePaletteStep
moveq.l #15,d0
lea pd_HamTechPalette(a6),a1
CALLFW DoFadePaletteStep
bsr gth_create_main_copperlist
CALLFW JoinBlitterQueue
bsr gth_update_copper_list_pointers
subq.w #1,pd_PartCountDown(a6)
bne .loop
rts
.script
dc.w 1,.done1-*
dc.w 2,.done2-*
dc.w 10,.pattern2-*
dc.w 20,.pattern3-*
dc.w 25,.done1echo-*
dc.w 27,.done2echo-*
dc.w 30,.pattern4-*
dc.w 40,.pattern5-*
dc.w 42,.killaudioloops-*
dc.w 50,.pattern8-*
dc.w 60,.pattern12-*
dc.w 70,.pattern16-*
dc.w 138,.fadeout-*
dc.w 0
.done1
move.w #HAM_TECH_SAMPLE_SIZE/2,aud0+ac_len(a5)
move.l pd_HamTechSample(a6),aud0+ac_ptr(a5)
move.w #64,aud0+ac_vol(a5)
move.w #350,aud0+ac_per(a5)
move.w #DMAF_SETCLR|DMAF_AUD0,dmacon(a5)
rts
.done2
move.w #HAM_TECH_SAMPLE_SIZE/2,aud1+ac_len(a5)
move.l pd_HamTechSample(a6),aud1+ac_ptr(a5)
move.w #64,aud1+ac_vol(a5)
move.w #349,aud1+ac_per(a5)
move.w #DMAF_SETCLR|DMAF_AUD1,dmacon(a5)
rts
.done1echo
move.w #HAM_TECH_SAMPLE_SIZE/2,aud2+ac_len(a5)
move.l pd_HamTechSample(a6),aud2+ac_ptr(a5)
move.w #16,aud2+ac_vol(a5)
move.w #340,aud2+ac_per(a5)
move.w #DMAF_SETCLR|DMAF_AUD2,dmacon(a5)
rts
.done2echo
move.w #HAM_TECH_SAMPLE_SIZE/2,aud3+ac_len(a5)
move.l pd_HamTechSample(a6),aud3+ac_ptr(a5)
move.w #16,aud3+ac_vol(a5)
move.w #341,aud3+ac_per(a5)
move.w #DMAF_SETCLR|DMAF_AUD3,dmacon(a5)
rts
.pattern2
move.w #$8080,pd_LinePattern(a6)
rts
.pattern3
move.w #$8420,pd_LinePattern(a6)
rts
.pattern4
move.w #$8888,pd_LinePattern(a6)
rts
.pattern5
move.w #$a264,pd_LinePattern(a6)
rts
.pattern8
move.w #$aaaa,pd_LinePattern(a6)
rts
.pattern12
move.w #$fafa,pd_LinePattern(a6)
rts
.pattern16
move.w #$ffff,pd_LinePattern(a6)
st pd_EnableHamZoom(a6)
moveq.l #15,d0
moveq.l #32,d1
lea gth_line_only_palette(pc),a0
lea pd_BlendPalette(a6),a1
CALLFW FadePaletteTo
rts
.killaudioloops
move.l fw_EmptySprite(a6),a0
moveq.l #1,d0
move.l a0,aud0+ac_ptr(a5)
move.w d0,aud0+ac_len(a5)
move.l a0,aud1+ac_ptr(a5)
move.w d0,aud1+ac_len(a5)
move.l a0,aud2+ac_ptr(a5)
move.w d0,aud2+ac_len(a5)
move.l a0,aud3+ac_ptr(a5)
move.w d0,aud3+ac_len(a5)
rts
.fadeout
;move.w #DMAF_SETCLR|DMAF_AUD0|DMAF_AUD1|DMAF_AUD2|DMAF_AUD3,dmacon(a5)
moveq.l #15,d0
moveq.l #32,d1
lea gth_black_palette(pc),a0
lea pd_BlendPalette(a6),a1
CALLFW FadePaletteTo
moveq.l #15,d0
moveq.l #32,d1
lea gth_black_palette(pc),a0
lea pd_HamTechPalette(a6),a1
CALLFW FadePaletteTo
rts
;--------------------------------------------------------------------
gth_flip_db_frame:
move.l pd_CurrPlanesPtr(a6),pd_LastPlanesPtr(a6)
move.l pd_CurrCopListPtr(a6),pd_LastCopListPtr(a6)
not.b pd_DbToggle(a6)
beq.s .selb1
move.l pd_DbBuffer2(a6),pd_CurrPlanesPtr(a6)
move.l pd_CopperList2(a6),pd_CurrCopListPtr(a6)
rts
.selb1
move.l pd_DbBuffer1(a6),pd_CurrPlanesPtr(a6)
move.l pd_CopperList1(a6),pd_CurrCopListPtr(a6)
rts
;--------------------------------------------------------------------
gth_flip_bq_buffer:
move.l pd_LastBQPtr(a6),pd_LastLastBQPtr(a6)
move.l pd_CurrBQPtr(a6),pd_LastBQPtr(a6)
move.w pd_BqToggle(a6),d0
subq.w #4,d0
and.w #3*4,d0
move.w d0,pd_BqToggle(a6)
lea pd_BQBuffer1(a6),a0
move.l (a0,d0.w),pd_CurrBQPtr(a6)
rts
;--------------------------------------------------------------------
gth_update_copper_list_pointers:
lea gth_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
;--------------------------------------------------------------------
gth_clear_db_buffers:
BLTHOGON
BLTWAIT
BLTCON_SET D,0,0,0
move.w #0,bltdmod(a5)
move.l pd_DbBuffer1(a6),bltdpt(a5)
move.w #((GOTHAM_WIDTH*2)>>4)|((GOTHAM_HEIGHT*GOTHAM_PLANES)<<6),bltsize(a5)
rts
;--------------------------------------------------------------------
gth_draw_ham:
bsr gth_blitter_line_init_bq
move.l pd_BigSinCosTable(a6),a0
move.w pd_HamRotation(a6),d0
tst.w pd_EnableHamZoom(a6)
beq.s .norotate
add.w #64,d0
move.w d0,pd_HamRotation(a6)
and.w #2047*4,d0
move.b (a0,d0.w),d0
ext.w d0
lsl.w #4,d0
and.w #2047*4,d0
.norotate
move.l (a0,d0.w),d6
move.w d6,d7 ; cos
swap d6 ; sin
move.w pd_HamZoom(a6),d0
muls d0,d6
muls d0,d7
swap d6
swap d7
lea gth_ham_line_h(pc),a2
bsr gth_draw_path
bsr gth_draw_path
bsr gth_draw_path
gth_draw_path:
move.w (a2)+,d2
move.w (a2)+,d3
PUTMSG 30,<"1: %d,%d">,d2,d3
move.w d2,d4
move.w d3,d5
muls d7,d2
muls d6,d5
sub.l d5,d2
swap d2
muls d7,d3
muls d6,d4
add.l d4,d3
swap d3
add.w #GOTHAM_WIDTH/2,d2
add.w #GOTHAM_HEIGHT/2+1,d3
move.w d2,d0
move.w d3,d1
.loop move.w (a2)+,d2
beq.s .done2
move.w (a2)+,d3
move.w d2,d4
move.w d3,d5
muls d7,d2
muls d6,d5
sub.l d5,d2
swap d2
muls d7,d3
muls d6,d4
add.l d4,d3
swap d3
add.w #GOTHAM_WIDTH/2-1,d2
add.w #GOTHAM_HEIGHT/2+1,d3
movem.w d2-d3/d6,-(sp)
PUTMSG 40,<"%d,%d to %d,%d">,d0,d1,d2,d3
move.w #GOTHAM_WIDTH-1,d4
move.w #GOTHAM_HEIGHT-2,d5
bsr gth_clip_line
beq.s .skipline
PUTMSG 40,<"After Clip: %d,%d to %d,%d">,d0,d1,d2,d3
move.l pd_CurrPlanesPtr(a6),a0
bsr gth_draw_blitter_line_aa_bq
.skipline
movem.w (sp)+,d0/d1/d6
bra.s .loop
.done2 rts
;--------------------------------------------------------------------
gth_fix_bq_for_clear:
moveq.l #0,d0
move.l pd_LastBQPtr(a6),a0
bra.s .entry
.bqfixloop
move.b d0,9(a0)
.entry
move.l (a0),a0
move.l a0,d1
bne.s .bqfixloop
rts
;--------------------------------------------------------------------
gth_create_texts_copperlist:
moveq.l #-2,d3
move.l pd_CurrCopListPtr(a6),a0
moveq.l #15*2,d0
and.w fw_FrameCounter(a6),d0
lea gth_red_noise(pc),a2
adda.w d0,a2
lea pd_MeanwhilePalette(a6),a1
move.w #color+1*2,d0
moveq.l #3-1,d7
.mwloop
move.w d0,(a0)+
move.w cl_Color(a1),d1
add.w (a2)+,d1
move.w d1,(a0)+
lea cl_SIZEOF(a1),a1
addq.w #2,d0
dbra d7,.mwloop
lea gth_meanwhile_text,a1
COPPTMOVE a1,bplpt+0*4,d0
lea (320/8)*18(a1),a1
COPPTMOVE a1,bplpt+1*4,d0
move.w #$5207+(33<<8),(a0)+
move.w d3,(a0)+
COPIMOVE $2200,bplcon0
move.w #$5207+((33+18)<<8),(a0)+
move.w d3,(a0)+
COPIMOVE $0200,bplcon0
lea pd_BlendPalette(a6),a1
moveq.l #15-1,d7
move.w #color+1*2,d0
.blloop
move.w d0,(a0)+
move.w cl_Color(a1),(a0)+
lea cl_SIZEOF(a1),a1
addq.w #2,d0
dbra d7,.blloop
move.l pd_Blend1Ptr(a6),a1
COPPTMOVE a1,bplpt+0*4,d0
lea (320/8)*23(a1),a1
COPPTMOVE a1,bplpt+1*4,d0
move.l pd_Blend2Ptr(a6),a1
COPPTMOVE a1,bplpt+2*4,d0
lea (320/8)*23(a1),a1
COPPTMOVE a1,bplpt+3*4,d0
move.w #$5207+(78<<8),(a0)+
move.w d3,(a0)+
COPIMOVE $4200,bplcon0
move.w #$5207+((78+23)<<8),(a0)+
move.w d3,(a0)+
COPIMOVE $0200,bplcon0
move.l d3,(a0)+
rts
;--------------------------------------------------------------------
gth_create_main_copperlist:
moveq.l #-2,d3
move.l pd_CurrCopListPtr(a6),a0
lea pd_BlendPalette(a6),a1
moveq.l #15-1,d7
move.w #color+1*2,d0
.mwloop
move.w d0,(a0)+
move.w cl_Color(a1),(a0)+
lea cl_SIZEOF(a1),a1
addq.w #2,d0
dbra d7,.mwloop
move.l pd_CurrPlanesPtr(a6),a1
COPPTMOVE a1,bplpt+0*4,d0
lea (GOTHAM_WIDTH/8)*GOTHAM_HEIGHT(a1),a1
COPPTMOVE a1,bplpt+1*4,d0
lea gth_ham_text,a1
COPPTMOVE a1,bplpt+2*4,d0
lea (320/8)*23(a1),a1
COPPTMOVE a1,bplpt+3*4,d0
COPIMOVE $2200,bplcon0
move.w #$5207+(78<<8),(a0)+
move.w d3,(a0)+
COPIMOVE $4200,bplcon0
move.w #$5207+((78+23)<<8),(a0)+
move.w d3,(a0)+
COPIMOVE $2200,bplcon0
lea pd_HamTechPalette(a6),a1
moveq.l #15-1,d7
move.w #color+1*2,d0
.htloop
move.w d0,(a0)+
move.w cl_Color(a1),(a0)+
lea cl_SIZEOF(a1),a1
addq.w #2,d0
dbra d7,.htloop
lea gth_ham_tech,a1
COPPTMOVE a1,bplpt+2*4,d0
lea (320/8)*13(a1),a1
COPPTMOVE a1,bplpt+3*4,d0
move.w #$5207+((78+23+66)<<8),(a0)+
move.w d3,(a0)+
COPIMOVE $4200,bplcon0
move.l d3,(a0)+
rts
;--------------------------------------------------------------------
include "blitterline_bq.asm"
include "clipping.asm"
;********************************************************************
gth_red_noise:
dc.w $000,$100,$100,$000,$200,$100,$000,$200
dc.w $000,$000,$200,$200,$000,$200,$100,$100
dc.w $000,$100,$100,$000
gth_red_palette:
dc.w $300,$700,$a00
gth_black_palette:
ds.w 15
gth_red_blend1_palette:
dc.w $400,$800,$c00,$000,$400,$800,$c00
dc.w $000,$400,$800,$c00,$000,$400,$800,$c00
gth_red_blend2_palette:
dc.w $000,$000,$000,$400,$400,$400,$400
dc.w $800,$800,$800,$800,$c00,$c00,$c00,$c00
gth_greenish_blend1_palette:
dc.w $243,$586,$8ca,$000,$243,$586,$8ca
dc.w $000,$243,$586,$8ca,$000,$243,$586,$8ca
gth_invisible_line_palette:
dc.w $000,$000,$000
dc.w $400,$000,$000,$000
dc.w $800,$000,$000,$000
dc.w $c00,$000,$000,$000
gth_white_line_palette:
dc.w $888,$888,$fff
dc.w $400,$855,$855,$daa
dc.w $800,$c55,$c55,$faa
dc.w $c00,$f55,$f55,$faa
gth_line_only_palette:
dc.w $888,$888,$fff
dc.w $000,$888,$888,$fff
dc.w $000,$888,$888,$fff
dc.w $000,$888,$888,$fff
gth_ham_tech_palette:
dc.w $888,$888,$fff
dc.w $444,$888,$888,$fff
dc.w $888,$888,$888,$fff
dc.w $ccc,$888,$888,$fff
TDPOINT MACRO
dc.w ((\1)-(GOTHAM_WIDTH/2))<<8
dc.w ((\2)-(103))<<8
ENDM
gth_ham_line_h:
; H
TDPOINT 63,74
TDPOINT 78,74
TDPOINT 78,96
TDPOINT 100,96
TDPOINT 100,74
TDPOINT 116,74
TDPOINT 116,132
TDPOINT 100,132
TDPOINT 100,110
TDPOINT 78,110
TDPOINT 78,132
TDPOINT 63,132
TDPOINT 63,74
dc.w 0
gth_ham_line_a1:
; A (outside)
TDPOINT 123,132
TDPOINT 147,74
TDPOINT 162,74
TDPOINT 187,132
TDPOINT 171,132
TDPOINT 166,121
TDPOINT 143,121
TDPOINT 139,132
TDPOINT 123,132
dc.w 0
gth_ham_line_a2:
; A (inside)
TDPOINT 147,110
TDPOINT 155,92
TDPOINT 162,110
TDPOINT 147,110
dc.w 0
gth_ham_line_m:
; M
TDPOINT 194,74
TDPOINT 210,74
TDPOINT 225,97
TDPOINT 239,74
TDPOINT 256,74
TDPOINT 256,132
TDPOINT 241,132
TDPOINT 241,98
TDPOINT 225,121
TDPOINT 209,98
TDPOINT 209,132
TDPOINT 194,132
TDPOINT 194,74
dc.w 0
IFND FW_DEMO_PART
dc.w 1 ; avoid hunk shortening that leaves dirty memory on kick 1.3
ENDC
;********************************************************************
;--------------------------------------------------------------------
section "gth_copper",data,chip
gth_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
COP_MOVE bpl1mod,0
COP_MOVE bpl2mod,0
COP_MOVE color+0*2,$000
gth_extra_copperlist_ptr:
COP_MOVE cop2lc,0
COP_MOVE cop2lc+2,0
COP_MOVE $1fe,0
COP_END
gth_meanwhile_text:
incbin "data/gotham/meanwhile320x18x4.BPL"
gth_gothamcity_text:
incbin "data/gotham/gothamcity320x23x4.BPL"
gth_gotham_text:
incbin "data/gotham/gotham320x23x4.BPL"
gth_hameelinna_text:
incbin "data/gotham/hameelinna320x23x4.BPL"
gth_ham_text:
incbin "data/gotham/ham320x23x4.BPL"
gth_ham_tech:
incbin "data/gotham/hamtechnology320x13x4.BPL"
blitter_temp_output_word:
dc.w 0
IFND FW_DEMO_PART
section "gth_sample",data,chip
gth_psenough_ham:
incbin "data/gotham/hamtechnology.raw"
ENDC
END