bsnes-emu / bsnes

bsnes is a Super Nintendo (SNES) emulator focused on performance, features, and ease of use.
Other
1.67k stars 154 forks source link

bsnes changelog 2012 (until August) #211

Closed Max833 closed 3 years ago

Max833 commented 3 years ago

So that we can also find results with the github search and do not have to search on another site. Source: https://gitlab.com/higan/bsnes-history-kit/-/blob/master/sources/tukuyomi/misc/bsnes_changelog.txt



Compiled using infos found on byuu's homepage and forums (http://byuu.org), on bsnes Dev Talk (http://board.zsnes.com/phpBB3/viewforum.php?f=22) and on the old bsnes thread (http://snesemu.black-ship.net/misc/archives/bsnes_thread.zip)


2012-08-10 - bsnes_v091-source.tar.xz A few issues crept up in the last release, this should take care of them. First, it seems that the 32-bit runtime on 64-bit versions of Windows have 64-bit time functions; whereas true 32-bit Windows does not. This was causing a DLL error when attempting to load bsnes v090. Second, when there were more than 2,000 files in the same folder on Windows, it was lagging the file browser. With OV2's help, I've fixed that and it'll now load the list instantly. Lastly, I've included the missing video shaders this time.


2012-08-07 - bsnes_v090-source.tar.xz Most notably, this release adds Nintendo DS emulation. The Nintendo DS module was written entirely by Cydrak, so please give him all of the credit for it. I for one am extremely grateful to be allowed to use his module in bsnes. The Nintendo DS emulator's standalone name is dasShiny. You will need the Nintendo DS firmware, which I cannot provide, in order to use it. It also cannot (currently?) detect the save type used by NDS games. As such, manifest.xml files must be created manually for this purpose. The long-term plan is to create a database of save types for each game. Also, you will need an analog input device for the touch screen for now (joypad axes work well.) There have also been a lot of changes from my end: a unified manifest.xml format across all systems, major improvements to SPC7110 emulation, enhancements to RTC emulation, MSU1 enhancements, icons in the file browser list, improvements to SNES coprocessor memory mapping, cleanups and improvements in the libraries used to build bsnes, etc. I've also included kaijuu (which allows launching game folders directly with bsnes) and purify (which allows opening images that are compressed, have copier headers, and have wrong extensions); both of which are fully GUI-based. This release only loads game folders, not files. Use purify to load ROM files in bsnes. Note that this will likely be the last release for a long time, and that I will probably rename the emulator for the next release, due to how many additional systems it now supports.


2012-08-06 - bsnes_v089r18.tar.bz2 Changelog:


