Move status bar downwards, out of the display area. Make sure display area doesn't intrude.
16:23 2004-02-12
Done, but the very bottom row of pixels isn't visible. Check it out.
17:31 2004-02-15
Fixed.

02:52 2003-12-01
Make recompiler default, at least for release versions.
17:52 2003-12-30
Done.

18:33 2003-12-10
Test the AC loader DOLs. Compile and test tmbinc's IPL replacement.
03:05 2004-01-19
Tested. Not working.

17:45 2003-12-30
Try to catch static jumps to unrecompiled areas at recompile time, preferably through eia2pos and an exception.
16:22 2004-02-12
Using _ASSERTE until dynarec comes online.

19:01 2003-12-13
Enable multiple text segments in the recompiler. This will take some doing...
03:01 2004-01-19
Add support for multiple recompiled areas. Recompiled code will exit to run() when changing areas. This will facilitate multiple text segments as well as exception handlers, PSOLoad reloading and possibly dynamic recompiling.

04:19 2004-01-19
Fix the 'Recompiler buffah too small!' exception so that it causes FAIL() in recompile().
16:18 2004-01-29
Done.

21:57 2004-02-05
Change the big functions in e3.cpp to arrays, using switch() only for the unusual out-of-teh-way error numbers. A program to generate the arrays will have to be written.
17:33 2004-02-15
Done.

20:46 2004-02-16
Add checks for the low memory area (0x80000000-0x80003100). I wanna know when a program writes there, and when it reads uninitialized data from there.
21:55 2004-02-17
Done.
21:56 2004-02-17
Dump & disassemble low memory on exit when lowmem_log is true.
04:55 2004-02-22
Did temporary degub_on.

04:55 2004-02-22
Make proper hw memory hooks, like "void writeh(DWORD address, WORD data);" and "BYTE readb(DWORD address);". That should facilitate 0xCC003000.
03:50 2004-03-03
Done. It worked. We have MOD. :)

05:14 2004-02-22
Create a queue for waiting interrupts. Check it on those occations that the MSR can change, like mtmsr and rfi.
04:00 2004-03-04
Done. Checking every cycle/rec_func_call.

18:34 2004-03-02
Finish replacing static jump offsets with labels everywhere in the recompiler.
17:59 2004-03-12
Done.

03:55 2004-03-03
Also consider handling Events loopingly, in a function called from CoreBase::run(), instead of in extra threads; it's not like they affect emulation until the next cycle anyway. :}
18:27 2004-03-20
Pretty much done.

16:12 2004-03-19
Add a bunch of exception classes based on lazer_exception: fatal_ex, recompiler_ex, recoverable_ex(?). Stop using lazer_exception.
14:33 2004-03-27
Done.

22:48 2004-03-17
Move storage of hardware memory from the Memory classes to the Hardware class. There's no need for the Memory classes to be dealing with that memory anyway, right?
19:02 2004-03-27
Done.

15:55 2004-03-20
Move FIFO handling to the Hardware class. This will facilitate FIFO in the recompiler.
19:03 2004-03-27
Done.

03:34 2004-03-13
Fix the annoying instruction address errors in the recompiler so we can /dual and find out what's wrong with gc-linux.
22:47 2004-03-17
Done? Dual still doesn't work with gc-linux.
17:22 2004-03-31
It does now.

17:08 2004-03-27
ICBI needs to be implemented in the recompiler.
18:58 2004-03-27
Static jumps into ICBI'd blocks are broken. ImPossible solution: prevent static intra-block jumps. Better solution: implement block joining. That'll require more than double the recbuf memory, though...
22:51 2004-03-28
Block Joining online. ICBI still not functioning altogether properly, though.
23:27 2004-03-28
Execution of an ICBI'd instruction means *only* the block that instruction was in will be deleted. Any other ICBIs out of that block will be forgotten in the rejoining. One possible fix for this is to create a vector of blocks that have been ICBI'd and delete all of them on the first ICBID. The current fix, however, is to ICBI the Source blocks as well as the Joined blocks. This approach works the system better, I think.
18:09 2004-03-30
ICBI ok (I think). But GC-linux overwrites the exception vectors without icbi. It seems we need to intercept lowmem writes in the recompiler and ICBI them.
17:21 2004-03-31
Done. Now the problem is the Recompiler's sraw implementation.

16:46 2004-04-01
Implement /duals, at least partially. There are *some* easy optimizations do be done, you know.
20:38 2004-04-02
Partial done.

01:30 2004-04-09
Using std::vector in the recompiler seems very inefficient and may cause memory leaks and buffer overflows. Create and integrate a dynamic code container class.
17:23 2004-04-21
Done.

