mamedev / mame

MAME
https://www.mamedev.org/
Other
8.3k stars 2.02k forks source link

[Bug] The Last Blade 2 - Neo Geo CDZ - The game hangs after the first loading screen #11706

Closed Immersion95 closed 1 year ago

Immersion95 commented 1 year ago

MAME version

0.260

System information

Windows 11 23H2 - Intel UHD 730

INI configuration details

#
# CORE CONFIGURATION OPTIONS
#
readconfig                1
writeconfig               0

#
# CORE SEARCH PATH OPTIONS
#
homepath                  .
rompath                   roms
hashpath                  hash
samplepath                samples
artpath                   artwork
ctrlrpath                 ctrlr
inipath                   .;ini;ini/presets
fontpath                  .
cheatpath                 cheat
crosshairpath             crosshair
pluginspath               plugins
languagepath              language
swpath                    software

#
# CORE OUTPUT DIRECTORY OPTIONS
#
cfg_directory             cfg
nvram_directory           nvram
input_directory           inp
state_directory           sta
snapshot_directory        snap
diff_directory            diff
comment_directory         comments
share_directory           share

#
# CORE STATE/PLAYBACK OPTIONS
#
state                     
autosave                  0
rewind                    0
rewind_capacity           100
playback                  
record                    
exit_after_playback       0
mngwrite                  
aviwrite                  
wavwrite                  
snapname                  %g/%i
snapsize                  auto
snapview                  auto
snapbilinear              1
statename                 %g
burnin                    0

#
# CORE PERFORMANCE OPTIONS
#
autoframeskip             0
frameskip                 0
seconds_to_run            0
throttle                  1
sleep                     1
speed                     1.0
refreshspeed              0
lowlatency                0

#
# CORE RENDER OPTIONS
#
keepaspect                1
unevenstretch             1
unevenstretchx            0
unevenstretchy            0
autostretchxy             0
intoverscan               0
intscalex                 0
intscaley                 0

#
# CORE ROTATION OPTIONS
#
rotate                    1
ror                       0
rol                       0
autoror                   0
autorol                   0
flipx                     0
flipy                     0

#
# CORE ARTWORK OPTIONS
#
artwork_crop              0
fallback_artwork          
override_artwork          

#
# CORE SCREEN OPTIONS
#
brightness                1.0
contrast                  1.0
gamma                     1.0
pause_brightness          0.65
effect                    none

#
# CORE VECTOR OPTIONS
#
beam_width_min            1.0
beam_width_max            1.0
beam_dot_size             1.0
beam_intensity_weight     0
flicker                   0

#
# CORE SOUND OPTIONS
#
samplerate                48000
samples                   1
volume                    0
compressor                1
speaker_report            0

#
# CORE INPUT OPTIONS
#
coin_lockout              1
ctrlr                     
mouse                     0
joystick                  1
lightgun                  0
multikeyboard             0
multimouse                0
steadykey                 0
ui_active                 0
offscreen_reload          0
joystick_map              auto
joystick_deadzone         0.15
joystick_saturation       0.85
joystick_threshold        0.3
natural                   0
joystick_contradictory    0
coin_impulse              0

#
# CORE INPUT AUTOMATIC ENABLE OPTIONS
#
paddle_device             keyboard
adstick_device            keyboard
pedal_device              keyboard
dial_device               keyboard
trackball_device          keyboard
lightgun_device           keyboard
positional_device         keyboard
mouse_device              mouse

#
# CORE DEBUGGING OPTIONS
#
verbose                   0
log                       0
oslog                     0
debug                     0
update_in_pause           0
debugscript               
debuglog                  0

#
# CORE COMM OPTIONS
#
comm_localhost            0.0.0.0
comm_localport            15112
comm_remotehost           127.0.0.1
comm_remoteport           15112
comm_framesync            0

#
# CORE MISC OPTIONS
#
drc                       1
drc_use_c                 0
drc_log_uml               0
drc_log_native            0
bios                      
cheat                     0
skip_gameinfo             0
uifont                    default
ui                        cabinet
ramsize                   
confirm_quit              0
ui_mouse                  1
language                  
nvram_save                1

