User:Shadowboxer2005/Genesis Homebrew Development
The Sega Genesis, known internationally as the Sega Mega Drive and the Super Gam*Boy/Super Aladdin Boy in Korea is a 16-bit fourth generation home console released in 1988 in Japan, 1989 in North America and 1990 elsewhere; it is Sega's third console acting as the successor to the SG-1000 and Master System, alongside being the rival to the Super Nintendo Entertainment System, which was released the following year.
In Japan, the system performed poorly against the Super Nintendo and the PC Engine (TurboGrafx-16), but was a large success internationally selling 30 million units and lasting until 1997.
Memory locations
[edit]Start address | End address | Description |
---|---|---|
$000000 | $3FFFFF | Cartridge ROM/RAM |
$400000 | $7FFFFF | Reserved, used by the Sega CD and 32X |
$800000 | $9FFFFF | Reserved, used by the 32X |
$A00000 | $A0FFFF | Z80 memory |
$A10000 | $A10001 | Version register |
$A10002 | $A10003 | Controller 1 data |
$A10004 | $A10005 | Controller 2 data |
$A10006 | $A10007 | Expansion port data |
$A10008 | $A10009 | Controller 1 control |
$A1000A | $A1000B | Controller 2 control |
$A1000C | $A1000D | Expansion port control |
$A1000E | $A1000F | Controller 1 serial transmit |
$A10010 | $A10011 | Controller 1 serial receive |
$A10012 | $A10013 | Controller 1 serial control |
$A10014 | $A10015 | Controller 2 serial transmit |
$A10016 | $A10017 | Controller 2 serial receive |
$A10018 | $A10019 | Controller 2 serial control |
$A1001A | $A1001B | Expansion port serial transmit |
$A1001C | $A1001D | Expansion port serial receive |
$A1001E | $A1001F | Expansion port serial control |
$A10020 | $A10FFF | Reserved |
$A11000 | Memory mode register | |
$A11002 | $A110FF | Reserved |
$A11100 | $A11101 | Z80 bus request |
$A11102 | $A111FF | Reserved |
$A11200 | $A11201 | Z80 reset |
$A11202 | $A12FFF | Reserved |
$A13000 | $A130FF | TIME registers; used to send signals to the cartridge |
$A130F1 | SRAM access register | |
$A130F3 | Bank register for address $80000-$FFFFF | |
$A130F5 | Bank register for address $100000-$17FFFF | |
$A130F7 | Bank register for address $180000-$200000 | |
$A130F9 | Bank register for address $200001-$27FFFF | |
$A130FB | Bank register for address $280000-$2FFFFF | |
$A130FD | Bank register for address $300000-$37FFFF | |
$A130FF | Bank register for address $380000-$3FFFFF | |
$A14000 | $A14003 | TMSS "Sega" |
$A14101 | TMSS/cartridge register | |
$A14102 | $BFFFFF | Reserved |
$C00000 | $C00001 | VDP data port |
$C00002 | $C00003 | VDP data port (mirror) |
$C00004 | $C00005 | VDP control port |
$C00006 | $C00007 | VDP control port (mirror) |
$C00008 | $C00009 | VDP H/V counter |
$C0000A | $C0000F | VDP H/V counter (mirror) |
$C00011 | PSG output | |
$C00013 | $C00017 | PSG output (mirror) |
$C0001C | $C0001D | Debug register |
$C0001E | $C0001F | Debug register (mirror) |
$C00020 | $FEFFFF | Reserved |
$FF0000 | $FFFFFF | 68000 RAM |
Table was copied from Sega Mega Drive/Memory map at Sega Retro, which is released under a Creative Commons Attribution 4.0 International license.
Basic Crap
[edit]TradeMark Security System
[edit]The TradeMark Security System (TMSS) is a feature not present in earlier models of the Genesis, that essentially prevents both piracy and unlicensed games playing on the system; despite this, Sega chose not to enforce it after losing a 1993 court case with Accolade, meaning any developer could make a game for the system without Sega's knowledge.
Due to $A14000 being reserved on earlier models, using the address could potentially crash the system, so the following code must be used (note that the 'SEGA' portion needs to be at address $100 in the ROM):
move.b $A10001,d0 andi.b #$0F,d0 beq.b version_0 move.l #'SEGA',$A14000 version_0:
Video Display Processor (VDP)
[edit]The Video Display Processor (VDP) is exactly what it sounds like (well, it's actually a chip, not a processor); it processes the graphics, sprites and plane mappings on screen.
Resolution
[edit]Japanese and North American model machines support three resolutions; the first one is 320x224, which is utilized the most and is the default, the second one is 256x224, which is often used for when more complex graphics are involved, and the final is 320x448, an interlaced display that essentially doubles the screen's y-resolution (although many monitors would just squish it back to 224 pixels; several games would use this for two-player mode).
The European model also supports these resolutions, however due to monitors in Europe having a higher resolution, this means that it is capable of displaying 8 more pixels on the top and bottom, resulting in a full 240p resolution (or 320x480 when interlaced); despite this, very few games took advantage of this higher resolution, which essentially made unoptimised games look "stretched" on a European analog TV.
Colors
[edit]The Genesis uses a 9-bit RGB (red, green, blue) color palette, meaning that 9-bits are allocated to each specific pixel, and could theoretically allow up to 512 colors (1500 with shadow/highlight mode); however, since the Genesis only allows for 4 color palettes at once (each containing 16 colors), and since the first color for each 'palette line' is transparent, this only allows for 61 colors on screen.
With these limitations in mind, the following image would be possible by using several layering affects, and the color table below shows all the possible colors to be chosen:
The 32X, on the other hand, allows for 15 bits per pixel (15-bit RGB, also known as "High-Color"), with all 32,768 colors being able to be display at once; this results in the image/color table below.
That's not all though; several games on the Genesis managed to display beyond 61 colors at once; this is done by swapping the colors on the vertical interrupts (several games also do this on the horizontal interrupts); as a side effect, this results in some minor VRAM dots appearing where the palette changes occur, alongside some slightly imperfections in the V.I. swap.
Video Random Access Memory (VRAM)
[edit]Video Random Access Memory (VRAM) is the area in memory graphics and plane mappings are stored; it is only capable of storing 8x8 tiles; although it could technically allow up to $FFFF (65535) tiles at once, $C000 and $E000 are generally reserved for plane mappings.
Graphics Planes
[edit]The Sega Genesis has three graphics planes:
- Sprite layer - This is where all the in-game sprites (movable graphics/objects) are displayed; unless programmed, this will be displayed on top of everything, and has 8 possible layers; 0 will cause it to display above all objects, and 7 will cause it to display behind all objects.
- Plane A layer - Most often used for platforming games for level layouts, and/or text.
- Plane B layer - Most often used for backgrounds, displays behind everything; although normally static, they can be programmed to scroll at different speeds, thus giving the illusion of depth.
Sprites
[edit]The Genesis is able to display up to 80 sprites at once, although only a maximum of 20 can be displayed on any given scanline without causing sprite flickering; very few games end up reaching this limit to preserve the framerate.