For instance, the way I'm doing my current game is in a whole bunch of very small, discrete units of work. I've taken a very object-oriented approach to things, even though I'm not actually doing everything as classes and object (i.e., it's a lot of procedural code, some classes, a mix of concepts). What this allows for is having small pieces of code to port rather than the core logic of the application. Note that I haven't invented any great strategy here, this is how cross-platform work is generally done.
In other words, rather than call GapiDraw's BltFast function, I instead call my own DrawImage function. I pass it a simple set of parameters (Surface*, x, y, opts) where opts is a custom struct. In this way, if I want to switch to a different library, I just modify that DrawImage function, nothing else gets touched. Same for file I/O, sound functionality and control I/O, it's all very atomized code.
Likewise, my main game loop is not GapiDraw's main loop. I call a function FROM GapiDraw's main loop, but it's not tied in any way to GapiDraw itself.
Really, doing cross-platform code is fairly easy, it's the WORA concept that usually gets in the way because doing that is virtually impossible without some sort of VM foundation, and that doesn't generally fly well for performance in games (even what I'm doing has performance implications, but done smartly they are acceptable).
I think the bigger issue is resources... Designing a game that will run well on a SmartPhone screen as well as a PC screen as well as a Palm device, all with different resolutions and such, seems to me quite a nightmare (I've abandoned the idea of a SmartPhone port of my current project because it simply won't work on that small a screen real-estate, same for cell phones). Even just thinking of varying memory footprints, things like sound becomes quite an issue because you can just use straight WAVs so as to not have to deal with audio codecs of any sort, but then your talking much more memory, and that won't fly on many limited devices.
But, now I'm off on one of my prototypical tangents