04:00 2004-03-04
Implement g::cache_enabled in the recompiler.
03:33 2004-03-13
Done? Not well tested. Also, the recompiled code is a cache in itself...

17:33 2004-03-19
A DEGUB_TEMPON class. Useful, no? :}
17:26 2004-04-21
I'm not so sure about that anymore.

18:03 2004-04-03
Throw an exception if MSR_IR or _DR is set when /trans is disabled. (?)
19:18 2004-04-05
No. We're emulating standard BATs, remember? But throw on BAT writes, 'cause those won't be emulated with /trans off.

18:24 2004-04-21
Fix build of buildtime.cpp by adding pre-build step: DELETED!! ;)
15:58 2004-04-24
Done, although the result wasn't what I'd wished. Continue investigating.
15:59 2004-04-24
By disabling miminal rebuild for that file and using the old forced-command-line thingamajing, we should get the desired result.
16:15 2004-04-24
It seems to work.
14:55 2004-04-28
It didn't, but disabling minimal rebuild for everything (since it didn't seem to help at all) should fix that.

18:46 2004-04-25
Create timing class with start in the contructor and stop in the destructor.
12:30 2004-04-28
Done.

20:43 2004-03-27
Make the recompiler send notification messages at start and end of recompilation, since it seems to be quite slow at times. The user'll wanna know what's taking so long. :}
12:37 2004-04-28
Done.

22:48 2004-05-04
Remove the following INI settings: (necessary before public release)
degub_msg, dump_rec_bin_asm, ip_src.
Rename mem_translation => advanced_mode, change in command line too. DONE!
Add new ones:
lint
dumpmem
bouehr
dumpaudio
00:48 2004-05-05
DONE!

15:31 2004-05-16
PrintPacket ascii.
16:24 2004-05-16
DONE!

03:49 2004-03-03
Separate the UI and the EmuCore into threads. That may spare us lots of time in ProcessMessages(). It will also allow emulation to continue while menus and dialogs are active.
15:48 2004-04-30
See notes.txt for protocol.
13:32 2004-05-02
The word 'stop' shall no longer be used in the Thread context. The operations will include 'create', 'start', 'quit' and 'delete'. Make it happen.
21:19 2004-05-05
DONE!

16:19 2004-05-25
DEGUB() isnt thread-safe! It causes deadlocks. We need to make it into a function with a critical section.
* That we didn't discover it before now was because of the recent addition of raiseHWinterrupt() in getScreen(). Which is kinda weird, since there was DEGUB stuff in there before...
01:23 2004-05-26
Fixed.

18:41 2004-05-20
There is a discrepancy in Snowlords: Dolwin screenshots show additional details, and I think I've noticed bugginess. I think it quite likely that the error is in WhineCube's floating-point emulation. Implement paired singles, get the czn trainers working. Then try it again.
15:20 2004-05-25
Done, and that wasn't it. Hard-code the A button and run two compares, one at the beginning and one at 49-50 million cycles.
01:26 2004-05-26
The error was in fctiwz. It's been fixed.

20:37 2004-04-02
Create a configuration dialog with options that are changed less often (not 50hz and Beep), but IP addresses and Recompiler toggle, for example.
23:50 2004-05-26
Done.

03:20 2004-04-05
Exceptions use std::strings. I feel foolish now. :} Add dynamic info to all exceptions. Fairly optional.
20:48 2004-04-30
That seems to be a bad idea; things crash.

20:51 2004-04-29
GP: Perhaps a more stringent/simple system for reading the command queue should be implemented.
23:52 2004-05-26
Done, sort of.

20:44 2004-04-02
Add page support. See BATs. I'm fairly sure GC-Linux uses pages and accesses the ARAM.
17:31 2004-04-21
Not so sure about the ARAM; we should get tons of 'Unemulated' lines then...
17:38 2004-05-28
Page support implemented.

21:58 2004-05-28
All those reverse_rcbt errors are probably due to not setting eax properly before using add_fatal_error().
22:02 2004-05-28
A bunch of instructions fixxed.


02:11 2004-05-02
Make the recompiler use physical addresses instead of effective ones.
16:27 2004-05-28
We now differ between EIAs and PIAs.
All instructions that handle IAs will need to be revised.
Half-done:
* bclr		done
* bcctr		done
* rfi		done
The following requests and all instructions that use them will need to be revised:
* request_sia		done
* request_end		done
* request_rcbtbwo	done
Seems they are only used in the three dynamic jump instructions above. They still need to be fixx0red, though.
* find?DRBIndexBy*	done
* eia2pos		done
* addcia2pos		done

17:45 2004-05-28
Instructions page faults will likely never happen now... check for consequenses.

