github BenoitAdam/nullDC4Wii alpha0.800
NullDC4Wii - Alpha 0.800 - T800 update !

3 hours ago

OH NO !!! THE IA IS TAKING OVER THE PROJECT !!! IT'S UNCONTROLABLE NOW !!

image

New numerotation, adding an extra number to better work on regression (if any) and target beta 1 next April !

❌ Please report BUGS and Regression !!!

Please report any bugs & regression ! (=thing that used to work before that now doesn't work)

You can do that :

⚙️ Improvements

Fixing CD pause buggy in some games

Should fix Bangai-O and many other games (fix #125 )

GD-ROM: cdda_state_fix preset - Flycast CD-DA state machine

One `playing` flag -> NOINFO/PLAYING/PAUSED/TERMINATED (playing kept in
sync for the mixer). End test >= with TERMINATED + drive PAUSE; CD_PLAY
end FAD 0 = disc end; CD_PLAY 7 resumes only a paused play; a seek pauses;
a data read, disc change or drive reset stops the audio; GET_SCD audio
status from the state (paused = 12h). Forced DSC bit left as is.
Ported from Flycast per flycastPS3 other_fix.md 3.3c.

Thanks @Mayo1970

toc_fix preset - TOC ADR, lead-out and GDI layout as a real drive

May fix some games

ConvToc: ADR = 1 on every real track (GDI/MDS stored 0) and a CTRL 4
ADR 1 lead-out (CDI/MDS gave 0/0); unused slots keep their 0xFF fill.
GDI: single-density lead-out = track 2's end + 1 from its file size, not
a fixed 13085, and the session table typo (SessionStart[0]=3) that put
session 2's start track into session 1. From Flycast libGDR_GetToc and
gdi.cpp, per flycastPS3 other_fix.md 3.3d.

Thanks @Mayo1970

render_delay update

PVR: render_delay=flycast - render-done timed by TA list size (new default)

A third render_delay mode, Flycast's scheduleRenderDone rule: list-
complete IRQs at once, and all three render-done IRQs together after
min(450000 + 100 x TA bytes, 1500000) SH4 cycles; 4096 when no
TA_LIST_INIT came since the last render (Flycast's "no context" case,
e.g. a keep-list re-render). The TA byte count is estimated from the
decoder's output (32 per vertex and per strip) instead of counting on
the store-queue hot path; the cap is reached at ~10.5 KB anyway.

Mode 1 (hardware-like staggered delays) is unchanged and still set by
the per-game lines (MvC2, CvS2, ...). cfg: render_delay=off|on|hw|
flycast (word parser). Default FLYCAST (main.cpp + [default]);
render_delay=off is the legacy timing.

Per flycastPS3 other_fix.md 2.4.

Thanks @Mayo1970

PVR: spg_fix preset - field bit, HBlank IRQ modes, VBLANK_INT reset

SPG_STATUS.fieldnum toggled every scanline in interlace mode; now once
per frame at line 0. holly_HBLank was raised only at vblank start,
ignoring SPG_HBLANK_INT; now mode 0 at line_comp_val, mode 2 every line
(mode 1 not emulated). SPG_VBLANK_INT resets to 0x00150104. As Flycast
spg.cpp / pvr_regs.cpp, per flycastPS3 other_fix.md 3.4.

How to test. The PS3 saw no game change, so this is a regression check:

Crazy Taxi and ChuChu Rocket should run as before.
If anything with raster effects or 480i field order looks different, A/B this row.

Thanks @Mayo1970

PVR: ta_guard preset - skip bad TA records instead of die()/wild call

Graphic stuff, expect fix/changes

ParamType_Object_List_Set and reserved types 3/6 die()d (a for(;;) hang
on the Wii); a polygon header with Volume=1 + Col_Type=1 has type
0xFFFFFFFF and indexed 5-entry function tables at 255. Skip the 32-byte
record, as Flycast ta_vtx.cpp (c301bf082) / flycastPS3 other_fix.md 3.5.
One compare per polygon header.

Thanks @Mayo1970

GD-ROM: gdrom_spinup preset - no-disc drive BUSY for 3 s after reset

A real drive with no disc reports BUSY while it spins up, then NODISC;
the BIOS plays its swirl intro only if its first drive check sees a
status below 6. gdrom_reg_Reset (was empty) arms a 3 s emulated-clock
timer, ticked from gdrom_CreditCycles. A disc present is unaffected.
Per flycastPS3 other_fix.md 3.6.

Thanks @Mayo1970

PVR: inf_vtx preset - cut 1/W=+inf vertices out of their strips

vert_base turned a TA vertex with 1/W = +inf into W = 0 and x/y = NaN,
which went to GX with its strip (Soul Calibur spikes). Flag such frames
at decode (one compare per vertex); on flagged frames a strip holding one
is drawn as runs of 3+ finite vertices, same attribute order (VCD
unchanged), odd-start runs repeat their first vertex to keep the winding.
Split logic host-checked over 200k strips. Per flycastPS3 other_fix.md
3.7 / Flycast is_vertex_inf.

Thanks @Mayo1970

FOG PRESET FIX

PVR: fog_index preset - fog table indexed by density/W

The PVR indexes its fog table with FOG_DENSITY * (1/W) (its per-pixel
depth is 1/W; Flycast's shader does the same). FogTableLookup used
W * FOG_DENSITY, which runs the wrong way with distance and saturates.
Now density / W (W = 0 -> last entry). Only with the FOG preset on.
Per flycastPS3 other_fix.md 4.1 (Ecco on PS3 hardware).

Thanks @Mayo1970

Dreamcast CClock from the Wii clock at every boot

RTC: rtc_host preset - Dreamcast clock from the Wii clock at every boot

LoadSettings restored the DC RTC from the value saved at the last exit,
so the BIOS time lost however long the console was off. Set it from the
host clock at every boot, as Flycast. Also GetRTC_now's DST correction
added 24 h instead of 1 h (normally inert on the Wii: no TZ data).
Per flycastPS3 other_fix.md 4.2.

Thanks @Mayo1970

FLASH_CHIP & FLASH_SAVE

FLASH: flash_save preset - write the BIOS flash back at exit

mem_Term() is the only writer of data/dc_flash_wb.bin, and on the Wii it
is never reached: every exit is WiiExitToLoader() -> exit(0). So BIOS
settings (language, sound) and games' flash data changed in a session
were lost at the next boot. dc_flash_save_at_exit() now runs first
thing in WiiExitToLoader (every EXIT FIX mode, before the watchdog).

It writes only when a flash file was loaded (a blank flash never
shadows dc_flash.bin), a guest write changed it (flash_b_dirty: a
program that changes a byte or an erase; cleared on load), and
flash_chip is on (plain-RAM writes would persist the command bytes).
The disc's broadcast byte is restored first, and the file goes through
dc_flash_wb.tmp + rename, so a failed write leaves the old file.
dc_flash.bin is never written. Logs "[FLASH] save at exit: ...".

Default ON (main.cpp + [default] flash_save=on). Menu: EXPERIMENTAL
page, FLASH SAVE.

Per flycastPS3 other_fix.md Part 6 side note.
FLASH: flash_chip preset - BIOS flash obeys its chip's command sequences

The flash was plain RAM: the BIOS's unlock bytes (AA/55/A0 at
0x5555/0x2AAA) were stored as data, a program could set bits again, and
a sector erase wrote 0x30 into the sector instead of clearing it.
Harmless while the flash is reloaded at every boot; not once it is
saved back (next step). Port of Flycast's DCFlashChip state machine:
program = AND, sector/chip erase = 0xFF, factory partition (0x1A000)
write-protected, chip ID mode (4/B0), byte writes only. State resets
with the system. Logs "[FLASH] ..." for erases and unexpected writes
(first 16).

Default ON (main.cpp + [default] flash_chip=on). Menu: EXPERIMENTAL
page, FLASH CHIP.

Prerequisite for the flycastPS3 other_fix.md Part 6 side note (save the
flash at Wii exit).

Thanks @Mayo1970

📝 Presets updated

Game Presets

The default preset for these games have been updated :

  • Guilty Gear X (atomiswave port) (thanks @Zeox-Gamer !)
  • Marvel VS Capcom 2 : 2nd stage freeze should be fix, please reopen issue #131 if not
  • Mortal Kombat Gold (Thanks @Zeox-Gamer !)
  • Neo Geo Battle Coliseum (Thanks @Zeox-Gamer !)
  • Project Justice (Thanks @Zeox-Gamer !)
  • The Rumble Fish 1 (atomiswave port) (Thanks @Zeox-Gamer !)
  • The Rumble Fish 2 (atomiswave port) (Thanks @Zeox-Gamer !)
  • Tony Hawk Pro Skater 1/2 (little confusion fix)

Doesn't necessarly mean these games are 100% compatible or what. Check Compatibility wiki

Remember that this emulator goal is primary about multiplayer games

👨‍💻 Developers

Color menu !!

:x

🧰 Please update compatibility Guide

Please tell me any finding of better presets on discord or update compatiblity wiki :

https://wiibrew.org/wiki/NullDC4Wii/Compatibility

🎮 Optional Extras

Wii & WiiU Fowarders : See attachements

Wii Forwarder by @Ploggy
Wii U Overclock Forwarder (integrated) by @Zeox-Gamer

Don't miss a new nullDC4Wii release

NewReleases is sending notifications on new releases.