#
# SCRIPTING OPTIONS
#
autoboot_command          
autoboot_delay            0
autoboot_script           
console                   0
plugins                   1
plugin                    
noplugin                  

#
# HTTP SERVER OPTIONS
#
http                      0
http_port                 8080
http_root                 web

#
# OSD INPUT MAPPING OPTIONS
#
uimodekey                 auto
controller_map            none
background_input          0

#
# OSD FONT OPTIONS
#
uifontprovider            auto

#
# OSD OUTPUT OPTIONS
#
output                    auto

#
# OSD INPUT OPTIONS
#
keyboardprovider          auto
mouseprovider             auto
lightgunprovider          auto
joystickprovider          auto

#
# OSD DEBUGGING OPTIONS
#
debugger                  auto
debugger_port             23946
debugger_font             auto
debugger_font_size        0
watchdog                  0

#
# OSD PERFORMANCE OPTIONS
#
numprocessors             auto
bench                     0

#
# OSD VIDEO OPTIONS
#
video                     auto
numscreens                1
window                    0
maximize                  1
waitvsync                 0
syncrefresh               0
monitorprovider           auto

#
# OSD PER-WINDOW VIDEO OPTIONS
#
screen                    auto
aspect                    auto
resolution                auto
view                      auto
screen0                   auto
aspect0                   auto
resolution0               auto
view0                     auto
screen1                   auto
aspect1                   auto
resolution1               auto
view1                     auto
screen2                   auto
aspect2                   auto
resolution2               auto
view2                     auto
screen3                   auto
aspect3                   auto
resolution3               auto
view3                     auto

#
# OSD FULL SCREEN OPTIONS
#
switchres                 0

#
# OSD ACCELERATED VIDEO OPTIONS
#
filter                    0
prescale                  1

#
# OpenGL-SPECIFIC OPTIONS
#
gl_forcepow2texture       0
gl_notexturerect          0
gl_vbo                    1
gl_pbo                    1
gl_glsl                   0
gl_glsl_filter            1
glsl_shader_mame0         none
glsl_shader_mame1         none
glsl_shader_mame2         none
glsl_shader_mame3         none
glsl_shader_mame4         none
glsl_shader_mame5         none
glsl_shader_mame6         none
glsl_shader_mame7         none
glsl_shader_mame8         none
glsl_shader_mame9         none
glsl_shader_screen0       none
glsl_shader_screen1       none
glsl_shader_screen2       none
glsl_shader_screen3       none
glsl_shader_screen4       none
glsl_shader_screen5       none
glsl_shader_screen6       none
glsl_shader_screen7       none
glsl_shader_screen8       none
glsl_shader_screen9       none

#
# OSD SOUND OPTIONS
#
sound                     auto
audio_latency             2

#
# PORTAUDIO OPTIONS
#
pa_api                    none
pa_device                 none
pa_latency                0

#
# OSD MIDI OPTIONS
#
midiprovider              auto

#
# OSD EMULATED NETWORKING OPTIONS
#
networkprovider           auto

#
# BGFX POST-PROCESSING OPTIONS
#
bgfx_path                 bgfx
bgfx_backend              auto
bgfx_debug                0
bgfx_screen_chains        
bgfx_shadow_mask          slot-mask.png
bgfx_lut                  lut-default.png
bgfx_avi_name             auto

#
# WINDOWS PERFORMANCE OPTIONS
#
priority                  0
profile                   0

#
# WINDOWS VIDEO OPTIONS
#
attach_window             