18:39 2004-05-28
Without effective CIAs all branch instructions are effectively dual-incompatible. It also has a high risk of breaking stuff.
Do we proceed?
Yes.
He is still...
only human.
20:45 2004-05-28
Seriously, I think I may have done this before, in the very beginning of the Recompiler. I think it was changed because it caused /dual and/or other errors.
14:52 2004-05-29
I checked with gc-lunix, and it seems that advanced memory translation is broken (or breaks stuff, depending on point of view); the instruction addresses generated by b*l are all physical now, and those are translated to Bad Things (-1 for example).
We have no way of knowing what the application may put into the lr, ctr or srr0 registers before a branch. I have no choice but to revert to the old ways. :( However, icbi() can be updated with find?DRBIndexByPIA() (EIA recompiler versions) to fix czn's trainers. Use Windiff to incorporate the good changes into the old code.
16:08 2004-05-29
Diff complete. I really gotta get outta here now. :}
18:37 2004-05-29
icbi done. testing...
19:17 2004-05-29
Seems there may be more than one answer to findJDRBIndexByPIA(). We need to handle them all.
19:33 2004-05-29
Done.

20:38 2004-04-02
Pause seems to be broken. Fix.
20:25 2004-05-29
It's not broken now...

16:45 2004-05-28
Maybe all those annoyingly slow vectors in SDynaRecBlock can be made into memory_pooled Arrays. That would require a TempDynaRecBlock for use in recompile().
03:19 2004-05-31
DONE!

02:27 2004-06-14
Fix halfline counting so it always returns immediately. Interrupts are waiting. ;)
10:32 2004-06-14
Add an option to not pause the emulator when the window's deactivated. Fix input and halfline accordingly.
12:53 2004-06-14
DONE!

13:02 2004-05-31
Get rid of the previous_read_was_* crap in Hardware.
14:55 2004-06-14
DONE!

13:05 2004-06-18
Add Limit FPS switch!
22:34 2004-06-18
Done. But something is fucking buggy.
10:45 2004-06-19
Only in czn-test, and I can live with that :p

23:26 2004-03-06
We need audio buffering. Our buffer will be double the size of the emulated program's request. First time the sound buffer is used, it'll be filled with two copies, to facilitate the looping. The notification will be sent to the emulated program on halftime, so to speak. If the new request is the same size as the old, the unused half of the buffer will be used for the new data. This is a quite specific solution, since it doesn't work with different-sized requests. For that to work, the buffer would have to be 0x7FFF*32*2 bytes large, and filled to the brim. Quite uneconomic, I think, and not needed at this time. If this works, it should not introduce any delay to the user, and only one minor glitch in the emulation (the first halftime thingie).
15:33 2004-03-14
It didn't work. Costis' player doesn't make sure that it has finished with the audio block before it sends it to the DMA. It doesn't need to on a real Cube, since it's fast enough. The audio dumps show that WhineCube is too slow.
19:19 2004-03-27
But not by very much... If the timing could be perfected, it might work better.
16:12 2004-04-24
Perhaps we should use TB-based audio timing... done correctly, it would make DMA audio /dual-compatible...
18:27 2004-04-24
The current timing seems to have an unaccuracy of about +/- 20 ms.
02:52 2004-05-02
"each time slice is small (approximately 20 milliseconds)" - MSDN Library
Not small enough for Costis. :/
21:35 2004-06-19
Timing is now nearly perfect, but there are still breaks between the DMA transfers. We need buffering back.
22:01 2004-06-19
This are the constraints on the buffering system:
*At least half the frametime must pass before asserting the DMA End interrupt and preferably less than three-fourths.
*Two frames worth of DX buffer.
*Assume the next frame will be the same size as the last.
*It need not be dual-compatible yet.
01:24 2004-06-20
Sleep is a problem. Possible solution: don't Sleep if there's a sound playing that will be interrupted.
01:38 2004-06-20
Done. It works, pretty much. We'll need plenty of buffer space. I'm thinking perhaps 160ms, or therearound.

11:24 2004-06-14
DMA sounds are forgotten on Pause. Fix?
01:10 2004-06-22
Fixed.

15:07 2004-02-05
Change the waveOut system: It appears that one can write an "ACM filter" and register it dynamically. This should enable us to send a pointer to emulated memory directly to waveOutWrite, avoiding a memcpy and perhaps, if the data isn't copied by the waveOut system, to <insert other word here that I can't remember (syn. easily, simply)> simulate the looping behaviour of the GC audio system.
16:22 2004-02-12
DirectSound is probably the only way to go.
03:34 2004-03-13
DirectSound implemented.
19:06 2004-03-27
Lotsa' bugginess, and the audio code's a mess. Fix. Maybe sync a little better by having the callback only set a bool and checking it in do_events...
15:57 2004-04-24
Done. The mess is still there, though. Clean it up after the next milestone.

