Flawless - at least level 1. Except clouds - Zamuel_a will know what I mean

Unfortunately, this fix did not improve work on Mega STE.
Moderators: simonsunnyboy, Mug UK, Doctor Bob Gordon, ICS, Moderator Team
Zamuel_a wrote:I disabled the jagpad if it detects a Mega STE and it worked on my Mega without a problem.
Zamuel_a wrote:Are there any other ST games that should be remade for STE?
MasterOfGizmo wrote:Zamuel_a wrote:Are there any other ST games that should be remade for STE?
Gauntlet2 comes to my mind. Jagpad 4 player mode and smoother scrolling ...
AtariZoll wrote:I tried yesterday evening little more to make it work on Falcon, but had no success, better said, it crashed in very early stage. Problems happen right at title pic and music play. It works only if CPU is set to 16MHz and caches off. But when click fire, it starts to fill screen with some crap starting at bottom.
Continued today, and find the main problem: there is nasty code (likely in original too) what causes bus error, and at that point crashes on Falcon.Code: Select all
at $101AE
move.l $78000,a1 * Missing #, or use lea
move.w #$1F3F,d0
cls clr.l (a1)+
dbf d7,cls * should be with d0
Most likely above is party of anti-cracker protection. After fixing it, and doing some other changes, it works on Falcon.
Must set Falcon in STE bus compatible mode, CPU to 16 MHz, both caches off. I did not deal with PMMU table (it will be overwritten) so, should move it to high RAM too, otherwise may expect errors in later stages. I removed HW test and writes to Vfreq. HW register ($FF820A).
Zamuel_a wrote:...
I found this part in the code and it's nothing special.
AtariZoll wrote:Unfortunately, in middle of all this, my capture card died (used it over 12 years), so I can not attach screenshot. It works in RGB mode at 50 Hz almost for sure, and likely at 60 Hz too - but I was not able to test in lack of monitor for it, after capture card ended his serve of Atari community![]()
Good thing is that it works even with VGA monitor attached.
Marcer wrote:In level 1-2 in the end jump up on top the door and you get invisible. Bug?
I wonder if the address changes are done in the middle of a line in GianaSTE
MasterOfGizmo wrote:Ah, sounds like this may be related to my "MIST in STE" mode problem. Perhaps my "faked" STE joystick ports are broken ... i never tested them.
Zamuel_a wrote:I wonder if the address changes are done in the middle of a line in GianaSTE
It is changed as soon as possible after a loop that waits for the current line to finish, so the new screen is set at the beginning of the line.
MasterOfGizmo wrote:Zamuel_a wrote:I wonder if the address changes are done in the middle of a line in GianaSTE
It is changed as soon as possible after a loop that waits for the current line to finish, so the new screen is set at the beginning of the line.
Just to understand this: You have a timer b running that fires in those two lines. Then you wait for the current line to finish and change the address? How do you wait for the end of the line? It seems that this check succeeds to early on the MIST.
Would you mind sharing the code doing the wait?
npomarede wrote:Your problem looks similar to the one I had in Hatari when the lower part of the screen was going up/down 1 line from time to time because video address was read during active display.
In your case, is the lower part always shifted with the same amount of pixels, or is this unstable ?
MasterOfGizmo wrote:To my own surprise it's completely stable. It'd be interesting to see how a version looks that uses different background colors for all three parts. One could then see where exactly the address changes take place.
Eero Tamminen wrote:...
Does it work with Hatari in Falcon mode? That emulates both VGA & RGB screen and has screenshot functionality.
npomarede wrote:I can measure that with Hatari, I will post the timings later
Code: Select all
A1=$ff820f
A2=$ff8265
cpu video_cyc= 40364 428@ 78 : $17b4e4 : 1281 move.b d1,(a1)
cpu video_cyc= 40372 436@ 78 : $17b4e6 : 1482 move.b d2,(a2)
cpu video_cyc= 40380 444@ 78 : $17b4e8 : 13f9 0017 939f ffff 8205 move.b $17939f,$ffff8205
cpu video_cyc= 40408 472@ 78 : $17b4f2 : 13f9 0017 93a0 ffff 8207 move.b $1793a0,$ffff8207
cpu video_cyc= 40436 500@ 78 : $17b4fc : 13f9 0017 93a1 ffff 8209 move.b $1793a1,$ffff8209
cpu video_cyc= 40464 16@ 79 : $17b506 : 4239 00ff fa1b clr.b $fffa1b
Code: Select all
cpu video_cyc= 52644 420@102 : $17b59e : 1281 move.b d1,(a1)
cpu video_cyc= 52652 428@102 : $17b5a0 : 1482 move.b d2,(a2)
cpu video_cyc= 52660 436@102 : $17b5a2 : 13f9 0017 9397 ffff 8205 move.b $179397,$ffff8205
cpu video_cyc= 52688 464@102 : $17b5ac : 13f9 0017 9398 ffff 8207 move.b $179398,$ffff8207
cpu video_cyc= 52716 492@102 : $17b5b6 : 13f9 0017 9399 ffff 8209 move.b $179399,$ffff8209
cpu video_cyc= 52744 8@103 : $17b5c0 : 4239 00ff fa1b clr.b $fffa1b
Code: Select all
lea $179396+1,a3
move.b (a3)+,ff8205.w
move.b (a3)+,ff8207.w
move.b (a3)+,ff8209.w
npomarede wrote:Your problem looks similar to the one I had in Hatari when the lower part of the screen was going up/down 1 line from time to time because video address was read during active display.
MasterOfGizmo wrote:I found the problem: My shifter implementation was adding the STE line offset register at the beginning of the hsync which is signifcantly after the end of the display and thus after GianaSTE updated the video addresses. So the next line started at the newly set address + the STE line offset. Adding the line offset right after display end solved the issues.
GianaSTE now runs nicely on the MIST![]()
Thank you for another beautiful game for my little toy!
tresas wrote:Amazing job @Zamuel_a!!!![]()
I would like an overscan like "pacmania", 32 colors intro screen and sid voice ( yes im greedy!!!
) but in any case what i saw was marvellous!!!!
Please give us more projects pleaseeeee!!!!
my_vbi
move.w #$2700,sr
move.b #1,$fffa07 ;only timer B running
or.b #1,$fffa13 ;turn on Timer B
clr.b $fffa1b ;disable Timer B
move.b #15-2,$fffa21 ;number of counts
move.l #TimerB1,$120 ;move in my Timer B routine
move.b #8,$fffa1b ;set Timer B to event count mode
move.b #0,LINEWID ;start by set address to status bar
move.b #0,HSCROLL
move.b adrtemp_top+1,VCOUNTHI
move.b adrtemp_top+2,VCOUNTMD
move.b adrtemp_top+3,VCOUNTLO
move.w #$2300,sr
rte
;--------------------------------------------------------------------------
TimerB1 move.w #$2700,sr
bclr #7,$fffff8a3c.w ;turn off blitter
movem.l d0-d2/a0-a2,-(sp)
lea $fffffa21.w,a0
lea scr_counter+1(pc),a1
move.b (a0),d0 ;wait for next line
wait_l1 cmp.b (a0),d0
beq.s wait_l1
;sync screen
move.b VCOUNTHI.W,(a1)+ ;get current screen address
move.b VCOUNTMD.W,(a1)+
move.b VCOUNTLO.W,(a1)+
move.l scr_counter,d0
sub.l adrtemp_top,d0 ;calc were we are
cmp.l #160*(16-2),d0
bgt.s TB1_a
move.b (a0),d0 ;wait for next line
wait_l2 cmp.b (a0),d0
beq.s wait_l2
TB1_a
lea LINEWID,a1
move.b tempLINEWIDc,d1
lea HSCROLL,a2
move.b tempHSCROLLc,d2
move.b (a0),d0 ;wait for next line
wait_l3 cmp.b (a0),d0
beq.s wait_l3
;sync finished
move.b d1,(a1)
move.b d2,(a2)
move.b adrtemp_c+1,VCOUNTHI
move.b adrtemp_c+2,VCOUNTMD
move.b adrtemp_c+3,VCOUNTLO
; --- setup Timer B for next part ---
clr.b $fffa1b ;disable Timer B
move.b #23-2,$fffa21 ;num of counts to start of border
move.l #TimerB2,$120 ;move in my Timer B routine
move.b #8,$fffa1b ;set Timer B to event count mode
bclr #0,$fffa0f ;tell ST interrupt is done
move.b #%10000000,$fffff8a3c.w ;turn on blitter
move.w #$2300,sr
movem.l (sp)+,d0-d2/a0-a2
rte
;--------------------------------------------------------------------------
TimerB2 bclr #7,$fffff8a3c.w ;turn off blitter
move.w #$2700,sr
movem.l d0-d2/a0-a2,-(sp)
lea $fffffa21.w,a0
lea scr_counter+1(pc),a1
move.b (a0),d0 ;wait for next line
wait_l4 cmp.b (a0),d0
beq.s wait_l4
;sync screen
move.b VCOUNTHI.W,(a1)+ ;get current screen address
move.b VCOUNTMD.W,(a1)+
move.b VCOUNTLO.W,(a1)+
move.l scr_counter,d0
sub.l adrtemp_c,d0 ;calc were we are
cmp.l #SCREEN_WIDTH*(24-2),d0
bgt.s TB2_a
move.b (a0),d0 ;wait for next line
wait_l5 cmp.b (a0),d0
beq.s wait_l5
TB2_a
lea LINEWID,a1
move.b tempLINEWID,d1
lea HSCROLL,a2
move.b tempHSCROLL,d2
move.b (a0),d0 ;wait for next line
wait_l6 cmp.b (a0),d0
beq.s wait_l6
;sync finished
move.b d1,(a1)
move.b d2,(a2)
move.b adrtemp+1,VCOUNTHI
move.b adrtemp+2,VCOUNTMD
move.b adrtemp+3,VCOUNTLO
; --- setup Timer B for last line ---
clr.b $fffa1b ;disable Timer B
move.b #159,$fffa21 ;num of counts to start of border
move.l #TimerB3,$120 ;move in my Timer B routine
move.b #8,$fffa1b ;set Timer B to event count mode
bclr #0,$fffa0f ;tell ST interrupt is done
move.b #%10000000,$fffff8a3c.w ;turn on blitter
move.b #1,timer_b_finished
move.w #$2300,sr ;turn on interrupts
movem.l (sp)+,d0-d2/a0-a2
rte
;--------------------------------------------------------------------------
TimerB3 move.b #1,bottom_border
bclr #0,$fffa0f ;tell ST interrupt is done
rte
AtariZoll wrote:I bought used WinFastPro card (much worse than Pinnacle). Here is how looks on Falcon working in PAL mode:
AtariZoll wrote:I tried yesterday evening little more to make it work on Falcon, but had no success, better said, it crashed in very early stage. Problems happen right at title pic and music play. It works only if CPU is set to 16MHz and caches off. But when click fire, it starts to fill screen with some crap starting at bottom.
Continued today, and find the main problem: there is nasty code (likely in original too) what causes bus error, and at that point crashes on Falcon.Code: Select all
at $101AE
move.l $78000,a1 * Missing #, or use lea
move.w #$1F3F,d0
cls clr.l (a1)+
dbf d7,cls * should be with d0
Most likely above is party of anti-cracker protection. After fixing it, and doing some other changes, it works on Falcon.
[...]
Here is Falcon fixed v. of alpha2 - I took freedom to name so second release
Zamuel_a: ask in PM for further details about adding Falcon fix in game.
And I think that this will work well on Mega STE too, at first attempt. I was not able to test because died capture card.
Users browsing this forum: No registered users and 7 guests