#
# DIRECT3D POST-PROCESSING OPTIONS
#
hlslpath                  hlsl
hlsl_enable               0
hlsl_oversampling         0
hlsl_write                auto
hlsl_snap_width           2048
hlsl_snap_height          1536
shadow_mask_tile_mode     0
shadow_mask_alpha         0.0
shadow_mask_texture       shadow-mask.png
shadow_mask_x_count       6
shadow_mask_y_count       4
shadow_mask_usize         0.1875
shadow_mask_vsize         0.25
shadow_mask_uoffset       0.0
shadow_mask_voffset       0.0
distortion                0.0
cubic_distortion          0.0
distort_corner            0.0
round_corner              0.0
smooth_border             0.0
reflection                0.0
vignetting                0.0
scanline_alpha            0.0
scanline_size             1.0
scanline_height           1.0
scanline_variation        1.0
scanline_bright_scale     1.0
scanline_bright_offset    0.0
scanline_jitter           0.0
hum_bar_alpha             0.0
defocus                   0.0,0.0
converge_x                0.0,0.0,0.0
converge_y                0.0,0.0,0.0
radial_converge_x         0.0,0.0,0.0
radial_converge_y         0.0,0.0,0.0
red_ratio                 1.0,0.0,0.0
grn_ratio                 0.0,1.0,0.0
blu_ratio                 0.0,0.0,1.0
saturation                1.0
offset                    0.0,0.0,0.0
scale                     1.0,1.0,1.0
power                     1.0,1.0,1.0
floor                     0.0,0.0,0.0
phosphor_life             0.0,0.0,0.0
chroma_mode               3
chroma_conversion_gain    0.299,0.587,0.114
chroma_a                  0.64,0.33
chroma_b                  0.30,0.60
chroma_c                  0.15,0.06
chroma_y_gain             0.2126,0.7152,0.0722

#
# NTSC POST-PROCESSING OPTIONS
#
yiq_enable                0
yiq_jitter                0.0
yiq_cc                    3.57954545
yiq_a                     0.5
yiq_b                     0.5
yiq_o                     0.0
yiq_p                     1.0
yiq_n                     1.0
yiq_y                     6.0
yiq_i                     1.2
yiq_q                     0.6
yiq_scan_time             52.6
yiq_phase_count           2

#
# VECTOR POST-PROCESSING OPTIONS
#
vector_beam_smooth        0.0
vector_length_scale       0.5
vector_length_ratio       0.5

#
# BLOOM POST-PROCESSING OPTIONS
#
bloom_blend_mode          0
bloom_scale               0.0
bloom_overdrive           1.0,1.0,1.0
bloom_lvl0_weight         1.0
bloom_lvl1_weight         0.64
bloom_lvl2_weight         0.32
bloom_lvl3_weight         0.16
bloom_lvl4_weight         0.08
bloom_lvl5_weight         0.06
bloom_lvl6_weight         0.04
bloom_lvl7_weight         0.02
bloom_lvl8_weight         0.01
lut_texture               lut-default.png
lut_enable                0
ui_lut_texture            lut-default.png
ui_lut_enable             0

#
# FULL SCREEN OPTIONS
#
triplebuffer              0
full_screen_brightness    1.0
full_screen_contrast      1.0
full_screen_gamma         1.0

#
# INPUT DEVICE OPTIONS
#
dual_lightgun             0

Emulated system/software

Neo-Geo CDZ

Incorrect behaviour

Black screen after the first loading screen - Can't go ingame

Expected behaviour

Goes ingame - Menu

Steps to reproduce

Start the game and wait for the loading screen

Additional details

I tested it with :

I searched any related issue in Github/MAME Testers/Driver source and couldn't find anything

dinkc64 commented 1 year ago

I have a fix for this (somewhere) - I'll dig it up asap

dinkc64 commented 1 year ago

@mamehaze the irq vectors need to be updated for neocd (the ones derived from early fbneo neocd are wrong), this is why lastblade2 breaks

in mame's neogeocd.cpp, change: m_vblank_level = 1; m_raster_level = 3;

