(08-19-2011, 03:09 PM)xat Wrote: That's pretty inspiring cotton; so your path of learning started by just poking around pcsx2's source despite not knowing c/c++? I know it's off topic but could you elaborate a little on what you've done to get where you are now?
Well if you're curious, here's the bulk of my programming + pcsx2 history:
I started programming when i was ~11 years old with visual basic 6.0 and i also played around with RPG Maker. Obviously i was a noob back then, but i did manage to get some small stuff working.
Around the same time i also picked up emulation and played Pokemon Blue/Red games on no$gb. I thought emulators were so cool, and I wanted to someday be skilled enough to code an emulator.
I continued with VB6 and then took some middle school and high school programming courses where i learned QuickBasic. The instructor who taught the programming classes loved me and would joke around saying stuff like: "Oh man Nick just entered the room! The average IQ of the class just rose tremendously!".
My friends that took the programming classes with me at the time, always asked me to help them get their games to work (the programming class's assignments were QB games).
Anyways my high school didn't have much advanced programming stuff, so quickbasic was all we did. I continued VB6.0 on my own until i went to uni and started learning Java. After a Java course or two, I was familiar enough with Java to code some small java cellphone games like Snake.
A little after that I got into playing with pcsx2. At this point Gabest had made some great gsdx improvements turning it into the better plugin (compared to zeroGS). I got interested in the code and started playing around with pcsx2's frame-skipping and VU-skip logic (we don't have VU-skip anymore). I was able to understand most of the code since Java and C/C++ have the same C-style syntax. And I came up with a new frame/vu-skipping algorithm that worked much better than pcsx2's old version (which was overly complex).
I posted some patches on ngemu, and eventually got in contact with rama who was also hacking about pcsx2's sourcecode (i believe he came-up with the first ee-cycle hack at the time).
Eventually rama talked to Gigaherz and got him to open up a PCSX2-Playground SVN on googlecode, and rama invited me to the project.
At the time I started reviewing and modifying pcsx2's FPU Interpreter code and eventually moved to VU interpreters and at the same time was studying how the recompilers worked. By comparing the recompilers to the interpreters i slowly started to understand how recompilation worked, and I eventually moved on to doing some work on Super VU's recompiler as well as rewriting a lot of pcsx2's FPU recompiler code.
Around the same time drk||raziel (nullDC's author) opened up a dev chatroom on efnet for us pcsx2-playground members. The playground project started growing with us getting more members (arcum42, Jake Stine, and Krakatos as our beta-tester). Through many dev discussions with the team, I learned more and more. Especially from drk||raziel who was like an emulation encyclopedia.
Eventually I felt I had learned enough about Super VU and how recompilation worked to try my own recompiler microVU, although since I had never coded something so complex I wasn't sure if i could pull it off. Soon after starting to code microVU, pcsx2-playground merged with the official pcsx2 project and us playground devs became official pcsx2 devs.
After working on microVU's code for some time, it was finally at the stage where it should've been able to run some stuff, although it was failing at even the simplest demos. Pseudonym then took a look at the code and told me some branching code looked like didn't make sense. I took a look and I had mixed up some "pBlock" variable with "bBlock" (or something similar). After fixing that typo, microVU finally started running some ps2 demos and games!
After a lot of help from rama, pseudonym, and jake, we eventually got microVU to work pretty well; and now its the more compatible VU recompiler compared to Super VU.
After my experiences with microVU I decided to start writing a NES emulator, cottonNES, which I had always wanted to do (NES is my favorite console). From doing so I gained a better understanding of emulation, since I actually coded every component from scratch (aside from the APU at the time; Gigaherz gave me the sourcecode of his NES emulator and let me use his APU). I have since written my own APU to get an understanding of how audio emulation works; although cottonNES is still not ready for a real release.
Anyways throughout the years working on pcsx2, I have switched between pcsx2 and various other programming projects (random games and engines, cottonNES, cottonCx (a chip8/chip16 emulator), project euler, etc...). Each programming project teaches me new things.
From the knowledge I gained from writing the microVU recompiler, I coded the newVif Unpack recompiler (and then Jake helped optimize it). After that I coded pcsx2's game database (which Jake again later optimized). Then for a while I didn't do much pcsx2 work (aside from some microVU commits here-and-there). And then recently I did the GIF Unit rewrite and MTVU.
In the 3~4 years working on pcsx2 (started when i was 19, now i'm 23), my programming skills have dramatically improved. If someone wants to get good at programming my advice is to first learn the basics, then find some open source programming project that you like and try to contribute and join the team. Then by talking to skilled team members, and challenging yourself with new programming projects, you will dramatically improve your skills. IMO you can't really depend on school to teach you to be a good programmer; at-best they teach you the fundamentals of programming but to learn more you need to actively seek the knowledge yourself.
Anyways that's my rant for those that are interested