mirror of
https://github.com/ekeeke/Genesis-Plus-GX.git
synced 2024-11-08 20:05:13 +01:00
updated documentation, added preliminar sound support for SDL/WIN32 port
This commit is contained in:
parent
201c5eb922
commit
63ca498fc9
@ -13,7 +13,6 @@
|
||||
** History:
|
||||
**
|
||||
** 2006-2008 Eke-Eke (Gamecube/Wii genesis plus port):
|
||||
** - added DAC filtering
|
||||
** - fixed internal FM timer emulation
|
||||
** - removed unused multichip support and YMxxx support
|
||||
** - fixed CH3 CSM mode (credits to Nemesis)
|
||||
@ -920,7 +919,7 @@ INLINE void advance_eg_channel(FM_SLOT *SLOT)
|
||||
i = 4; /* four operators per channel */
|
||||
do
|
||||
{
|
||||
/* reset swap_flag (EkeEke) */
|
||||
/* reset SSG-EG swap flag (Eke-Eke) */
|
||||
swap_flag = 0;
|
||||
|
||||
switch(SLOT->state)
|
||||
|
@ -1,3 +1,168 @@
|
||||
Genesis Plus History
|
||||
--------------------
|
||||
|
||||
Note: All recent changes directly come from the Gamecube/Wii port, coded by Eke-Eke.
|
||||
|
||||
[current]
|
||||
- (MAME YM2612) fixed LFO phase update for CH3 special mode: fix sound effects in Warlock & Aladdin (thanks to AamirM)
|
||||
- (MAME YM2612) fixed enveloppe attenuation level on "KEY ON": fix Ecco 2's splash sound
|
||||
- (MAME YM2612) minor fixes on SSG-EG emulation
|
||||
- (MAME YM2612) added libsamplerate (Secret Rabbit Code) support for better FM resampling (HQ mode)
|
||||
- (VDP) implemented cycle-accurate HINT timings: every timing sensitive games/demos are now *finally* working fine
|
||||
- (VDP) fixed a bug affecting CRAM/VSRAM DMA timings
|
||||
- (VDP) fixed Sprite Attribute Table address mask for VRAM writes
|
||||
- (CPU) improved accuracy of 68k access to Z80: fix music in Pacman 2 when entering PAUSE menu
|
||||
- (CPU) disabled "Address Error" emulation when UMK3 hack is loaded: fix game crashing after a round ends up
|
||||
- (CART) added support for some more unlicensed games: Pocket Monster, King of Fighter 98, Soul Blade (credits to Haze)
|
||||
- (IO) improved Menacer emulation: fix lightgun support in Body Count & T2: The Arcade Game
|
||||
- (IO) implemented Konami Justifier emulation: fix lightgun support in Lethal Enforcers 1 & 2
|
||||
- (IO) implemented Sega Mouse emulation (Populous 2, Body Count, Shangai 2, Fun'n Games, ...)
|
||||
|
||||
[07/16/08] (Eke-Eke)
|
||||
- adjusted (again) HINT timings: fix Double Dragon 2 (game freezed), hopefully does not break anything else
|
||||
- fixed broken EEPROM support for Codemaster games
|
||||
- modified input update timings: fix Dungeons & Dragons - Warriors of the Eternal Sun (thanks to Notaz)
|
||||
- added support for "Ultimate Mortal Kombat Trilogy" hack (max. size supported is 10MBytes)
|
||||
- added (VERY) preliminar support for PICO roms (credits to Notaz for his documentation)
|
||||
- improved YM2612 emulation (credits to Nemesis for his tests on real hardware):
|
||||
.implemented phase overflow emulation: improved fix for special music instrument used in Comix Zone, Flashback, Ariel, Shaq Fu...
|
||||
.improved SSG-EG emulation in MAME core (also based on additional code from Alone Coder)
|
||||
.improved Timers emulation accuracy
|
||||
.improved Enveloppe Generator accuracy
|
||||
.fixed Channel 3 CSM mode emulation
|
||||
.implemented sample interpolation in MAME core to emulate the chip at original frequency (HQ YM2612 mode, from gens)
|
||||
|
||||
[06/01/08] (Eke-Eke)
|
||||
- improved HCounter accuracy: fix graphic glitches in "Striker (Europe)"
|
||||
- improved HINT timing accuracy: fix flickering in "Zero The Kamikaze Squirrel (USA)"
|
||||
- improved rendering accuracy when backdrop color is modified during HBLANK (Road Rash I/II/III)
|
||||
- fixed broken Game Genie support
|
||||
|
||||
[04/19/08] (Eke-Eke)
|
||||
- modified VINT timings a little bit: fix lockup during Desert Strike's intro
|
||||
- corrected 68k interrupts handling: fix graphic glitches in Darius II/Sagaia
|
||||
|
||||
[04/06/08] (Eke-Eke)
|
||||
- updated SVP core: fix some perspective issues in Virtua Racing (thanks to Notaz)
|
||||
- added internal SAT update during VRAM Fill: fix unmasked sprites during Battletech's intro
|
||||
- fixed m68k core issues with gcc 4.2.3: fix Xperts, Lemmings 2, M1 Abrams Battle Tank
|
||||
- forced YM2612 Enveloppe update: fix intro music in Batman&Robin (thanks to Aamir)
|
||||
|
||||
[03/01/08] (Eke-Eke)
|
||||
- added SVP emulation: Virtua Racing is now emulated (big thanks to Notaz and TascoDeluxe)
|
||||
- fixed VDP registers behaviour when VDP Mode 4 is enabled: fix Bass Masters Classic Pro, Captain Planet & The Planeeters
|
||||
- corrected a bug in DMA Fill operation: fix James Pond 3, Rockman World/Megaman Willy Wars (corrupted VRAM)
|
||||
- corrected typo errors in CPU cycle counters update: fix optiom screen music in "College Slam" and probably others games.
|
||||
- added preliminary support of undocumented YM2612 bug: fixes soundtracks of Shaq Fu, Spiderman, Comix Zone, Ariel and some others
|
||||
- added support for mappers & copy protection devices used in many unlicensed/pirate cartridges (see cart_hw.c for details)
|
||||
- rewrote memory handlers for better modularity and some (little) speedup
|
||||
- reduced Savestate size
|
||||
|
||||
[01/07/08] (Eke-Eke)
|
||||
- fixed interleaved rom detection: roms with .smd extension should now work fine
|
||||
- fixed a recently introduced bug in VDP registers writes: fixes bad colors in Toy Story (intro)
|
||||
- updated list of games using EEPROM: added Sports Talk Baseball (internal memory check fixed) and Brian Lara Cricket
|
||||
- fixed VINT flag update when VINT is disabled: fixes NCAA College Football
|
||||
- adjusted DMA timings in H32 mode: fixes flickering in Out of this World, Kawasaki Superbike Challenge & Formula One
|
||||
- adjusted line rendering and HBLANK timings: fixes flickering in Nigel Mansell's World Championship Racing, Deadly Moves/Power Athlete
|
||||
- fixed unmapped ROM reads through Z80 Bank: fixes Zombie High (Proto)
|
||||
- added support for custom ROM/RAM mapping used by Game no Kanzume Otokuyou
|
||||
|
||||
[12/28/07] (Eke-Eke)
|
||||
- many sourcecode cleanup and optimization
|
||||
- completely rewrote EEPROM emulation: now support all known EEPROM types (24C01-24C65) and mappers (Sega, Acclaim, EA, Codemasters)
|
||||
used in a few games (now use internal game database) as external RAM. This should at least fix save support in the following games:
|
||||
. NBA Jam (alternate Acclaim mapper)
|
||||
. College Slam, Frank Thomas Big Hurt Baseball (24C65 type)
|
||||
. NHLPA Hockey 93, Rings of Power (EA mapper)
|
||||
. Micro Machines serie, Brian Lara Cricket 96/Shane Warne Cricket (Codemasters mapper)
|
||||
- external RAM is now initialized to 0xFF by default: fix Micromachines 2, Dino Dini Soccer
|
||||
- fixed SRAM 16-bits memory handlers: fix some Sega Sports and EA Sports games (NFL95, NBA Action 95, NHL97, NHL98,...)
|
||||
- modified WRITE_xxx & READ_xxx macros for better portability and faster memory access on BIG ENDIAN platform
|
||||
- completely rewrote BIG ENDIAN support in render.c and vdp.c: rendering should be a little faster
|
||||
- rewrote ROM bankswitch emulation (Super Street Fighter II): ROM access are faster, using memory pointers instead of reading ROM copy from ARAM
|
||||
- fixed leftmost Window/PlaneA column render and implemented Window bug (as described by Charles Mc Donald)
|
||||
- improved "Sprite Limit" and "Sprite Collision" detection accuracy
|
||||
- modified RGB565 Color Palette to use the full available color range (0-31;0-63)
|
||||
- implemented "cycle accurate" HV Interrupt timings: fix Sesame's Street Counting Cafe, Legend of Galahad (intro)
|
||||
- improved VDP access timings accuracy (added FIFO emulation): fix Double Clutch
|
||||
- improved DMA timings accuracy: fix Winter Olympics (E), Arch Rivals and probably more
|
||||
- fixed HCounter again: Road Rash serie (I,II,III) don't need timing hacks anymore
|
||||
- fixed VCounter in Interlaced 2 mode: fix Combat Cars "VS-Mode"
|
||||
- improved Interlaced 2 mode (double resolution) rendering: Sonic 2, Combat Cars ("VS-Modes") look far better
|
||||
- added TMSS BIOS support (optional)
|
||||
- rewrote part of the YM2162 MAME's core: fixed internal FM timers handling, removed non-YM2612 emulation code and unused multiple cpu support
|
||||
- implemented "cycle accurate" FM timers & sound samples rendering
|
||||
- improved Z80 Interrupt timing accuracy: fix Sonic 3 music slowdowns
|
||||
- updated Z80 & 68000 cores to last MAME versions
|
||||
- improved Soft Reset emulation: X-Men 2 and Eternal Champions (random character selection) now work more like on real hardware.
|
||||
- added full overscan emulation (vertical & horizontal borders) for "pixel perfect" aspect ratio (tested against a real genesis)
|
||||
|
||||
[07/20/07] (Eke-Eke)
|
||||
- corrected TeamPlayer support: fix multiplayer in Gauntlet 4 (Sept. version), Pengo and a lot of others
|
||||
- added J-Cart support: enable multiplayer in Codemasters games (Pete Sampras, Micromachines games, Super Skidmarks)
|
||||
- added serial EEPROM autodetection: fix games with bad SRAM informations in header (NBA Jam TE)
|
||||
- added SVP faking: display 2D graphics in Virtua Racing (the game is however still unplayable)
|
||||
- added support for more internal IO registers: fixe some unlicensed games (Wisdom Tree games...)
|
||||
- added preliminary support for unmapped protection device: fix some unlicensed games with special built-in hardware (Squirell King, Lion King 2...)
|
||||
- added "Soft Reset" combo (in game, use L+Z triggers): this should be like pressing the RESET button on a real Genesis and this is required
|
||||
in some games to enable special features or even complete the game (ex: X-Men).
|
||||
|
||||
[06/21/07] (Eke-Eke)
|
||||
- added Multitap support (EA 4-Way Play and Sega Teamplayer): allowed up to four players in games supporting those peripherals
|
||||
- added partial Sega Menacer lightgun support (use Analog Stick): automatically set when detecting the 6-in-1 Menacer game
|
||||
|
||||
[05/18/07] (Eke-Eke)
|
||||
- you can now switch between FM cores without reseting the game. FM registers value are automatically restored when switching.
|
||||
- removed the previous VINT timings modification because it brokes some games (Rocket Knight, Thunderforce III,...)
|
||||
- added automatic Timing configuration (VDP latency, VINT timing & alternate Line Timing) at game loading, based upon specific romname detection.
|
||||
This means you can still modify some of these options afterwards but they are now automatically set/unset when loading a game which need
|
||||
special timing fixes. These fixes are also automatically desactivated when the current game doesn't need them.
|
||||
For information, games that are actually detected and need special timings to run properly are:
|
||||
.Legend of Galahad & Road Rash series (single line not rendered properly)
|
||||
.Sesame Street Counting Cafe (don't boot)
|
||||
.Chaos Engine/Soldiers of Fortune (graphic glitches on scrolling)
|
||||
|
||||
[05/08/07] (Eke-Eke)
|
||||
- VINT timings are now a little more accurate: fixes Sesame's Street Counting Cafe
|
||||
- SN76496 MAX_OUTPUT back to normal
|
||||
- modified FB_WNOISE value in SN76496 core according to John Kortink's last informations
|
||||
- added support for Maxim's PSG core, same as used in SMSPLUS (it becomes the default PSG core)
|
||||
- updated FM core to the latest MAME version
|
||||
- corrected DAC output level (fixes voices and some special FX being too low)
|
||||
- added support for Gens YM2612 (FM) core (MAME's one still remains default FM core)
|
||||
- added configurable preamplification for each sound cores (see Emulator Options)
|
||||
- added some other configurable sound options (boost overall volume, FM improvment for Gens YM2612)
|
||||
|
||||
[04/11/07] (Eke-Eke)
|
||||
- corrected MAX_OUTPUT value in SN76496 core: fix PSG sound (SFX) volume
|
||||
|
||||
[03/17/07] (Eke-Eke)
|
||||
- added an option to enable alternate line rendering timing (fix single line error in Road Rash series and Legend of Galahad's Intro)
|
||||
- Color RAM update now always reset color 0 to border color (fix color glitches in Mortal Kombat,...) (thanks to Noop's for the idea)
|
||||
|
||||
[03/09/07] (Eke-Eke)
|
||||
- modified HV counter tables (fix graphic glitches in Skitchin's sky, Lotus 2 Recs, Panorama Cotton, Dashin Desperados & maybe more)
|
||||
- completely rewrote DMA timings emulation so that it works for all games (no more cpu freezing)
|
||||
- added all DMA tranfer rates handling for each three DMA modes and added dma busy flag emulation
|
||||
- modified interrupts handling on VDP register #0 and #1 writes (fix Lemmings status bar)
|
||||
- added VDP RAM write latency (fix Chaos Engine/Soldier of Fortune gfx glitches)
|
||||
- modified FM timers handling a bit (fix Vectorman2 music)
|
||||
- corrected Sprite Limit rendering (fix Sonic 1 & Micromachines 2 title screens)
|
||||
- corrected IO Registers writes (fix Decap' Attack controls, no more need for alternate input)
|
||||
- corrected 6 Buttons Pad emulation (fix 6buttons detection in Mortal Kombat 3, Comix Zone and other 6-buttons compatible games)
|
||||
- modified sound mixing a bit according to Generator sourcecode (FM and PSG ratios seems more correct)
|
||||
|
||||
[02/07/07] (Eke-Eke)
|
||||
- fixed fm timers (fix missing music in Castle of Illusion, Quackshot, Undead Line, Wonderboy in Monster Lair, Cal 50, Turbo Outrun, Thundeforce 4 and maybe more)
|
||||
- added complete EEPROM emulation (save support now works fine in Wonderboy5, Megaman Willy Wars, NBA Jam...) (credits to Notaz, adapted from Picodrive code)
|
||||
- added preliminar dma timing emulation (fix bottom screen in Legend of Galahad) (credits to Notaz, adapted from Picodrive code)
|
||||
- hack: clear Vint pending after Hint (INT level 4) acknowledge (fix Fatal Rewind)
|
||||
- hack: modify read_bus16 to return a random value (fake fetch) (fix Time Killers)
|
||||
- modified cpu execution timings, with more correct hblank and interrupts timing (fix ISS Deluxe, Double Dragon 2 and certainly more) (Based on Gens code)
|
||||
- modified busreq mechanism: better synchro between z80 & 68k (no need to dejitter anymore) (Based on Gens code)
|
||||
- added sprite collision detection (fix Strider 2)
|
||||
- modified dma fill operation for big endian platform (fix Contra Hardcorps gfx garbage)
|
||||
|
||||
[05/25/03]
|
||||
- Fixed a typo that made Z80 banked access to the VDP registers always fail.
|
||||
|
@ -6,14 +6,38 @@
|
||||
by Charles Mac Donald
|
||||
WWW: http://cgfm2.emuviews.com
|
||||
|
||||
additional code by Eke-Eke
|
||||
WWW: http://gxdev.wordpress.com/
|
||||
|
||||
|
||||
What's New
|
||||
----------
|
||||
|
||||
[06/22/03]
|
||||
- Modified rendering code for portability
|
||||
- Modified memory handling to fix banked PSG access
|
||||
[05/13/03]
|
||||
- Initial release
|
||||
see CHANGELOG
|
||||
|
||||
|
||||
Features (NEW!)
|
||||
---------
|
||||
|
||||
* cycle-accurate CPUs emulation & synchronization (68000, Z80, YM2612, SN76489)
|
||||
* cycle-accurate VDP emulation (DMA, FIFO, HV interrupts, HBLANK,…)
|
||||
* original frequency YM2612 emulation (High Quality FM)
|
||||
* basic hardware latency emulation
|
||||
* full overscan area (horizontal & vertical colored borders) emulation
|
||||
* TMSS BIOS support
|
||||
* PICO hardware support (experimental)
|
||||
* 3-buttons & 6-buttons controllers
|
||||
* Sega Team Player & EA 4-Way Play multitap adapters (up to 8players !)
|
||||
* Sega Menacer & Konami Justifier lightguns
|
||||
* Sega Mouse & Sega Mega Mouse
|
||||
* SVP DSP (Virtua Racing)
|
||||
* J-Cart
|
||||
* backup RAM (parallel SRAM/FRAM and serial EEPROM)
|
||||
* ROM bankswitch (Super Street Fighter 2)
|
||||
* SRAM switch (Phantasy Star 4, Legend of Thor, Sonic the Hedgehog 3)
|
||||
* ROM mappers & copy protection devices used in many unlicensed/pirate cartridges
|
||||
|
||||
|
||||
|
||||
Usage
|
||||
-----
|
||||
@ -28,17 +52,33 @@
|
||||
|
||||
Arrow Keys - Directional pad
|
||||
A,S,D,F - 1P gamepad, buttons A, B, C, Start
|
||||
Tab - Reset
|
||||
Tab - Hard Reset
|
||||
Esc - Exit program
|
||||
|
||||
F7 - Load Savestate (game.gpz)
|
||||
F8 - Save Savestate (game.gpz)
|
||||
F9 - Toggle CPU clock: PAL(50hz)/NTSC(60hz)
|
||||
F10 - Soft Reset
|
||||
F11 - Toggle Player # (keyboard/mouse)
|
||||
|
||||
DOS only:
|
||||
|
||||
End - Exit program
|
||||
F1-F4 - Set frameskip level (F1 = no skip ... F4 = skip 3 frames)
|
||||
F8 - Make PCX screen snapshot
|
||||
F9 - Toggle VSync
|
||||
F10 - Toggle speed throttling
|
||||
F11 - Toggle FPS meter
|
||||
F5 - Log 68k memory access (for debug ONLY)
|
||||
F6 - Log messages (for debug ONLY)
|
||||
|
||||
WIndows only:
|
||||
|
||||
End - Exit program
|
||||
F1-F4 - Set frameskip level (F1 = no skip ... F4 = skip 3 frames)
|
||||
F5 - Log messages (for debug ONLY)
|
||||
F6 - Toggle Turbo mode
|
||||
|
||||
|
||||
The mouse can be used for lightgun games, PICO games and when the Sega Mouse is activated.
|
||||
|
||||
A SRAM file (game.srm) is automatically saved on exit and loaded on startup.
|
||||
|
||||
DOS details:
|
||||
|
||||
@ -90,15 +130,30 @@
|
||||
suggestions that have made Genesis Plus a better program.
|
||||
(http://www.bannister.org)
|
||||
|
||||
Extra features, emulation accuracy & game compatibility improvments by Eke-Eke
|
||||
(from the Gamecube/Wii port: http://code.google.com/p/genplus-gx )
|
||||
|
||||
The Genesis emulator authors: Bart Trzynadlowski, Quintesson, Steve Snake,
|
||||
James Ponder, Stef, Gerrie, Sardu.
|
||||
James Ponder, Stef, Gerrie, Sardu, Haze, Notaz, Nemesis, AamirM
|
||||
|
||||
The regular people and many lurkers at segadev.
|
||||
|
||||
People from SpritesMind.net forums
|
||||
|
||||
The MAME team for the CPU and sound chip emulators.
|
||||
|
||||
Everyone who has contributed, donated, and submitted information to help
|
||||
out Genesis Plus and my efforts documenting the Genesis hardware.
|
||||
Maxim for his SN76489 emulator
|
||||
|
||||
Stef (again) for his alternate YM2612 emulator
|
||||
|
||||
Notaz for his SVP emulator
|
||||
|
||||
Tasco Deluxe for his documentation of Realtec mapper
|
||||
|
||||
Erik de Castro Lopo for his "Secret Rabbit Code" library aka libsamplerate
|
||||
|
||||
Jean-Loup Gailly and Mark Adler for their useful zip library
|
||||
|
||||
|
||||
Contact
|
||||
-------
|
||||
@ -107,6 +162,10 @@
|
||||
E-mail: cgfm2@hotmail.com
|
||||
WWW: http://cgfm2.emuviews.com
|
||||
|
||||
Eke-Eke
|
||||
E-mail: eke_eke31@yahoo.fr
|
||||
WWW: http://gxdev.wordpress.com/
|
||||
|
||||
Legal
|
||||
-----
|
||||
|
||||
@ -115,8 +174,7 @@
|
||||
The source code is distributed under the terms of the GNU General Public
|
||||
License.
|
||||
|
||||
The Z80 CPU emulator, 68K CPU emulator, and the PSG, YM2612 emulation code
|
||||
The Z80 CPU emulator, 68K CPU emulator, and the YM2612 emulation code
|
||||
are taken from the MAME project, and terms of their use are covered under
|
||||
the MAME license.
|
||||
(http://www.mame.net)
|
||||
the MAME license. (http://www.mame.net)
|
||||
|
||||
|
@ -1,79 +0,0 @@
|
||||
|
||||
Here are some technical details about things that need to be fixed or
|
||||
added to Genesis Plus.
|
||||
|
||||
Missing features:
|
||||
|
||||
- Support for 6-button controllers
|
||||
- SRAM management
|
||||
- Game Genie / PAR patch codes
|
||||
|
||||
The VDP code could use a lot of cleaning up.
|
||||
|
||||
The rendering code is missing a few bits:
|
||||
|
||||
- Sprite collision
|
||||
- Window bug
|
||||
|
||||
I think the "C" 68000 emulator either has some bugs or I'm not using it
|
||||
correctly. Older DOS-only versions used Turbo68K, which had ran games
|
||||
much better, especially with regards to interrupt handling.
|
||||
|
||||
Things that need to be fixed:
|
||||
|
||||
- Raster garbage on third road in Thunder Blade.
|
||||
|
||||
- Added country codes for Dragon Slayer, but game locks up after
|
||||
passing country check.
|
||||
|
||||
- No inputs in Samurai Shodown.
|
||||
(This game doesn't initialize the port direction registers, at least not
|
||||
directly. Emulation bug or problem with the game?)
|
||||
|
||||
- Palette and raster problems in Mortal Kombat.
|
||||
|
||||
- Bad raster effects and VRAM corruption in Super Skidmarks.
|
||||
(Needs PAL timing)
|
||||
|
||||
- Palette problems in Sonic 2 title screen.
|
||||
|
||||
- Masked half of Sonic sprite visible on Sonic title screen.
|
||||
|
||||
- Sprite masking doesn't work in Micro Machines subscreen.
|
||||
|
||||
- Music has slow tempo in Batman & Robin. (doesn't seem to be a problem
|
||||
with the YM2612 timers - Wonderboy 3 is normal)
|
||||
|
||||
- Music has jerky playback in Sonic 2, 3, 3D Blast. If you run the Z80
|
||||
emulation for one scanline after requesting an interrupt, it runs fine.
|
||||
|
||||
- DAC and PSG output are too loud, both are divided by two for now
|
||||
(though the PSG should be a bit quieter and the DAC a bit louder)
|
||||
|
||||
- Undead Line locks after selecting a stage, also the Z80 sound halts
|
||||
after the first note is played.
|
||||
|
||||
This game single steps the Z80 with the following code:
|
||||
|
||||
MOVEM.L D0,-(A7) ; 009C7C 48 E7 80 00
|
||||
ORI #$0200,SR ; 009C80 00 7C 02 00
|
||||
; Get control of the Z-bus
|
||||
MOVE.W #$0100,$00A11100 ; 009C84 33 FC 01 00 00 A1 11 00
|
||||
BTST #$00,$00A11100 ; 009C8C 08 39 00 00 00 A1 11 00
|
||||
BNE.S *-$08 [00009C8C] ; 009C94 66 F6
|
||||
; Check driver status byte. If zero, release bus and exit.
|
||||
TST.B $00A00008 ; 009C96 4A 39 00 A0 00 08
|
||||
BEQ *+$0016 [00009CB2] ; 009C9C 67 00 00 14
|
||||
; Release bus and wait for Z80 to resume control. Then restart the loop
|
||||
; and immediately get the bus back again, assuming the Z80 ran at least
|
||||
; one instruction in the meantime.
|
||||
CLR.W $00A11100 ; 009CA0 42 79 00 A1 11 00
|
||||
BTST #$00,$00A11100 ; 009CA6 08 39 00 00 00 A1 11 00
|
||||
BEQ.S *-$08 [00009CA6] ; 009CAE 67 F6
|
||||
BRA.S *-$2C [00009C84] ; 009CB0 60 D2
|
||||
; Release bus and exit.
|
||||
CLR.W $00A11100 ; 009CB2 42 79 00 A1 11 00
|
||||
ANDI #$FDFF,SR ; 009CB8 02 7C FD FF
|
||||
MOVEM.L (A7)+,D0 ; 009CBC 4C DF 00 01
|
||||
RTS ; 009CC0 4E 75
|
||||
|
@ -62,7 +62,7 @@ OBJ += obj/dos.o \
|
||||
obj/fileio.o \
|
||||
obj/loadrom.o
|
||||
|
||||
EXE = gen.exe
|
||||
EXE = ../gen.exe
|
||||
|
||||
all : $(EXE)
|
||||
|
||||
|
@ -94,9 +94,6 @@ void set_option_defaults(void)
|
||||
|
||||
void set_config_defaults(void)
|
||||
{
|
||||
/* version TAG */
|
||||
strncpy(config.version,CONFIG_VERSION,15);
|
||||
|
||||
/* sound options */
|
||||
config.psg_preamp = 1.5;
|
||||
config.fm_preamp = 1.0;
|
||||
|
@ -54,22 +54,15 @@ typedef struct
|
||||
****************************************************************************/
|
||||
typedef struct
|
||||
{
|
||||
char version[15];
|
||||
double psg_preamp;
|
||||
double fm_preamp;
|
||||
uint8 boost;
|
||||
uint8 filter;
|
||||
uint8 hq_fm;
|
||||
uint8 fm_core;
|
||||
int8 sram_auto;
|
||||
int8 freeze_auto;
|
||||
uint8 region_detect;
|
||||
uint8 force_dtack;
|
||||
uint8 bios_enabled;
|
||||
int16 xshift;
|
||||
int16 yshift;
|
||||
int16 xscale;
|
||||
int16 yscale;
|
||||
uint8 tv_mode;
|
||||
uint8 aspect;
|
||||
uint8 overscan;
|
||||
|
@ -97,6 +97,7 @@ int main (int argc, char *argv[])
|
||||
init_machine();
|
||||
|
||||
/* default config */
|
||||
do_config("genplus.cfg");
|
||||
set_config_defaults();
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
input.system[1] = SYSTEM_GAMEPAD;
|
||||
@ -379,8 +380,8 @@ void dos_update_input(void)
|
||||
bitmap.viewport.changed = 1;
|
||||
}
|
||||
|
||||
if(check_key(KEY_F10)) system_reset();
|
||||
if(check_key(KEY_TAB)) set_softreset();
|
||||
if(check_key(KEY_F10)) set_softreset();
|
||||
if(check_key(KEY_TAB)) system_reset();
|
||||
}
|
||||
|
||||
void dos_update_audio(void)
|
||||
|
@ -8,7 +8,7 @@
|
||||
# LSB_FIRST : for little endian systems.
|
||||
# X86_ASM : enable x86 assembly optimizations
|
||||
|
||||
NAME = gp_sdl.exe
|
||||
NAME = ../gen_sdl.exe
|
||||
|
||||
CC = gcc
|
||||
CFLAGS = `sdl-config --cflags` -O6 -march=i686 -fomit-frame-pointer
|
||||
|
@ -1,16 +1,11 @@
|
||||
|
||||
#include "osd.h"
|
||||
|
||||
#define CONFIG_VERSION "GENPLUS 1.2.1 "
|
||||
|
||||
t_config config;
|
||||
|
||||
|
||||
void set_config_defaults(void)
|
||||
{
|
||||
/* version TAG */
|
||||
strncpy(config.version,CONFIG_VERSION,15);
|
||||
|
||||
/* sound options */
|
||||
config.psg_preamp = 1.5;
|
||||
config.fm_preamp = 1.0;
|
||||
@ -21,17 +16,11 @@ void set_config_defaults(void)
|
||||
config.fm_core = 1;
|
||||
|
||||
/* system options */
|
||||
config.freeze_auto = -1;
|
||||
config.sram_auto = -1;
|
||||
config.region_detect = 0;
|
||||
config.force_dtack = 0;
|
||||
config.bios_enabled = 0;
|
||||
|
||||
/* display options */
|
||||
config.xshift = 0;
|
||||
config.yshift = 0;
|
||||
config.xscale = 0;
|
||||
config.yscale = 0;
|
||||
config.aspect = 1;
|
||||
config.overscan = 1;
|
||||
config.render = 0;
|
||||
|
@ -8,22 +8,15 @@
|
||||
****************************************************************************/
|
||||
typedef struct
|
||||
{
|
||||
char version[15];
|
||||
double psg_preamp;
|
||||
double fm_preamp;
|
||||
uint8 boost;
|
||||
uint8 filter;
|
||||
uint8 hq_fm;
|
||||
uint8 fm_core;
|
||||
int8 sram_auto;
|
||||
int8 freeze_auto;
|
||||
uint8 region_detect;
|
||||
uint8 force_dtack;
|
||||
uint8 bios_enabled;
|
||||
int16 xshift;
|
||||
int16 yshift;
|
||||
int16 xscale;
|
||||
int16 yscale;
|
||||
uint8 tv_mode;
|
||||
uint8 aspect;
|
||||
uint8 overscan;
|
||||
|
@ -16,16 +16,16 @@ int update_input(void);
|
||||
unsigned char *keystate;
|
||||
unsigned char buf[0x24000];
|
||||
|
||||
SDL_AudioSpec audio;
|
||||
static uint8 soundbuffer[2][3840];
|
||||
static uint8 mixbuffer[16000];
|
||||
static int mixhead = 0;
|
||||
static int mixtail = 0;
|
||||
static int whichab = 0;
|
||||
|
||||
uint8 log_error = 1;
|
||||
uint8 log_error = 0;
|
||||
uint8 debug_on = 0;
|
||||
uint8 turbo_mode = 0;
|
||||
uint8 use_sound = 1; /* NOT WORKING */
|
||||
|
||||
static int mixercollect( uint8 *outbuffer, int len )
|
||||
{
|
||||
@ -33,7 +33,6 @@ static int mixercollect( uint8 *outbuffer, int len )
|
||||
uint32 *src = (uint32 *)mixbuffer;
|
||||
int done = 0;
|
||||
|
||||
/*** Always clear output buffer ***/
|
||||
memset(outbuffer, 0, len);
|
||||
|
||||
while ( ( mixtail != mixhead ) && ( done < len ) )
|
||||
@ -59,7 +58,7 @@ Uint32 fps_callback(Uint32 interval)
|
||||
if (region_code == REGION_USA) sprintf(region,"USA");
|
||||
else if (region_code == REGION_EUROPE) sprintf(region,"EUR");
|
||||
else sprintf(region,"JAP");
|
||||
sprintf(caption, "Genesis Plus/SDL - %s (%s) - %d fps (%d)", rominfo.international, region, fps, turbo_mode);
|
||||
sprintf(caption, "Genesis Plus/SDL - %s (%s) - %d fps", rominfo.international, region, fps);
|
||||
SDL_WM_SetCaption(caption, NULL);
|
||||
frame_count = 0;
|
||||
|
||||
@ -77,19 +76,20 @@ static void sdl_sound_callback(void *userdata, Uint8 *stream, int len)
|
||||
|
||||
int sdl_sound_init()
|
||||
{
|
||||
SDL_InitSubSystem(SDL_INIT_AUDIO);
|
||||
SDL_InitSubSystem(SDL_INIT_AUDIO);
|
||||
|
||||
SDL_AudioSpec as;
|
||||
|
||||
as.freq = SOUND_FREQUENCY;
|
||||
as.format = AUDIO_S16;
|
||||
as.channels = 2;
|
||||
as.samples = SOUND_FREQUENCY/vdp_rate;
|
||||
as.samples = snd.buffer_size;
|
||||
as.callback = sdl_sound_callback;
|
||||
|
||||
if(SDL_OpenAudio(&as, 0) == -1) {
|
||||
if(SDL_OpenAudio(&as, 0) == -1)
|
||||
{
|
||||
char caption[256];
|
||||
sprintf(caption, "can't open audio");
|
||||
sprintf(caption, "SDL open audio failed");
|
||||
MessageBox(NULL, caption, "Error", 0);
|
||||
return 0;
|
||||
}
|
||||
@ -99,7 +99,6 @@ int sdl_sound_init()
|
||||
static void sdl_sound_update()
|
||||
{
|
||||
int i;
|
||||
// SDL_LockAudio();
|
||||
uint32 *dst = (uint32 *)mixbuffer;
|
||||
|
||||
for(i = 0; i < snd.buffer_size; ++i)
|
||||
@ -107,7 +106,6 @@ static void sdl_sound_update()
|
||||
dst[mixhead++] = (snd.buffer[0][i] << 16) | snd.buffer[1][i];
|
||||
if (mixhead == 4000) mixhead = 0;
|
||||
}
|
||||
// SDL_UnlockAudio();
|
||||
}
|
||||
|
||||
int main (int argc, char **argv)
|
||||
@ -115,7 +113,7 @@ int main (int argc, char **argv)
|
||||
int running = 1;
|
||||
int sym;
|
||||
|
||||
SDL_Rect viewport, src;
|
||||
SDL_Rect viewport, display;
|
||||
SDL_Surface *bmp, *screen;
|
||||
SDL_Event event;
|
||||
|
||||
@ -125,7 +123,7 @@ int main (int argc, char **argv)
|
||||
if(argc < 2)
|
||||
{
|
||||
char caption[256];
|
||||
sprintf(caption, "Genesis Plus\nby Charles MacDonald\nWWW: http://cgfm2.emuviews.com\nusage: %s gamename\n", argv[0]);
|
||||
sprintf(caption, "Genesis Plus\SDL by Charles MacDonald\nWWW: http://cgfm2.emuviews.com\nusage: %s gamename\n", argv[0]);
|
||||
MessageBox(NULL, caption, "Information", 0);
|
||||
exit(1);
|
||||
}
|
||||
@ -172,10 +170,18 @@ int main (int argc, char **argv)
|
||||
SDL_ShowCursor(0);
|
||||
|
||||
/* initialize SDL video */
|
||||
viewport.x = 0;
|
||||
viewport.y = 0;
|
||||
viewport.w = 640;
|
||||
viewport.h = 480;
|
||||
screen = SDL_SetVideoMode(viewport.w, viewport.h, 16, SDL_ANYFORMAT | SDL_HWPALETTE | SDL_HWSURFACE/* | SDL_FULLSCREEN*/);
|
||||
|
||||
display.x = 0;
|
||||
display.y = 0;
|
||||
display.w = 256;
|
||||
display.h = 224;
|
||||
|
||||
bmp = SDL_CreateRGBSurface(SDL_SWSURFACE, 360, 576, 16, 0xF800, 0x07E0, 0x001F, 0x0000);
|
||||
screen = SDL_SetVideoMode(viewport.w, viewport.h, 16, SDL_SWSURFACE);
|
||||
if (!bmp || !screen)
|
||||
{
|
||||
char caption[256];
|
||||
@ -205,10 +211,10 @@ int main (int argc, char **argv)
|
||||
|
||||
/* initialize emulation */
|
||||
system_init();
|
||||
audio_init(SOUND_FREQUENCY);
|
||||
audio_init(48000);
|
||||
|
||||
/* initialize SDL audio */
|
||||
//sdl_sound_init();
|
||||
if (use_sound) sdl_sound_init();
|
||||
|
||||
/* load SRAM */
|
||||
f = fopen("./game.srm", "rb");
|
||||
@ -223,7 +229,7 @@ int main (int argc, char **argv)
|
||||
|
||||
/* start emulation loop */
|
||||
SDL_SetTimer(1000/vdp_rate, fps_callback);
|
||||
//SDL_PauseAudio(1);
|
||||
if (use_sound) SDL_PauseAudio(1);
|
||||
|
||||
while(running)
|
||||
{
|
||||
@ -239,7 +245,7 @@ int main (int argc, char **argv)
|
||||
if(event.active.state & (SDL_APPINPUTFOCUS | SDL_APPACTIVE))
|
||||
{
|
||||
paused = !event.active.gain;
|
||||
//SDL_PauseAudio(paused);
|
||||
if (use_sound) SDL_PauseAudio(paused);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -279,7 +285,7 @@ int main (int argc, char **argv)
|
||||
|
||||
/* reinitialize timings */
|
||||
system_init ();
|
||||
audio_init(audio.freq);
|
||||
audio_init(48000);
|
||||
fm_restore();
|
||||
|
||||
/* reinitialize HVC tables */
|
||||
@ -328,7 +334,7 @@ int main (int argc, char **argv)
|
||||
else
|
||||
{
|
||||
/* Delay */
|
||||
while (!frameticker && !turbo_mode) SDL_Delay(0);
|
||||
while (!frameticker && !turbo_mode) SDL_Delay(1);
|
||||
|
||||
system_frame (0);
|
||||
frame_count++;
|
||||
@ -339,21 +345,28 @@ int main (int argc, char **argv)
|
||||
if(bitmap.viewport.changed)
|
||||
{
|
||||
bitmap.viewport.changed = 0;
|
||||
src.w = (bitmap.viewport.w + 2 * bitmap.viewport.x);
|
||||
src.h = (bitmap.viewport.h + 2 * bitmap.viewport.y) << ((config.render && interlaced) ? 1:0);
|
||||
viewport.w = bitmap.viewport.w + 2*bitmap.viewport.x;
|
||||
viewport.h = bitmap.viewport.h + 2*bitmap.viewport.y;
|
||||
display.w = (bitmap.viewport.w + 2*bitmap.viewport.x);
|
||||
display.h = (bitmap.viewport.h + 2 * bitmap.viewport.y) << ((config.render && interlaced) ? 1:0);
|
||||
viewport.w = bitmap.viewport.w;
|
||||
viewport.h = bitmap.viewport.h;
|
||||
viewport.x = (640 - viewport.w)/2;
|
||||
viewport.y = ((480 - viewport.h)/2);
|
||||
viewport.y = (480 - viewport.h)/2;
|
||||
}
|
||||
|
||||
sdl_sound_update();
|
||||
SDL_BlitSurface(bmp, &src, screen, &viewport);
|
||||
//SDL_Flip(screen);
|
||||
if (use_sound) sdl_sound_update();
|
||||
SDL_BlitSurface(bmp, &display, screen, &viewport);
|
||||
SDL_UpdateRect(screen, viewport.x, viewport.y, viewport.w, viewport.h);
|
||||
}
|
||||
}
|
||||
|
||||
/* save SRAM */
|
||||
f = fopen("./game.srm", "wb");
|
||||
if (f!=NULL)
|
||||
{
|
||||
fwrite(&sram.sram,0x10000,1, f);
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
system_shutdown();
|
||||
SDL_PauseAudio(1);
|
||||
SDL_CloseAudio();
|
||||
|
Loading…
Reference in New Issue
Block a user