03 August 2020, 23:45 | #41 | |
Registered User
Join Date: Oct 2017
Location: Sunderland, England
Posts: 2,702
|
Quote:
The screens are also setup on boundaries too, but yes i suppose i meant 64k boundaries so that only the low 16 bits of the 24 bit address need to be updated. |
|
03 August 2020, 23:56 | #42 |
OCS forever!
Join Date: Mar 2019
Location: Birmingham, UK
Posts: 418
|
I feel the need to redo my bobsnake routine in a normal, blitter interrupt and copper blitter version as I’ve never tried those. Damn I was trying to be productive as well
|
04 August 2020, 03:52 | #43 | |
Registered User
Join Date: Nov 2017
Location: Los Angeles
Posts: 49
|
Quote:
Thanks for the explanation! I confirmed all the timing as you've said with some test code and the DMA debugger. I was not giving the copper enough credit it seems |
|
04 August 2020, 10:32 | #44 | |
Registered User
Join Date: Oct 2015
Location: Landsberg / Germany
Posts: 526
|
Quote:
I used to implement interrupt-driven blitter controller for Reshoot R and ditched it in the end for a more traditional approach, since it gained no speed advantage and also felt unstable on 060-machines. |
|
06 August 2020, 16:06 | #45 | |
Registered User
Join Date: Aug 2018
Location: Untergrund/Germany
Posts: 408
|
Quote:
Hi Toni, thanks for all your hard work! I tried to create a simple testcase but it wasn't possible. I needed at least 15 moving blits to reproduce the issue. Another observation is that the issue only seem to happen when display dma is fetching while the blitter registers are written from the copper list. I have 5 planes active. |
|
06 August 2020, 18:34 | #46 |
ex. demoscener "Bigmama"
Join Date: Jun 2012
Location: Fyn / Denmark
Posts: 1,624
|
It doesn't make sense if the actual number of blits per frame makes a difference - sounds more like some timing thing that you accidentally hit after 15 blits (similar to the display dma thing you mentioned).
|
08 August 2020, 10:28 | #47 |
Registered User
Join Date: Oct 2017
Location: Sunderland, England
Posts: 2,702
|
A great fit for this engine would be Operation Wolf.
I reckon AGA would do the arcade proud, I can't seem to recall what the Amiga version was like (possibly an ST port). [ Show youtube player ] The game resolution is 320x240, you could probably get away with fetch mode x4 for bitplanes and hw sprites. You would only really need two hardware sprites to provide a 16 colour display panel to the right so an early DDFSTART could be used ($1c maybe??) to get the full resolution with scrolling each way. Pop the game into dual playfield mode for a 16 colour scrolling background and the copper/blitter technique here for blitting all those bobs. I reckon it would be close to the arcade for sure. Geezer |
08 August 2020, 12:45 | #48 | |
Registered User
Join Date: Jul 2015
Location: The Netherlands
Posts: 3,411
|
Quote:
|
|
08 August 2020, 14:54 | #49 | |
Defendit numerus
Join Date: Mar 2017
Location: Crossing the Rubicon
Age: 53
Posts: 4,474
|
Quote:
|
|
08 August 2020, 15:26 | #50 | |
Defendit numerus
Join Date: Mar 2017
Location: Crossing the Rubicon
Age: 53
Posts: 4,474
|
Quote:
- reversing the display panel position to the left (like Banshee do) - using a three color single sprite The panel is divided into clearly visible horizontals stripes of different colors that can be changed with copper (you can also sync for the machine gun loader color). To avoid the problem of transparent black just use a right DIWSTOP and use BRDSPRT=1. |
|
08 August 2020, 15:44 | #51 | |
Registered User
Join Date: Oct 2017
Location: Sunderland, England
Posts: 2,702
|
Quote:
|
|
08 August 2020, 17:48 | #52 | |
Defendit numerus
Join Date: Mar 2017
Location: Crossing the Rubicon
Age: 53
Posts: 4,474
|
Quote:
http://eab.abime.net/showpost.php?p=...5&postcount=19 But the first option (panel to the left) it is definitely much more effective and doesn't bother you with sprites usage (even allows you to use them elsewhere). |
|
08 August 2020, 19:08 | #53 |
Registered User
Join Date: May 2018
Location: Ireland
Posts: 674
|
Why bother with the panel at all? Its not in the pc engine version and doesnt need to be so big, i. e. Sprites showing 3xrocket than each rocket available.
|
08 August 2020, 20:03 | #54 |
Lemon. / Core Design
Join Date: Mar 2016
Location: Tier 5
Posts: 1,212
|
|
08 August 2020, 21:05 | #55 | |
Registered User
Join Date: May 2018
Location: Ireland
Posts: 674
|
Quote:
It is strange that op wolf used a panel as theyre quite rare in arcades, but it does make sense with the gun in the arcade cabinet. |
|
09 August 2020, 19:53 | #56 | |
OCS forever!
Join Date: Mar 2019
Location: Birmingham, UK
Posts: 418
|
Quote:
I did a "normal" bobsnake routine. I guess bobsnakes are a more extreme case than a game because certain things are fixed (bltsize, modulos, bltapt/bltdpt) but it's what I had to hand. - It's a $fca cookie cut minterm so all blitter channels enabled - BOB is 16x16 pixels in 3 bitplanes (so 16*3 high and 2 word wide blits for interleaved) - Display in 3 bitplane mode, 320x256 For normal routine 1. Clear screen with blitter 2. Update bob positions (dual sines for x and y) 3. Finish screen clear with spare CPU 4. Draw BOBs in a tight loop: Result, 79 BOBs. Code:
.loop movem.w (a2)+,d0-d1 ;also clears top of d0 and d1 (important) ror.l #4,d0 ;hiword of d0 contains shift in highest nibble add.w d0,d0 ;loword d0 contains byte offset into screen (x / 8) add.w d0,d1 ;add byte offset to y offset (WARNING: possible 64k overflow) swap d0 ;d0.w now contains shift value in top nibble move.w d0,d2 ;save B shift or.w d3,d0 ;add minterm swap d0 ;d0.l=bltcon0 in high word move.w d2,d0 ;d0.l=bltcon0 and bltcon1 ;d1.w=byte offset into screen add.l a4,d1 ;Add screen ptr to offset move.l d1,a3 ;save d1 for movem optimization - gives an extra bob :) move.w a5,dmacon-dmaconr(a6) ;Blitter nasty on .bw2: btst.b d5,(a6) ;blitwait bne.s .bw2 move.w d6,dmacon-dmaconr(a6) ;Blitter nasty off move.l d0,bltcon0-dmaconr(a6) ;bltcon0/1 movem.l d1/a0/a1/a3,bltcpth-dmaconr(a6) move.w d4,bltsize-dmaconr(a6) ;BLTSIZE ($58) dbf d7,.loop 1. Clear screen with blitter from copperlist 2. Update bob positions (dual sines for x and y) 3. "draw" BOBs into the copperlist (first entry has to hit before screen clr finishes) 3. Finish screen clear with spare CPU 4. Enable blit nasty to finish the frame while copper running the BOBs Result, 63 BOBs. Yuk. Snippet of copperlist: Code:
rept BOB_NUMBOBS dc.w $0001,$0000 ;blitwait, ignore pos dc.w $0001,$0000 ;blitwait CMOVE bltcon0,$0000 CMOVE bltcon1,$0000 CMOVE bltcpth,$0000 CMOVE bltcptl,$0000 CMOVE bltbpth,$0000 ;static CMOVE bltbptl,$0000 ;static CMOVE bltapth,$0000 ;static CMOVE bltaptl,$0000 ;static CMOVE bltdpth,$0000 CMOVE bltdptl,$0000 CMOVE bltsize,((BOB_HEIGHT*BOB_NUMPLANES)*64)+BOB_WORDWIDTH+1 ;bltsize/null endr ... ... rsreset CL_BLT_WAIT1 rs.w 2 CL_BLT_WAIT2 rs.w 2 CL_BLT_BLTCON0 rs.w 2 CL_BLT_BLTCON1 rs.w 2 CL_BLT_BLTCPTH rs.w 2 CL_BLT_BLTCPTL rs.w 2 CL_BLT_BLTBPTH rs.w 2 CL_BLT_BLTBPTL rs.w 2 CL_BLT_BLTAPTH rs.w 2 CL_BLT_BLTAPTL rs.w 2 CL_BLT_BLTDPTH rs.w 2 CL_BLT_BLTDPTL rs.w 2 CL_BLT_BLTSIZE rs.w 2 CL_BLT_SIZEOF rs.w 0 Code:
.loop movem.w (a2)+,d0-d1 ;also clears top of d0 and d1 (important) ror.l #4,d0 ;hiword of d0 contains shift in highest nibble add.w d0,d0 ;loword d0 contains byte offset into screen (x / 8) add.w d0,d1 ;add byte offset to y offset (WARNING: possible 64k overflow) swap d0 ;d0.w now contains shift value in top nibble move.w d0,d2 ;save B shift or.w d3,d0 ;add minterm ;d1.w=byte offset into screen add.l a4,d1 ;Add screen ptr to offset ;d0.w = bltcon0 ;d2.w = bltcon1 ;d1.l - bltcpth/bltdpth move.w d0,CL_BLT_BLTCON0+2(a0) move.w d2,CL_BLT_BLTCON1+2(a0) move.w d1,CL_BLT_BLTDPTL+2(a0) move.w d1,CL_BLT_BLTCPTL+2(a0) swap d1 move.w d1,CL_BLT_BLTDPTH+2(a0) move.w d1,CL_BLT_BLTCPTH+2(a0) lea CL_BLT_SIZEOF(a0),a0 dbf d7,.loop I would say though if you had lots of CPU game logic then I think the results would be better for the copper version. The tight loop of a bob snake is a bit extreme I may do a blitter interrupt version even though that will be even slower, just because I've never attempted this kind of thing before. Last edited by Antiriad_UK; 09 August 2020 at 20:06. |
|
09 August 2020, 20:10 | #57 |
Registered User
Join Date: Oct 2017
Location: Sunderland, England
Posts: 2,702
|
@Antriad_UK - Could you do a screen shot of your WinUAE with "v -2" enabled so we can see the dma use?
|
09 August 2020, 20:17 | #58 |
OCS forever!
Join Date: Mar 2019
Location: Birmingham, UK
Posts: 418
|
Sure. Here are the two versions attached.
Edit: actually that doesn’t look right does it. Blits not running at the bottom of the frame compared to other version. Last edited by Antiriad_UK; 09 August 2020 at 21:04. |
09 August 2020, 21:26 | #59 | |
Registered User
Join Date: Jul 2015
Location: The Netherlands
Posts: 3,411
|
Quote:
Edit: no, that's can't be right, it stops too low in the frame for that. |
|
09 August 2020, 22:42 | #60 |
Lemon. / Core Design
Join Date: Mar 2016
Location: Tier 5
Posts: 1,212
|
|
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
Thread Tools | |
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Mega Typhoon ECS only? | Photon | HOL suggestions and feedback | 8 | 16 April 2020 21:47 |
EAB/Lemon Super League 2017: Round 4 - Mega Typhoon | Graham Humphrey | EAB's competition | 50 | 09 April 2017 11:01 |
Working copy of Mega Typhoon ECS game? | ImmortalA1000 | request.Old Rare Games | 9 | 04 February 2013 06:38 |
Mega Typhoon Trainer Version - Working! | plasmatron | request.Old Rare Games | 1 | 03 July 2011 23:52 |
Mega Typhoon | haynor666 | HOL contributions | 1 | 19 August 2008 00:37 |
|
|