diff --git a/book/src/02-concepts/00-index.md b/book/src/02-concepts/00-index.md index 864e1ff..fb6b902 100644 --- a/book/src/02-concepts/00-index.md +++ b/book/src/02-concepts/00-index.md @@ -1 +1,26 @@ # Broad Concepts + +The GameBoy Advance sits in a middle place between the chthonic game consoles of +the ancient past and the "small PC in a funny case" consoles of the modern age. + +On the one hand, yeah, you're gonna find a few strange conventions as you learn +all the ropes. + +On the other, at least we're writing in Rust at all, and not having to do all +the assembly by hand. + +This chapter for "concepts" has a section for each part of the GBA's hardware +memory map, going by increasing order of base address value. The sections try to +explain as much as possible while sticking to just the concerns you might have +regarding that part of the memory map. + +For an assessment of how to wrangle all three parts of the video system (PALRAM, +VRAM, and OAM), along with the correct IO registers, into something that shows a +picture, you'll want the Video chapter. + +Similarly, the "IO Registers" part of the GBA actually controls how you interact +with every single bit of hardware connected to the GBA. A full description of +everything is obviously too much for just one section of the book. Instead you +get an overview of general IO register rules and advice. Each particular +register is described in the appropriate sections of either the Video or +Non-Video chapters. diff --git a/book/src/03-video/00-index.md b/book/src/03-video/00-index.md index f076b5d..288c3ca 100644 --- a/book/src/03-video/00-index.md +++ b/book/src/03-video/00-index.md @@ -1 +1,9 @@ # Video + +GBA Video starts with an IO register called the "Display Control Register", and +then spirals out from there. You generally have to use Palette RAM (PALRAM), +Video RAM (VRAM), Object Attribute Memory (OAM), as well as any number of other +IO registers. + +They all have to work together just right, and there's a lot going on when you +first try doing it, so try to take it very slowly as you're learning each step. diff --git a/book/src/04-non-video/00-index.md b/book/src/04-non-video/00-index.md index d7d1113..aff4a81 100644 --- a/book/src/04-non-video/00-index.md +++ b/book/src/04-non-video/00-index.md @@ -1 +1,21 @@ # Non-Video + +Besides video effects the GBA still has an okay amount of stuff going on. + +Obviously you'll want to know how to read the user's button inputs. That can +almost go without saying, except that I said it. + +Each other part can be handled in about any order you like. + +Using interrupts is perhaps one of the hardest things for us as Rust programmers +due to quirks in our compilation process. Our code all gets compiled to 16-bit +THUMB instructions, and we don't have a way to mark a function to be compiled +using 32-bit ASM instructions instead. However, an interrupt handler _must_ be +written in 32-bit ASM instructions for it to work. That means that we have to +write our interrupt handler in 32-bit ASM by hand. We'll do it, but I don't +think we'll be too happy about it. + +The Link Cable related stuff is also probably a little harder to test than +anything else. Just because link cable emulation isn't always the best, and or +you need two GBAs with two flash carts and the cable for hardware testing. +Still, we'll try to go over it eventually.