18:06 2004-03-03
Centralize check_pending_interrupts() to CoreBase. To do so, make take_interrupt() virtual.
20:07 2004-06-23
Done.

03:35 2004-02-17
Fix INI system so you have to specify variable type and constraints. That way invalid input would be easily caught. Perhaps a class structure with an abstract baseclass would be useful. You'd then pass a new IniConstraints() or something similar. If using new(), the ini system will be responsible for delete()ing.
00:44 2004-05-05
Centralize the default values, too.
18:50 2004-05-05
Also get rid of the menuid system.
11:56 2004-06-27
Done.

14:25 2004-06-28
Add illegal opcode for emu-specific console output. See mirc PM log with DesktopMan.
21:15 2004-07-06
Done.

00:38 2004-06-29
Recompiler fadds*, fsubs*, fmadds*, fmsubs*, fnmsubs*, fmuls*, fdivs*.
01:04 2004-06-29
Done. The documentation of fdivs is uncertain, but it probably follows the pattern of fmuls.
00:01 2004-07-03
All f*s opcodes must be double-checked.
01:00 2004-07-03
Done.
02:50 2004-07-03
All load/store single, too.
18:53 2004-07-12
Done.

00:32 2004-07-03
fmr and possibly other floating-point instructions require to know the type of data stored in a register, aka the bool fpr_ps[32] array. I think, anyway.
14:20 2004-07-03
Yes. It must be done. For now I've disabled Paired Singles by intercepting HID2 writes and clearing the PSE bit, allowing me to work on menu_3d.dol.
18:53 2004-07-12
Done. Probably stable, too. :}

13:51 2004-05-28
GP isn't dual-compatible. doh. :}
12:26 2004-06-15
I think it is now, but I don't know for sure.
13:32 2004-07-07
Theoretically, yes, but GP crashes dual-mode.
20:08 2004-07-13
Now most things seem to work, but care must still be taken.

18:58 2004-07-18
Change "limit fps" to "realtime". Explain in readme.
01:40 2004-07-20
Done.
02:03 2003-11-25
I think counting TBL and DEC in every instruction is rather wasteful, at least in the recompiler. Implement a way to intercept accesses to them and calculate their proper values using getCycles().
15:55 2004-01-11
Done.
03:06 2004-01-19
But only for TBL/TBU. getCycles(), by the way, won't provide accurate emulation. Now, Windows' high-resolution timers are used.
17:23 2004-06-28
Realtime DEC emulation may be key to the new libogc threading problems.
18:46 2004-06-28
Noted that TB updates weren't realtime. Fixing...
19:08 2004-06-28
Completed. Bug testing remains.
09:43 2004-07-20
Pause bug squashed.

18:30 2004-04-04
Add an option to change TB and DEC behaviour between cycle-exact and real-time.
11:53 2004-06-14
g::realtime added, but only for halfline counting so far.
09:46 2004-07-20
Done.

18:28 2004-05-09
Report(s) have come in about >60 FPS speeds in optipong on fast computers. Create an option to emulate vsync with proper timing.
21:21 2004-05-09
Attempt to check the behaviour of a real Cube.
11:54 2004-06-14
See g::realtime.

03:00 2004-08-08
Make the mapping system configurable to exclude functions.
22:55 2004-08-08
Done. Uses the ignore.ini file.

22:36 2004-07-21
Change the paired single registers to dual-double format. Remove fpr_ps.
02:35 2004-08-19
Done, like, more than a month ago. :}

01:40 2004-07-20
Change the Hardware interrupt system so that interrupts are put on hold if there is another. Some handlers does not seem to be able to handle multiple causes in a single interrupt.
Check in do_events... no. Check on 0x3000 read instead. That should probably work.
02:36 2004-08-19
Changed.

13:18 2004-07-13
Expand the cache to cover all the main memory.
02:45 2004-08-19
Done? I think so.

02:40 2004-08-22
Things to check:
*bad ini file lines DONE!
*bad gcm filenames DONE!
**command line DONE!
**on OK in AOptions DONE!
**INI file DONE!

12:38 2004-08-19
Make the debug versions of the SDK demos work.
00:29 2004-08-24
There seems to be retrace problems. *sigh*
12:25 2004-08-27
Done.

02:45 2004-08-19
Create the virtual dvd option.
22:39 2004-08-21
Seems a common GCM created with GC-Tool, coupled with some HLE, worked just as well. Update the readme.
00:11 2004-08-31
Done.

