2023-05-22 16:17:35 +02:00
|
|
|
; TODOs:
|
|
|
|
; - Add copper fade for top and bottom (use Frustro copperlist sorting)
|
|
|
|
;
|
|
|
|
; Framework settings
|
|
|
|
|
|
|
|
IFD FW_DEMO_PART
|
|
|
|
IFD FW_HD_DEMO_PART
|
2024-09-16 21:21:33 +02:00
|
|
|
include "hdtrackmo_settings.i"
|
2023-05-22 16:17:35 +02:00
|
|
|
ELSE
|
2024-09-16 21:21:33 +02:00
|
|
|
include "trackmo_settings.i"
|
2023-05-22 16:17:35 +02:00
|
|
|
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 = 0 ; 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 = 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
|
|
|
|
|
|
|
|
ENDC
|
|
|
|
|
|
|
|
ENDP_WIDTH = 320
|
|
|
|
ENDP_HEIGHT = 180
|
|
|
|
ENDP_PLANES = 6
|
|
|
|
|
|
|
|
SCREENSHOTS_WIDTH = 320
|
|
|
|
SCREENSHOTS_HEIGHT = 1620+1*180
|
|
|
|
SCREENSHOTS_PLANES = 2
|
|
|
|
|
|
|
|
SCT_WIDTH = 320
|
|
|
|
SCT_HEIGHT = 224
|
|
|
|
SCT_PLANES = 2
|
|
|
|
|
|
|
|
FONT_WIDTH = 8
|
|
|
|
FONT_HEIGHT = 16
|
|
|
|
FONT_PLANES = 2
|
|
|
|
|
|
|
|
COP_LIST_SIZE = (200)*4
|
|
|
|
|
|
|
|
PERM_MUSIC_SAMPLES = $dd52+4
|
|
|
|
|
|
|
|
CHIPMEM_SIZE = (COP_LIST_SIZE*2)+((SCREENSHOTS_WIDTH/8)*SCREENSHOTS_HEIGHT)*SCREENSHOTS_PLANES+((SCT_WIDTH/8)*(SCT_HEIGHT+1)*2)
|
|
|
|
FASTMEM_SIZE = 4
|
|
|
|
|
|
|
|
IFND DEBUG_DETAIL
|
|
|
|
DEBUG_DETAIL SET 10
|
|
|
|
ENDC
|
|
|
|
|
|
|
|
NEWAGE_DEBUG = 1
|
|
|
|
|
2024-09-15 17:43:33 +02:00
|
|
|
include "framework.i"
|
2023-05-22 16:17:35 +02:00
|
|
|
|
|
|
|
|
|
|
|
; Memory use:
|
|
|
|
; Playfields:
|
|
|
|
; - 320 x 180 x 24 = 172800 (6x2 db, 2 draw, 2 fill, 6 original, 2 spare)
|
|
|
|
|
|
|
|
STRUCTURE PartData,fw_SIZEOF
|
|
|
|
APTR pd_CurrCopListPtr
|
|
|
|
APTR pd_LastCopListPtr
|
|
|
|
UBYTE pd_DbToggle
|
|
|
|
ALIGNWORD
|
|
|
|
|
|
|
|
BOOL pd_PartDone
|
|
|
|
|
|
|
|
BOOL pd_LastLMB
|
|
|
|
|
|
|
|
UWORD pd_TextYPos
|
|
|
|
UWORD pd_ClearTextYPos
|
|
|
|
UWORD pd_NextLineWait
|
|
|
|
APTR pd_TextLinePtr
|
|
|
|
UWORD pd_ScrollScreenYPos
|
|
|
|
UWORD pd_ScrollerPause
|
|
|
|
BOOL pd_HalfspeedScrolling
|
|
|
|
UWORD pd_TextWrapYPos
|
|
|
|
ULONG pd_ScreenshotsYOffset
|
|
|
|
UWORD pd_ScreenshotsScrollWaitCount
|
|
|
|
BOOL pd_ScreenshotsLoaded
|
|
|
|
ULONG pd_CopyLastScreenYPos
|
|
|
|
|
|
|
|
APTR pd_ScreenshotsBuffer
|
|
|
|
APTR pd_ScreenshotsPackedFile
|
|
|
|
APTR pd_CopperList1 ; ds.b COP_LIST_SIZE
|
|
|
|
APTR pd_CopperList2 ; ds.b COP_LIST_SIZE
|
|
|
|
APTR pd_ScrollTextBuffer ; ds.b ((SCT_WIDTH/8)*SCT_HEIGHT)*2
|
|
|
|
STRUCT pd_Palette,16*cl_SIZEOF
|
|
|
|
|
|
|
|
LABEL pd_SIZEOF
|
|
|
|
|
|
|
|
IFND FW_DEMO_PART
|
2024-09-15 17:43:33 +02:00
|
|
|
include "framework.asm"
|
2023-05-22 16:17:35 +02:00
|
|
|
ENDC
|
|
|
|
|
|
|
|
entrypoint:
|
|
|
|
IFD FW_DEMO_PART
|
|
|
|
move.l #pd_SIZEOF,d0
|
|
|
|
CALLFW InitPart
|
|
|
|
ENDC
|
|
|
|
|
|
|
|
bsr.s enp_init
|
|
|
|
|
|
|
|
lea enp_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
|
|
|
|
ENDC
|
|
|
|
ELSE
|
|
|
|
CALLFW StartMusic
|
|
|
|
ENDC
|
|
|
|
|
|
|
|
bsr enp_main
|
|
|
|
|
|
|
|
CALLFW SetBaseCopper
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
|
|
|
|
enp_init:
|
|
|
|
bsr enp_init_vars
|
|
|
|
bsr enp_clear_screen_buffers
|
|
|
|
|
|
|
|
IFD FW_DEMO_PART
|
|
|
|
lea .loadscreenshots(pc),a0
|
|
|
|
move.l fw_TrackloaderTask(a6),a1
|
|
|
|
CALLFW AddTask
|
|
|
|
ELSE
|
|
|
|
st pd_ScreenshotsLoaded(a6)
|
|
|
|
ENDC
|
|
|
|
rts
|
|
|
|
|
|
|
|
IFD FW_DEMO_PART
|
|
|
|
.loadscreenshots
|
|
|
|
lea .screenshotfile(pc),a0
|
|
|
|
CALLFW LoadFile
|
|
|
|
move.l a0,pd_ScreenshotsPackedFile(a6)
|
|
|
|
|
|
|
|
move.l pd_ScreenshotsBuffer(a6),a1
|
|
|
|
lea (SCREENSHOTS_WIDTH/8)*ENDP_HEIGHT*SCREENSHOTS_PLANES(a1),a1
|
|
|
|
CALLFW DecompressZX0
|
|
|
|
st pd_ScreenshotsLoaded(a6)
|
|
|
|
|
|
|
|
CALLFW TrackloaderDiskMotorOff
|
|
|
|
rts
|
|
|
|
|
|
|
|
.screenshotfile
|
|
|
|
dc.b "Screenshots.raw",0
|
|
|
|
even
|
|
|
|
ENDC
|
|
|
|
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
|
|
|
|
enp_init_vars:
|
|
|
|
tst.w fw_AgaChipset(a6)
|
|
|
|
beq.s .noaga
|
|
|
|
move.w #$00a0,enp_ddfstop+2 ; FIXME
|
|
|
|
move.w #$0003,enp_fmode+2
|
|
|
|
.noaga
|
|
|
|
move.w #11,pd_ScrollScreenYPos(a6)
|
|
|
|
lea enp_scrolltext(pc),a0
|
|
|
|
move.l a0,pd_TextLinePtr(a6)
|
|
|
|
|
|
|
|
move.w #ENDP_HEIGHT+12,pd_TextYPos(a6)
|
|
|
|
move.w #ENDP_HEIGHT+12+16,pd_ClearTextYPos(a6)
|
|
|
|
move.w #SCT_HEIGHT,pd_TextWrapYPos(a6)
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
IFD FW_DEMO_PART
|
|
|
|
move.l #((SCREENSHOTS_WIDTH/8)*SCREENSHOTS_HEIGHT)*SCREENSHOTS_PLANES,d0
|
|
|
|
CALLFW AllocChip
|
|
|
|
move.l a0,pd_ScreenshotsBuffer(a6)
|
|
|
|
ELSE
|
|
|
|
move.l #enp_screenshots,pd_ScreenshotsBuffer(a6)
|
|
|
|
ENDC
|
|
|
|
|
|
|
|
move.l #((SCT_WIDTH/8)*(SCT_HEIGHT+1)*SCT_PLANES),d0
|
|
|
|
CALLFW AllocChip
|
|
|
|
move.l a0,pd_ScrollTextBuffer(a6)
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
|
|
|
|
enp_main:
|
|
|
|
moveq.l #16,d0
|
|
|
|
moveq.l #0,d1
|
|
|
|
lea pd_Palette(a6),a1
|
|
|
|
CALLFW InitPaletteLerpSameColor
|
|
|
|
|
|
|
|
moveq.l #16,d0
|
|
|
|
move.w #32,d1
|
|
|
|
lea enp_palette(pc),a0
|
|
|
|
lea pd_Palette(a6),a1
|
|
|
|
CALLFW FadePaletteTo
|
|
|
|
|
|
|
|
.loop
|
|
|
|
CALLFW VSyncWithTask
|
|
|
|
|
|
|
|
bsr enp_flip_db_frame
|
|
|
|
|
|
|
|
CALLFW CheckMusicScript
|
|
|
|
|
|
|
|
bsr enp_scroll_textscreen
|
|
|
|
|
|
|
|
bsr enp_scroll_screenshots
|
|
|
|
|
|
|
|
moveq.l #16,d0
|
|
|
|
lea pd_Palette(a6),a1
|
|
|
|
CALLFW DoFadePaletteStep
|
|
|
|
|
|
|
|
move.l pd_CurrCopListPtr(a6),a0
|
|
|
|
bsr enp_create_dp_copperlist
|
|
|
|
|
|
|
|
bsr enp_update_copper_list_pointers
|
|
|
|
|
|
|
|
tst.w pd_PartDone(a6)
|
|
|
|
bne.s .quit
|
|
|
|
btst #2,potgor(a5)
|
|
|
|
bne.s .loop
|
|
|
|
|
|
|
|
.quit
|
|
|
|
rts
|
|
|
|
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
enp_flip_db_frame:
|
|
|
|
move.l pd_CurrCopListPtr(a6),pd_LastCopListPtr(a6)
|
|
|
|
not.b pd_DbToggle(a6)
|
|
|
|
beq.s .selb1
|
|
|
|
move.l pd_CopperList2(a6),pd_CurrCopListPtr(a6)
|
|
|
|
rts
|
|
|
|
.selb1
|
|
|
|
move.l pd_CopperList1(a6),pd_CurrCopListPtr(a6)
|
|
|
|
rts
|
|
|
|
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
|
|
|
|
enp_update_copper_list_pointers:
|
|
|
|
lea enp_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
|
|
|
|
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
|
|
|
|
enp_clear_screen_buffers:
|
|
|
|
move.l pd_ScrollTextBuffer(a6),a0
|
|
|
|
moveq.l #0,d0
|
|
|
|
BLTHOGON
|
|
|
|
BLTWAIT
|
|
|
|
BLTHOGOFF
|
|
|
|
|
|
|
|
BLTCON_SET D,0,0,0
|
|
|
|
move.w d0,bltdmod(a5)
|
|
|
|
|
|
|
|
move.l a0,bltdpt(a5)
|
|
|
|
move.w #(SCT_WIDTH>>4)|((SCT_HEIGHT+1)*2<<6),bltsize(a5)
|
|
|
|
|
|
|
|
move.l pd_ScreenshotsBuffer(a6),a0
|
|
|
|
|
|
|
|
BLTHOGON
|
|
|
|
BLTWAIT
|
|
|
|
|
|
|
|
move.l a0,bltdpt(a5)
|
|
|
|
move.w #(SCREENSHOTS_WIDTH>>4)|((ENDP_HEIGHT*SCREENSHOTS_PLANES)<<6),bltsize(a5)
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
|
|
|
|
enp_scroll_screenshots:
|
|
|
|
tst.w pd_ScreenshotsLoaded(a6)
|
|
|
|
bne.s .cont
|
|
|
|
.skip rts
|
|
|
|
.cont
|
|
|
|
subq.w #1,pd_ScreenshotsScrollWaitCount(a6)
|
|
|
|
bpl.s .skip
|
|
|
|
move.w #2,pd_ScreenshotsScrollWaitCount(a6)
|
|
|
|
move.l pd_ScreenshotsYOffset(a6),d0
|
|
|
|
move.l d0,d1
|
|
|
|
moveq.l #(SCREENSHOTS_WIDTH/8)*SCREENSHOTS_PLANES,d2
|
|
|
|
move.l #(SCREENSHOTS_WIDTH/8)*SCREENSHOTS_PLANES*(SCREENSHOTS_HEIGHT-ENDP_HEIGHT),d3
|
|
|
|
add.l d2,d0
|
|
|
|
cmp.l d3,d0
|
|
|
|
bne.s .nowrap
|
|
|
|
moveq.l #0,d0
|
|
|
|
.nowrap move.l d0,pd_ScreenshotsYOffset(a6)
|
|
|
|
move.l pd_CopyLastScreenYPos(a6),d0
|
|
|
|
cmp.l #(SCREENSHOTS_WIDTH/8)*SCREENSHOTS_PLANES*ENDP_HEIGHT,d0
|
|
|
|
beq.s .skip
|
|
|
|
tst.l d1
|
|
|
|
beq.s .skip
|
|
|
|
move.l d1,pd_CopyLastScreenYPos(a6)
|
|
|
|
|
|
|
|
move.l pd_ScreenshotsBuffer(a6),a0
|
|
|
|
sub.l d2,d1
|
|
|
|
adda.l d1,a0
|
|
|
|
lea (a0,d3.l),a1
|
|
|
|
|
|
|
|
moveq.l #-1,d2
|
|
|
|
moveq.l #0,d0
|
|
|
|
BLTHOGON
|
|
|
|
BLTWAIT
|
|
|
|
BLTHOGOFF
|
|
|
|
BLTCON_SET AD,BLT_A,0,0
|
|
|
|
move.l d2,bltafwm(a5) ; also fills bltalwm
|
|
|
|
move.l d0,bltamod(a5)
|
|
|
|
|
|
|
|
move.l a1,bltapt(a5)
|
|
|
|
move.l a0,bltdpt(a5)
|
|
|
|
move.w #(SCREENSHOTS_WIDTH>>4)|((1*SCREENSHOTS_PLANES)<<6),bltsize(a5)
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
|
|
|
|
enp_scroll_textscreen:
|
|
|
|
btst #6,$bfe001
|
|
|
|
beq.s .skip
|
|
|
|
sf pd_LastLMB(a6)
|
|
|
|
move.w pd_ScrollerPause(a6),d0
|
|
|
|
subq.w #1,d0
|
|
|
|
bmi.s .notpaused
|
|
|
|
move.w d0,pd_ScrollerPause(a6)
|
|
|
|
rts
|
|
|
|
.skip tst.w pd_LastLMB(a6)
|
|
|
|
bne.s .noclick
|
|
|
|
st pd_LastLMB(a6)
|
|
|
|
.noclick
|
|
|
|
rts
|
|
|
|
|
|
|
|
.notpaused
|
|
|
|
tst.w pd_HalfspeedScrolling(a6)
|
|
|
|
beq.s .nohalfspeed
|
|
|
|
move.w #1,pd_ScrollerPause(a6)
|
|
|
|
.nohalfspeed
|
|
|
|
move.w pd_ScrollScreenYPos(a6),d0
|
|
|
|
addq.w #1,d0
|
|
|
|
cmp.w pd_TextWrapYPos(a6),d0
|
|
|
|
bne.s .nowrap
|
|
|
|
moveq.l #0,d0
|
|
|
|
.nowrap move.w d0,pd_ScrollScreenYPos(a6)
|
|
|
|
|
|
|
|
move.l pd_ScrollTextBuffer(a6),a1
|
|
|
|
move.w pd_ScrollScreenYPos(a6),d2
|
|
|
|
subq.w #2,d2
|
|
|
|
bpl.s .nogotobottom
|
|
|
|
add.w pd_TextWrapYPos(a6),d2
|
|
|
|
.nogotobottom
|
|
|
|
lsl.w #4,d2 ;*16
|
|
|
|
adda.w d2,a1
|
|
|
|
lsl.w #2,d2 ;*64
|
|
|
|
adda.w d2,a1
|
|
|
|
|
|
|
|
BLTHOGON
|
|
|
|
BLTWAIT
|
|
|
|
BLTHOGOFF
|
|
|
|
|
|
|
|
moveq.l #0,d0
|
|
|
|
BLTCON_SET D,0,0,0
|
|
|
|
move.w d0,bltdmod(a5)
|
|
|
|
|
|
|
|
move.l a1,bltdpt(a5)
|
|
|
|
move.w #(SCT_WIDTH>>4)|((1*SCT_PLANES)<<6),bltsize(a5)
|
|
|
|
;rts
|
|
|
|
|
|
|
|
enp_write_textline:
|
|
|
|
;tst.w pd_ScrollerPause(a6)
|
|
|
|
;bne.s .paused
|
|
|
|
subq.w #1,pd_NextLineWait(a6)
|
|
|
|
bmi.s .nextline
|
|
|
|
.paused
|
|
|
|
rts
|
|
|
|
|
|
|
|
.halfspeed
|
|
|
|
eor.w #1,pd_HalfspeedScrolling(a6)
|
|
|
|
bra.s .retrychar
|
|
|
|
|
|
|
|
.nextline
|
|
|
|
|
2024-09-15 17:43:33 +02:00
|
|
|
PUTMSG 40,<"%d: NL">,fw_FrameCounter-2(a6)
|
2023-05-22 16:17:35 +02:00
|
|
|
move.l pd_TextLinePtr(a6),a0
|
|
|
|
.retrychar
|
|
|
|
tst.b (a0)
|
|
|
|
bne.s .nowrap
|
|
|
|
st pd_PartDone(a6)
|
|
|
|
lea enp_scrolltext(pc),a0
|
|
|
|
.nowrap bpl.s .startcounting
|
|
|
|
moveq.l #0,d0
|
|
|
|
move.b (a0)+,d0
|
|
|
|
cmp.b #$ff,d0
|
|
|
|
beq.s .halfspeed
|
|
|
|
lsl.b #1,d0
|
|
|
|
lsl.w #2,d0
|
|
|
|
move.w d0,pd_ScrollerPause(a6)
|
|
|
|
bra.s .retrychar
|
|
|
|
|
|
|
|
.startcounting
|
|
|
|
move.l a0,a1
|
|
|
|
moveq.l #0,d0
|
|
|
|
moveq.l #FONT_HEIGHT,d2
|
|
|
|
|
|
|
|
.countlinelength
|
|
|
|
tst.b (a1)
|
|
|
|
beq.s .done
|
|
|
|
move.b (a1)+,d1
|
|
|
|
cmp.b #10,d1
|
|
|
|
beq.s .done
|
|
|
|
cmp.b #5,d1
|
|
|
|
beq.s .halfdone
|
|
|
|
addq.w #1,d0
|
|
|
|
bra.s .countlinelength
|
|
|
|
|
|
|
|
.halfdone
|
|
|
|
moveq.l #FONT_HEIGHT/2,d2
|
|
|
|
.done move.l a1,pd_TextLinePtr(a6)
|
|
|
|
move.w d0,d7
|
|
|
|
beq.s .skipline
|
|
|
|
|
|
|
|
moveq.l #-1,d3
|
|
|
|
BLTHOGON
|
|
|
|
BLTWAIT
|
|
|
|
BLTCON_SET A,0,0,0
|
|
|
|
move.l #$ff000000,bltafwm(a5) ; also fills bltalwm
|
|
|
|
move.w d3,bltadat(a5)
|
|
|
|
move.l #(((SCT_WIDTH-16)/8-2)<<16)|(-2&$ffff),bltcmod(a5)
|
|
|
|
move.w #((SCT_WIDTH-16)/8-2),bltdmod(a5)
|
|
|
|
|
|
|
|
move.w #SCT_WIDTH/2,d1
|
|
|
|
lsl.w #2,d0
|
|
|
|
sub.w d0,d1
|
|
|
|
PUTMSG 30,<"XPos %d">,d1
|
|
|
|
|
|
|
|
move.l pd_ScrollTextBuffer(a6),a3
|
|
|
|
move.w pd_TextYPos(a6),d3
|
|
|
|
lsl.w #4,d3 ;*16
|
|
|
|
adda.w d3,a3
|
|
|
|
lsl.w #2,d3 ;*64
|
|
|
|
adda.w d3,a3
|
|
|
|
|
|
|
|
subq.w #1,d7
|
|
|
|
.letterloop
|
|
|
|
moveq.l #0,d0
|
|
|
|
move.b (a0)+,d0
|
|
|
|
move.w d1,d3
|
|
|
|
lsr.w #4,d3
|
|
|
|
add.w d3,d3
|
|
|
|
lea (a3,d3.w),a1
|
|
|
|
bsr enp_write_letter
|
|
|
|
addq.w #8,d1
|
|
|
|
dbra d7,.letterloop
|
|
|
|
.skipline
|
|
|
|
move.w d2,d0
|
|
|
|
add.w pd_TextYPos(a6),d2
|
|
|
|
cmp.w #SCT_HEIGHT-FONT_HEIGHT,d2
|
|
|
|
ble.s .noscrwrap
|
|
|
|
move.w d2,pd_TextWrapYPos(a6)
|
|
|
|
moveq.l #0,d2
|
|
|
|
.noscrwrap
|
|
|
|
move.w d2,pd_TextYPos(a6)
|
|
|
|
subq.w #1,d0
|
|
|
|
move.w d0,pd_NextLineWait(a6)
|
|
|
|
rts
|
|
|
|
|
|
|
|
; d0=letter, d1=xpos
|
|
|
|
enp_write_letter:
|
|
|
|
sub.w #' ',d0
|
|
|
|
lsl.w #6,d0 ; 2*FONT_HEIGHT*FONT_PLANES
|
|
|
|
lea enp_font_data,a2
|
|
|
|
adda.w d0,a2
|
|
|
|
|
|
|
|
move.w #(2)|((FONT_HEIGHT*FONT_PLANES)<<6),d3
|
|
|
|
|
|
|
|
moveq.l #15,d5
|
|
|
|
and.w d1,d5
|
|
|
|
ror.w #4,d5
|
|
|
|
|
|
|
|
move.w #BLTEN_BCD|(((BLT_A&BLT_B)|(BLT_C&~BLT_A))&$ff),d4
|
|
|
|
or.w d5,d4
|
|
|
|
swap d4
|
|
|
|
move.w d5,d4
|
|
|
|
|
|
|
|
BLTHOGON
|
|
|
|
BLTWAIT
|
|
|
|
BLTHOGOFF
|
|
|
|
move.l d4,bltcon0(a5)
|
|
|
|
|
|
|
|
move.l a2,bltbpt(a5)
|
|
|
|
move.l a1,bltcpt(a5)
|
|
|
|
move.l a1,bltdpt(a5)
|
|
|
|
move.w d3,bltsize(a5)
|
|
|
|
rts
|
|
|
|
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
|
|
|
|
enp_create_dp_copperlist:
|
|
|
|
COPIMOVE $4200,bplcon0
|
|
|
|
move.l #$5107fffe,(a0)+
|
|
|
|
moveq.l #-2,d3
|
|
|
|
|
|
|
|
move.w #bplpt,d1
|
|
|
|
move.l pd_ScreenshotsBuffer(a6),d0
|
|
|
|
add.l pd_ScreenshotsYOffset(a6),d0
|
|
|
|
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 #6,d1
|
|
|
|
|
|
|
|
add.l #(SCREENSHOTS_WIDTH/8),d0
|
|
|
|
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 #6,d1
|
|
|
|
|
|
|
|
move.w #bplpt+4,d1
|
|
|
|
|
|
|
|
move.w pd_ScrollScreenYPos(a6),d2
|
|
|
|
lsl.w #4,d2 ; *16
|
|
|
|
move.w d2,d0
|
|
|
|
lsl.w #2,d2 ; *64
|
|
|
|
add.w d2,d0
|
|
|
|
ext.l d0
|
|
|
|
add.l pd_ScrollTextBuffer(a6),d0
|
|
|
|
|
|
|
|
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 #6,d1
|
|
|
|
|
|
|
|
add.l #(SCT_WIDTH/8),d0
|
|
|
|
move.w d1,(a0)+
|
|
|
|
swap d0
|
|
|
|
move.w d0,(a0)+
|
|
|
|
addq.w #2,d1
|
|
|
|
move.w d1,(a0)+
|
|
|
|
swap d0
|
|
|
|
move.w d0,(a0)+
|
|
|
|
|
|
|
|
move.w pd_TextWrapYPos(a6),d0
|
|
|
|
move.w d0,d1
|
|
|
|
sub.w #ENDP_HEIGHT,d0
|
|
|
|
sub.w pd_ScrollScreenYPos(a6),d0
|
|
|
|
bpl.s .skipwrap
|
|
|
|
add.w #$51+ENDP_HEIGHT,d0
|
|
|
|
lsl.w #8,d0
|
|
|
|
bcc.s .no255
|
|
|
|
move.l #$ffdffffe,(a0)+
|
|
|
|
.no255
|
|
|
|
addq.w #7,d0
|
|
|
|
|
|
|
|
move.w d0,(a0)+
|
|
|
|
move.w d3,(a0)+
|
|
|
|
move.w #bpl2mod,(a0)+
|
|
|
|
mulu.w #(SCT_WIDTH/8)*2,d1
|
|
|
|
neg.w d1
|
|
|
|
add.w #(SCT_WIDTH/8),d1
|
|
|
|
move.w d1,(a0)+
|
|
|
|
add.w #$100,d0
|
|
|
|
bcc.s .no255_2
|
|
|
|
move.l #$ffdffffe,(a0)+
|
|
|
|
.no255_2
|
|
|
|
move.w d0,(a0)+
|
|
|
|
move.w d3,(a0)+
|
|
|
|
move.w #bpl2mod,(a0)+
|
|
|
|
move.w #(SCT_WIDTH/8),(a0)+
|
|
|
|
.skipwrap
|
|
|
|
|
|
|
|
lea pd_Palette(a6),a1
|
|
|
|
move.w #color,d0
|
|
|
|
moveq.l #16-1,d7
|
|
|
|
.palloop
|
|
|
|
move.w d0,(a0)+
|
|
|
|
move.w cl_Color(a1),(a0)+
|
|
|
|
lea cl_SIZEOF(a1),a1
|
|
|
|
addq.w #2,d0
|
|
|
|
dbra d7,.palloop
|
|
|
|
|
|
|
|
move.l d3,(a0) ; COP_END
|
|
|
|
rts
|
|
|
|
|
|
|
|
;********************************************************************
|
|
|
|
|
|
|
|
enp_scrolltext:
|
|
|
|
dc.b 10
|
|
|
|
dc.b "This is the end of",10,5
|
|
|
|
dc.b "---===*** HAMAZING ***===---",10
|
|
|
|
dc.b "(post party version)",10
|
|
|
|
dc.b "A one-disk trackmo",10,5
|
|
|
|
dc.b "originally released at",10,5
|
|
|
|
dc.b "68k Inside 2023",10,5
|
|
|
|
dc.b "for OCS/ECS Amiga",10
|
|
|
|
dc.b "7 MHz 68000",10
|
|
|
|
dc.b "512 kb chip + 512 kb slow",10
|
|
|
|
dc.b $80+25
|
|
|
|
dc.b 10,10,10,10
|
|
|
|
dc.b "* Graphics *",10,5
|
|
|
|
dc.b "Optic",10
|
|
|
|
dc.b 10,5
|
|
|
|
dc.b "* Music *",10,5
|
|
|
|
dc.b "mA2E",10
|
|
|
|
dc.b 10,5
|
|
|
|
dc.b "* Code *",10,5
|
|
|
|
dc.b "Platon",10,5
|
|
|
|
dc.b $80+25
|
|
|
|
dc.b 10,10
|
|
|
|
dc.b "* HAM tech announcer *",10
|
|
|
|
dc.b "psenough",10
|
|
|
|
dc.b 5
|
|
|
|
dc.b "* Additional graphics / photos *",10
|
|
|
|
dc.b "Platon",10
|
|
|
|
dc.b 5
|
|
|
|
dc.b "* Additional code *",10
|
|
|
|
dc.b "Leonard / Oxygene (LightSpeedPlayer)",10
|
|
|
|
dc.b "Einar Saukas (ZX0 technology)",10
|
|
|
|
dc.b "Emmanuel Marty (orig. ZX0 decruncher)",10
|
|
|
|
dc.b "a/b (sine table routine)",10
|
|
|
|
dc.b 5,$80+15,10
|
|
|
|
dc.b 10,10,10
|
|
|
|
dc.b "'Hamazing' and 'Hamphrey' puns",10
|
|
|
|
dc.b "courtesy of Grip / Istari",10
|
|
|
|
dc.b 10,10,10
|
|
|
|
dc.b 10,10,10
|
|
|
|
dc.b "LMB pauses scroller",10
|
|
|
|
dc.b "RMB restarts demo!",10,10,10
|
|
|
|
dc.b 10,10,10
|
|
|
|
dc.b 10,10,10
|
|
|
|
dc.b 10,10,10
|
|
|
|
dc.b 10,10,10
|
|
|
|
dc.b $ff
|
|
|
|
dc.b "mA2E at the keyboard..."
|
|
|
|
dc.b 10,10,10
|
|
|
|
dc.b "Thanks for watching the demo.",10
|
|
|
|
dc.b "Hope you like it. Greetings to all my",10
|
|
|
|
dc.b "friends in the demoscene, and also to my",10
|
|
|
|
dc.b "wife that let me sit hours after hours",10
|
|
|
|
dc.b "composing.",10,10
|
|
|
|
dc.b "Also I would like to say thanks to the",10
|
|
|
|
dc.b "whole Amiga community and their support",10
|
|
|
|
dc.b "and inspiration.",10,10
|
|
|
|
dc.b "Without you, I would have stopped making",10
|
|
|
|
dc.b "music many many years ago.",10,10
|
|
|
|
dc.b "Stay tuned for more intros and demos",10
|
|
|
|
dc.b "from us.",10,10
|
|
|
|
dc.b "Thats all from me. Enjoy the party.",10
|
|
|
|
dc.b "Until next time, keep on creating",10
|
|
|
|
dc.b "awesome stuff for the Amiga,",10
|
|
|
|
dc.b "which we all love.",10,10
|
|
|
|
dc.b "If you want to get in touch with me,",10
|
|
|
|
dc.b "drop me an email at stian-g@online.no",10
|
|
|
|
dc.b "or at Discord mA2E / dSr#1261."
|
|
|
|
dc.b 10,10,10
|
|
|
|
dc.b "$%%&",10,10
|
|
|
|
dc.b "Optic on the keys.",10,10
|
|
|
|
dc.b "Seems time is eluding me as always. Been",10
|
|
|
|
dc.b "meaning to do a whole bunch of personal",10
|
|
|
|
dc.b "greets and messages, like the good old",10
|
|
|
|
dc.b "days, for many a scroller now",10
|
|
|
|
dc.b "$%%% %%% %%&",10,10
|
|
|
|
dc.b "Alas, it's not happening this time",10
|
|
|
|
dc.b "either... hugs and kisses to",10
|
|
|
|
dc.b "Planet.Jazz, Focus Design, Talent,",10
|
|
|
|
dc.b "Proxima, Desire, Nah, Resistance and so",10
|
|
|
|
dc.b "on and so forth $",10,10
|
|
|
|
dc.b "Thanks to Platon for bringing me onto",10
|
|
|
|
dc.b "this project, it's been fun. Had a great",10
|
|
|
|
dc.b "time producing true colour graphics with",10
|
|
|
|
dc.b "the wacom, as opposed to purely pushing",10
|
|
|
|
dc.b "pixels in DP. Most of the stuff here is",10
|
|
|
|
dc.b "WIP, as I am suffering some true colour",10
|
|
|
|
dc.b "ringrust. Hopefully there will be time",10
|
|
|
|
dc.b "to fix up some stuff post-party.",10,10
|
|
|
|
dc.b "Optic out.. Much love!"
|
|
|
|
dc.b 10,10,10
|
|
|
|
dc.b "Platon at the keyboard..."
|
|
|
|
dc.b 10,10,10
|
|
|
|
dc.b "This is the successor to",10,10
|
|
|
|
dc.b "*** Ham Eager *** ",10,10
|
|
|
|
dc.b "the demo that started the HAM madness",10
|
|
|
|
dc.b "two years ago.",10,10
|
|
|
|
dc.b "Unfortunately, it did not spark many",10
|
|
|
|
dc.b "new HAM effects by other people :-(",10,10
|
|
|
|
dc.b "This time we got some cool graphics",10
|
|
|
|
dc.b "from a real graphic artist and some",10
|
|
|
|
dc.b "really good music, too.",10
|
|
|
|
dc.b 10
|
|
|
|
dc.b "Some will be disappointed about the",10
|
|
|
|
dc.b "reduced amount of coder colors...",10
|
|
|
|
dc.b 10
|
|
|
|
dc.b "# ... you cannot please them all #",10
|
|
|
|
dc.b 10,10,10
|
|
|
|
dc.b "Big big big thanks must go out to mA2E",10
|
|
|
|
dc.b "and Optic for their great work and that",10
|
|
|
|
dc.b "they are absolute reliable people.",10,10
|
|
|
|
dc.b "However, they seem to work best under",10
|
|
|
|
dc.b "pressure of the deadline...",10
|
|
|
|
dc.b 10,10
|
|
|
|
dc.b "Also thanks to Virgill for feedback and",10
|
|
|
|
dc.b "testing some early effects.",10
|
|
|
|
dc.b 10,10
|
|
|
|
dc.b "### Personal greetings ###",10,10
|
|
|
|
dc.b "4play, Accidental, Alex, Alis, Anders",10
|
|
|
|
dc.b "Arrakis, Axis, Bartman, Bifat, Bonefish",10
|
|
|
|
dc.b "Dan, Don Pu, Chellomere, Critikill",10
|
|
|
|
dc.b "Daddy Freddy, Dascon, Dexter, DJ H0ffman",10
|
|
|
|
dc.b "Evil, Facet, FloKi, Florist, Gasman",10
|
|
|
|
dc.b "Greippi, Grip, Ham, Hedning, Heike",10
|
|
|
|
dc.b "Jeenio, Jesko, Jonna, Johanna, Karla",10
|
|
|
|
dc.b "Kirsten, Krill, Lee, Leonard, LFT, Losso",10
|
|
|
|
dc.b "Leuat, MacMissAnn, Magic, Maze, Merry",10
|
|
|
|
dc.b "Mirrorbird, Mop, Mystra, No9, Nosferatu",10
|
|
|
|
dc.b "Nyingen, OhLi, Optic, Pellicus, Pestis",10
|
|
|
|
dc.b "Peter, Phreedh, Pink, Pit, psenough",10
|
|
|
|
dc.b "Prowler, RamonB5, Rakhee, Rapture, rez",10
|
|
|
|
dc.b "Rog_VF, Ronan, Serpent, Shoe",10
|
|
|
|
dc.b "Sir Garbagetruck, Slash, Soundy, spkr",10
|
|
|
|
dc.b "Starchaser, STC, Stinsen, Sudoism",10
|
|
|
|
dc.b "Superogue, TDK, Tezar, Tobi G.",10
|
|
|
|
dc.b "Toni Wilen, Virgill, XXX, Yoruq, Zoi",10
|
|
|
|
dc.b "Zoner",10,10,10
|
|
|
|
dc.b "... and to my beloved wife and kid",10
|
|
|
|
dc.b "who supported me while I spent many",10
|
|
|
|
dc.b "days and nights in front of the Amiga.",10
|
|
|
|
dc.b 10,10,10
|
|
|
|
dc.b "We didn't manage to put all demogroups",10
|
|
|
|
dc.b "onto the graphics, but please feel",10
|
|
|
|
dc.b "our love nevertheless!"
|
|
|
|
dc.b 10,10,10,10,10,10,10,10,10,10,10
|
|
|
|
dc.b "THE END",10,10
|
|
|
|
dc.b "(or, if you're interested, some",10
|
|
|
|
dc.b "tech tech coming up...)",10
|
|
|
|
dc.b 10,10,$80+60
|
|
|
|
dc.b 10,10,10,10,10,10,10,10,10,10,10,10
|
|
|
|
dc.b "* Trackloader / Framework *",10,10
|
|
|
|
dc.b "After Ham Eager, and several intros,",10
|
|
|
|
dc.b "I rewrote much of the framework that",10
|
|
|
|
dc.b "was originally based on Axis' work",10
|
|
|
|
dc.b "from Planet Rocklobster #",10,10
|
|
|
|
dc.b "Now both local variables of your part",10
|
|
|
|
dc.b "and those of the firmware are accessed",10
|
|
|
|
dc.b "through the same base register. Nice!",10,10
|
|
|
|
dc.b "The multitasking has been rewritten",10
|
|
|
|
dc.b "and now allows an arbitrary number of",10
|
|
|
|
dc.b "tasks with priorities and optional",10
|
|
|
|
dc.b "round robin.",10,10
|
|
|
|
dc.b "The framework comes with several new",10
|
|
|
|
dc.b "features such as blitter queues and",10
|
|
|
|
dc.b "blitter tasks, LSP and Pretracker",10
|
|
|
|
dc.b "playback, ZX0 decrunching, better",10
|
|
|
|
dc.b "memory management and so on...",10,10
|
|
|
|
dc.b "It's the things that you don't see, like",10
|
|
|
|
dc.b "calculating true color data or speedcode",10
|
|
|
|
dc.b "and loading more stuff from disk in the",10
|
|
|
|
dc.b "background that make this demo fancy.",10,10
|
|
|
|
dc.b "Once I have the time to document the",10
|
|
|
|
dc.b "stuff, I will make it public.",10,10
|
|
|
|
dc.b 10,10,"----",10,10,10
|
|
|
|
dc.b "* Gotham (1200 LOC) *",10,10
|
|
|
|
dc.b "As a nod to Batman Group's fantastic",10
|
|
|
|
dc.b "Batman Rises demo, I wanted to have",10
|
|
|
|
dc.b "an early loading screen, that slightly",10
|
|
|
|
dc.b "resembles their work. Little did I know",10
|
|
|
|
dc.b "that Losso had a similar idea with his",10
|
|
|
|
dc.b "winning demo at Revision.",10,10
|
|
|
|
dc.b "Anyway, the code uses the anti-aliased",10
|
|
|
|
dc.b "blitter line drawing from Frustro.",10,10
|
|
|
|
dc.b "The voice-over is from one of psenough's",10
|
|
|
|
dc.b "recent YouTube hype videos where he",10
|
|
|
|
dc.b "mentions Ham Eager and tries to explain",10
|
|
|
|
dc.b "what's special about it.",10,10
|
|
|
|
dc.b "Kudos for doing that! I just found it",10
|
|
|
|
dc.b "very cute how he was talking about",10
|
|
|
|
dc.b 10,"* The HAM Technology *",10,10
|
|
|
|
dc.b "that I just had to make a little joke",10
|
|
|
|
dc.b "out of it. I hope you don't mind :)",10
|
|
|
|
dc.b 10,10,"----",10,10,10
|
|
|
|
dc.b "* Bulb/Lamp/Sofa (3700 LOC) *",10,10
|
|
|
|
dc.b "I started coding this effect about a",10
|
|
|
|
dc.b "year ago, further exploring the",10
|
|
|
|
dc.b "possibilities of the mode one could call",10
|
|
|
|
dc.b "'extra-halfbright-HAM' (I recently saw",10
|
|
|
|
dc.b "a demo from a couple of years ago that",10
|
|
|
|
dc.b "uses a similar thing to blend in a HAM",10
|
|
|
|
dc.b "picture).",10,10
|
|
|
|
dc.b "The main problem was to reduce the",10
|
|
|
|
dc.b "required number of blits to do the",10
|
|
|
|
dc.b "compositing of the three shades to",10
|
|
|
|
dc.b "a minimum.",10,10
|
|
|
|
dc.b "Still it requires about 200 very unique",10
|
|
|
|
dc.b "blits for one new image.",10
|
|
|
|
dc.b "It was very hard to keep it running at",10
|
|
|
|
dc.b "a rate of constant 25 Hz.",10,10
|
|
|
|
dc.b "There is a lot of ahead-of-time blitter",10
|
|
|
|
dc.b "queue calculation here and you might",10
|
|
|
|
dc.b "notice how slow the disk keeps loading",10
|
|
|
|
dc.b "during the effect because, well, not",10
|
|
|
|
dc.b "much time left to do so.",10,10
|
|
|
|
dc.b "The lamp and the text are sprites, the",10
|
|
|
|
dc.b "rotations of the lamp are calculated",10
|
|
|
|
dc.b "at the beginning of the effect while",10
|
|
|
|
dc.b "the lamp is still off-screen.",10,10
|
|
|
|
dc.b "It's funny how a basic effect takes",10
|
|
|
|
dc.b "80 percent of your time and then",10
|
|
|
|
dc.b "designing stuff around it takes",10
|
|
|
|
dc.b "another 80 percent :)",10
|
|
|
|
dc.b 10,10,"----",10,10,10
|
|
|
|
dc.b "* STHam (1800 LOC) *",10,10
|
|
|
|
dc.b "Originally planned to be showing a",10
|
|
|
|
dc.b "sliced, temporal (spatial) dithered",10
|
|
|
|
dc.b "HAM picture with a scroller on top,",10
|
|
|
|
dc.b "the palette color switching had to",10
|
|
|
|
dc.b "go due to copper timing issues.",10,10
|
|
|
|
dc.b "What's left is a bent sprite scroller",10
|
|
|
|
dc.b "(inspired by the C64 demo",10
|
|
|
|
dc.b "The Shores of Reflection by Shape)",10
|
|
|
|
dc.b "that uses two blits to do a shearing",10
|
|
|
|
dc.b "operation -- this is a new approach",10
|
|
|
|
dc.b "to me. Fun!",10,10
|
|
|
|
dc.b "There was plenty of CPU time left to",10
|
|
|
|
dc.b "make the scroller reappear, but",10
|
|
|
|
dc.b "unfortunately, the motif didn't quite",10
|
|
|
|
dc.b "allow this.",10,10
|
|
|
|
dc.b "Okay, there is still this temporal",10
|
|
|
|
dc.b "dithering for extra smooth gradients.",10
|
|
|
|
dc.b "(Basically it's a 15 bits image.)",10,10
|
|
|
|
dc.b "The intro transition is a new thing,",10
|
|
|
|
dc.b "the sprite curtain is more or less",10
|
|
|
|
dc.b "taken from Ham Eager.",10
|
|
|
|
dc.b 10,10,"----",10,10,10
|
|
|
|
dc.b "* Kaleidoscope (6400 LOC) *",10,10
|
|
|
|
dc.b "Ever since I watched Rule 30 by",10
|
|
|
|
dc.b "Andromeda, I thought: This kaleidoscope",10
|
|
|
|
dc.b "effect looks cool! But it should be",10
|
|
|
|
dc.b "possible to do it in HAM, right?",10,10
|
|
|
|
dc.b "So here you are: Not only running in",10
|
|
|
|
dc.b "constant 25 Hz in 320x180, but also",10
|
|
|
|
dc.b "flipping the graphics to six different",10
|
|
|
|
dc.b "gradients.",10,10
|
|
|
|
dc.b "The kaleidoscope uses three textures of",10
|
|
|
|
dc.b "256x256 pixels for three rotations each.",10,10
|
|
|
|
dc.b "Optic has somehow managed that the",10
|
|
|
|
dc.b "textures use over 4000 colors! Wow!",10,10
|
|
|
|
dc.b "Calculating the necessary true color",10
|
|
|
|
dc.b "representation takes a whopping 384 KB",10
|
|
|
|
dc.b "of slow ram. I had forgotten to multiply",10
|
|
|
|
dc.b "times two when I started designing the",10
|
|
|
|
dc.b "effect 8-O",10,10
|
|
|
|
dc.b "The intro/outro noise transition of the",10
|
|
|
|
dc.b "effect uses repeating sprite overlays.",10,10
|
|
|
|
dc.b "The party version was missing the fairy",10
|
|
|
|
dc.b "dust and wand effect as",10
|
|
|
|
dc.b "originally planned.",10,10
|
|
|
|
dc.b "The part is now interactive",10
|
|
|
|
dc.b "if you move your mouse.",10
|
|
|
|
dc.b 10,10,"----",10,10,10
|
|
|
|
dc.b "* Hexagon (900 LOC) *",10,10
|
|
|
|
dc.b "After all free memory had been exhausted",10
|
|
|
|
dc.b "I needed a transition effect to preload",10
|
|
|
|
dc.b "the next part with the new music.",10,10
|
|
|
|
dc.b "I had this copper chunky thing lying",10
|
|
|
|
dc.b "around for a year or so -- so I thought",10
|
|
|
|
dc.b "I could do my first Amiga Rotozoomer.",10,10
|
|
|
|
dc.b "The kaleidoscope texture was still left",10
|
|
|
|
dc.b "in memory, so why not invert it (for",10
|
|
|
|
dc.b "free, 'cause Blitter!) and use that?",10,10
|
|
|
|
dc.b "The twist about this effect is that it",10
|
|
|
|
dc.b "uses extra-halfbright mode, but without",10
|
|
|
|
dc.b "any display DMA active!",10,10
|
|
|
|
dc.b "This means every second cycle is still",10
|
|
|
|
dc.b "available for the CPU or blitter.",10,10
|
|
|
|
dc.b "There are some things I want to explore",10
|
|
|
|
dc.b "further about this new mode with its",10
|
|
|
|
dc.b "own limitations, but it was time to get",10
|
|
|
|
dc.b "it out to see the light of day.",10
|
|
|
|
dc.b 10,10,"----",10,10,10
|
|
|
|
dc.b "* Rubbercube (3000 LOC) *",10,10
|
|
|
|
dc.b "This is again a filler effect that was",10
|
|
|
|
dc.b "needed to get time music timing sync to",10
|
|
|
|
dc.b "the break and the cat cue.",10,10
|
|
|
|
dc.b "It is of course based on the G. Rowdy",10
|
|
|
|
dc.b "gouraud cube, but this one is smaller",10
|
|
|
|
dc.b "and uses 16 shades.",10,10
|
|
|
|
dc.b "It is smaller to fit in 264 KB of chip",10
|
|
|
|
dc.b "ram required to store 33 frames of",10
|
|
|
|
dc.b "animation to make it a rubbercube.",10,10
|
|
|
|
dc.b "The second palette is a nod to Variform",10
|
|
|
|
dc.b "(again).",10
|
|
|
|
dc.b 10,10,"----",10,10,10
|
|
|
|
dc.b "* Virgillbars (3300 LOC) *",10,10
|
|
|
|
dc.b "The name came from Virgill telling me",10
|
|
|
|
dc.b "that he wanted to have a rotating bars",10
|
|
|
|
dc.b "effect in my next demo, like the ones in",10
|
|
|
|
dc.b "Interference by Sanity.",10,10
|
|
|
|
dc.b "Also, Nosferatu wrote in his tech",10
|
|
|
|
dc.b "write-up about his Fat Circuits intro",10
|
|
|
|
dc.b "that he would leave the HAM stuff to me",10
|
|
|
|
dc.b "and did EHB bars instead.",10,10
|
|
|
|
dc.b '"Hold my beer."',10,10
|
|
|
|
dc.b "The tricky thing is how to calculate",10
|
|
|
|
dc.b "a line of optimal HAM pixels fast",10
|
|
|
|
dc.b "enough and how to do the saturation and",10
|
|
|
|
dc.b "math involved.",10,10
|
|
|
|
dc.b "In Ramontic Getaway, I had a chunky",10
|
|
|
|
dc.b "copper display but used the blitter to",10
|
|
|
|
dc.b "perform 30 bit true color saturation",10
|
|
|
|
dc.b "and 12 bit result calculation.",10
|
|
|
|
dc.b "So I took it from there.",10,10
|
|
|
|
dc.b "As for the HAM pixel calculation:",10
|
|
|
|
dc.b "This is of course table-assisted but",10
|
|
|
|
dc.b "does use a few clever tricks or so.",10
|
|
|
|
dc.b "To be able to rotate the bars, the line",10
|
|
|
|
dc.b "has to be pretty wide.",10,10
|
|
|
|
dc.b "Next time: Full rotation",10,10
|
|
|
|
dc.b "Also: HAM. You need to fix the left",10
|
|
|
|
dc.b "border. If you see some shit there",10
|
|
|
|
dc.b "running in WinUAE emulation, you need",10
|
|
|
|
dc.b "to get the latest WinUAE 5.x.x version!",10,10
|
|
|
|
dc.b "The overlays texts are taken from",10
|
|
|
|
dc.b "'Addition of Light Divided'",10
|
|
|
|
dc.b "by Tori Amos.",10
|
|
|
|
dc.b 10,10,"----",10,10,10
|
|
|
|
dc.b "* Blend (5800 LOC) *",10,10
|
|
|
|
dc.b "In Shuffling around the Christmas Tree",10
|
|
|
|
dc.b "I explored the possibilities of hacking",10
|
|
|
|
dc.b "HAM pictures into pieces without",10
|
|
|
|
dc.b "fringing. Taking some of the stuff I",10
|
|
|
|
dc.b "learned from there and applying it to",10
|
|
|
|
dc.b "some other shapes. The original main",10
|
|
|
|
dc.b "effect (a wavy line) didn't make it",10
|
|
|
|
dc.b "into the demo.",10,10
|
|
|
|
dc.b "Still you get some fading 'between' HAM",10
|
|
|
|
dc.b "images and transition effects that",10
|
|
|
|
dc.b "should not be possible.",10,10
|
|
|
|
dc.b "Does not use BresenHAM's circle drawing",10
|
|
|
|
dc.b "but the recently published method by",10
|
|
|
|
dc.b "C64 programmer Jesko, who invented a",10
|
|
|
|
dc.b "slightly faster drawing method in 1986.",10,10
|
|
|
|
dc.b "Main problem here is to keep five full",10
|
|
|
|
dc.b "screen buffers in memory (210 KB) plus",10
|
|
|
|
dc.b "the necessary true color data (337 KB)",10
|
|
|
|
dc.b "plus the generated speedcode, data and",10
|
|
|
|
dc.b "masks for the 47 circles.",10,10
|
|
|
|
dc.b "It's funny how many effects in this demo",10
|
|
|
|
dc.b "are actually quite memory-bound.",10,10
|
|
|
|
dc.b "As the logo graphics only turned up",10
|
|
|
|
dc.b "a day before the deadline, and I had",10
|
|
|
|
dc.b "assumed the logo to be a non-HAM gfx,",10
|
|
|
|
dc.b "the fading had to be removed at short",10
|
|
|
|
dc.b "notice. Now it's back again.",10
|
|
|
|
dc.b 10,10,"----",10,10,10
|
|
|
|
dc.b "* Endpart (900 LOC) *",10,10
|
|
|
|
dc.b "Originally planned to be completely",10
|
|
|
|
dc.b "different, but the time just ran out.",10
|
|
|
|
dc.b "As there was still space left on the",10
|
|
|
|
dc.b "disk, the background images is just a",10
|
|
|
|
dc.b "huge bitmap of 128 KB.",10
|
|
|
|
dc.b 10,10,10,10
|
|
|
|
dc.b 10,10,10,10
|
|
|
|
dc.b "That's it. So many planned parts didn't",10
|
|
|
|
dc.b "make it into this demo, but we are",10
|
|
|
|
dc.b "still glad how it came out.",10,10,10
|
|
|
|
dc.b "We hope you enjoyed it as much",10
|
|
|
|
dc.b "as we did making it!",10
|
|
|
|
dc.b 10,10,10,10
|
|
|
|
dc.b 10,10,10,10
|
|
|
|
dc.b 10,10,10,10
|
|
|
|
dc.b "Wrapping back to start in...",10,10
|
|
|
|
dc.b "3",10,10
|
|
|
|
dc.b "2",10,10
|
|
|
|
dc.b "1",10,10
|
|
|
|
dc.b 0
|
|
|
|
even
|
|
|
|
|
|
|
|
; bg playfield 0/2 (0,1,4,5), text playfield 1/3 (0,2,8,10)
|
|
|
|
enp_palette:
|
|
|
|
dc.w $345,$456,$fff,$fff,$567,$678,$fff,$fff
|
|
|
|
dc.w $acd,$bde,$000,$111,$cee,$def,$222,$333
|
|
|
|
|
|
|
|
;--------------------------------------------------------------------
|
|
|
|
|
|
|
|
section "enp_copper",data,chip
|
|
|
|
|
|
|
|
enp_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
|
|
|
|
enp_ddfstop:
|
|
|
|
COP_MOVE ddfstop,$00d0 ; bitplane stop
|
|
|
|
|
|
|
|
COP_MOVE bplcon3,$0c00
|
|
|
|
enp_fmode:
|
|
|
|
COP_MOVE fmode,$0000 ; fixes the aga modulo problem
|
|
|
|
|
|
|
|
COP_MOVE bplcon0,$0200
|
|
|
|
COP_MOVE bplcon1,$0000
|
|
|
|
COP_MOVE bplcon2,$0044 ; sprites in front, playfield 2 has priority
|
|
|
|
COP_MOVE bpl1mod,(SCREENSHOTS_WIDTH/8)*SCREENSHOTS_PLANES-(SCREENSHOTS_WIDTH/8)
|
|
|
|
COP_MOVE bpl2mod,(SCT_WIDTH/8)*SCT_PLANES-(SCT_WIDTH/8)
|
|
|
|
|
|
|
|
enp_extra_copperlist_ptr:
|
|
|
|
COP_MOVE cop2lc,0
|
|
|
|
COP_MOVE cop2lc+2,0
|
|
|
|
COP_MOVE $1fe,0
|
|
|
|
COP_END
|
|
|
|
|
|
|
|
enp_font_data:
|
2024-09-15 17:43:33 +02:00
|
|
|
incbin "data/endpart/PJZ_font_8x16x4.BPL"
|
2023-05-22 16:17:35 +02:00
|
|
|
|
|
|
|
IFND FW_DEMO_PART
|
|
|
|
IFD ENABLE_PART_MUSIC
|
|
|
|
section "part_music_samples",data,chip ; section for music playback
|
|
|
|
part_music_smp:
|
2024-09-15 17:43:33 +02:00
|
|
|
incbin "data/music/desire_68k_tune3_v2.lsbank"
|
2023-05-22 16:17:35 +02:00
|
|
|
section "part_music_data",data ; section for music playback
|
|
|
|
part_music_data:
|
2024-09-15 17:43:33 +02:00
|
|
|
incbin "data/music/desire_68k_tune3_v2.lsmusic"
|
2023-05-22 16:17:35 +02:00
|
|
|
ENDC
|
|
|
|
section "enp_screenshots",data,chip
|
|
|
|
enp_screenshots:
|
|
|
|
ds.b ((SCREENSHOTS_WIDTH/8)*ENDP_HEIGHT)*SCREENSHOTS_PLANES
|
2024-09-15 17:43:33 +02:00
|
|
|
incbin "data/endpart/screenshots_320x1620.BPL"
|
2023-05-22 16:17:35 +02:00
|
|
|
ENDC
|
|
|
|
END
|