GameBoy Programming Manual
scribd.com
scribd.com
>>To download this document you must become a Premium Reader<<
EDIT:
http://www.romhacking.net/documents/544/
https://www.google.com/search?hl=en&safe=off&q=GameBoy+Progr...
The first link you posted allows you to download the file. Thanks so much for posting it!
I used to find myself there all the time for various hard to find and not for public consumption automotive docs. The site was full of obviously infringing content.
https://news.ycombinator.com/item?id=6119347
http://chrisantonellis.com/files/gameboy/gb-programming-manu...
programmer from dictionary:
>>a person who writes computer programs; a person who programs a device, especially a computer. <<
iOS Programers fit that description.
Here's the secret to understanding the difference between API'ists and low-level programmers: time-to-market.
iOS programming is deeply mainstream in the market right now, so elaborate frameworks are available for it. GameBoy was waaaay ahead of its time and had no APIs for developing.
The same is true today: If you want to get ahead of the market, you can take the hit in complexity and develop for a lower-level of hw/sw, like the Parallela, in exchange for a short-term advantage, but there's no mainstream market yet. Or, you can write a great iOS app today, but you won't be the first. The initiative was lost a long time ago.
It's all about withstanding the headaches of bleeding-edge HW and SW, versus gaining the edge of being earlier to market.
If you're assembling a team, you want a range of abilities, from lowest-level people who can tell you what's really going on down deep inside up to the APIists who can leverage the work of many others to get access to widely-used features.
I was actually intending agree with you, to mean that the low-level programmers are precisely those individuals who achieve the time-to-market. They can wade through the specs and configure devices before the polished API becomes available.
Please help yourself and go speak to real programmers on OSDev rather than troll^W lose you time here. Thank you.
FWIW, I know my x86 assembly and am not an iOS programmer. But I have huge respect for good iOS programmers. Some of those apps are phenomenal.
He's claiming that people who identify themselves as an "iOS programmer", rather than just a "programmer", aren't really programmers. A "programmer" might be able to write inspiring stuff for iOS, but they haven't pigeon-holed themselfs into being an "iOS programmer"
Or because it's a market where really awesome programmers can't distinguish themselves from good-enough average ones because few customers can discriminate between those.
Thare's been a "dramatic change" between the 80's and 00's? If so, I must have missed it. I look at, say, IBM 1620 versus the machines designed in the 1980's, and that is change to me. In the 1980's, essentially everything we use now in the area of personal computing architectures has already been invented and put to use. Essentially, by the time you get to the 1980's, everything has been so homogenized and regularized that I really don't see anything new that happened since then.
Perhaps some change is going on now - AMD's hUMA seems to me to be the first major departure from the 1980's machine model in those twenty five years or so, but even then, I'm not sure how much is that "new" - IBM has had heterogenous CPUs on their mainframes for quite some time, so conceptually, it's just another idea getting to the PC world from the world of mainframes.
Back in the "olden" days, storing a number required thought. 8 bit processors could often deal with 16 bit values, but beyond that you were on your own. You had to be very careful designing your data structures so they used the least memory possible. Saving data was unreliable. There were often no debugging tools at all. Some lucky folks had ICE[1] but most of us had to guess why the system hung. All this meant you had to get low level because of the constraints.
But you know back in those olden days we didn't have to have a comprehensive help system. We could assume users were proficient. We didn't have to deal with security and attacks. No networking. Undo was rare, and if it existed was a single step. Your code only ran in one human language. So while we did have to care about the low level implementation details of the code, we didn't have to worry too much about the rest.
The low level constraints are pretty much gone now. The tools are great. And you do have to worry about a lot beyond the actual implementation like usability, smooth animations (games had to worry about that in the olden days but in a different way), multiple languages, coordinating with other systems over a hostile network, attacks and a whole bunch more. I'm glad for all this, because worrying about fitting data structures and a framebuffer in 16kb of memory didn't make for a better app.
Being familiar with the low level is still sometimes helpful, but not that often. It is also a heck of a lot more complicated - eg compiler produced code is not straightforward and logical. Multiple levels of cache, cache policies, speculative execution etc make reasoning about data more difficult. The majority of the time it doesn't matter.
Right now the majority of mobile apps behave rather poorly if you have more than one device. In the future that will be a given. UI is more likely to be goal driven with the system figuring best practises for meeting the goals, versus nudging things by pixels as is done today. (Heck a user will probably do some combination of pointing, speaking, thinking and just plain old looking.) I'd expect a more functional approach where immutable states are the unit of an app, and new states are produced via interaction and external updates with the states syncing across everywhere relevant instantly.
I didn't use any of this though, I found a Japanese book on the GBDK C compiler. It's still available here: http://gbdk.sourceforge.net/ and there are more resources here: http://devrs.com/gb/software.php#assemble
I've thought since then that working on a simple machine like that is a great way to learn the fundamentals of computer science.
In my school, we began with high-level functional languages and it's only after 3 years of programming than we discovered low level programming and could write a Kernel.
Can you explain how a RISC assembly language can help you learn CS ?
My CS course (in the late 90s) kind of went the other way. One of the earliest courses was one that taught how a cpu operates -- what a register is, what the accumulator is, etc. There was no actually programming, just working through the steps of what the computer does to perform a given operation. After that there were a number of directions to go in.
> I'm not sure if I define CS that narrowly
I mostly wanted to bold the data structure manipulation, something you wouldn't see when manipulating directly the assembly code.
You would be amazed what crazy and complex things were written to create some of the older games you know and enjoy.
I know it's not an official manual but it's worth mentioning: GBA Tonc - http://www.coranac.com/tonc/text/toc.htm
PDF download: http://www.coranac.com/files/tonc.pdf
The 8/16-bit consoles could only address 64k, which was to be used for program, data, VRAM and memory-mapped I/O. So you were forced to partition your code and data in 8k or 16k banks and manually swap them in and out. If bank 1 was swapped in, there was no way to access bank 2...
"2. CPU 2.1 OVERVIEW OF CPU FEATURES The CPUs of DMG and CGB are ICs customized for DMG/CGB use, and have the following features. CPU Features Central to the 8-bit CPU are the following features, including an I/O port and timer. 127 x 8 bits of built-in RAM (working and stack)"
How much memory is needed today to make games that are only half entertaining?
(Game boy has 8192 bytes of working ram. 127x8 bits is only for stack)
Game boy assemblers do use the z80 syntax rather than the crazy i8080 syntax, thankfully.