03:39 2004-10-11
FPS bug when loading a new program. Get rid of teh static stuff.
20:08 2004-10-11
Done.

03:13 2004-10-25
The memcard interrupt (if there indeed is such a thing) used by the __CARDEraseSector function is most peculiar. It does not seem to be any of the three regular EXI interrupts, and using the DSP gave a neat error:
OSReport: CARDFormat __DSPHandler(): No current task! Someone set us up the bomb!
There is now only one possible handler for the memcard interrupt left unchecked: UnlockedCallback. If that fails too, I shall go to #gcdev and ask there. The Dolwin crew may also know something... I shall check with them first.
02:36 2004-10-26
<hotquik> erase sector generates a EXI interrupt
<Masken}> I'll be damned, now it works
<Masken}> seems like all that was needed was some delay in raising the interrupt
14:45 2004-10-26
I'm implementing a Delayed Interrupt system now.
16:32 2004-10-26
Done.

16:06 2004-10-27
Files to clear of old comments after next commit:
memcard.cpp	//erv = EXI_EXIINTHACK;
hw_ei.cpp	//the last hack
hw_internal.h	// EXI_EXIINTHACK };
memcard.h	//enum MemcardStorageType
13:00 2004-11-28
Done.

00:11 2004-11-09
I want to see how the OpArray system is performing. Make a routine for printing out all the opcodes in a tree format.
07:56 2004-12-07
Done.

23:15 2005-01-28
Add general program timings to find out what the bleem! is making stuff slow. Proposed cathegories: CPU, UI, audio, GX, other hardware.
20:00 2005-02-02
Done, but more info is needed. Create a secondary, verbose-only output window.
17:34 2005-02-03
Done.

17:35 2005-02-03
Inline Hardware::hrb() and the other h??.
01:31 2005-02-04
Done. Attempted to inline rb() & Co, but failed. Just so you don't try it again. ;)
04:57 2005-02-04
Not done! Compilation fails; function definitions must be moved into the header. rb() & Co could also be inlined then, but since they are in a greater state of flux than h??() it would be unwise at this time. Also, any performance improvement from this would only affect the interpreter, since the recompiler takes the address of these functions, preventing inlining.
18:45 2005-02-07
Done.

16:18 2005-02-16
Fix the Timings system to avoid code duplication and to make it easier to add timings.
19:55 2005-02-19
Done.

18:18 2005-02-20
I think the GP is slow because of constantly reloading textures. We need a system similar to the recompiler, where the first u32 of the texture is overwritten with a control code, which identifies the texture in the emulator's list of converted textures. The control code must be different from the recompiler's codes, and must not be 0-based, to avoid collisions.
13:56 2005-02-26
Done. I used the texture's address, with checking for collisions.

13:57 2005-02-26
Add iteration number to dumped textures, as specified in the readme.
23:03 2005-03-02
Done.

23:22 2005-03-02
Get rid of version numbers. Use only release number from now on.
01:20 2005-03-03
Done.

04:30 2005-03-09
Remove the cyclic VISI from EF mode.
04:31 2005-03-09
A VISI when video is enabled (even when is already is enabled) should fix the problem for BAM3K. Now to check the homebrew.
05:15 2005-03-09
No problem with homebrew. Let's do it.
06:10 2005-03-09
Done.

14:43 2005-03-07
Add SI logging option.
23:13 2005-03-09
Done.

01:09 2005-03-10
Fix the pdb so that my development directory doesn't show. If there's no 'nice' solution, we may have to move. Also decide if the pdb should be in the public release.
02:15 2005-03-19
I fixed the ExtendedTrace code instead. Not completely perfect, as there is at least one source file (crt0.s) that isn't in the ./src directory, but it will definitely do. :)

01:09 2005-04-09
Crash in linux is because the memory system returns -1 on page fault in the recompiler. Non-recompiler code can't handle this, and promptly crashes. Fix it by splitting up the functions.
16:40 2005-04-16
Done.

17:48 2005-04-07
Grey out File->Close when nothing's loaded.
16:40 2005-04-16
Done.

22:22 2005-04-14
Checks should be made for overlapping BATs. Only those with the valid bit set should be checked.
02:49 2005-04-18
Done.

01:29 2005-04-20
Add D3D device name to degub output so I don't have to ask. :)
16:21 2005-04-21
Done.

19:22 2005-04-20
Fix WM_PAINT error handling so it throws an exception to stop the program.
14:15 2005-04-23
Made it call WM_CLOSE instead.

05:16 2005-03-07
Add option to make directories for texture dumps. Set the opption to ON by default. Make the folder names on the format <gamename.gcm/dol/elf>_<%03i>. By default...? Should we allow the user to change the format? Not right now, maybe later.
23:14 2005-03-09
I don't think we'll let them turn it off yet, either. :)
20:25 2005-04-25
Done.

14:46 2004-10-26
QueryPerformanceCounter() is slow. If /ef runs at 3-4 MIPS, /rt runs at ~400-450 KIPS. Check the do_events functions, and if there is more than one QPC call, make that call at the very beginning, then give the PC value to the other functions.
12:37 2004-12-06
Check out the possibility of using the TSC instead of QPC. It may be considerably faster.
07:57 2004-12-07
Check /er too.
03:35 2005-03-15
I've investigated TSC. I cannot find any reliable way to determine its frequency, and it even seems that it changes on some systems (laptops especially). Thus QPC will have to do -03-19
And go over all the affected code one last time after testing is complete, to check for inconsistencies and remove old comments.
17:23 2005-04-26
Done. Some bugs remain, they have their own entries.

20:35 2005-04-18
Create rw/ww physical functions in MemInterface.
20:42 2005-04-25
Done. They're called p?w. Find all manual reads/writes and convert them.
17:23 2005-04-26
Done.

17:46 2005-05-03
Fix restarting after emulation errors. What happens is this: Error occurs, thread ends, p.q is set by quitThread. When the thread is restarted, p.q is still set, is cleared by CoreBase::run(), and set again by quitThread. We shall have an assertion (p.q == false) at the beginning of CoreBase::run().
12:01 2005-05-04
Done.

12:09 2005-05-04
dump textures on, then using file->open leads to a series of weird errors. see todo.
error specified: it happens when a directory already exists. it seems getNextNumberedName doesn't work with directories.
12:10 2005-05-04
Since sscanf is used with a part filename as format string, \ and %, which are valid path characters, foul things up.
19:09 2005-05-04
Fixed, I think. Add binary? choice of base directory for texture dumps. Or not... directories should be choosable for all things then... Setting it to execution dir will do for now.
00:48 2005-05-06
Done.

18:41 2003-12-06
GCM loading.
17:47 2005-05-08
Done, like, a year ago. :)

13:41 2004-01-30
Add an INI setting for command-line disassembler. Ex:
g::disassembler = "ndisasmw -o %i -u rec.bin > rec.asm"
13:44 2004-01-30
On second thought, don't. Our users don't need to know what the recompiler spits out. On that note, disable /drba code in public release versions.

03:57 2004-03-03
Phase out all old timers like GetTickCount() and ftime64(), replace with QueryPerformanceCounter().(?)
18:29 2004-03-20
Test QPC behaviour with times <1ms, ~1ms, ~10ms, ~1 sec, ~1 min. It must be functional up to at least 180 seconds (with margin to spare), but preferably up to several days. Try to find out the edge behaviour.
17:48 2005-05-08
Ye Olde.

03:32 2004-05-21
Create a HR->GLE conversion macro?
17:52 2005-05-08
Done.

04:51 2005-01-11
Add the three latest logging options (EXI, MC, BBA) to the dialog box.
18:04 2005-05-08
Done.

15:47 2004-08-21
Viewports seem screwed up. Examples: pix-a/z/fog
23:38 2005-05-26
Fixed. About time. :)

15:52 2005-06-04
xor ~= src*(1-dst). Try it.
01:11 2005-06-09
More like, src*(1-dst) + dst*(1-src), but it works.

10:33 2005-04-29
Add info about "degub" to FAQ?
10:33 2005-04-29
Q: What's with the misspelling "degub.txt"?<br>
A: When I first created the degub system, long before the beginning of WhineCube, I mistyped the word and didn't bother to correct it. I've thought about changing it, but this unusual spelling helps avoid namespace collisions.<br>
18:59 2005-06-17
Done.

18:47 2005-06-17
Handle high watermark. It's reached when running bam in ef mode with frame limiting on.
20:05 2005-06-18
We now have a choice. Either emulate watermark interrupts properly (preferred for multithreaded games), or let the emuthread sleep until the low watermark is reached (preferred for single-threaded games).
20:06 2005-06-18
I've decided to go with proper emulation. It shouldn't slow things down noticeably, and will be required eventually anyway.
15:04 2005-06-20
Done, I think. There may still be some bugs left, but if so, they're elusive.

20:42 2005-06-21
Implement psq_stx, lhzux and mtsr. Should be trivial.
21:21 2005-07-06
Done.

05:50 2005-06-23
Move to HLSL. Pixel shaders all but require it, as they become far too complex to handle otherwise. It will also make it easy to use different shader versions, though compilation errors will then have to be handled more user-friendly than before.
00:50 2005-07-07
Done.

15:03 2005-06-20
Create shader cache, so we won't have to reassemble them all the time. A hash table with the VS structure as the key may be the best solution.
00:38 2005-06-23
The VS/TEV structures will have to be changed slightly to exclude all non-key data. I plan on using the stdext::hash_map template class with custom Traits to exclude all non-used data from the structures. This will not be good if the hash values are calculated too often... We might calculate a hash value first and use it as a key... no, a collision would destroy that scheme.
00:47 2005-06-23
What we'll have to do is construct a specialization of hash_value().
01:01 2005-06-23
Yes, together with operators==, that should work.
13:51 2005-06-28
We want minimal keys. Since VS/TEV structures will be the keys, they must be minimized. Bitfields could probably be used to make them (nearly) equal in size to the source GP register data.
00:51 2005-07-07
Done, mostly. I think some struct members could be bitfielded, but things seem OK for now.

03:59 2005-06-20
Add separate switch for FIFO degub.
01:11 2005-07-07
Done some time ago.

18:43 2005-07-06
663 frames. That was the last count from cubed-gcworld. After that, WhineCube crashes without an exception. I think the stack gets corrupted.
20:18 2005-07-20
Fixed. Shader source buffers were too small.

20:23 2005-07-20
Enforce ordering of VI interrupts. Bad ordering may fuck up programs depending on order.
16:57 2005-07-21
Done. Didn't seem to help much.

19:30 2005-07-19
Add an option to have degub and exceptioninfo file names have gamename added on them. Make the change on open. On new file, add necessary info.
22:30 2005-07-21
Done.

23:52 2005-07-21
Fix error with degub rename when file already exists.
12:11 2005-07-22
Done.

22:31 2005-07-22
Add option to turn degub ON. It will be off by default in public releases, on by default in private builds.
17:32 2005-07-23
Done.

17:00 2005-07-12
Move frame limit sleeping to the emu thread. That should fix mgt-triple-buf.
23:50 2005-07-24
Done.

01:39 2005-07-05
shadow3 sets bias to 3, which is illegal. Map it.
18:13 2005-07-05
Done. Turns out bias 3 signifies TEV compare op.

20:40 2005-06-21
Get rid of UE_REC_ABORT.
23:51 2005-07-24
Done.

03:11 2005-06-21
Include d3dx9_25.dll with public releases.
23:51 2005-07-24
Too big. Added a link on the site.

17:01 2005-06-03
Get rid of MemInterface::h**(). They're useless, because they're only called by slow functions and never access hw memory anyway... I think.
19:21 2005-07-26
Done.

03:17 2004-10-11
GX Ops are oftentimes aborted. Minimize this by either
*creating a thread of its own, using 1337 stuff for waiting and signaling new data.
or
*using the Requests to calculate the amount of data needed for continued execution of the Op.
Expect a significant performance increase in GX-intensive programs.
14:41 2004-10-13
Using requests now. Performance increase not really noticeable, but the Abort count has gone down.
00:21 2005-05-16
Investigate a GP thread more. It could be most useful for performance, if the cpu thread could work while gp is waiting for directx... we'll need a pretty big buffer for gp commands. About an entire frame's worth should suffice.
13:19 2005-07-29
Implemented some time ago.

15:26 2005-06-21
Change VI delay scheme to act only when the FIFOs are linked. Have it wait for GP idle/not in command, maybe also for fifo flush, by either Event, Sleep/volatile read loop, or discard.
12:16 2005-07-07
Waiting now for idle && !in_command.
13:02 2005-07-07
Didn't help, and slowed bam to mips speeds. Waiting now for fifo_is_flushed() and !read_enabled also, and has check for old visi on read disable.
13:33 2005-07-07
Didn't work at all. Attempting to make fifo more 32-byte-centered. read_gp_readptr() { return gp.idle ? gpwp : gprp & ~31; }
17:26 2005-07-08
No help there, but I have a new idea: when(gp.activated), have all VI interrupts raised by NOP. Previous interrupt raise points now set some status bool.
13:21 2005-07-29
Old krap. Irrelevant now.

01:28 2005-04-13
I think the timing problem (see bam3k in EF mode) is replicated in mgt-fifo-brkpt. Chekkitout.
00:36 2005-04-14
It seems to be due to the fact that we don't raise enough VI interrupts.
02:36 2005-04-14
Yep. Also, all of the BAM3K menus now run at a stable 30 FPS. :D Default timing scheme has been changed back to Realtime.
02:41 2005-04-14
We need to raise interrupts... I'd love to do it at the refresh rate (1 or 50/60 Hz), but the exactness requirement blows that apart. We'll probably need to go back to a cycle-based system, with no less than 1 million cycles per VISI. We'll also need to construct an Event to call VISI if it hasn't been called in the last <freq> cycles.
17:24 2005-04-14
Done, but some demos are now dependant on VISI in EF mode to run, which means we don't get maximum frame rate. We'll probably have to emulate the FIFO accurately to fix this.
17:35 2005-04-14
The BAM error remains. It seems to be at least somewhat separate from the freeze error.
17:55 2005-04-14
It definitely has something to do with malplaced interrupts, but there was no change even after changing VISI_TIMEOUT up to 128M cycles. So it happens earlier.
22:34 2005-06-16
VISI_TIMEOUT is irrelevant. The error is due to a video interrupt being taken in the middle of a draw command. The handler for the interrupt uses GX commands, corrupting the command stream. I think this is a bug in bam3k, never seen on real hardware as it is fast enough to complete all commands before the video interrupt happens. I plan to fix the problem by delaying GP throwing of VISIs until a NOP is encountered.
23:02 2005-06-16
Failed. The interrupt happens during the next frame instead(?), disrupting it.
14:12 2005-06-17
Tried halving the interrupts by having them raised on EFB copy, with ignore on. No effect. Alternate idea: prevent all VI interrupts for a large number of cycles after a certain event. This event could be a DVD read, with a timeout of 1M cycles, or VI or VII init, with a considerably larger timeout... like 100M or something.
13:23 2005-07-29
Old and mostly irrelevant.

17:35 2005-02-03
In EF mode, do one VISI at maximum safe speed when the GP is activated. Then, when VISIs are done at the end of the frame, do them at the speed MAX(min_safe, frame_time), where frame_time is the time, in cycles, it took for the last frame to be drawn... end point of this calculation is of course the VISI caller, bp_pe_done, but the starting point... the first starting point will be the activation, but the others... hmmm. It should be the Frame Start command, but since it isn't always called... it could be the last VI interrupt, but that would require cross-class data transfer, and probably wouldn't be completely accurate.
13:23 2005-07-29
Old and mostly irrelevant.

19:18 2005-07-26
Templatize all one-item memory access functions.
21:55 2005-07-27
Done for Memory classes. Hardware is trickier, did it the other way around there.

01:32 2005-07-28
Fix degub info on restart (from AOptions).
12:16 2005-08-01
Done.

21:54 2005-07-27
Combine MemInterface, Memory and RecMemory to one single Memory class.
12:17 2005-08-01
Couldn't do it completely, but now most code duplication has been eliminated.

17:09 2005-10-02
Split gp.cpp. It's grown too large.
20:37 2005-10-27
Done.

21:34 2006-01-15
Bugs with midx, chekkitout!
17:27 2006-01-21
Probably fixed.

17:28 2006-01-21
Bugs with labels and possibly other recompiler things too.
21:48 2006-01-23
Fixed, was pos/recbuf.size mismatch. Removed pos.

17:23 2006-08-26
Complete GekkoTest runs on WhineCube.
20:05 2006-07-23
GekkoTest found a bug in add: the overflow flag wasn't properly set. Bug fixed in interpreter.
20:10 2006-07-23
A recompiler fix cannot be tested due to a code overwriting bug. See above.
20:12 2006-07-23
Bug did probably not exist in recompiler, since it already used EFLAG OF, which was the fix for interpreter.
22:10 2006-07-23
Same bug found in subf.
23:07 2006-07-23
Found in mullw too. Both fixed.
00:02 2006-07-24
The undefined results of division by zero has a pattern, which has been emulated with the help of GekkoTest.
23:29 2006-07-28
Similar bug found in subfic, but here it's the carry flag instead.
00:00 2006-07-29
Fixed, then found in subfc.
00:34 2006-07-29
Fixed.
11:10 2006-09-30
Done.

23:07 2006-10-24
Use TC interrupt to signal BBA Send Complete.
13:10 2006-11-26
Heck no at all! For some reason, BBA uses EXI channel 2 for interrupts, not channel 0 which it uses for other communication.

20:40 2007-07-09
BBA suggestion: if there are packets waiting, trigger a BBA interrupt periodically, like once per second.
17:34 2007-07-11
No need. I changed the recieve buffer fill algorithm so that the error, rwp == wwp, doesn't occur anymore. A little slower, maybe, but we're not sending much data anyway.

13:43 2007-07-22
Put a CC-BY-3.0 notice on the website.
14:02 2007-07-22
Done.

14:41 2007-07-06
Add DSP IPS count to status bar.
10:33 2007-07-24
Done.