2012-03-25 - bsnes_v087r09.tar.bz2 Split apart necdsp: core is now in processor/upd96050 (wish I had a better name for it, but there's no family name that is maskable.) I would like to support the uPD7720 in the core as well, just for completeness' sake, but I'll have to modify the decoder to drop one bit from each mode. So ... I'll do that later. Worst part is even if I do, I won't be able to test it :( Added all of Cydrak's changes. I also simplified LDMIA/STMIA and PUSH/POP by merging the outer loops. Probably infinitesimally slower, but less code is nicer. Maybe GCC optimization will expand it, who knows. We were getting stuck polling SOUNDBIAS: Code: 00000800 2102 mov r1,#0x02 00000802 0209 lsl r1,r1,#8 00000804 468c mov r12,r1 00000806 4bb3 ldr r3,[pc,#0xad4] =0x04000088 00000808 881a ldrh r2,[r3,#0x00] 0000080a 4bb2 ldr r3,[pc,#0xad4] =0x04000088 0000080c 0591 lsl r1,r2,#22 0000080e 0d89 lsr r1,r1,#22 00000810 2800 cmp r0,#0x00 00000812 d003 beq 0x0000081c 00000814 4561 sub r1,r12 00000816 da09 bge 0x0000082c 00000818 1c92 add r2,r2,#2 0000081a e002 b 0x00000822 00000822 801a strh r2,[r3,#0x00] 00000824 2208 mov r2,#0x08 00000826 1e52 sub r2,r2,#1 00000828 d5fd bpl 0x00000826 00000826 1e52 sub r2,r2,#1 00000828 d5fd bpl 0x00000826 0000082a e7e9 b 0x00000800 So I hooked the APU up to it and return 0x200 now (per gbatek.) Now we're getting stuck in an infinite loop here: Code: 00000ba0 4718 bx r3 ;switch to ARM mode (per Exophase's disassembly) (supposed to switch to ARM mode, just repeats forever) (r3 == 0xba1 here ...) Hit after 38,112 opcodes. Exophase, don't suppose you'd know how many (ARM+THUMB) instructions are executed before cartridge entry point? That should be a nice measurement of how close I am. My cycle counter is basically (ARM2)+(THUMB1)*instructions, which is horribly inaccurate. Need to talk with Cydrak about how to do the SNI cycles in a way that's compatible with non-sequential accesses to different memory regions of the GBA.


2012-03-22 - bsnes_v087r08.tar.bz2 Added some more ARM opcodes, hooked up MMIO. Bind it with mmio[(addr 000-3ff)] = this; inside CPU/PPU/APU, goes to read(), write(). Also moved the Hitachi HG51B core to processor/, and split it apart from the snes/chip/hitachidsp implementation. This one actually worked really well. Very clean split between MMIO/DMA and the processor core. I may move a more generic DMA function inside the core, not sure yet. I still believe the HG51B169 to be a variant of the HG51BS family, but given they're meant to be incredibly flexible microcontrollers, it's possible that each variant gets its own instruction set. So, who knows. We'll worry about it if we ever find another HG51B DSP, I guess. Notes while working on Cydrak's updated ST018 code: Code: lsl/lsr/etc perform masking, but so do opcodes? Would like to get ARMwrestler working before optimizing these for performance.

arithmetic() reloads cpsr??

if(isprivileged() && cpsr.m != 0x1f || source == 0)
if(a && (b || c)) or if((a && b) || c) ?
I went off the docs instead, and do the transfer if SPSR or CPSR.mode != USR

Added modified booth encoding (awesome stuff!)
t = (int2)n; Testing -2, -1, +1, +2 ... int2 should have a range of {-2, -1, 0, +1} only though ... bug?

Added memory_swap()
Added move_to_status_from_immediate()
Added software_interrupt()

GBA BIOS is constantly reading from 04000300, but it never writes. If I return prng()&1, I can get it to proceed until it hits a bad opcode (stc opcode, which the GBA lacks a coprocessor so ... bad codepath.) Without it, it just reads that register forever and keeps resetting the system, or something ... I guess we're going to have to try and get ARMwrestler working, because the BIOS seems to need too much emulation code to do anything at all.


2012-03-22 - bsnes_v087r07.tar.bz2 Both snes/chip/armdsp and gba/cpu use processor/arm now. Fixed THUMB to execute the BL prefix and suffix separately. I can now get the GBA BIOS stuck in some kind of infinite loop. Hooray ... I guess?


2012-03-22 - bsnes_v087r07pre.tar.bz2 And now for something a bit different: Creates the bsnes/processor folder. This has a shared ARM core there which both the GBA and ST018 inherit. There are going to be separate decoders, and revision-specific checks, to support the differences between v3+. In the future, I also want to move the other processor cores here:

If anyone is interested in co-developing this with me, I'd love the help. A lot of stuff is unclear already. So is the current CPU mode always stored in CPSR::M? Then what is stored in the various SPSR::M values?

Current batshit insanity: in cpu.cpp, there is a line "apu.clock -= clocks;". If I uncomment that, the framerate drops from 720fps to 140fps. Running -pg binaries is hanging on me, so I can't tell what the holy fuck is going on there. But 4M subtractions a second should not cause a 500% speed hit. Would also appreciate any help in tracking down what is going on there.


2012-03-10 - bsnes_v087r02.tar.bz2 Changelog: