////////////////////////////////////////////////////////////// -------------------------------------------------------------- Virtual Boy Programming Doc V0.05.12 Compiled By David Tucker (david.tucker@goliathindustries.com) Special thanks to Ben Hanor (For pulling so mutch Info from the patents, and other helps) Located: http://www.goliathindustries.com/vb/ *** Note: This document has been discontinued, please refer to the new Programming document on my Website. -------------------------------------------------------------- ////////////////////////////////////////////////////////////// --------------------- - Cartrige Pinout - --------------------- Edge Con Rom Ram --- --- --- 1 (gnd) 3 27 (WE\) 5 (/NC) 7 26 (CS2) 9 (/NC) 11 2 (A18) 13 3 (A17) 15 4 (A7) 3 (A7) 17 5 (A6) 4 (A6) 19 6 (A5) 5 (A5) 21 7 (A4) 6 (A4) 23 8 (A3) 7 (A3) 25 9 (A2) 8 (A2) 27 10 (A1) 9 (A1) 29 11 (A0) 10 (A0) 31 12 (/CE) 33 (gnd) 13 (GND) 35 14 (/OE) 22 (OE\) 37 15 (D0) 11 (D0) 39 16 (D8) 41 17 (D1) 12 (D1) 43 18 (D9) 45 19 (D2) 13 (D2) 47 20 (D10) 49 21 (D3) 15 (D3) 51 22 (D11) 53 (+5v) 55 (pin 55-57) 57 (pin 55-57) 59 (gnd) ---------------------------- 2 (gnd) 4 (/NC) 6 20 (CS1\) 8 (+5v) 10 (/NC) 12 (/NC) 14 44 (/NC) 16 43 (A19) 18 42 (A8) 25 (A8) 20 41 (A9) 24 (A9) 22 40 (A10) 21 (A10) 24 39 (A11) 23 (A11) 26 38 (A12) 2 (A12) 28 37 (A13) 30 36 (A14) 32 35 (A15) 34 34 (A16) 36 (+5v) 33 (/BYTE) 38 31 (D15) 40 30 (D7) 19 (D7) 42 29 (D14) 44 28 (D6) 18 (D6) 46 27 (D13) 48 26 (D5) 17 (D5) 50 25 (D12) 52 24 (D4) 16 (D4) 54 (+5v) 23 (Vdd) 56 (pin 56-58) 58 (pin 56-58) 60 (gnd) ----------------------------- (ROM) Toshiba TC53x200 or equivalent mask ROM. Can be replaced with a 27Cx00 EPROM, or 29Wx00 flash ROM, where x is 2, 4, 8, or 16. 1 - /NC 44 - /NC Used for the 32mbit rom... (would be A20) 23 - +5v 33 - /BYTE (Held high the chip is in word mode) 13,32 - GND (RAM) Cypress CY6264 or equivalent SRAM. (Edge Conector) - Extra Pins for Installnig a Flash rom 9 RDY/BY\ (Output for flash rom...) 10 RESET\ (Reset the flash rom) 12 WE\ (Write Enable) ////////////////////////////////////////////////////////////// ---------------- - Memory Map - ---------------- --------------------------------------------------- 0x0000 0000 - 0x0007 FFFF RAM 0x7FFFF bytes 0x0000 0000 - 0x0000 5FFF L FrameBuff0 0x6000 bytes 0x0000 6000 - 0x0000 7FFF CHR 0-511 0x2000 bytes 0x0000 8000 - 0x0000 DFFF L FrameBuff1 0x6000 bytes 0x0000 E000 - 0x0000 FFFF CHR 512-1023 0x2000 bytes 0x0001 0000 - 0x0001 5FFF R FrameBuff0 0x6000 bytes 0x0001 6000 - 0x0001 7FFF CHR 1024-1535 0x2000 bytes 0x0001 8000 - 0x0001 DFFF R FrameBuff1 0x6000 bytes 0x0001 E000 - 0x0001 FFFF CHR 1536-2047 0x2000 bytes 0x0002 0000 - 0x0003 BFFF BG Map 0x1C000 bytes *(2) 0x0003 C000 - 0x0003 D7FF ParamTable 0x17FF bytes 0x0003 D800 - 0x0003 DBFF World 0x400 bytes 0x0003 DC00 - 0x0003 DDFF ColumbTbl1 0x0200h Bytes 0x0003 DE00 - 0x0003 DFFF ColumbTbl2 0x0200h Bytes 0x0003 E000 - 0x0003 FFFF Object 0x2000 bytes 0x0004 0000 - 0x0005 F7FF VIP Mirroring??? (How does this work?) 0x0005 F800 - 0x0005 F870 VIP (Only accesable in HWords) 0x0005 F800: INTPND // Write the curent interupt hear 0x0005 F802: INTENB // Check if Interupt is inabled 0x0005 F804: INTCLR // Clear the bits in int pending 0x0005 F820: DPSTTS //Display Status 0x0005 F822: DPCTRL //Display Controll 0x0005 F824: BRTA // Color for the given 4 bit columb 0x0005 F826: BRTB // Max of 80? (Maby 100) 0x0005 F828: BRTC // Britness is cumulative, // BRTC=BRTA+BRTB+BRTC 0x0005 F82A: REST 0x0005 F82E: FRMCYC 0x0005 F830: CTA // Columb Table Address 0x0005 F840: XPSTTS 0x0005 F842: XPCTRL 0x0005 F844: VER 0x0005 F848: SPT0 //Pointers to the 4 OBJ group's 0x0005 F84A: SPT1 // in OBJ Mem 0x0005 F84C: SPT2 0x0005 F84E: SPT3 0x0005 F860: GPLT0 //Set the BGMap current color palet 0x0005 F862: GPLT1 // Selected by BPLTS from the 0x0005 F864: GPLT2 // BGMap Atribute Table. 0x0005 F866: GPLT3 // there are 4 2bit pallets per // GPLTx register 0x0005 F868: JPLT0 //Set the OBJ current color palet 0x0005 F86A: JPLT1 // Selected by JPLTS from the OBJ 0x0005 F86C: JPLT2 // Atribute table. 0x0005 F86E: JPLT3 0x0005 F870: BKCOL //BackGround Color (0-3) 0x0007 8000 - 0x0007 FFFF CHR Data 0x8000 bytes, mirrored from above (Linear) 0x0008 0000 - 0x00FF FFFF Mirroring of RAM, from 0x0000 0000 - 0x0007 FFFF ---------------------------------------------- 0x0100 0000 - 0x0100 05FF // Mem_2, Sound! *(1) 0x0100 0280 - 0x0100 02FF // Modulation Data Ram ---------------------------------------------- 0x0200 0000 - 0x0200 002C // hardware controll registers-HCREG (MASK with FF) // All registers are 8 bit's RW 0x0200 0000: LPC // Link Port Controll Reg RW 10000000 IntDisable // 1-clears and disables interupts // 0-enables 01000000 RFU // Unused, set to 1 00100000 RFU // Unused, set to 1 RW 00010000 ClockSelect // 0-internal clock(20 MHz/ // 40-500KHz), 1-external clock 00001000 RFU // Unused, set to 1 W 00000100 ComStart // 1-starts communications on // falling edge of clock R 00000010 ComStatus // 1-during communication, 0-on idle 00000001 RFU // Unused, set to 1 RW 0x0200 0004: LPC2 // Link Port Controll Reg RW 10000000 IntDisable // 1-clears and disables interupts // 0-enables 01000000 RFU // Unused, set to 1 00100000 RFU // Unused, set to 1 RW 00010000 IntLevel // ??? RW 00001000 ControlSig // ??? R 00000100 ControlSample // ??? RW 00000010 ControlWrite // ??? R 00000001 ControlRead // ??? // In/Out data for the Timmer, Keypad, Link Port RW 0x0200 0008: LPT // Link Port Transmit data R 0x0200 000C: LPR // LinkPort Recieve data R 0x0200 0010: KLB // Keypad LowByte R 0x0200 0014: KHB // Keypad HighByte RW 0x0200 0018: TLB // Timmer LowByte RW 0x0200 001C: THB // Timmer HighByte RW 0x0200 0020: TCR // Timmer Controll Reg 10000000 RFU // Unused, set to 1 01000000 RFU // Unused, set to 1 00100000 RFU // Unused, set to 1 RW 00010000 TClock // resolution of the clock 1-20ms // 0-100ms (defualt) RW 00001000 TINT // 1-enable interupt, 0-disable W 00000100 TClear // 1-clear status flag R 00000010 TStat // 1-counted to zero, 0-disabled RW 00000001 TEnable // 1-restart count, 0-disable RW 0x0200 0024: WCR // Wait States Controll Register 10000000 RFU // Unused, set to 1 01000000 RFU // Unused, set to 1 00100000 RFU // Unused, set to 1 00010000 RFU // Unused, set to 1 00001000 RFU // Unused, set to 1 00000100 RFU // Unused, set to 1 RW 00000010 WEXP // 1-1 wait, 0-2 wait (default) RW 00000001 WROM // 1-1 wait, 0-2 wait (default) RW 0x0200 0028: KCR // Keypad Controll Reg *(4) RW 10000000 IntDisable // 1-clears and disables interupts // 0-enables (defualt) 01000000 RFU // Unused, set to 1 RW 00100000 DataLatch // 1-software data latch // 0-hardware read RW 00010000 DClock // software data clock 1,0,1..- // software reads, 0-hardware read 00001000 RFU // Unused, set to 1 W 00000100 KeyStart // 1-start hardware read // 0-idle (defualt) R 00000010 KeyStatus // 1-during communications, 0-idle RW 00000001 Suspend // 1-suspend read, 0-enable(defualt) ---------------------------------------------- 0x0400 0000 - 0x04FF FFFF // Expantion area? // 0x0403 FF70 - 0x0403 FFCF // System I/O ??? ---------------------------------------------- 0x0500 0000 - 0x0500 FFFF WRAM 0xFFFF bytes // NVC W_RAM // mask with ffff ---------------------------------------------- 0x0600 0000 - 0x0600 1FFF // cartrig ram // Maby 0600 3FFF? // (VGolf might have 16k?) ---------------------------------------------- 0x0700 0000 - 0x07FF FFFF // Cartrige Rom *(3) ---------------------------------------------- *(4)To read the Keypad: Write 0x84 to the Keypad Controll Reg (0x0200 0028) Read Keypad HighByte (0x0200 0014) and Keypad LowByte (0x0200 0010) mask with 0xFF, and 0xFC respectivly, and put them together. The 16 bits corospond to the 16 buttons on the controller. Most games require you to release a button before registering a button press. *(3)All roms must be powers of 2 in size (256k, 512, 1024, 2048 etc...) the rom is placed at 0x700 0000 - up... but due to addressing rolover you can always read the rom backwards from 0x07FF FFFF down (This is how the vectors are read...) *(2)The boundry between the BG Map and the Param Table is variable *(1)sound is sampled at 41.7KHz with 13 bit presision... Sound ram is 6 bit x 160 word (Whatever) Sound 1-4 are Standard sound sources Sound 5 is Sweep/Modulation Sound 6 is Noise. -------------------------------- - Info at the end of the ROM - -------------------------------- Maped down from 0xFFFF FFFF (Remeber the rom replecates itself from 0x0700.. to 0x07FF.., and we mask off the Higher address lines, 0x07FF... is the highest address posible...) Interupt Vectors ---------------- 0xFFFF FE00 - 0xFFFF FE0F INTKEY //Controller Interupt 0xFFFF FE10 - 0xFFFF FE1F INTTIM //Timmer Interupt 0xFFFF FE20 - 0xFFFF FE2F INTCRO //Expantion Port Interupt 0xFFFF FE30 - 0xFFFF FE3F INTCOM //Link Port Interupt 0xFFFF FE40 - 0xFFFF FE4F INTVPU //Video Retrace Interupt Rom Info -------- 0xFFFF FDE0 - 0xFFFF FDF3 Game Title 0xFFFF FDF4 - 0xFFFF FDF8 Reserved 0xFFFF FDF9 - 0xFFFF FDFA Manufacturer Code 0xFFFF FDFB - 0xFFFF FDFE Game ID Code 0xFFFF FDFF ROM Version 1.x 0xFFFF FFF0 - 0xFFFF FFFF Reset Vector (This is how the rom boots...) ----------------------- - Condenced Mem Map - ----------------------- "The virtual boy uses 128 Mbytes of the 32bit cpu's 4 GB addressable area. A26 ~ A24 are decoded and the 128Mbyte area is divided into 8, 16 Mbyte areas. So internaly all memory addresses are masked with 0x07FF FFFF. Only the significant bits of each memory area are decoded, so memory 'mirrors' itself within theas reagions. ******************************************************** 00000000H * Vip Area, Control registers VRM DRAM * ******************************************************** 0007FFFFH * IMAGE * ******************************************************** 01000000H * Sound Area Control Registers Data * ******************************************************** 02000000H * Port/timer Area Serial Data control, Timer Ctrl * ******************************************************** 020000XXH * IMAGE * ******************************************************** 03000000H * Not used * ******************************************************** 04000000H * Game Pack internal Expansion area for co-pro * * or expansion port * ******************************************************** 05000000H * NVC WRAM AREA 64Kbytes * ******************************************************** 0500FFFFH * IMAGE * ******************************************************** 06000000H * Game Pak RAM area, Linear, 16Mbytes Max * ******************************************************** 07000000H * Game Pak ROM area, Linear, 16Mbytes Max * ******************************************************** 08000000H ////////////////////////////////////////////////////////////// Hardware Specifics ////////////////////////////////////////////////////////////// -------------- - Dispaly - -------------- Char ---- A Char is an 8x8 pixle 4 color sprite, used in all graphics on the screen (Used by Obj, and BGMaps in perticular) Chars have the folowing characteristics: 2 bits per Pixle (4 Colors, actualy an index into one of 4 4-color palets.) each char is 8x8 pixles each line (8 pixles) is represented in 2 bytes (16 bits), with 8 lines per char 2 bytes*8 = 16 bytes per char... char ram is Located in 4 segments in ram: 0x0000 6000 - 0x0000 7FFF Char's 0 - 511 (0x000 - 0x1FF) 0x0000 E000 - 0x0000 FFFF Char's 512 - 1023 (0x200 - 0x3FF) 0x0001 6000 - 0x0001 7FFF Char's 1024 - 1535 (0x400 - 0x5FF) 0x0001 E000 - 0x0001 FFFF Char's 1536 - 2047 (0x600 - 0x7FF) char ram is also Mirrored into the range 0x0007 8000 - 0x0007 FFFF Linearly (chr# 0-2047) there are 2048 chars in char ram... to acess char(n) in char ram: char(n)-> == n*16 + 0x00078000 (char Offset in ram) BGMap ------ BGMaps are the static immages on the VB Screen. BGMaps are composed of chars from char ram, one BGMap is known as a segment. A segment is a 64x64 character immage (512x512 pixles), this is 4096 characters. While it is posible to 'move' the whole bgmap on the display it is not posible to move teh indavidule characters relative to each other. 1 segment: 16 bits * 4096 (0x1000) = 8192 bytes (0x2000 Bytes) each entry (16 bits) is a index to a char in char ram (0-2047) or One Cell. Segments are laied out Left to right, top to botom... Ie. Row 0 is numbered 0,1,2,3,4,5... Row 1 is numbered 64,65,66,67... : : : Row 63 is numbered 4032,4033,4034... 1 Cell: +-------------------------------------------------------------------------------+ | 15 | 14 | 13 | 12 | 11 | 10 | 09 | 08 | 07 | 06 | 05 | 04 | 03 | 02 | 01 | 00 | +-------------------------------------------------------------------------------+ |---------+----+----+----+------------------------------------------------------| | BPLTS |HFLP|VFLP| 0 | BCA ( 0x000 - 0x7FF) | |---------+----+----+----+------------------------------------------------------| 1 Segment = 4096 Cell's there are a maximum of 14 segments in the BGMap region, BGMap memory is: 0x0002 0000 - 0x0003 C000(maximum) with the upper bound (0x0003 C000) being variable, its shared with the parameter table, based on the # of active bg maps) BPLTS(0-4) - Palet # for this Character (Using BPLT#, from VIP Registers) HFLP - Horizontal Flip VFLP - Vertical Flip BCA - Character # to display from Character Ram. Object ------ Objects are the "Movable" objects on the screen, like the game character. Obj Memory is 0x0003 E000 - 0x0003 FFFF (0x020000 bytes) with each obj using 16x4bits for a total of 0x4000 posible OBJs. There are 4 registers in the VIP region (SPT0 - SPT3) that break up OBJ memory into workable chunks. It apears that OBJs are computed from the Current Offset back to the next lower offset (IE if we use spt3=300, and spt2 = 200 and spt3 is the curently selected offset, then obj's 300 to 200 are displayd in that order.) So to grab OBJ3, we take the OBJ Base Address (0x0003 E000) add SPT3 (0x0003 E000 + 300 = 0x0003 E300), and index from this value, back to 0x0003 E200 grabing objects as we go. Objs are special in that char's can overlap each other, can be positioned on odd boundarys, and they form a sparce tree. This is great if you want to place a fiew chars randomly about the screen, ie making bubles or stars. +-------------------------------------------------------------------------------+ | 15 | 14 | 13 | 12 | 11 | 10 | 09 | 08 | 07 | 06 | 05 | 04 | 03 | 02 | 01 | 00 | +-------------------------------------------------------------------------------+ |-------------------------------------------------------------------------------| | JX (-0x007 - 0x17F) | |----+----+---------------------------------------------------------------------| |JLON|JRON| JP (-0x100 - 0x0FF) | |----+----+---------------------------------------------------------------------| | JY (-0x007 - 0x0DF) | |---------+----+----+----+------------------------------------------------------| | JPLTS |HFLP|VFLP| 0 | JCA ( 0x000 - 0x7FF) | |---------+----+----+----+------------------------------------------------------| JX - Offset of char in X dir on Object Buffer (ranges in the Negative, so a char can creap onto the screen smotly) JY - Offset of char in Y dir on Object Buffer (ranges in the Negative, so a char can creap onto the screen smotly) JP - Paralax, True X cordinates are computed by JX-JP=TrueX for LScreen, and JX+JP=TrueX for RScreen. JLON - is obj Visible on the Left Screen JRON - is obj Visible on the Right Screen JPLTS(0-4) - Palet # for this Character (Using JPLT#, from VIP Registers) HFLP - Horizontal Flip VFLP - Vertical Flip JCA - Character # to display from Character Ram. World ----- Worlds are a colection of Objs and BGmaps, that have been layerd (With transparencys) and transposed back into the screen resolution (384x224) There are a total of 32 worlds (31-0), but not all 31 worlds nedd to be used at once. Worlds are displayd back to front, starting at 31 as the farthest back, and moving forward to 0. If a world is not 'on' (LON, RON == 1) for the given screen your rendering, the world is skiped. If however the world is marked as and END world, that world and the rest are skiped. Worlds also support a fiew extra Special Efects, like Sprite Scaling, and Rotation. As the VB renders teh Left and Right screens it looks at the LON and RON bits respectively, to se if the world is to be conciderd for display. Also the paralax is factored in at this time, by adding the paralax value to the GX offset for the right screen and subtracting for the left. There are 31 Worlds at 16x16bits (32Bytes) for a total of 0x400 bytes. World Ram: 0x0003 D800 - 0x0003 DBFF +---------------------------------------------------------------+ |15 |14 |13 |12 |11 |10 |09 |08 |07 |06 |05 |04 |03 |02 |01 |00 | +---------------------------------------------------------------+ |---+---+-------+-------+-------+---+---+---+---+---------------| |LON|RON| BGM | SCX | SCY |OVR|END| 0 | 0 | BGMAP_BASE -> | (0x0-0xD) |---+---+-------+-------+-------+---+---+---+---+---------------| | GX ( 0x000 - 0x17F) | |---------------------------------------------------------------| | GP (-0x100 - 0x0FF) | |---------------------------------------------------------------| | GY ( 0x000 - 0x0DF) | |---------------------------------------------------------------| | MX ( 0x000 - 0xFFF) | |---------------------------------------------------------------| | MP (-0x100 - 0x0FF) | |---------------------------------------------------------------| | MY ( 0x000 - 0xFFF) | |---------------------------------------------------------------| | W ( 0x000 - 0xFFF) | |---------------------------------------------------------------| | H ( 0x000 - 0xFFF) | |-----------------------------------------------+---+---+---+---| | PARAM_BASE (0x000 - 0xEBF) | 0 | 0 | 0 | 0 | |-----------------------------------------------+---+---+---+---| | OVERPLANE_CHARACTER | |---------------------------------------------------------------| | WRITING FORBIDDEN | |---------------------------------------------------------------| | WRITING FORBIDDEN | |---------------------------------------------------------------| | WRITING FORBIDDEN | |---------------------------------------------------------------| | WRITING FORBIDDEN | |---------------------------------------------------------------| | WRITING FORBIDDEN | |---------------------------------------------------------------| LON - is world Visible on the Left Screen RON - is world Visible on the Right Screen BGM - Type of World 0-Normal BGMap, 1-H-bias BGMap, 2-Affin, 3-OBJ SCX - Number of BGMaps to combine in the X dir, 1-4 bgmaps (0-3) SCY - Number of BGMaps to Combine in the Y dir, 1-4 bgmaps (0-3) always count left to right, top to botom, for BGMap # OVR - OverPlain??? END - No more worlds to process (Saves time, if the screen is sparce) BGMAP_BASE - the number of the fisrt BGMap to display (See, SCX,SCY for total # of BGMaps) GX - Screen X start position GY - Screen Y start position GP - Paralax offset for Screen X position, True X cordinates are computed by GX-GP=TrueX for LScreen, and GX+GP=TrueX for RScreen. MX - Buffer X start position MY - Buffer Y start position MP - Paralax offset for Buffer X position, actualy shifts the start addres to be cut out, in the x dir, to make a "Window" efect (Each Eye sees a toutch more on the edges than the other, Make a square with your fingures and look through it with each eye to see this better... W - Width to cut out from the Buffer and Past on the Screen H - Height to cut out from the Buffer and Past on the Screen PARAM_BASE - Parameter Table Base, used in H-Bias, and Affin BGMaps, for shifting/scailing. take the whole 16 bit value (Including the 4 zeros at the botom, there just a mask so we dont offset on an odd boundry) and add 0x0002 0000 for the true address. True base = (Param_Base*2) + 0x0002 0000; OVERPLANE_CHARACTER - Used in Affin BGMaps for rotation. (Need more Info) BGM Types Normal: Cut an immage from the BGMap(s) using the MX,MY,MP and W,H values, and paste that Immage starting on the GX,GY,GP coordinants (On the Display Immage) The First BG_Map is computed by taking the Ofset to BGMap Memory (0x0002 0000) and adding BGMAP_BASE * 0x2000(the size of one BGMap). To Build the BG_Map(s) to display index through SCX and SCY grabing the next BG_map in the list starting with the First BGMap as computed above. H-bias: This form, is used for 'Waivy' efects, each row on the screen can be shifted by a factor, left or right, and this shifting is seperate for the Left and Right displays Param_Base points to the base offset of the h-Byas parameter table, a talbe of 2 HWORDS (2x16 bits) times the number of lines to be displaed (If the Immage to display is 384x224 pixles, then the table would be 2 HWordsx224 in size). to Display folow the procedures above, but when copying to the Display Buffer, add in the offset (-255 to 254) to the GX value, remember to use the apropriet value hbiasL, or hbiasR depending on the screen being renderd. The true Param Base is equal to (Param_Base*2) + 0x0002 0000 Affin: This is used to display Zooming and Rotation efects. I know nothing! MX,MY,nad MP are Ignored in this mode, cut the BGMap from 0,0 (I think). The true Param Base is equal to Param_Base*2+0x20000 OBJ: Used for active Characters, while displaying the Worlds, keep a counter of the next object to display, counting from obj3 to obj0, as you display an obj, index the counter. Obj's ignore the MX/MY (and posibly GX/GY) variables and just display the whole 512x512 image starting at screen coordinates 0,0, remember the obj compute from -7 to 511 so offset by 7... Otherwise Obj's are the same as Normal BGMaps. You may only display a maximum of 4 OBJS at a given time. Pallet ------ Notes on Palets and Transparencys: each OBJ and BGMap cell is asociated with a 'Palet', there are 4 posible palets for OBJ's(JPLT0-JPLT4) and 4 palets for BGMaps(GPLT0-GPLT4). This alows for special pallet tricks. Each palet is a 8 Bit number making 4 2bit pallets, each 2 bit palled corisponds to one of the 3 britness registers (BRTA-BRTC) with a value of 00b equaling Pure Black Pallet entry 0 is always transparent BG COLOR -------- The BKCOL register tels the system what color to clear the background to. Vaues from 0-3 are valid, 0 being black, and 1-3 being BRTA-C Brightness ---------- The registers BRTA, BRTB, and BRTC are the 3 britness registers, each register holds a integer between 0-80 that defines teh hardware britness level for that color entry. Britness is cumulative so BRTA = BRTA, BRTB = BRTA+BRTB, and BRTC = BRTA+BRTB+BRTC. Direct Screen Draws ------------------- (Fill in later) -------------- - Hardware - -------------- Controller ---------- (Fill in later) Se the notes in the memory map... Timmer ------ (Fill in later) Link Port --------- (Fill in later) Interupts --------- (Fill in later) VIP Registers ------------- (Fill in later) Sound ----- (Fill in later) ---------------------------------------------------------------------------- v810 is a trademark of NEC co. Virtual Boy is a trade mark of Nintendo I am in now way affiliated with either of these parties ---------------------------------------------------------------------------- David Tucker david.tucker@goliathindustries.com http://www.goliathindustries.com/vb/