vector callback func. for 68k: static INT32 __fastcall NeoCDIRQCallback(INT32 nIRQ) { switch (nIRQ) { case 1: return (0x68 / 4); // irq 1 w/irq's 2 vector case 3: return (0x64 / 4); // irq 3 w/irq's 1 vector case 2: return (nNeoCDIRQVector); }

return M68K_INT_ACK_AUTOVECTOR;

}

also update the vectors and irq's in mame's neogeocd.cpp's irq_update() to match this:

    if ((nIRQAcknowledge & 0x08) == 0) {
        nNeoCDIRQVector = 0x5c / 4;
        SekSetIRQLine(2, CPU_IRQSTATUS_ACK);
        return;
    }
    if ((nIRQAcknowledge & 0x10) == 0) {
        nNeoCDIRQVector = 0x58 / 4;
        SekSetIRQLine(2, CPU_IRQSTATUS_ACK);
        return;
    }
    if ((nIRQAcknowledge & 0x20) == 0) {
        nNeoCDIRQVector = 0x54 / 4;
        SekSetIRQLine(2, CPU_IRQSTATUS_ACK);
        return;
    }

best regards,

fuel-pcbox commented 1 year ago

@dinkc64 Why don't you make a pull request with those changes instead of a poorly-explained comment detailing those changes? lol

mamehaze commented 1 year ago

@qeeg shut up. dink is being helpful, you are being obnoxious as usual

the instructions are clear and easy to understand, the 68k needs to take non-standard vectors for the irqs (triggering the same levels as the standard neogeo, but with custom vectors, rather than different levels)

not sure why they did it that way, but LB2 suggests they did

fuel-pcbox commented 1 year ago

The fact of the matter is that opening a pull request would be more helpful than commenting on an issue lol.

mamehaze commented 1 year ago

demanding of somebody who isn't a mame developer by expecting them to compile and change MAME code isn't more helpful to anybody, nor is it polite.

dink providing information based on how he fixed the problem in his own emulator is

fuel-pcbox commented 1 year ago

No, he literally said "In this file in MAME change this"

mamehaze commented 1 year ago

And gave a rough indication of what needed changing, clearly explaining the logic fail in my code without being expected to compile mame etc. (which not everybody is in a position to do). I found his comment helpful, I find yours obnoxious.

On Sun, 5 Nov 2023, 21:43 qeeg, @.***> wrote:

No, he literally said "In this file in MAME change this"

— Reply to this email directly, view it on GitHub https://github.com/mamedev/mame/issues/11706#issuecomment-1793854391, or unsubscribe https://github.com/notifications/unsubscribe-auth/BBR6GZPKFIKI26UKHANFX2DYC726VAVCNFSM6AAAAAA66J4EPGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTOOJTHA2TIMZZGE . You are receiving this because you were mentioned.Message ID: @.***>

mamehaze commented 1 year ago

@dinkc64 I believe this implements what you've suggested https://github.com/mamedev/mame/pull/11713

I tested neocdz lastbld2 (the game that previously didn't work) and neocdz neoturf (as I know that uses raster interrupt) and both work.

I do note that Last Blade 2 appears to lack the raster effect on the fire stage with neocdz though, I don't know if that's a design choice?

angelosa commented 1 year ago

Is doubledr same issue btw, it looks IRQ related as well given the top of driver note.

mamehaze commented 1 year ago

doubledr still hangs while loading (the clone set doubledra works)

Immersion95 commented 1 year ago

Sorry to pollute, just wanted to thank you @dinkc64 & @mamehaze (love your blog btw)

FoxhackDN commented 1 year ago

Is doubledr same issue btw, it looks IRQ related as well given the top of driver note.

I think the doubledr parent might be a bad pressing, track 1 (and maybe 2?) seems to be hosed. I found forum posts that said people couldn't run the original disc on a real console when I was looking into adding the clone that worked. People said it just wouldn't start - but the later pressing worked fine. The copy on Redump marked as "Rev 1" is busted so I assume the CHD was made with a disc with the same data.

dinkc64 commented 1 year ago

doubledr zeros out the vector table while loading, which causes the hang. I wonder if this is an error on the disc or something weird like that, as FoxhackDN said.

FoxhackDN commented 1 year ago

http://www.neo-geo.com/forums/index.php?threads/neo-geo-cd-system-resets.22053/post-158298

According to the post above, a lot of Double Dragon discs were faulty. A Japanese second printing that fixes this may exist (the working Alt is an Export version), or maybe that -was- the second printing for all we know.

Anyway, thank you for submitting these new findings! I'll be testing the games to see if any other known bugs in the emulation have been fixed.

mamehaze commented 1 year ago

I don't think the busted pressing should be the parent then.

I also think it should be marked as (broken pressing) or similar, so people know it isn't meant to work.

FoxhackDN commented 1 year ago

I tagged it as "supported=no" when I added the clone, but left it as parent because I wasn't sure if changing them around was cool or not, or what the proper way to do it was. I'm cool with the change, but I'm having issues with my internet so I can't submit anything right now. :\ If anyone wants to fix that, feel free.