From 9cc69a67ea96786e470655745465505af9685d9c Mon Sep 17 00:00:00 2001 From: Mikah Chapman Date: Thu, 7 Feb 2019 15:56:39 -0700 Subject: [PATCH] add project files --- .gitattributes | 63 + Dev Documentation/GBCPUman.pdf | Bin 0 -> 298668 bytes Dev Documentation/GameBoy Opcodes Summary.htm | 355 ++ .../Gameboy (LR35902) OPCODES.htm | 218 ++ Dev Documentation/Pandocs.htm | 2899 +++++++++++++++++ Dev Documentation/Ultimate Game Boy Talk.url | 5 + Dev Documentation/gbctr.pdf | Bin 0 -> 146763 bytes Dev Documentation/gbspec.txt | 1792 ++++++++++ MCEmuCore.CPU/Class1.cs | 8 + MCEmuCore.CPU/MCEmuCore.CPU.csproj | 7 + MCEmuCore.Console/MCEmuCore.Console.csproj | 8 + MCEmuCore.Console/Program.cs | 13 + MCEmuCore.GBMonolith/Cpu.cs | 93 + MCEmuCore.GBMonolith/CpuRegisters.cs | 308 ++ .../MCEmuCore.GBMonolith.csproj | 8 + MCEmuCore.GBMonolith/Program.cs | 60 + MCEmuCore.GFX/Class1.cs | 8 + MCEmuCore.GFX/MCEmuCore.GFX.csproj | 7 + MCEmuCore.Input/Class1.cs | 8 + MCEmuCore.Input/MCEmuCore.Input.csproj | 7 + MCEmuCore.Memory/Class1.cs | 8 + MCEmuCore.Memory/MCEmuCore.Memory.csproj | 7 + MCEmuCore.System/Class1.cs | 8 + MCEmuCore.System/MCEmuCore.System.csproj | 11 + MCEmuCore.sln | 61 + 25 files changed, 5962 insertions(+) create mode 100644 .gitattributes create mode 100644 Dev Documentation/GBCPUman.pdf create mode 100644 Dev Documentation/GameBoy Opcodes Summary.htm create mode 100644 Dev Documentation/Gameboy (LR35902) OPCODES.htm create mode 100644 Dev Documentation/Pandocs.htm create mode 100644 Dev Documentation/Ultimate Game Boy Talk.url create mode 100644 Dev Documentation/gbctr.pdf create mode 100644 Dev Documentation/gbspec.txt create mode 100644 MCEmuCore.CPU/Class1.cs create mode 100644 MCEmuCore.CPU/MCEmuCore.CPU.csproj create mode 100644 MCEmuCore.Console/MCEmuCore.Console.csproj create mode 100644 MCEmuCore.Console/Program.cs create mode 100644 MCEmuCore.GBMonolith/Cpu.cs create mode 100644 MCEmuCore.GBMonolith/CpuRegisters.cs create mode 100644 MCEmuCore.GBMonolith/MCEmuCore.GBMonolith.csproj create mode 100644 MCEmuCore.GBMonolith/Program.cs create mode 100644 MCEmuCore.GFX/Class1.cs create mode 100644 MCEmuCore.GFX/MCEmuCore.GFX.csproj create mode 100644 MCEmuCore.Input/Class1.cs create mode 100644 MCEmuCore.Input/MCEmuCore.Input.csproj create mode 100644 MCEmuCore.Memory/Class1.cs create mode 100644 MCEmuCore.Memory/MCEmuCore.Memory.csproj create mode 100644 MCEmuCore.System/Class1.cs create mode 100644 MCEmuCore.System/MCEmuCore.System.csproj create mode 100644 MCEmuCore.sln diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/Dev Documentation/GBCPUman.pdf b/Dev Documentation/GBCPUman.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7cf38e1b25a03f5c7067d149ba91b04b560b2157 GIT binary patch literal 298668 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⁢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 BoqzxU literal 0 HcmV?d00001 diff --git a/Dev Documentation/GameBoy Opcodes Summary.htm b/Dev Documentation/GameBoy Opcodes Summary.htm new file mode 100644 index 0000000..c5ffde3 --- /dev/null +++ b/Dev Documentation/GameBoy Opcodes Summary.htm @@ -0,0 +1,355 @@ + +GameBoy Opcodes Summary +

GameBoy Opcode Summary

+

The GameBoy has instructions & registers similiar to the 8080, 8085, & +Z80 microprocessors. The internal 8-bit registers are A, B, C, D, E, F, H, & +L. Theses registers may be used in pairs for 16-bit operations as AF, BC, DE, & +HL. The two remaining 16-bit registers are the program counter (PC) and the +stack pointer (SP).

+

The F register holds the cpu flags. The operation of these flags is +identical to their Z80 relative. The lower four bits of this register always +read zero even if written with a one.

+ + +
Flag +Register
76543210
ZNHC0000
+

The GameBoy CPU is based on a subset of the Z80 microprocessor. A summary of +these commands is given below.

+ + +
MnemonicSymbolic +OperationCommentsCPU ClocksFlags - Z,N,H,C
+

8-Bit Loads

+ + +
LD r,sr + ss=r,n,(HL)r=4, +n=8, (HL)=8
LD d,rd + rd=r,(HL)r=4, (HL)=8
LD d,nd + nr=8, (HL)=12
LD +A,(ss)A + (ss)ss=BC,DE,HL,nn[BC,DE,HL]=8, +nn=16
LD (dd),A(dd) + Add=BC,DE,HL,nn
LD +A,(C)A + ($FF00+C)-8
LD (C),A($FF00+C) + A8
LDD A,(HL)A + (HL), HL + HL - 18
LDD (HL),A(HL) + A, HL + HL - 18
LDI A,(HL)A + (HL), HL + HL + 18
LDI (HL),A(HL) + A, HL + HL + 18
LDH (n),A($FF00+n) + A12
LDH A,(n)A + ($FF00+n)12
+

16-Bit Loads

+ + + +
LD dd,nndd + nndd=BC,DE,HL,SP12----
LD (nn),SP(nn) + SP +-20
LD SP,HL +SP + HL8
LD HL,(SP+e)HL + (SP+e)1200**
PUSH ss + (SP-1) +ssh, (SP-2) +ssl, SPSP-2 +ss=BC,DE,HL,AF16----
POP dd +ddl + (SP), ddh + (SP+1), SPSP+2 +dd=BC,DE,HL,AF +12
+

8-Bit ALU

+ + + + + + + +
ADD A,sA + A + s +CY is the carry flag. s=r,n,(HL)r=4, n=8, (HL)=8*0**
ADC A,sA + A + s + CY +
SUB sA + A - s +*1**
SBC A,sA + A - s - CY +
AND sA + A + s*010
OR sA + A + s +*000
XOR sA + A + s +
CP sA - s*1**
INC ss + s + 1 +s=r,(HL)r=4, (HL)=12*0*-
DEC ss + s - 1 +*1*-
+

16-Bit Arithmetic

+ + +
ADD HL,ssHL + HL + ss +ss=BC,DE,HL,SP8-0**
ADD SP,eSP + SP + e +1600**
INC ssss + ss + 1 +8----
DEC +ssss + ss - 1 +8
+

Miscellaneous

+ + + + + + +
SWAP sSwap nibbles. s=r,(HL)r=8, (HL)=16*000
DAAConverts +A into packed BCD.-4*-0*
CPLA + /A4-11-
CCF + CY /CY +CY is the carry flag.4-00*
SCFCY + 14-001
NOPNo operation.-4----
HALTHalt CPU until an interrupt occurs.4
STOP +Halt CPU.4
DIDisable Interrupts.4
EIEnable Interrupts. +4
+

Rotates & Shifts

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RLCA4000*
RLA
RRCA
RRA
RLC ss=A,r,(HL)r=8,(HL)=16*00*
RL s
RRC s
RR s
SLA ss=r,(HL)r=8, +(HL)=16
SRA s
SRL s
+

Bit Opcodes

+ + + +
BIT b,sZ + /sbZ is zero flag. s=r,(HL)r=8, +(HL)=12*01-
SET b,ssb + 1r=8, (HL)=16----
RES b,ssb + 0
+

Jumps

+ + + + + +
JP nnPC + nn-16
JP cc,nnIf cc is true, PC + nn, else +continue.If cc is true, 16 else 12.
JP (HL)PC + HL4
JR ePC + PC + e +12
JR cc,eif cc is true, PC + PC + e, +else continue.If cc is true, 12 else 8.
+

Calls

+ + +
CALL nn(SP-1) + PCh, +(SP-2) +PCl, PC +nn, SPSP-2 +-24
CALL cc,nnIf condition cc is false continue, else same as CALL nn.If cc is true, 24 else 12.
+

Restarts

+ + +
RST f(SP-1) + PCh, +(SP-2) +PCl, PCh +0, PCl f, +SPSP-2 +- +16
+

Returns

+ + + +
RETpcl + (SP), pch + (SP+1), SPSP+2 +-16
RET ccIf cc is true, RET else continue.If cc is +true, 20 else 8.
RETIReturn +then enable interrupts.16
+

Terminology

+ + + +
-Flag is not +affected by this operation.
*Flag is affected according to result of operation.
bA bit number in any 8-bit register or +memory location.
CCarry +flag.
cc +Flag condition code: C,NC,NZ,Z
dAny 8-bit destination register or memory +location.
ddAny 16-bit +destination register or memory location.
e8-bit signed 2's complement displacement.
f8 special call locations in page zero. +
HHalf-carry flag.
NSubtraction flag.
NCNot carry flag
NZNot zero flag.
nAny 8-bit binary number.
nnAny 16-bit binary number.
rAny 8-bit register. (A,B,C,D,E,H, or L)
sAny 8-bit source register or +memory location.
sbA bit +in a specific 8-bit register or memory location.
ssAny 16-bit source register or memory location.
ZZero Flag.
+ diff --git a/Dev Documentation/Gameboy (LR35902) OPCODES.htm b/Dev Documentation/Gameboy (LR35902) OPCODES.htm new file mode 100644 index 0000000..eacfc22 --- /dev/null +++ b/Dev Documentation/Gameboy (LR35902) OPCODES.htm @@ -0,0 +1,218 @@ + + + + + Gameboy (LR35902) OPCODES + + + + + +Gameboy CPU (LR35902) instruction set +

+ + + + + + + + + + + + + + + + + + + +
  x0  x1  x2  x3  x4  x5  x6  x7  x8  x9  xA  xB  xC  xD  xE  xF 
 0x NOP
1  4
- - - -
LD BC,d16
3  12
- - - -
LD (BC),A
1  8
- - - -
INC BC
1  8
- - - -
INC B
1  4
Z 0 H -
DEC B
1  4
Z 1 H -
LD B,d8
2  8
- - - -
RLCA
1  4
0 0 0 C
LD (a16),SP
3  20
- - - -
ADD HL,BC
1  8
- 0 H C
LD A,(BC)
1  8
- - - -
DEC BC
1  8
- - - -
INC C
1  4
Z 0 H -
DEC C
1  4
Z 1 H -
LD C,d8
2  8
- - - -
RRCA
1  4
0 0 0 C
 1x STOP 0
2  4
- - - -
LD DE,d16
3  12
- - - -
LD (DE),A
1  8
- - - -
INC DE
1  8
- - - -
INC D
1  4
Z 0 H -
DEC D
1  4
Z 1 H -
LD D,d8
2  8
- - - -
RLA
1  4
0 0 0 C
JR r8
2  12
- - - -
ADD HL,DE
1  8
- 0 H C
LD A,(DE)
1  8
- - - -
DEC DE
1  8
- - - -
INC E
1  4
Z 0 H -
DEC E
1  4
Z 1 H -
LD E,d8
2  8
- - - -
RRA
1  4
0 0 0 C
 2x JR NZ,r8
2  12/8
- - - -
LD HL,d16
3  12
- - - -
LD (HL+),A
1  8
- - - -
INC HL
1  8
- - - -
INC H
1  4
Z 0 H -
DEC H
1  4
Z 1 H -
LD H,d8
2  8
- - - -
DAA
1  4
Z - 0 C
JR Z,r8
2  12/8
- - - -
ADD HL,HL
1  8
- 0 H C
LD A,(HL+)
1  8
- - - -
DEC HL
1  8
- - - -
INC L
1  4
Z 0 H -
DEC L
1  4
Z 1 H -
LD L,d8
2  8
- - - -
CPL
1  4
- 1 1 -
 3x JR NC,r8
2  12/8
- - - -
LD SP,d16
3  12
- - - -
LD (HL-),A
1  8
- - - -
INC SP
1  8
- - - -
INC (HL)
1  12
Z 0 H -
DEC (HL)
1  12
Z 1 H -
LD (HL),d8
2  12
- - - -
SCF
1  4
- 0 0 1
JR C,r8
2  12/8
- - - -
ADD HL,SP
1  8
- 0 H C
LD A,(HL-)
1  8
- - - -
DEC SP
1  8
- - - -
INC A
1  4
Z 0 H -
DEC A
1  4
Z 1 H -
LD A,d8
2  8
- - - -
CCF
1  4
- 0 0 C
 4x LD B,B
1  4
- - - -
LD B,C
1  4
- - - -
LD B,D
1  4
- - - -
LD B,E
1  4
- - - -
LD B,H
1  4
- - - -
LD B,L
1  4
- - - -
LD B,(HL)
1  8
- - - -
LD B,A
1  4
- - - -
LD C,B
1  4
- - - -
LD C,C
1  4
- - - -
LD C,D
1  4
- - - -
LD C,E
1  4
- - - -
LD C,H
1  4
- - - -
LD C,L
1  4
- - - -
LD C,(HL)
1  8
- - - -
LD C,A
1  4
- - - -
 5x LD D,B
1  4
- - - -
LD D,C
1  4
- - - -
LD D,D
1  4
- - - -
LD D,E
1  4
- - - -
LD D,H
1  4
- - - -
LD D,L
1  4
- - - -
LD D,(HL)
1  8
- - - -
LD D,A
1  4
- - - -
LD E,B
1  4
- - - -
LD E,C
1  4
- - - -
LD E,D
1  4
- - - -
LD E,E
1  4
- - - -
LD E,H
1  4
- - - -
LD E,L
1  4
- - - -
LD E,(HL)
1  8
- - - -
LD E,A
1  4
- - - -
 6x LD H,B
1  4
- - - -
LD H,C
1  4
- - - -
LD H,D
1  4
- - - -
LD H,E
1  4
- - - -
LD H,H
1  4
- - - -
LD H,L
1  4
- - - -
LD H,(HL)
1  8
- - - -
LD H,A
1  4
- - - -
LD L,B
1  4
- - - -
LD L,C
1  4
- - - -
LD L,D
1  4
- - - -
LD L,E
1  4
- - - -
LD L,H
1  4
- - - -
LD L,L
1  4
- - - -
LD L,(HL)
1  8
- - - -
LD L,A
1  4
- - - -
 7x LD (HL),B
1  8
- - - -
LD (HL),C
1  8
- - - -
LD (HL),D
1  8
- - - -
LD (HL),E
1  8
- - - -
LD (HL),H
1  8
- - - -
LD (HL),L
1  8
- - - -
HALT
1  4
- - - -
LD (HL),A
1  8
- - - -
LD A,B
1  4
- - - -
LD A,C
1  4
- - - -
LD A,D
1  4
- - - -
LD A,E
1  4
- - - -
LD A,H
1  4
- - - -
LD A,L
1  4
- - - -
LD A,(HL)
1  8
- - - -
LD A,A
1  4
- - - -
 8x ADD A,B
1  4
Z 0 H C
ADD A,C
1  4
Z 0 H C
ADD A,D
1  4
Z 0 H C
ADD A,E
1  4
Z 0 H C
ADD A,H
1  4
Z 0 H C
ADD A,L
1  4
Z 0 H C
ADD A,(HL)
1  8
Z 0 H C
ADD A,A
1  4
Z 0 H C
ADC A,B
1  4
Z 0 H C
ADC A,C
1  4
Z 0 H C
ADC A,D
1  4
Z 0 H C
ADC A,E
1  4
Z 0 H C
ADC A,H
1  4
Z 0 H C
ADC A,L
1  4
Z 0 H C
ADC A,(HL)
1  8
Z 0 H C
ADC A,A
1  4
Z 0 H C
 9x SUB B
1  4
Z 1 H C
SUB C
1  4
Z 1 H C
SUB D
1  4
Z 1 H C
SUB E
1  4
Z 1 H C
SUB H
1  4
Z 1 H C
SUB L
1  4
Z 1 H C
SUB (HL)
1  8
Z 1 H C
SUB A
1  4
Z 1 H C
SBC A,B
1  4
Z 1 H C
SBC A,C
1  4
Z 1 H C
SBC A,D
1  4
Z 1 H C
SBC A,E
1  4
Z 1 H C
SBC A,H
1  4
Z 1 H C
SBC A,L
1  4
Z 1 H C
SBC A,(HL)
1  8
Z 1 H C
SBC A,A
1  4
Z 1 H C
 Ax AND B
1  4
Z 0 1 0
AND C
1  4
Z 0 1 0
AND D
1  4
Z 0 1 0
AND E
1  4
Z 0 1 0
AND H
1  4
Z 0 1 0
AND L
1  4
Z 0 1 0
AND (HL)
1  8
Z 0 1 0
AND A
1  4
Z 0 1 0
XOR B
1  4
Z 0 0 0
XOR C
1  4
Z 0 0 0
XOR D
1  4
Z 0 0 0
XOR E
1  4
Z 0 0 0
XOR H
1  4
Z 0 0 0
XOR L
1  4
Z 0 0 0
XOR (HL)
1  8
Z 0 0 0
XOR A
1  4
Z 0 0 0
 Bx OR B
1  4
Z 0 0 0
OR C
1  4
Z 0 0 0
OR D
1  4
Z 0 0 0
OR E
1  4
Z 0 0 0
OR H
1  4
Z 0 0 0
OR L
1  4
Z 0 0 0
OR (HL)
1  8
Z 0 0 0
OR A
1  4
Z 0 0 0
CP B
1  4
Z 1 H C
CP C
1  4
Z 1 H C
CP D
1  4
Z 1 H C
CP E
1  4
Z 1 H C
CP H
1  4
Z 1 H C
CP L
1  4
Z 1 H C
CP (HL)
1  8
Z 1 H C
CP A
1  4
Z 1 H C
 Cx RET NZ
1  20/8
- - - -
POP BC
1  12
- - - -
JP NZ,a16
3  16/12
- - - -
JP a16
3  16
- - - -
CALL NZ,a16
3  24/12
- - - -
PUSH BC
1  16
- - - -
ADD A,d8
2  8
Z 0 H C
RST 00H
1  16
- - - -
RET Z
1  20/8
- - - -
RET
1  16
- - - -
JP Z,a16
3  16/12
- - - -
PREFIX CB
1  4
- - - -
CALL Z,a16
3  24/12
- - - -
CALL a16
3  24
- - - -
ADC A,d8
2  8
Z 0 H C
RST 08H
1  16
- - - -
 Dx RET NC
1  20/8
- - - -
POP DE
1  12
- - - -
JP NC,a16
3  16/12
- - - -
 CALL NC,a16
3  24/12
- - - -
PUSH DE
1  16
- - - -
SUB d8
2  8
Z 1 H C
RST 10H
1  16
- - - -
RET C
1  20/8
- - - -
RETI
1  16
- - - -
JP C,a16
3  16/12
- - - -
 CALL C,a16
3  24/12
- - - -
 SBC A,d8
2  8
Z 1 H C
RST 18H
1  16
- - - -
 Ex LDH (a8),A
2  12
- - - -
POP HL
1  12
- - - -
LD (C),A
2  8
- - - -
  PUSH HL
1  16
- - - -
AND d8
2  8
Z 0 1 0
RST 20H
1  16
- - - -
ADD SP,r8
2  16
0 0 H C
JP (HL)
1  4
- - - -
LD (a16),A
3  16
- - - -
   XOR d8
2  8
Z 0 0 0
RST 28H
1  16
- - - -
 Fx LDH A,(a8)
2  12
- - - -
POP AF
1  12
Z N H C
LD A,(C)
2  8
- - - -
DI
1  4
- - - -
 PUSH AF
1  16
- - - -
OR d8
2  8
Z 0 0 0
RST 30H
1  16
- - - -
LD HL,SP+r8
2  12
0 0 H C
LD SP,HL
1  8
- - - -
LD A,(a16)
3  16
- - - -
EI
1  4
- - - -
  CP d8
2  8
Z 1 H C
RST 38H
1  16
- - - -
+

+ +Prefix CB +

+ + + + + + + + + + + + + + + + + + + + +
  x0  x1  x2  x3  x4  x5  x6  x7  x8  x9  xA  xB  xC  xD  xE  xF 
 0x RLC B
2  8
Z 0 0 C
RLC C
2  8
Z 0 0 C
RLC D
2  8
Z 0 0 C
RLC E
2  8
Z 0 0 C
RLC H
2  8
Z 0 0 C
RLC L
2  8
Z 0 0 C
RLC (HL)
2  16
Z 0 0 C
RLC A
2  8
Z 0 0 C
RRC B
2  8
Z 0 0 C
RRC C
2  8
Z 0 0 C
RRC D
2  8
Z 0 0 C
RRC E
2  8
Z 0 0 C
RRC H
2  8
Z 0 0 C
RRC L
2  8
Z 0 0 C
RRC (HL)
2  16
Z 0 0 C
RRC A
2  8
Z 0 0 C
 1x RL B
2  8
Z 0 0 C
RL C
2  8
Z 0 0 C
RL D
2  8
Z 0 0 C
RL E
2  8
Z 0 0 C
RL H
2  8
Z 0 0 C
RL L
2  8
Z 0 0 C
RL (HL)
2  16
Z 0 0 C
RL A
2  8
Z 0 0 C
RR B
2  8
Z 0 0 C
RR C
2  8
Z 0 0 C
RR D
2  8
Z 0 0 C
RR E
2  8
Z 0 0 C
RR H
2  8
Z 0 0 C
RR L
2  8
Z 0 0 C
RR (HL)
2  16
Z 0 0 C
RR A
2  8
Z 0 0 C
 2x SLA B
2  8
Z 0 0 C
SLA C
2  8
Z 0 0 C
SLA D
2  8
Z 0 0 C
SLA E
2  8
Z 0 0 C
SLA H
2  8
Z 0 0 C
SLA L
2  8
Z 0 0 C
SLA (HL)
2  16
Z 0 0 C
SLA A
2  8
Z 0 0 C
SRA B
2  8
Z 0 0 0
SRA C
2  8
Z 0 0 0
SRA D
2  8
Z 0 0 0
SRA E
2  8
Z 0 0 0
SRA H
2  8
Z 0 0 0
SRA L
2  8
Z 0 0 0
SRA (HL)
2  16
Z 0 0 0
SRA A
2  8
Z 0 0 0
 3x SWAP B
2  8
Z 0 0 0
SWAP C
2  8
Z 0 0 0
SWAP D
2  8
Z 0 0 0
SWAP E
2  8
Z 0 0 0
SWAP H
2  8
Z 0 0 0
SWAP L
2  8
Z 0 0 0
SWAP (HL)
2  16
Z 0 0 0
SWAP A
2  8
Z 0 0 0
SRL B
2  8
Z 0 0 C
SRL C
2  8
Z 0 0 C
SRL D
2  8
Z 0 0 C
SRL E
2  8
Z 0 0 C
SRL H
2  8
Z 0 0 C
SRL L
2  8
Z 0 0 C
SRL (HL)
2  16
Z 0 0 C
SRL A
2  8
Z 0 0 C
 4x BIT 0,B
2  8
Z 0 1 -
BIT 0,C
2  8
Z 0 1 -
BIT 0,D
2  8
Z 0 1 -
BIT 0,E
2  8
Z 0 1 -
BIT 0,H
2  8
Z 0 1 -
BIT 0,L
2  8
Z 0 1 -
BIT 0,(HL)
2  16
Z 0 1 -
BIT 0,A
2  8
Z 0 1 -
BIT 1,B
2  8
Z 0 1 -
BIT 1,C
2  8
Z 0 1 -
BIT 1,D
2  8
Z 0 1 -
BIT 1,E
2  8
Z 0 1 -
BIT 1,H
2  8
Z 0 1 -
BIT 1,L
2  8
Z 0 1 -
BIT 1,(HL)
2  16
Z 0 1 -
BIT 1,A
2  8
Z 0 1 -
 5x BIT 2,B
2  8
Z 0 1 -
BIT 2,C
2  8
Z 0 1 -
BIT 2,D
2  8
Z 0 1 -
BIT 2,E
2  8
Z 0 1 -
BIT 2,H
2  8
Z 0 1 -
BIT 2,L
2  8
Z 0 1 -
BIT 2,(HL)
2  16
Z 0 1 -
BIT 2,A
2  8
Z 0 1 -
BIT 3,B
2  8
Z 0 1 -
BIT 3,C
2  8
Z 0 1 -
BIT 3,D
2  8
Z 0 1 -
BIT 3,E
2  8
Z 0 1 -
BIT 3,H
2  8
Z 0 1 -
BIT 3,L
2  8
Z 0 1 -
BIT 3,(HL)
2  16
Z 0 1 -
BIT 3,A
2  8
Z 0 1 -
 6x BIT 4,B
2  8
Z 0 1 -
BIT 4,C
2  8
Z 0 1 -
BIT 4,D
2  8
Z 0 1 -
BIT 4,E
2  8
Z 0 1 -
BIT 4,H
2  8
Z 0 1 -
BIT 4,L
2  8
Z 0 1 -
BIT 4,(HL)
2  16
Z 0 1 -
BIT 4,A
2  8
Z 0 1 -
BIT 5,B
2  8
Z 0 1 -
BIT 5,C
2  8
Z 0 1 -
BIT 5,D
2  8
Z 0 1 -
BIT 5,E
2  8
Z 0 1 -
BIT 5,H
2  8
Z 0 1 -
BIT 5,L
2  8
Z 0 1 -
BIT 5,(HL)
2  16
Z 0 1 -
BIT 5,A
2  8
Z 0 1 -
 7x BIT 6,B
2  8
Z 0 1 -
BIT 6,C
2  8
Z 0 1 -
BIT 6,D
2  8
Z 0 1 -
BIT 6,E
2  8
Z 0 1 -
BIT 6,H
2  8
Z 0 1 -
BIT 6,L
2  8
Z 0 1 -
BIT 6,(HL)
2  16
Z 0 1 -
BIT 6,A
2  8
Z 0 1 -
BIT 7,B
2  8
Z 0 1 -
BIT 7,C
2  8
Z 0 1 -
BIT 7,D
2  8
Z 0 1 -
BIT 7,E
2  8
Z 0 1 -
BIT 7,H
2  8
Z 0 1 -
BIT 7,L
2  8
Z 0 1 -
BIT 7,(HL)
2  16
Z 0 1 -
BIT 7,A
2  8
Z 0 1 -
 8x RES 0,B
2  8
- - - -
RES 0,C
2  8
- - - -
RES 0,D
2  8
- - - -
RES 0,E
2  8
- - - -
RES 0,H
2  8
- - - -
RES 0,L
2  8
- - - -
RES 0,(HL)
2  16
- - - -
RES 0,A
2  8
- - - -
RES 1,B
2  8
- - - -
RES 1,C
2  8
- - - -
RES 1,D
2  8
- - - -
RES 1,E
2  8
- - - -
RES 1,H
2  8
- - - -
RES 1,L
2  8
- - - -
RES 1,(HL)
2  16
- - - -
RES 1,A
2  8
- - - -
 9x RES 2,B
2  8
- - - -
RES 2,C
2  8
- - - -
RES 2,D
2  8
- - - -
RES 2,E
2  8
- - - -
RES 2,H
2  8
- - - -
RES 2,L
2  8
- - - -
RES 2,(HL)
2  16
- - - -
RES 2,A
2  8
- - - -
RES 3,B
2  8
- - - -
RES 3,C
2  8
- - - -
RES 3,D
2  8
- - - -
RES 3,E
2  8
- - - -
RES 3,H
2  8
- - - -
RES 3,L
2  8
- - - -
RES 3,(HL)
2  16
- - - -
RES 3,A
2  8
- - - -
 Ax RES 4,B
2  8
- - - -
RES 4,C
2  8
- - - -
RES 4,D
2  8
- - - -
RES 4,E
2  8
- - - -
RES 4,H
2  8
- - - -
RES 4,L
2  8
- - - -
RES 4,(HL)
2  16
- - - -
RES 4,A
2  8
- - - -
RES 5,B
2  8
- - - -
RES 5,C
2  8
- - - -
RES 5,D
2  8
- - - -
RES 5,E
2  8
- - - -
RES 5,H
2  8
- - - -
RES 5,L
2  8
- - - -
RES 5,(HL)
2  16
- - - -
RES 5,A
2  8
- - - -
 Bx RES 6,B
2  8
- - - -
RES 6,C
2  8
- - - -
RES 6,D
2  8
- - - -
RES 6,E
2  8
- - - -
RES 6,H
2  8
- - - -
RES 6,L
2  8
- - - -
RES 6,(HL)
2  16
- - - -
RES 6,A
2  8
- - - -
RES 7,B
2  8
- - - -
RES 7,C
2  8
- - - -
RES 7,D
2  8
- - - -
RES 7,E
2  8
- - - -
RES 7,H
2  8
- - - -
RES 7,L
2  8
- - - -
RES 7,(HL)
2  16
- - - -
RES 7,A
2  8
- - - -
 Cx SET 0,B
2  8
- - - -
SET 0,C
2  8
- - - -
SET 0,D
2  8
- - - -
SET 0,E
2  8
- - - -
SET 0,H
2  8
- - - -
SET 0,L
2  8
- - - -
SET 0,(HL)
2  16
- - - -
SET 0,A
2  8
- - - -
SET 1,B
2  8
- - - -
SET 1,C
2  8
- - - -
SET 1,D
2  8
- - - -
SET 1,E
2  8
- - - -
SET 1,H
2  8
- - - -
SET 1,L
2  8
- - - -
SET 1,(HL)
2  16
- - - -
SET 1,A
2  8
- - - -
 Dx SET 2,B
2  8
- - - -
SET 2,C
2  8
- - - -
SET 2,D
2  8
- - - -
SET 2,E
2  8
- - - -
SET 2,H
2  8
- - - -
SET 2,L
2  8
- - - -
SET 2,(HL)
2  16
- - - -
SET 2,A
2  8
- - - -
SET 3,B
2  8
- - - -
SET 3,C
2  8
- - - -
SET 3,D
2  8
- - - -
SET 3,E
2  8
- - - -
SET 3,H
2  8
- - - -
SET 3,L
2  8
- - - -
SET 3,(HL)
2  16
- - - -
SET 3,A
2  8
- - - -
 Ex SET 4,B
2  8
- - - -
SET 4,C
2  8
- - - -
SET 4,D
2  8
- - - -
SET 4,E
2  8
- - - -
SET 4,H
2  8
- - - -
SET 4,L
2  8
- - - -
SET 4,(HL)
2  16
- - - -
SET 4,A
2  8
- - - -
SET 5,B
2  8
- - - -
SET 5,C
2  8
- - - -
SET 5,D
2  8
- - - -
SET 5,E
2  8
- - - -
SET 5,H
2  8
- - - -
SET 5,L
2  8
- - - -
SET 5,(HL)
2  16
- - - -
SET 5,A
2  8
- - - -
 Fx SET 6,B
2  8
- - - -
SET 6,C
2  8
- - - -
SET 6,D
2  8
- - - -
SET 6,E
2  8
- - - -
SET 6,H
2  8
- - - -
SET 6,L
2  8
- - - -
SET 6,(HL)
2  16
- - - -
SET 6,A
2  8
- - - -
SET 7,B
2  8
- - - -
SET 7,C
2  8
- - - -
SET 7,D
2  8
- - - -
SET 7,E
2  8
- - - -
SET 7,H
2  8
- - - -
SET 7,L
2  8
- - - -
SET 7,(HL)
2  16
- - - -
SET 7,A
2  8
- - - -
+

+ + + + + + + + + +
+ + + + + + + + +
       Misc/control instructions
       Jumps/calls
       8bit load/store/move instructions
       16bit load/store/move instructions
       8bit arithmetic/logical instructions
       16bit arithmetic/logical instructions
       8bit rotations/shifts and bit instructions
+
  + + + + + + + + +
 
Length in bytes →
 
 INS reg
2  8
Z N H C
 ← Instruction mnemonic
← Duration in cycles
← Flags affected
+
  + Duration of conditional calls and returns is different when action is taken or not. This is indicated by two numbers separated by "/". The higher number (on the left side of "/") means duration of instruction when action is taken, the lower number (on the right side of "/") means duration of instruction when action is not taken. +
+
+ + +
+Instruction STOP has according to manuals opcode 10 00 and thus is 2 bytes long. Anyhow it seems there is no reason for it so some assemblers code it simply as one byte instruction 10.
+Flags affected are always shown in Z H N C order. If flag is marked by "0" it means it is reset after the instruction. If it is marked by "1" it is set. If it is marked by "-" it is not changed. If it is marked by "Z", "N", "H" or "C" corresponding flag is affected as expected by its function.
+
+ +d8  means immediate 8 bit data
+d16 means immediate 16 bit data
+a8  means 8 bit unsigned data, which are added to $FF00 in certain instructions (replacement for missing IN and OUT instructions)
+a16 means 16 bit address
+r8  means 8 bit signed data, which are added to program counter
+
+LD A,(C) has alternative mnemonic LD A,($FF00+C)
+LD C,(A) has alternative mnemonic LD ($FF00+C),A
+LDH A,(a8) has alternative mnemonic LD A,($FF00+a8)
+LDH (a8),A has alternative mnemonic LD ($FF00+a8),A
+LD A,(HL+) has alternative mnemonic LD A,(HLI) or LDI A,(HL)
+LD (HL+),A has alternative mnemonic LD (HLI),A or LDI (HL),A
+LD A,(HL-) has alternative mnemonic LD A,(HLD) or LDD A,(HL)
+LD (HL-),A has alternative mnemonic LD (HLD),A or LDD (HL),A
+LD HL,SP+r8 has alternative mnemonic LDHL SP,r8 +
+

+Registers +

+ + + + + + +
+ + + + + + +
15  . . .  87  . . .  0
A (accumulator)F (flags)
BC
DE
HL
+
+ + + + +
15  . . .  0
SP (stack pointer)
PC (program counter)
+
  +Flag register (F) bits:

+ + + + + + + + + + + + + + + + + + + + + +
76543210
ZNHC0000
+
+Z - Zero Flag
+N - Subtract Flag
+H - Half Carry Flag
+C - Carry Flag
+0 - Not used, always zero
+
+ + + + + diff --git a/Dev Documentation/Pandocs.htm b/Dev Documentation/Pandocs.htm new file mode 100644 index 0000000..1112377 --- /dev/null +++ b/Dev Documentation/Pandocs.htm @@ -0,0 +1,2899 @@ + + Specifications + + +
 Pan Docs

+Overview
+
About the Pan Docs
+Game Boy Technical Data
+Memory Map
+
+I/O Ports
+
Video Display
+Sound Controller
+Joypad Input
+Serial Data Transfer (Link Cable)
+Timer and Divider Registers
+Interrupts
+CGB Registers
+SGB Functions
+
+CPU Specifications
+
CPU Registers and Flags
+CPU Instruction Set
+CPU Comparision with Z80
+
+Cartridges
+
The Cartridge Header
+Memory Bank Controllers
+Gamegenie/Shark Cheats
+
+Other
+
Power Up Sequence
+Reducing Power Consumption
+Sprite RAM Bug
+External Connectors
+
+
+
 About the Pan Docs

+
 =================================================================
+       Everything You Always Wanted To Know About GAMEBOY *
+ =================================================================
+

+
                     * but were afraid to ask
+

+
        Pan of -ATX- Document Updated by contributions from:
+     Marat Fayzullin, Pascal Felber, Paul Robson, Martin Korth
+             CPU, SGB, CGB, AUX specs by Martin Korth
+

+
                  Last updated 10/2001 by nocash
+               Previously updated 4-Mar-98 by kOOPa
+

+Forward
+
The following was typed up for informational purposes regarding the +inner workings on the hand-held game machine known as GameBoy, +manufactured and designed by Nintendo Co., LTD. This info is presented +to inform a user on how their Game Boy works and what makes it "tick". +GameBoy is copyrighted by Nintendo Co., LTD. Any reference to +copyrighted material is not presented for monetary gain, but for +educational purposes and higher learning.
+
+Available Document Formats
+
The present version of this document is available in Text and Html format:
+
  http://www.work.de/nocash/pandocs.txt
+  http://www.work.de/nocash/pandocs.htm
+
Also, a copy of this document is included in the manual of newer +versions of the no$gmb debugger, because of recent piracy attacks (many +thanks and best wishes go to hell) I have currently no intention to +publish any such or further no$gmb updates though.
+
+
+
 Game Boy Technical Data

+
  CPU          - 8-bit (Similar to the Z80 processor)
+  Clock Speed  - 4.194304MHz (4.295454MHz for SGB, max. 8.4MHz for CGB)
+  Work RAM     - 8K Byte (32K Byte for CGB)
+  Video RAM    - 8K Byte (16K Byte for CGB)
+  Screen Size  - 2.6"
+  Resolution   - 160x144 (20x18 tiles)
+  Max sprites  - Max 40 per screen, 10 per line
+  Sprite sizes - 8x8 or 8x16
+  Palettes     - 1x4 BG, 2x3 OBJ (for CGB: 8x4 BG, 8x3 OBJ)
+  Colors       - 4 grayshades (32768 colors for CGB)
+  Horiz Sync   - 9198 KHz (9420 KHz for SGB)
+  Vert Sync    - 59.73 Hz (61.17 Hz for SGB)
+  Sound        - 4 channels with stereo sound
+  Power        - DC6V 0.7W (DC3V 0.7W for GB Pocket, DC3V 0.6W for CGB)
+

+
+
 Memory Map

+The gameboy is having a 16bit address bus, that is used to address ROM, +RAM, and I/O registers.
+
+General Memory Map
+
  0000-3FFF   16KB ROM Bank 00     (in cartridge, fixed at bank 00)
+  4000-7FFF   16KB ROM Bank 01..NN (in cartridge, switchable bank number)
+  8000-9FFF   8KB Video RAM (VRAM) (switchable bank 0-1 in CGB Mode)
+  A000-BFFF   8KB External RAM     (in cartridge, switchable bank, if any)
+  C000-CFFF   4KB Work RAM Bank 0 (WRAM)
+  D000-DFFF   4KB Work RAM Bank 1 (WRAM)  (switchable bank 1-7 in CGB Mode)
+  E000-FDFF   Same as C000-DDFF (ECHO)    (typically not used)
+  FE00-FE9F   Sprite Attribute Table (OAM)
+  FEA0-FEFF   Not Usable
+  FF00-FF7F   I/O Ports
+  FF80-FFFE   High RAM (HRAM)
+  FFFF        Interrupt Enable Register
+

+Jump Vectors in First ROM Bank
+
The following addresses are supposed to be used as jump vectors:
+
  0000,0008,0010,0018,0020,0028,0030,0038   for RST commands
+  0040,0048,0050,0058,0060                  for Interrupts
+
However, the memory may be used for any other purpose in case that your +program doesn't use any (or only some) RST commands or Interrupts. RST +commands are 1-byte opcodes that work similiar to CALL opcodes, except +that the destination address is fixed.
+
+Cartridge Header in First ROM Bank
+
The memory at 0100-014F contains the cartridge header. This area +contains information about the program, its entry point, checksums, +information about the used MBC chip, the ROM and RAM sizes, etc. Most of +the bytes in this area are required to be specified correctly. For more +information read the chapter about The Cartridge Header.
+
+External Memory and Hardware
+
The areas from 0000-7FFF and A000-BFFF may be used to connect external +hardware. The first area is typically used to address ROM (read only, of +course), cartridges with Memory Bank Controllers (MBCs) are additionally +using this area to output data (write only) to the MBC chip. The second +area is often used to address external RAM, or to address other external +hardware (Real Time Clock, etc). External memory is often battery +buffered, and may hold saved game positions and high scrore tables +(etc.) even when the gameboy is turned of, or when the cartridge is +removed. For specific information read the chapter about Memory Bank +Controllers.
+
+
+
 Video Display

+Video I/O Registers
+
LCD Control Register
+LCD Status Register
+LCD Interrupts
+LCD Position and Scrolling
+LCD Monochrome Palettes
+LCD Color Palettes (CGB only)
+LCD VRAM Bank (CGB only)
+LCD OAM DMA Transfers
+LCD VRAM DMA Transfers (CGB only)
+
+Video Memory
+
VRAM Tile Data
+VRAM Background Maps
+VRAM Sprite Attribute Table (OAM)
+Accessing VRAM and OAM
+
+
+
 LCD Control Register

+FF40 - LCDC - LCD Control (R/W)
+
  Bit 7 - LCD Display Enable             (0=Off, 1=On)
+  Bit 6 - Window Tile Map Display Select (0=9800-9BFF, 1=9C00-9FFF)
+  Bit 5 - Window Display Enable          (0=Off, 1=On)
+  Bit 4 - BG & Window Tile Data Select   (0=8800-97FF, 1=8000-8FFF)
+  Bit 3 - BG Tile Map Display Select     (0=9800-9BFF, 1=9C00-9FFF)
+  Bit 2 - OBJ (Sprite) Size              (0=8x8, 1=8x16)
+  Bit 1 - OBJ (Sprite) Display Enable    (0=Off, 1=On)
+  Bit 0 - BG Display (for CGB see below) (0=Off, 1=On)
+

+LCDC.7 - LCD Display Enable
+
CAUTION: Stopping LCD operation (Bit 7 from 1 to 0) may be performed +during V-Blank ONLY, disabeling the display outside of the V-Blank +period may damage the hardware. This appears to be a serious issue, +Nintendo is reported to reject any games that do not follow this rule.
+V-blank can be confirmed when the value of LY is greater than or equal +to 144. When the display is disabled the screen is blank (white), and +VRAM and OAM can be accessed freely.
+
+--- LCDC.0 has different Meanings depending on Gameboy Type ---
+
+LCDC.0 - 1) Monochrome Gameboy and SGB: BG Display
+
When Bit 0 is cleared, the background becomes blank (white). Window and +Sprites may still be displayed (if enabled in Bit 1 and/or Bit 5).
+
+LCDC.0 - 2) CGB in CGB Mode: BG and Window Master Priority
+
When Bit 0 is cleared, the background and window lose their priority - +the sprites will be always displayed on top of background and window, +independently of the priority flags in OAM and BG Map attributes.
+
+LCDC.0 - 3) CGB in Non CGB Mode: BG and Window Display
+
When Bit 0 is cleared, both background and window become blank (white), +ie. the Window Display Bit (Bit 5) is ignored in that case. Only Sprites +may still be displayed (if enabled in Bit 1).
+This is a possible compatibility problem - any monochrome games (if any) +that disable the background, but still want to display the window +wouldn't work properly on CGBs.
+
+
+
 LCD Status Register

+FF41 - STAT - LCDC Status (R/W)
+
  Bit 6 - LYC=LY Coincidence Interrupt (1=Enable) (Read/Write)
+  Bit 5 - Mode 2 OAM Interrupt         (1=Enable) (Read/Write)
+  Bit 4 - Mode 1 V-Blank Interrupt     (1=Enable) (Read/Write)
+  Bit 3 - Mode 0 H-Blank Interrupt     (1=Enable) (Read/Write)
+  Bit 2 - Coincidence Flag  (0:LYC<>LY, 1:LYC=LY) (Read Only)
+  Bit 1-0 - Mode Flag       (Mode 0-3, see below) (Read Only)
+            0: During H-Blank
+            1: During V-Blank
+            2: During Searching OAM-RAM
+            3: During Transfering Data to LCD Driver
+

+The two lower STAT bits show the current status of the LCD controller.
+
  Mode 0: The LCD controller is in the H-Blank period and
+          the CPU can access both the display RAM (8000h-9FFFh)
+          and OAM (FE00h-FE9Fh)
+

+
  Mode 1: The LCD contoller is in the V-Blank period (or the
+          display is disabled) and the CPU can access both the
+          display RAM (8000h-9FFFh) and OAM (FE00h-FE9Fh)
+

+
  Mode 2: The LCD controller is reading from OAM memory.
+          The CPU <cannot> access OAM memory (FE00h-FE9Fh)
+          during this period.
+

+
  Mode 3: The LCD controller is reading from both OAM and VRAM,
+          The CPU <cannot> access OAM and VRAM during this period.
+          CGB Mode: Cannot access Palette Data (FF69,FF6B) either.
+

+The following are typical when the display is enabled:
+
  Mode 2  2_____2_____2_____2_____2_____2___________________2____
+  Mode 3  _33____33____33____33____33____33__________________3___
+  Mode 0  ___000___000___000___000___000___000________________000
+  Mode 1  ____________________________________11111111111111_____
+

+The Mode Flag goes through the values 0, 2, and 3 at a cycle of about +109uS. 0 is present about 48.6uS, 2 about 19uS, and 3 about 41uS. This +is interrupted every 16.6ms by the VBlank (1). The mode flag stays set +at 1 for about 1.08 ms.
+
+Mode 0 is present between 201-207 clks, 2 about 77-83 clks, and 3 about +169-175 clks. A complete cycle through these states takes 456 clks. +VBlank lasts 4560 clks. A complete screen refresh occurs every 70224 +clks.)
+
+
+
 LCD Interrupts

+INT 40 - V-Blank Interrupt
+
The V-Blank interrupt occurs ca. 59.7 times a second on a regular GB and +ca. 61.1 times a second on a Super GB (SGB). This interrupt occurs at +the beginning of the V-Blank period (LY=144).
+During this period video hardware is not using video ram so it may be +freely accessed. This period lasts approximately 1.1 milliseconds.
+
+INT 48 - LCDC Status Interrupt
+
There are various reasons for this interrupt to occur as described by +the STAT register ($FF40). One very popular reason is to indicate to the +user when the video hardware is about to redraw a given LCD line. This +can be useful for dynamically controlling the SCX/SCY registers +($FF43/$FF42) to perform special video effects.
+
+
+
 LCD Position and Scrolling

+FF42 - SCY - Scroll Y (R/W)
+FF43 - SCX - Scroll X (R/W)
+
Specifies the position in the 256x256 pixels BG map (32x32 tiles) which +is to be displayed at the upper/left LCD display position.
+Values in range from 0-255 may be used for X/Y each, the video +controller automatically wraps back to the upper (left) position in BG +map when drawing exceeds the lower (right) border of the BG map area.
+
+FF44 - LY - LCDC Y-Coordinate (R)
+
The LY indicates the vertical line to which the present data is +transferred to the LCD Driver. The LY can take on any value between 0 +through 153. The values between 144 and 153 indicate the V-Blank period. +Writing will reset the counter.
+
+FF45 - LYC - LY Compare (R/W)
+
The gameboy permanently compares the value of the LYC and LY registers. +When both values are identical, the coincident bit in the STAT register +becomes set, and (if enabled) a STAT interrupt is requested.
+
+FF4A - WY - Window Y Position (R/W)
+FF4B - WX - Window X Position minus 7 (R/W)
+
Specifies the upper/left positions of the Window area. (The window is an +alternate background area which can be displayed above of the normal +background. OBJs (sprites) may be still displayed above or behinf the +window, just as for normal BG.)
+The window becomes visible (if enabled) when positions are set in range +WX=0..166, WY=0..143. A postion of WX=7, WY=0 locates the window at +upper left, it is then completly covering normal background.
+
+
+
 LCD Monochrome Palettes

+FF47 - BGP - BG Palette Data (R/W) - Non CGB Mode Only
+
This register assigns gray shades to the color numbers of the BG and +Window tiles.
+
  Bit 7-6 - Shade for Color Number 3
+  Bit 5-4 - Shade for Color Number 2
+  Bit 3-2 - Shade for Color Number 1
+  Bit 1-0 - Shade for Color Number 0
+
The four possible gray shades are:
+
  0  White
+  1  Light gray
+  2  Dark gray
+  3  Black
+
In CGB Mode the Color Palettes are taken from CGB Palette Memory +instead.
+
+FF48 - OBP0 - Object Palette 0 Data (R/W) - Non CGB Mode Only
+
This register assigns gray shades for sprite palette 0. It works exactly +as BGP (FF47), except that the lower two bits aren't used because sprite +data 00 is transparent.
+
+FF49 - OBP1 - Object Palette 1 Data (R/W) - Non CGB Mode Only
+
This register assigns gray shades for sprite palette 1. It works exactly +as BGP (FF47), except that the lower two bits aren't used because sprite +data 00 is transparent.
+
+
+
 LCD Color Palettes (CGB only)

+FF68 - BCPS/BGPI - CGB Mode Only - Background Palette Index
+
This register is used to address a byte in the CGBs Background Palette +Memory. Each two byte in that memory define a color value. The first 8 +bytes define Color 0-3 of Palette 0 (BGP0), and so on for BGP1-7.
+
  Bit 0-5   Index (00-3F)
+  Bit 7     Auto Increment  (0=Disabled, 1=Increment after Writing)
+
Data can be read/written to/from the specified index address through +Register FF69. When the Auto Increment Bit is set then the index is +automatically incremented after each <write> to FF69. Auto Increment has +no effect when <reading> from FF69, so the index must be manually +incremented in that case.
+
+FF69 - BCPD/BGPD - CGB Mode Only - Background Palette Data
+
This register allows to read/write data to the CGBs Background Palette +Memory, addressed through Register FF68.
+Each color is defined by two bytes (Bit 0-7 in first byte).
+
  Bit 0-4   Red Intensity   (00-1F)
+  Bit 5-9   Green Intensity (00-1F)
+  Bit 10-14 Blue Intensity  (00-1F)
+
Much like VRAM, Data in Palette Memory cannot be read/written during the +time when the LCD Controller is reading from it. (That is when the STAT +register indicates Mode 3).
+Note: Initially all background colors are initialized as white.
+
+FF6A - OCPS/OBPI - CGB Mode Only - Sprite Palette Index
+FF6B - OCPD/OBPD - CGB Mode Only - Sprite Palette Data
+
These registers are used to initialize the Sprite Palettes OBP0-7, +identically as described above for Background Palettes. Note that four +colors may be defined for each OBP Palettes - but only Color 1-3 of each +Sprite Palette can be displayed, Color 0 is always transparent, and can +be initialized to a don't care value.
+Note: Initially all sprite colors are uninitialized.
+
+RGB Translation by CGBs
+
When developing graphics on PCs, note that the RGB values will have +different appearance on CGB displays as on VGA monitors:
+The highest intensity will produce Light Gray color rather than White. +The intensities are not linear; the values 10h-1Fh will all appear very +bright, while medium and darker colors are ranged at 00h-0Fh.
+The CGB display will mix colors quite oddly, increasing intensity of +only one R,G,B color will also influence the other two R,G,B colors.
+For example, a color setting of 03EFh (Blue=0, Green=1Fh, Red=0Fh) will +appear as Neon Green on VGA displays, but on the CGB it'll produce a +decently washed out Yellow.
+
+RGB Translation by GBAs
+
Even though GBA is described to be compatible to CGB games, most CGB +games are completely unplayable on GBAs because most colors are +invisible (black). Of course, colors such like Black and White will +appear the same on both CGB and GBA, but medium intensities are arranged +completely different.
+Intensities in range 00h..0Fh are invisible/black (unless eventually +under best sunlight circumstances, and when gazing at the screen under +obscure viewing angles), unfortunately, these intensities are regulary +used by most existing CGB games for medium and darker colors.
+Newer CGB games may avoid this effect by changing palette data when +detecting GBA hardware. A relative simple method would be using the +formula GBA=CGB/2+10h for each R,G,B intensity, probably the result +won't be perfect, and (once colors became visible) it may turn out that +the color mixing is different also, anyways, it'd be still ways better +than no conversion.
+Asides, this translation method should have been VERY easy to implement +in GBA hardware directly, even though Nintendo obviously failed to do +so. How did they say, This seal is your assurance for excellence in +workmanship and so on?
+
+
+
 LCD VRAM Bank (CGB only)

+FF4F - VBK - CGB Mode Only - VRAM Bank
+
This 1bit register selects the current Video Memory (VRAM) Bank.
+
  Bit 0 - VRAM Bank (0-1)
+
Bank 0 contains 192 Tiles, and two background maps, just as for +monochrome games. Bank 1 contains another 192 Tiles, and color attribute +maps for the background maps in bank 0.
+
+
+
 LCD OAM DMA Transfers

+FF46 - DMA - DMA Transfer and Start Address (W)
+
Writing to this register launches a DMA transfer from ROM or RAM to OAM +memory (sprite attribute table). The written value specifies the +transfer source address divided by 100h, ie. source & destination are:
+
  Source:      XX00-XX9F   ;XX in range from 00-F1h
+  Destination: FE00-FE9F
+
It takes 160 microseconds until the transfer has completed (80 +microseconds in CGB Double Speed Mode), during this time the CPU can +access only HRAM (memory at FF80-FFFE). For this reason, the programmer +must copy a short procedure into HRAM, and use this procedure to start +the transfer from inside HRAM, and wait until the transfer has finished:
+
   ld  (0FF46h),a ;start DMA transfer, a=start address/100h
+   ld  a,28h      ;delay...
+  wait:           ;total 5x40 cycles, approx 200ms
+   dec a          ;1 cycle
+   jr  nz,wait    ;4 cycles
+
Most programs are executing this procedure from inside of their VBlank +procedure, but it is possible to execute it during display redraw also, +allowing to display more than 40 sprites on the screen (ie. for example +40 sprites in upper half, and other 40 sprites in lower half of the +screen).
+
+
+
 LCD VRAM DMA Transfers (CGB only)

+FF51 - HDMA1 - CGB Mode Only - New DMA Source, High
+FF52 - HDMA2 - CGB Mode Only - New DMA Source, Low
+FF53 - HDMA3 - CGB Mode Only - New DMA Destination, High
+FF54 - HDMA4 - CGB Mode Only - New DMA Destination, Low
+FF55 - HDMA5 - CGB Mode Only - New DMA Length/Mode/Start
+
These registers are used to initiate a DMA transfer from ROM or RAM to +VRAM. The Source Start Address may be located at 0000-7FF0 or A000-DFF0, +the lower four bits of the address are ignored (treated as zero). The +Destination Start Address may be located at 8000-9FF0, the lower four +bits of the address are ignored (treated as zero), the upper 3 bits are +ignored either (destination is always in VRAM).
+
+Writing to FF55 starts the transfer, the lower 7 bits of FF55 specify +the Transfer Length (divided by 10h, minus 1). Ie. lengths of 10h-800h +bytes can be defined by the values 00h-7Fh. And the upper bit of FF55 +indicates the Transfer Mode:
+
+Bit7=0 - General Purpose DMA
+
When using this transfer method, all data is transferred at once. The +execution of the program is halted until the transfer has completed. +Note that the General Purpose DMA blindly attempts to copy the data, +even if the LCD controller is currently accessing VRAM. So General +Purpose DMA should be used only if the Display is disabled, or during +V-Blank, or (for rather short blocks) during H-Blank.
+The execution of the program continues when the transfer has been +completed, and FF55 then contains a value if FFh.
+
+Bit7=1 - H-Blank DMA
+
The H-Blank DMA transfers 10h bytes of data during each H-Blank, ie. at +LY=0-143, no data is transferred during V-Blank (LY=144-153), but the +transfer will then continue at LY=00. The execution of the program is +halted during the separate transfers, but the program execution +continues during the 'spaces' between each data block.
+Note that the program may not change the Destination VRAM bank (FF4F), +or the Source ROM/RAM bank (in case data is transferred from bankable +memory) until the transfer has completed!
+Reading from Register FF55 returns the remaining length (divided by 10h, +minus 1), a value of 0FFh indicates that the transfer has completed. It +is also possible to terminate an active H-Blank transfer by writing zero +to Bit 7 of FF55. In that case reading from FF55 may return any value +for the lower 7 bits, but Bit 7 will be read as "1".
+
+Confirming if the DMA Transfer is Active
+
Reading Bit 7 of FF55 can be used to confirm if the DMA transfer is +active (1=Not Active, 0=Active). This works under any circumstances - +after completion of General Purpose, or H-Blank Transfer, and after +manually terminating a H-Blank Transfer.
+
+Transfer Timings
+
In both Normal Speed and Double Speed Mode it takes about 8us to +transfer a block of 10h bytes. That are 8 cycles in Normal Speed Mode, +and 16 'fast' cycles in Double Speed Mode.
+Older MBC controllers (like MBC1-4) and slower ROMs are not guaranteed +to support General Purpose or H-Blank DMA, that's because there are +always 2 bytes transferred per microsecond (even if the itself program +runs it Normal Speed Mode).
+
+
+
 VRAM Tile Data

+Tile Data is stored in VRAM at addresses 8000h-97FFh, this area defines +the Bitmaps for 192 Tiles. In CGB Mode 384 Tiles can be defined, because +memory at 0:8000h-97FFh and at 1:8000h-97FFh is used.
+
+Each tile is sized 8x8 pixels and has a color depth of 4 colors/gray +shades. Tiles can be displayed as part of the Background/Window map, +and/or as OAM tiles (foreground sprites). Note that foreground sprites +may have only 3 colors, because color 0 is transparent.
+
+As it was said before, there are two Tile Pattern Tables at $8000-8FFF +and at $8800-97FF. The first one can be used for sprites and the +background. Its tiles are numbered from 0 to 255. The second table can +be used for the background and the window display and its tiles are +numbered from -128 to 127.
+
+Each Tile occupies 16 bytes, where each 2 bytes represent a line:
+
  Byte 0-1  First Line (Upper 8 pixels)
+  Byte 2-3  Next Line
+  etc.
+
For each line, the first byte defines the least significant bits of the +color numbers for each pixel, and the second byte defines the upper bits +of the color numbers. In either case, Bit 7 is the leftmost pixel, and +Bit 0 the rightmost.
+
+So, each pixel is having a color number in range from 0-3. The color +numbers are translated into real colors (or gray shades) depending on +the current palettes. The palettes are defined through registers +FF47-FF49 (Non CGB Mode), and FF68-FF6B (CGB Mode).
+
+
+
 VRAM Background Maps

+The gameboy contains two 32x32 tile background maps in VRAM at addresses +9800h-9BFFh and 9C00h-9FFFh. Each can be used either to display "normal" +background, or "window" background.
+
+BG Map Tile Numbers
+
An area of VRAM known as Background Tile Map contains the numbers of +tiles to be displayed. It is organized as 32 rows of 32 bytes each. Each +byte contains a number of a tile to be displayed. Tile patterns are +taken from the Tile Data Table located either at $8000-8FFF or +$8800-97FF. In the first case, patterns are numbered with unsigned +numbers from 0 to 255 (i.e. pattern #0 lies at address $8000). In the +second case, patterns have signed numbers from -128 to 127 (i.e. pattern +#0 lies at address $9000). The Tile Data Table address for the +background can be selected via LCDC register.
+
+BG Map Attributes (CGB Mode only)
+
In CGB Mode, an additional map of 32x32 bytes is stored in VRAM Bank 1 +(each byte defines attributes for the corresponding tile-number map +entry in VRAM Bank 0):
+
  Bit 0-2  Background Palette number  (BGP0-7)
+  Bit 3    Tile VRAM Bank number      (0=Bank 0, 1=Bank 1)
+  Bit 4    Not used
+  Bit 5    Horizontal Flip            (0=Normal, 1=Mirror horizontally)
+  Bit 6    Vertical Flip              (0=Normal, 1=Mirror vertically)
+  Bit 7    BG-to-OAM Priority         (0=Use OAM priority bit, 1=BG Priority)
+
When Bit 7 is set, the corresponding BG tile will have priority above +all OBJs (regardless of the priority bits in OAM memory). There's also +an Master Priority flag in LCDC register Bit 0 which overrides all other +priority bits when cleared.
+
+As one background tile has a size of 8x8 pixels, the BG maps may hold a +picture of 256x256 pixels, an area of 160x144 pixels of this picture can +be displayed on the LCD screen.
+
+Normal Background (BG)
+
The SCY and SCX registers can be used to scroll the background, allowing +to select the origin of the visible 160x144 pixel area within the total +256x256 pixel background map. Background wraps around the screen (i.e. +when part of it goes off the screen, it appears on the opposite side.)
+
+The Window
+
Besides background, there is also a "window" overlaying the background. +The window is not scrollable i.e. it is always displayed starting from +its left upper corner. The location of a window on the screen can be +adjusted via WX and WY registers. Screen coordinates of the top left +corner of a window are WX-7,WY. The tiles for the window are stored in +the Tile Data Table. Both the Background and the window share the same +Tile Data Table.
+
+Both background and window can be disabled or enabled separately via +bits in the LCDC register.
+
+
+
 VRAM Sprite Attribute Table (OAM)

+GameBoy video controller can display up to 40 sprites either in 8x8 or +in 8x16 pixels. Because of a limitation of hardware, only ten sprites +can be displayed per scan line. Sprite patterns have the same format as +BG tiles, but they are taken from the Sprite Pattern Table located at +$8000-8FFF and have unsigned numbering.
+
+Sprite attributes reside in the Sprite Attribute Table (OAM - Object +Attribute Memory) at $FE00-FE9F. Each of the 40 entries consists of four +bytes with the following meanings:
+
+Byte0 - Y Position
+
Specifies the sprites vertical position on the screen (minus 16).
+An offscreen value (for example, Y=0 or Y>=160) hides the sprite.
+
+Byte1 - X Position
+
Specifies the sprites horizontal position on the screen (minus 8).
+An offscreen value (X=0 or X>=168) hides the sprite, but the sprite
+still affects the priority ordering - a better way to hide a sprite is +to set its Y-coordinate offscreen.
+
+Byte2 - Tile/Pattern Number
+
Specifies the sprites Tile Number (00-FF). This (unsigned) value selects +a tile from memory at 8000h-8FFFh. In CGB Mode this could be either in +VRAM Bank 0 or 1, depending on Bit 3 of the following byte.
+In 8x16 mode, the lower bit of the tile number is ignored. Ie. the upper +8x8 tile is "NN AND FEh", and the lower 8x8 tile is "NN OR 01h".
+
+Byte3 - Attributes/Flags:
+
  Bit7   OBJ-to-BG Priority (0=OBJ Above BG, 1=OBJ Behind BG color 1-3)
+         (Used for both BG and Window. BG color 0 is always behind OBJ)
+  Bit6   Y flip          (0=Normal, 1=Vertically mirrored)
+  Bit5   X flip          (0=Normal, 1=Horizontally mirrored)
+  Bit4   Palette number  **Non CGB Mode Only** (0=OBP0, 1=OBP1)
+  Bit3   Tile VRAM-Bank  **CGB Mode Only**     (0=Bank 0, 1=Bank 1)
+  Bit2-0 Palette number  **CGB Mode Only**     (OBP0-7)
+

+Sprite Priorities and Conflicts
+
When sprites with different x coordinate values overlap, the one with +the smaller x coordinate (closer to the left) will have priority and +appear above any others. This applies in Non CGB Mode only.
+When sprites with the same x coordinate values overlap, they have +priority according to table ordering. (i.e. $FE00 - highest, $FE04 - +next highest, etc.) In CGB Mode priorities are always assigned like +this.
+
+Only 10 sprites can be displayed on any one line. When this limit is +exceeded, the lower priority sprites (priorities listed above) won't be +displayed. To keep unused sprites from affecting onscreen sprites set +their Y coordinate to Y=0 or Y=>144+16. Just setting the X coordinate to +X=0 or X=>160+8 on a sprite will hide it but it will still affect other +sprites sharing the same lines.
+
+Writing Data to OAM Memory
+
The recommened method is to write the data to normal RAM first, and to +copy that RAM to OAM by using the DMA transfer function, initiated +through DMA register (FF46).
+Beside for that, it is also possible to write data directly to the OAM +area by using normal LD commands, this works only during the H-Blank and +V-Blank periods. The current state of the LCD controller can be read out +from the STAT register (FF41).
+
+
+
 Accessing VRAM and OAM

+CAUTION
+
When the LCD Controller is drawing the screen it is directly reading +from Video Memory (VRAM) and from the Sprite Attribute Table (OAM). +During these periods the Gameboy CPU may not access the VRAM and OAM. +That means, any attempts to write to VRAM/OAM are ignored (the data +remains unchanged). And any attempts to read from VRAM/OAM will return +undefined data (typically a value of FFh).
+
+For this reason the program should verify if VRAM/OAM is accessable +before actually reading or writing to it. This is usually done by +reading the Mode Bits from the STAT Register (FF41). When doing this (as +described in the examples below) you should take care that no interrupts +occur between the wait loops and the following memory access - the +memory is guaranted to be accessable only for a few cycles directly +after the wait loops have completed.
+
+VRAM (memory at 8000h-9FFFh) is accessable during Mode 0-2
+
  Mode 0 - H-Blank Period,
+  Mode 1 - V-Blank Period, and
+  Mode 2 - Searching OAM Period
+
A typical procedure that waits for accessibility of VRAM would be:
+
  ld   hl,0FF41h    ;-STAT Register
+ @@wait:            ;\
+  bit  1,(hl)       ; Wait until Mode is 0 or 1
+  jr   nz,@@wait    ;/
+
Even if the procedure gets executed at the <end> of Mode 0 or 1, it is +still proof to assume that VRAM can be accessed for a few more cycles +because in either case the following period is Mode 2 which allows +access to VRAM either.
+In CGB Mode an alternate method to write data to VRAM is to use the HDMA +Function (FF51-FF55).
+
+OAM (memory at FE00h-FE9Fh) is accessable during Mode 0-1
+
  Mode 0 - H-Blank Period, and
+  Mode 1 - V-Blank Period
+
Beside for that, OAM can be accessed at any time by using the DMA +Function (FF46). When directly reading or writing to OAM, a typical +procedure that waits for accessibilty or OAM Memory would be:
+
  ld   hl,0FF41h    ;-STAT Register
+ @@wait1:           ;\
+  bit  1,(hl)       ; Wait until Mode is -NOT- 0 or 1
+  jr   z,@@wait1    ;/
+ @@wait2:           ;\
+  bit  1,(hl)       ; Wait until Mode 0 or 1 -BEGINS-
+  jr   nz,@@wait2   ;/
+
The two wait loops ensure that Mode 0 or 1 will last for a few clock +cycles after completion of the procedure. In V-Blank period it might be +recommended to skip the whole procedure - and in most cases using the +above mentioned DMA function would be more recommended anyways.
+
+Note
+
When the display is disabled, both VRAM and OAM are accessable at any +time. The downside is that the screen is blank (white) during this +period, so that disabling the display would be recommended only during +initialization.
+
+
+
 Sound Controller

+Sound Overview
+Sound Channel 1 - Tone & Sweep
+Sound Channel 2 - Tone
+Sound Channel 3 - Wave Output
+Sound Channel 4 - Noise
+Sound Control Registers
+
+
+
 Sound Overview

+There are two sound channels connected to the output terminals SO1 and +SO2. There is also a input terminal Vin connected to the cartridge. It +can be routed to either of both output terminals. GameBoy circuitry +allows producing sound in four different ways:
+
+
   Quadrangular wave patterns with sweep and envelope functions.
+   Quadrangular wave patterns with envelope functions.
+   Voluntary wave patterns from wave RAM.
+   White noise with an envelope function.
+

+These four sounds can be controlled independantly and then mixed +separately for each of the output terminals.
+
+Sound registers may be set at all times while producing sound.
+
+(Sounds will have a 2.4% higher frequency on Super GB.)
+
+
+
 Sound Channel 1 - Tone & Sweep

+FF10 - NR10 - Channel 1 Sweep register (R/W)
+
  Bit 6-4 - Sweep Time
+  Bit 3   - Sweep Increase/Decrease
+             0: Addition    (frequency increases)
+             1: Subtraction (frequency decreases)
+  Bit 2-0 - Number of sweep shift (n: 0-7)
+
Sweep Time:
+
  000: sweep off - no freq change
+  001: 7.8 ms  (1/128Hz)
+  010: 15.6 ms (2/128Hz)
+  011: 23.4 ms (3/128Hz)
+  100: 31.3 ms (4/128Hz)
+  101: 39.1 ms (5/128Hz)
+  110: 46.9 ms (6/128Hz)
+  111: 54.7 ms (7/128Hz)
+

+The change of frequency (NR13,NR14) at each shift is calculated by the +following formula where X(0) is initial freq & X(t-1) is last freq:
+
  X(t) = X(t-1) +/- X(t-1)/2^n
+

+FF11 - NR11 - Channel 1 Sound length/Wave pattern duty (R/W)
+
  Bit 7-6 - Wave Pattern Duty (Read/Write)
+  Bit 5-0 - Sound length data (Write Only) (t1: 0-63)
+
Wave Duty:
+
  00: 12.5% ( _-------_-------_------- )
+  01: 25%   ( __------__------__------ )
+  10: 50%   ( ____----____----____---- ) (normal)
+  11: 75%   ( ______--______--______-- )
+
Sound Length = (64-t1)*(1/256) seconds
+The Length value is used only if Bit 6 in NR14 is set.
+
+FF12 - NR12 - Channel 1 Volume Envelope (R/W)
+
  Bit 7-4 - Initial Volume of envelope (0-0Fh) (0=No Sound)
+  Bit 3   - Envelope Direction (0=Decrease, 1=Increase)
+  Bit 2-0 - Number of envelope sweep (n: 0-7)
+            (If zero, stop envelope operation.)
+
Length of 1 step = n*(1/64) seconds
+
+FF13 - NR13 - Channel 1 Frequency lo (Write Only)
+

+Lower 8 bits of 11 bit frequency (x).
+Next 3 bit are in NR14 ($FF14)
+
+FF14 - NR14 - Channel 1 Frequency hi (R/W)
+
  Bit 7   - Initial (1=Restart Sound)     (Write Only)
+  Bit 6   - Counter/consecutive selection (Read/Write)
+            (1=Stop output when length in NR11 expires)
+  Bit 2-0 - Frequency's higher 3 bits (x) (Write Only)
+
Frequency = 131072/(2048-x) Hz
+
+
+
 Sound Channel 2 - Tone

+This sound channel works exactly as channel 1, except that it doesn't +have a Tone Envelope/Sweep Register.
+
+FF16 - NR21 - Channel 2 Sound Length/Wave Pattern Duty (R/W)
+
  Bit 7-6 - Wave Pattern Duty (Read/Write)
+  Bit 5-0 - Sound length data (Write Only) (t1: 0-63)
+
Wave Duty:
+
  00: 12.5% ( _-------_-------_------- )
+  01: 25%   ( __------__------__------ )
+  10: 50%   ( ____----____----____---- ) (normal)
+  11: 75%   ( ______--______--______-- )
+
Sound Length = (64-t1)*(1/256) seconds
+The Length value is used only if Bit 6 in NR24 is set.
+
+FF17 - NR22 - Channel 2 Volume Envelope (R/W)
+
  Bit 7-4 - Initial Volume of envelope (0-0Fh) (0=No Sound)
+  Bit 3   - Envelope Direction (0=Decrease, 1=Increase)
+  Bit 2-0 - Number of envelope sweep (n: 0-7)
+            (If zero, stop envelope operation.)
+
Length of 1 step = n*(1/64) seconds
+
+FF18 - NR23 - Channel 2 Frequency lo data (W)
+
Frequency's lower 8 bits of 11 bit data (x).
+Next 3 bits are in NR24 ($FF19).
+
+FF19 - NR24 - Channel 2 Frequency hi data (R/W)
+
  Bit 7   - Initial (1=Restart Sound)     (Write Only)
+  Bit 6   - Counter/consecutive selection (Read/Write)
+            (1=Stop output when length in NR21 expires)
+  Bit 2-0 - Frequency's higher 3 bits (x) (Write Only)
+
Frequency = 131072/(2048-x) Hz
+
+
+
 Sound Channel 3 - Wave Output

+This channel can be used to output digital sound, the length of the +sample buffer (Wave RAM) is limited to 32 digits. This sound channel can +be also used to output normal tones when initializing the Wave RAM by a +square wave. This channel doesn't have a volume envelope register.
+
+FF1A - NR30 - Channel 3 Sound on/off (R/W)
+
  Bit 7 - Sound Channel 3 Off  (0=Stop, 1=Playback)  (Read/Write)
+

+FF1B - NR31 - Channel 3 Sound Length
+
  Bit 7-0 - Sound length (t1: 0 - 255)
+
Sound Length = (256-t1)*(1/256) seconds
+This value is used only if Bit 6 in NR34 is set.
+
+FF1C - NR32 - Channel 3 Select output level (R/W)
+
  Bit 6-5 - Select output level (Read/Write)
+
Possible Output levels are:
+
  0: Mute (No sound)
+  1: 100% Volume (Produce Wave Pattern RAM Data as it is)
+  2:  50% Volume (Produce Wave Pattern RAM data shifted once to the right)
+  3:  25% Volume (Produce Wave Pattern RAM data shifted twice to the right)
+

+FF1D - NR33 - Channel 3 Frequency's lower data (W)
+
Lower 8 bits of an 11 bit frequency (x).
+
+FF1E - NR34 - Channel 3 Frequency's higher data (R/W)
+
  Bit 7   - Initial (1=Restart Sound)     (Write Only)
+  Bit 6   - Counter/consecutive selection (Read/Write)
+            (1=Stop output when length in NR31 expires)
+  Bit 2-0 - Frequency's higher 3 bits (x) (Write Only)
+
Frequency = 4194304/(64*(2048-x)) Hz = 65536/(2048-x) Hz
+
+FF30-FF3F - Wave Pattern RAM
+
Contents - Waveform storage for arbitrary sound data
+
+This storage area holds 32 4-bit samples that are played back upper 4 +bits first.
+
+
+
 Sound Channel 4 - Noise

+This channel is used to output white noise. This is done by randomly +switching the amplitude between high and low at a given frequency. +Depending on the frequency the noise will appear 'harder' or 'softer'.
+
+It is also possible to influence the function of the random generator, +so the that the output becomes more regular, resulting in a limited +ability to output Tone instead of Noise.
+
+FF20 - NR41 - Channel 4 Sound Length (R/W)
+
  Bit 5-0 - Sound length data (t1: 0-63)
+
Sound Length = (64-t1)*(1/256) seconds
+The Length value is used only if Bit 6 in NR44 is set.
+
+FF21 - NR42 - Channel 4 Volume Envelope (R/W)
+
  Bit 7-4 - Initial Volume of envelope (0-0Fh) (0=No Sound)
+  Bit 3   - Envelope Direction (0=Decrease, 1=Increase)
+  Bit 2-0 - Number of envelope sweep (n: 0-7)
+            (If zero, stop envelope operation.)
+
Length of 1 step = n*(1/64) seconds
+
+FF22 - NR43 - Channel 4 Polynomial Counter (R/W)
+
The amplitude is randomly switched between high and low at the given +frequency. A higher frequency will make the noise to appear 'softer'.
+When Bit 3 is set, the output will become more regular, and some +frequencies will sound more like Tone than Noise.
+
  Bit 7-4 - Shift Clock Frequency (s)
+  Bit 3   - Counter Step/Width (0=15 bits, 1=7 bits)
+  Bit 2-0 - Dividing Ratio of Frequencies (r)
+
Frequency = 524288 Hz / r / 2^(s+1) ;For r=0 assume r=0.5 instead
+
+FF23 - NR44 - Channel 4 Counter/consecutive; Inital (R/W)
+
  Bit 7   - Initial (1=Restart Sound)     (Write Only)
+  Bit 6   - Counter/consecutive selection (Read/Write)
+            (1=Stop output when length in NR41 expires)
+

+
+
 Sound Control Registers

+FF24 - NR50 - Channel control / ON-OFF / Volume (R/W)
+
The volume bits specify the "Master Volume" for Left/Right sound output.
+
  Bit 7   - Output Vin to SO2 terminal (1=Enable)
+  Bit 6-4 - SO2 output level (volume)  (0-7)
+  Bit 3   - Output Vin to SO1 terminal (1=Enable)
+  Bit 2-0 - SO1 output level (volume)  (0-7)
+
The Vin signal is received from the game cartridge bus, allowing +external hardware in the cartridge to supply a fifth sound channel, +additionally to the gameboys internal four channels. As far as I know +this feature isn't used by any existing games.
+
+FF25 - NR51 - Selection of Sound output terminal (R/W)
+
  Bit 7 - Output sound 4 to SO2 terminal
+  Bit 6 - Output sound 3 to SO2 terminal
+  Bit 5 - Output sound 2 to SO2 terminal
+  Bit 4 - Output sound 1 to SO2 terminal
+  Bit 3 - Output sound 4 to SO1 terminal
+  Bit 2 - Output sound 3 to SO1 terminal
+  Bit 1 - Output sound 2 to SO1 terminal
+  Bit 0 - Output sound 1 to SO1 terminal
+

+FF26 - NR52 - Sound on/off
+
If your GB programs don't use sound then write 00h to this register to +save 16% or more on GB power consumption. Disabeling the sound +controller by clearing Bit 7 destroys the contents of all sound +registers. Also, it is not possible to access any sound registers +(execpt FF26) while the sound controller is disabled.
+
  Bit 7 - All sound on/off  (0: stop all sound circuits) (Read/Write)
+  Bit 3 - Sound 4 ON flag (Read Only)
+  Bit 2 - Sound 3 ON flag (Read Only)
+  Bit 1 - Sound 2 ON flag (Read Only)
+  Bit 0 - Sound 1 ON flag (Read Only)
+
Bits 0-3 of this register are read only status bits, writing to these +bits does NOT enable/disable sound. The flags get set when sound output +is restarted by setting the Initial flag (Bit 7 in NR14-NR44), the flag +remains set until the sound length has expired (if enabled). A volume +envelopes which has decreased to zero volume will NOT cause the sound +flag to go off.
+
+
+
 Joypad Input

+FF00 - P1/JOYP - Joypad (R/W)
+
The eight gameboy buttons/direction keys are arranged in form of a 2x4 +matrix. Select either button or direction keys by writing to this +register, then read-out bit 0-3.
+
  Bit 7 - Not used
+  Bit 6 - Not used
+  Bit 5 - P15 Select Button Keys      (0=Select)
+  Bit 4 - P14 Select Direction Keys   (0=Select)
+  Bit 3 - P13 Input Down  or Start    (0=Pressed) (Read Only)
+  Bit 2 - P12 Input Up    or Select   (0=Pressed) (Read Only)
+  Bit 1 - P11 Input Left  or Button B (0=Pressed) (Read Only)
+  Bit 0 - P10 Input Right or Button A (0=Pressed) (Read Only)
+
Note: Most programs are repeatedly reading from this port several times +(the first reads used as short delay, allowing the inputs to stabilize, +and only the value from the last read actually used).
+
+Usage in SGB software
+
Beside for normal joypad input, SGB games mis-use the joypad register to +output SGB command packets to the SNES, also, SGB programs may read out +gamepad states from up to four different joypads which can be connected +to the SNES.
+See SGB description for details.
+
+INT 60 - Joypad Interrupt
+
Joypad interrupt is requested when any of the above Input lines changes +from High to Low. Generally this should happen when a key becomes +pressed (provided that the button/direction key is enabled by above +Bit4/5), however, because of switch bounce, one or more High to Low +transitions are usually produced both when pressing or releasing a key.
+
+Using the Joypad Interrupt
+
It's more or less useless for programmers, even when selecting both +buttons and direction keys simultaneously it still cannot recognize all +keystrokes, because in that case a bit might be already held low by a +button key, and pressing the corresponding direction key would thus +cause no difference. The only meaningful purpose of the keystroke +interrupt would be to terminate STOP (low power) standby state.
+Also, the joypad interrupt does not appear to work with CGB and GBA +hardware (the STOP function can be still terminated by joypad keystrokes +though).
+
+
+
 Serial Data Transfer (Link Cable)

+FF01 - SB - Serial transfer data (R/W)
+
8 Bits of data to be read/written
+
+FF02 - SC - Serial Transfer Control (R/W)
+
  Bit 7 - Transfer Start Flag (0=No Transfer, 1=Start)
+  Bit 1 - Clock Speed (0=Normal, 1=Fast) ** CGB Mode Only **
+  Bit 0 - Shift Clock (0=External Clock, 1=Internal Clock)
+
The clock signal specifies the rate at which the eight data bits in SB +(FF01) are transferred. When the gameboy is communicating with another +gameboy (or other computer) then either one must supply internal clock, +and the other one must use external clock.
+
+Internal Clock
+
In Non-CGB Mode the gameboy supplies an internal clock of 8192Hz only +(allowing to transfer about 1 KByte per second). In CGB Mode four +internal clock rates are available, depending on Bit 1 of the SC +register, and on whether the CGB Double Speed Mode is used:
+
    8192Hz -  1KB/s - Bit 1 cleared, Normal
+   16384Hz -  2KB/s - Bit 1 cleared, Double Speed Mode
+  262144Hz - 32KB/s - Bit 1 set,     Normal
+  524288Hz - 64KB/s - Bit 1 set,     Double Speed Mode
+

+External Clock
+
The external clock is typically supplied by another gameboy, but might +be supplied by another computer (for example if connected to a PCs +parallel port), in that case the external clock may have any speed. Even +the old/monochrome gameboy is reported to recognizes external clocks of +up to 500KHz. And there is no limitiation into the other direction - +even when suppling an external clock speed of "1 bit per month", then +the gameboy will still eagerly wait for the next bit(s) to be +transferred. It isn't required that the clock pulses are sent at an +regular interval either.
+
+Timeouts
+
When using external clock then the transfer will not complete until the +last bit is received. In case that the second gameboy isn't supplying a +clock signal, if it gets turned off, or if there is no second gameboy +connected at all) then transfer will never complete. For this reason the +transfer procedure should use a timeout counter, and abort the +communication if no response has been received during the timeout +interval.
+
+Delays and Synchronization
+
The gameboy that is using internal clock should always execute a small +delay between each transfer, in order to ensure that the opponent +gameboy has enough time to prepare itself for the next transfer, ie. the +gameboy with external clock must have set its transfer start bit before +the gameboy with internal clock starts the transfer. Alternately, the +two gameboys could switch between internal and external clock for each +transferred byte to ensure synchronization.
+
+Transfer is initiated by setting the Transfer Start Flag. This bit is +automatically set to 0 at the end of Transfer. Reading this bit can be +used to determine if the transfer is still active.
+
+INT 58 - Serial Interrupt
+
When the transfer has completed (ie. after sending/receiving 8 bits, if +any) then an interrupt is requested by setting Bit 3 of the IF Register +(FF0F). When that interrupt is enabled, then the Serial Interrupt vector +at 0058 is called.
+
+XXXXXX...
+

+Transmitting and receiving serial data is done simultaneously. The +received data is automatically stored in SB.
+
+The serial I/O port on the Gameboy is a very simple setup and is crude +compared to standard RS-232 (IBM-PC) or RS-485 (Macintosh) serial ports. +There are no start or stop bits.
+
+During a transfer, a byte is shifted in at the same time that a byte is +shifted out. The rate of the shift is determined by whether the clock +source is internal or external.
+The most significant bit is shifted in and out first.
+
+When the internal clock is selected, it drives the clock pin on the game +link port and it stays high when not used. During a transfer it will go +low eight times to clock in/out each bit.
+
+The state of the last bit shifted out determines the state of the output +line until another transfer takes place.
+
+If a serial transfer with internal clock is performed and no external +GameBoy is present, a value of $FF will be received in the transfer.
+
+The following code causes $75 to be shifted out the serial port and a +byte to be shifted into $FF01:
+
+
    ld   a,$75
+    ld  ($FF01),a
+    ld   a,$81
+    ld  ($FF02),a
+

+
+
 Timer and Divider Registers

+FF04 - DIV - Divider Register (R/W)
+
This register is incremented at rate of 16384Hz (~16779Hz on SGB). In +CGB Double Speed Mode it is incremented twice as fast, ie. at 32768Hz. +Writing any value to this register resets it to 00h.
+
+FF05 - TIMA - Timer counter (R/W)
+
This timer is incremented by a clock frequency specified by the TAC +register ($FF07). When the value overflows (gets bigger than FFh) then +it will be reset to the value specified in TMA (FF06), and an interrupt +will be requested, as described below.
+
+FF06 - TMA - Timer Modulo (R/W)
+
When the TIMA overflows, this data will be loaded.
+
+FF07 - TAC - Timer Control (R/W)
+
  Bit 2    - Timer Stop  (0=Stop, 1=Start)
+  Bits 1-0 - Input Clock Select
+             00:   4096 Hz    (~4194 Hz SGB)
+             01: 262144 Hz  (~268400 Hz SGB)
+             10:  65536 Hz   (~67110 Hz SGB)
+             11:  16384 Hz   (~16780 Hz SGB)
+

+INT 50 - Timer Interrupt
+
Each time when the timer overflows (ie. when TIMA gets bigger than FFh), +then an interrupt is requested by setting Bit 2 in the IF Register +(FF0F). When that interrupt is enabled, then the CPU will execute it by +calling the timer interrupt vector at 0050h.
+
+Note
+
The above described Timer is the built-in timer in the gameboy. It has +nothing to do with the MBC3s battery buffered Real Time Clock - that's a +completely different thing, described in the chapter about Memory +Banking Controllers.
+
+
+
 Interrupts

+IME - Interrupt Master Enable Flag (Write Only)
+
  0 - Disable all Interrupts
+  1 - Enable all Interrupts that are enabled in IE Register (FFFF)
+
The IME flag is used to disable all interrupts, overriding any enabled +bits in the IE Register. It isn't possible to access the IME flag by +using a I/O address, instead IME is accessed directly from the CPU, by +the following opcodes/operations:
+
  EI     ;Enable Interrupts  (ie. IME=1)
+  DI     ;Disable Interrupts (ie. IME=0)
+  RETI   ;Enable Ints & Return (same as the opcode combination EI, RET)
+  <INT>  ;Disable Ints & Call to Interrupt Vector
+
Whereas <INT> means the operation which is automatically executed by the +CPU when it executes an interrupt.
+
+FFFF - IE - Interrupt Enable (R/W)
+
  Bit 0: V-Blank  Interrupt Enable  (INT 40h)  (1=Enable)
+  Bit 1: LCD STAT Interrupt Enable  (INT 48h)  (1=Enable)
+  Bit 2: Timer    Interrupt Enable  (INT 50h)  (1=Enable)
+  Bit 3: Serial   Interrupt Enable  (INT 58h)  (1=Enable)
+  Bit 4: Joypad   Interrupt Enable  (INT 60h)  (1=Enable)
+

+FF0F - IF - Interrupt Flag (R/W)
+
  Bit 0: V-Blank  Interrupt Request (INT 40h)  (1=Request)
+  Bit 1: LCD STAT Interrupt Request (INT 48h)  (1=Request)
+  Bit 2: Timer    Interrupt Request (INT 50h)  (1=Request)
+  Bit 3: Serial   Interrupt Request (INT 58h)  (1=Request)
+  Bit 4: Joypad   Interrupt Request (INT 60h)  (1=Request)
+
When an interrupt signal changes from low to high, then the +corresponding bit in the IF register becomes set. For example, Bit 0 +becomes set when the LCD controller enters into the V-Blank period.
+
+Interrupt Requests
+
Any set bits in the IF register are only <requesting> an interrupt to be +executed. The actual <execution> happens only if both the IME flag, and +the corresponding bit in the IE register are set, otherwise the +interrupt 'waits' until both IME and IE allow its execution.
+
+Interrupt Execution
+
When an interrupt gets executed, the corresponding bit in the IF +register becomes automatically reset by the CPU, and the IME flag +becomes cleared (disabeling any further interrupts until the program +re-enables the interrupts, typically by using the RETI instruction), and +the corresponding Interrupt Vector (that are the addresses in range +0040h-0060h, as shown in IE and IF register decriptions above) becomes +called.
+
+Manually Requesting/Discarding Interrupts
+
As the CPU automatically sets and cleares the bits in the IF register it +is usually not required to write to the IF register. However, the user +may still do that in order to manually request (or discard) interrupts. +As for real interrupts, a manually requested interrupt isn't executed +unless/until IME and IE allow its execution.
+
+Interrupt Priorities
+
In the following three situations it might happen that more than 1 bit +in the IF register are set, requesting more than one interrupt at once:
+
  1) More than one interrupt signal changed from Low
+     to High at the same time.
+  2) Several interrupts have been requested during a
+     time in which IME/IE didn't allow these interrupts
+     to be executed directly.
+  3) The user has written a value with several "1" bits
+     (for example 1Fh) to the IF register.
+
Provided that IME and IE allow the execution of more than one of the +requested interrupts, then the interrupt with the highest priority +becomes executed first. The priorities are ordered as the bits in the IE +and IF registers, Bit 0 (V-Blank) having the highest priority, and Bit 4 +(Joypad) having the lowest priority.
+
+Nested Interrupts
+
The CPU automatically disables all other interrupts by setting IME=0 +when it executes an interrupt. Usually IME remains zero until the +interrupt procedure returns (and sets IME=1 by the RETI instruction). +However, if you want any other interrupts of lower or higher (or same) +priority to be allowed to be executed from inside of the interrupt +procedure, then you can place an EI instruction into the interrupt +procedure.
+
+
+
 CGB Registers

+Forward
+
This chapter describes only CGB (Color Gameboy) registers that didn't +fit into normal categories - most CGB registers are described in the +chapter about Video Display (Color Palettes, VRAM Bank, VRAM DMA +Transfers, and changed meaning of Bit 0 of LCDC Control register). Also, +a changed bit is noted in the chapter about the Serial/Link port.
+
+Unlocking CGB functions
+
When using any CGB registers (including those in the Video/Link +chapters), you must first unlock CGB features by changing byte 0143h in +the cartridge header. Typically use a value of 80h for games which +support both CGB and monochrome gameboys, and C0h for games which work +on CGBs only. Otherwise, the CGB will operate in monochrome "Non CGB" +compatibility mode.
+
+Detecting CGB (and GBA) functions
+
CGB hardware can be detected by examing the CPU accumulator (A-register) +directly after startup. A value of 11h indicates CGB (or GBA) hardware, +if so, CGB functions can be used (if unlocked, see above).
+When A=11h, you may also examine Bit 0 of the CPUs B-Register to +separate between CGB (bit cleared) and GBA (bit set), by that detection +it is possible to use 'repaired' color palette data matching for GBA +displays.
+
+FF4D - KEY1 - CGB Mode Only - Prepare Speed Switch
+
  Bit 7: Current Speed     (0=Normal, 1=Double) (Read Only)
+  Bit 0: Prepare Speed Switch (0=No, 1=Prepare) (Read/Write)
+
This register is used to prepare the gameboy to switch between CGB +Double Speed Mode and Normal Speed Mode. The actual speed switch is +performed by executing a STOP command after Bit 0 has been set. After +that Bit 0 will be cleared automatically, and the gameboy will operate +at the 'other' speed. The recommended speed switching procedure in +pseudo code would be:
+
  IF KEY1_BIT7 <> DESIRED_SPEED THEN
+    IE=00H       ;(FFFF)=00h
+    JOYP=30H     ;(FF00)=30h
+    KEY1=01H     ;(FF4D)=01h
+    STOP         ;STOP
+  ENDIF
+
The CGB is operating in Normal Speed Mode when it is turned on. Note +that using the Double Speed Mode increases the power consumption, it +would be recommended to use Single Speed whenever possible. However, the +display will flicker (white) for a moment during speed switches, so this +cannot be done permanentely.
+In Double Speed Mode the following will operate twice as fast as normal:
+
  The CPU (2.10 MHz, 1 Cycle = approx. 0.5us)
+  Timer and Divider Registers
+  Serial Port (Link Cable)
+  DMA Transfer to OAM
+
And the following will keep operating as usual:
+
  LCD Video Controller
+  HDMA Transfer to VRAM
+  All Sound Timings and Frequencies
+

+FF56 - RP - CGB Mode Only - Infrared Communications Port
+
This register allows to input and output data through the CGBs built-in +Infrared Port. When reading data, bit 6 and 7 must be set (and obviously +Bit 0 must be cleared - if you don't want to receive your own gameboys +IR signal). After sending or receiving data you should reset the +register to 00h to reduce battery power consumption again.
+
  Bit 0:   Write Data   (0=LED Off, 1=LED On)             (Read/Write)
+  Bit 1:   Read Data    (0=Receiving IR Signal, 1=Normal) (Read Only)
+  Bit 6-7: Data Read Enable (0=Disable, 3=Enable)         (Read/Write)
+
Note that the receiver will adapt itself to the normal level of IR +pollution in the air, so if you would send a LED ON signal for a longer +period, then the receiver would treat that as normal (=OFF) after a +while. For example, a Philips TV Remote Control sends a series of 32 LED +ON/OFF pulses (length 10us ON, 17.5us OFF each) instead of a permanent +880us LED ON signal.
+Even though being generally CGB compatible, the GBA does not include an +infra-red port.
+
+FF70 - SVBK - CGB Mode Only - WRAM Bank
+
In CGB Mode 32 KBytes internal RAM are available. This memory is divided +into 8 banks of 4 KBytes each. Bank 0 is always available in memory at +C000-CFFF, Bank 1-7 can be selected into the address space at D000-DFFF.
+
  Bit 0-2  Select WRAM Bank (Read/Write)
+
Writing a value of 01h-07h will select Bank 1-7, writing a value of 00h +will select Bank 1 either.
+
+FF6C - Undocumented (FEh) - Bit 0 (Read/Write) - CGB Mode Only
+FF72 - Undocumented (00h) - Bit 0-7 (Read/Write)
+FF73 - Undocumented (00h) - Bit 0-7 (Read/Write)
+FF74 - Undocumented (00h) - Bit 0-7 (Read/Write) - CGB Mode Only
+FF75 - Undocumented (8Fh) - Bit 4-6 (Read/Write)
+FF76 - Undocumented (00h) - Always 00h (Read Only)
+FF77 - Undocumented (00h) - Always 00h (Read Only)
+
These are undocumented CGB Registers. The numbers in brackets () +indicate the initial values. Purpose of these registers is unknown (if +any). Registers FF6C and FF74 are always FFh if the CGB is in Non CGB +Mode.
+
+
+
 SGB Functions

+General Information
+
SGB Description
+SGB Unlocking and Detecting SGB Functions
+SGB Command Packet Transfers
+SGB VRAM Transfers
+SGB Command Summary
+SGB Color Palettes Overview
+
+SGB Commands
+
SGB Palette Commands
+SGB Color Attribute Commands
+SGB Sound Functions
+SGB System Control Commands
+SGB Multiplayer Command
+SGB Border and OBJ Commands
+
+
+
 SGB Description

+General Description
+
Basically, the SGB (Super Gameboy) is an adapter cartridge that allows +to play gameboy games on a SNES (Super Nintendo Entertainment System) +gaming console. In detail, you plug the gameboy cartridge into the SGB +cartridge, then plug the SGB cartridge into the SNES, and then connect +the SNES to your TV Set. In result, games can be played and viewed on +the TV Set, and are controlled by using the SNES joypad(s).
+
+More Technical Description
+
The SGB cartridge just contains a normal gameboy CPU and normal gameboy +video controller. Normally the video signal from this controller would +be sent to the LCD screen, however, in this special case the SNES read +out the video signal and displays it on the TV set by using a special +SNES BIOS ROM which is located in the SGB cartridge. Also, normal +gameboy sound output is forwared to the SNES and output to the TV Set, +vice versa, joypad input is forwared from the SNES controller(s) to the +gameboy joypad inputs.
+
+Normal Monochrome Games
+
Any gameboy games which have been designed for normal monochrome +handheld gameboys will work with the SGB hardware as well. The SGB will +apply a four color palette to these games by replacing the normal four +grayshades. The 160x144 pixel gamescreen is displayed in the middle of +the 256x224 pixel SNES screen (the unused area is filled by a screen +border bitmap). The user may access built-in menues, allowing to change +color palette data, to select between several pre-defined borders, etc.
+
+Games that have been designed to support SGB functions may also access +the following additional features:
+
+Colorized Game Screen
+
There's limited ability to colorize the gamescreen by assigning custom +color palettes to each 20x18 display characters, however, this works +mainly for static display data such like title screens or status bars, +the 20x18 color attribute map is non-scrollable, and it is not possible +to assign separate colors to moveable foreground sprites (OBJs), so that +animated screen regions will be typically restricted to using a single +palette of four colors only.
+
+SNES Foreground Sprites
+
Up to 24 foreground sprites (OBJs) of 8x8 or 16x16 pixels, 16 colors can +be displayed. When replacing (or just overlaying) the normal gameboy +OBJs by SNES OBJs it'd be thus possible to display OBJs with other +colors than normal background area. This method doesn't appear to be +very popular, even though it appears to be quite easy to implement, +however, the bottommost character line of the gamescreen will be masked +out because this area is used to transfer OAM data to the SNES.
+
+The SGB Border
+
The possibly most popular and most impressive feature is to replace the +default SGB screen border by a custom bitmap which is stored in the game +cartridge.
+
+Multiple Joypads
+
Up to four joypads can be conected to the SNES, and SGB software may +read-out each of these joypads separately, allowing up to four players +to play the same game simultaneously. Unlike for multiplayer handheld +games, this requires only one game cartridge and only one SGB/SNES, and +no link cables are required, the downside is that all players must share +the same display screen.
+
+Sound Functions
+
Beside for normal gameboy sound, a number of digital sound effects is +pre-defined in the SNES BIOS, these effects may be accessed quite +easily. Programmers whom are familiar with SNES sounds may also access +the SNES sound chip, or use the SNES MIDI engine directly in order to +produce other sound effects or music.
+
+Taking Control of the SNES CPU
+
Finally, it is possible to write program code or data into SNES memory, +and to execute such program code by using the SNES CPU.
+
+SGB System Clock
+
Because the SGB is synchronized to the SNES CPU, the gameboy system +clock is directly chained to the SNES system clock. In result, the +gameboy CPU, video controller, timers, and sound frequencies will be all +operated approx 2.4% faster as by normal gameboys.
+Basically, this should be no problem, and the game will just run a +little bit faster. However sensitive musicians may notice that sound +frequencies are a bit too high, programs that support SGB functions may +avoid this effect by reducing frequencies of gameboy sounds when having +detected SGB hardware.
+Also, I think that I've heard that SNES models which use a 50Hz display +refresh rate (rather than 60Hz) are resulting in respectively slower +SGB/gameboy timings ???
+
+
+
 SGB Unlocking and Detecting SGB Functions

+Cartridge Header
+
SGB games are required to have a cartridge header with Nintendo and +proper checksum just as normal gameboy games. Also, two special entries +must be set in order to unlock SGB functions:
+
  146h - SGB Flag - Must be set to 03h for SGB games
+  14Bh - Old Licensee Code - Must be set 33h for SGB games
+
When these entries aren't set, the game will still work just like all +'monochrome' gameboy games, but it cannot access any of the special SGB +functions.
+
+Detecting SGB hardware
+
The recommended detection method is to send a MLT_REQ command which +enables two (or four) joypads. A normal handheld gameboy will ignore +this command, a SGB will now return incrementing joypad IDs each time +when deselecting keyboard lines (see MLT_REQ description for details).
+Now read-out joypad state/IDs several times, and if the ID-numbers are +changing, then it is a SGB (a normal gameboy would typically always +return 0Fh as ID). Finally, when not intending to use more than one +joypad, send another MLT_REQ command in order to re-disable the +multi-controller mode.
+Detection works regardless of whether and how many joypads are +physically connected to the SNES. However, detection works only when +having unlocked SGB functions in the cartridge header, as described +above.
+
+Separating between SGB and SGB2
+
It is also possible to separate between SGB and SGB2 models by examining +the inital value of the accumulator (A-register) directly after startup.
+
  01h  SGB or Normal Gameboy (DMG)
+  FFh  SGB2 or Pocket Gameboy
+  11h  CGB or GBA
+
Because values 01h and FFh are shared for both handhelds and SGBs, it is +still required to use the above MLT_REQ detection procedure. As far as I +know the SGB2 doesn't have any extra features which'd require separate +SGB2 detection except for curiosity purposes, for example, the game +"Tetris DX" chooses to display an alternate SGB border on SGB2s.
+
+Reportedly, some SGB models include link ports (just like handheld +gameboy) (my own SGB does not have such an port), possibly this feature +is available in SGB2-type models only ???
+
+
+
 SGB Command Packet Transfers

+Command packets (aka Register Files) are transferred from the gameboy to +the SNES by using P14 and P15 output lines of the JOYPAD register +(FF00h), these lines are normally used to select the two rows in the +gameboy keyboard matrix (which still works).
+
+Transferring Bits
+
A command packet transfer must be initiated by setting both P14 and P15 +to LOW, this will reset and start the SNES packet receiving program. +Data is then transferred (LSB first), setting P14=LOW will indicate a +"0" bit, and setting P15=LOW will indicate a "1" bit. For example:
+
       RESET 0   0   1   1   0   1   0
+  P14  --_---_---_-----------_-------_--...
+  P15  --_-----------_---_-------_------...
+
Data and reset pulses must be kept LOW for at least 5us. P14 and P15 +must be kept both HIGH for at least 15us between any pulses.
+Obviously, it'd be no good idea to access the JOYPAD register during the +transfer, for example, in case that your VBlank interrupt procedure +reads-out joypad states each frame, be sure to disable that interrupt +during the transfer (or disable only the joypad procedure by using a +software flag).
+
+Transferring Packets
+
Each packet is invoked by a RESET pulse, then 128 bits of data are +transferred (16 bytes, LSB of first byte first), and finally, a "0"-bit +must be transferred as stop bit. The structure of normal packets is:
+
   1 PULSE Reset
+   1 BYTE  Command Code*8+Length
+  15 BYTES Parameter Data
+   1 BIT   Stop Bit (0)
+
The above 'Length' indicates the total number of packets (1-7, including +the first packet) which will be sent, ie. if more than 15 parameter +bytes are used, then further packet(s) will follow, as such:
+
   1 PULSE Reset
+  16 BYTES Parameter Data
+   1 BIT   Stop Bit (0)
+
By using all 7 packets, up to 111 data bytes (15+16*6) may be sent.
+Unused bytes at the end of the last packet must be set to zero.
+A 60ms (4 frames) delay should be invoked between each packet transfer.
+
+
+
 SGB VRAM Transfers

+Overview
+
Beside for the packet transfer method, larger data blocks of 4KBytes can +be transferred by using the video signal. These transfers are invoked by +first sending one of the commands with the ending _TRN (by using normal +packet transfer), the 4K data block is then read-out by the SNES from +gameboy display memory during the next frame.
+
+Transfer Data
+
Normally, transfer data should be stored at 8000h-8FFFh in gameboy VRAM,
+even though the SNES receives the data in from display scanlines, it +will automatically re-produce the same ordering of bits and bytes, as +being originally stored at 8000h-8FFFh in gameboy memory.
+
+Preparing the Display
+
The above method works only when recursing the following things: BG Map +must display unsigned characters 00h-FFh on the screen; 00h..13h in +first line, 14h..27h in next line, etc. The gameboy display must be +enabled, the display may not be scrolled, OBJ sprites should not overlap +the background tiles, the BGP palette register must be set to E4h.
+
+Transfer Time
+
Note that the transfer data should be prepared in VRAM <before> sending +the transfer command packet. The actual transfer starts at the beginning +of the next frame after the command has been sent, and the transfer ends +at the end of the 5th frame after the command has been sent (not +counting the frame in which the command has been sent).
+
+Avoiding Screen Garbage
+
The display will contain 'garbage' during the transfer, this dirt-effect +can be avoided by freezing the screen (in the state which has been +displayed before the transfer) by using the MASK_EN command.
+Of course, this works only when actually executing the game on a SGB +(and not on normal handheld gameboys), it'd be thus required to detect +the presence of SGB hardware before blindly sending VRAM data.
+
+
+
 SGB Command Summary

+SGB System Command Table
+
  Code Name      Expl.
+  00   PAL01     Set SGB Palette 0,1 Data
+  01   PAL23     Set SGB Palette 2,3 Data
+  02   PAL03     Set SGB Palette 0,3 Data
+  03   PAL12     Set SGB Palette 1,2 Data
+  04   ATTR_BLK  "Block" Area Designation Mode
+  05   ATTR_LIN  "Line" Area Designation Mode
+  06   ATTR_DIV  "Divide" Area Designation Mode
+  07   ATTR_CHR  "1CHR" Area Designation Mode
+  08   SOUND     Sound On/Off
+  09   SOU_TRN   Transfer Sound PRG/DATA
+  0A   PAL_SET   Set SGB Palette Indirect
+  0B   PAL_TRN   Set System Color Palette Data
+  0C   ATRC_EN   Enable/disable Attraction Mode
+  0D   TEST_EN   Speed Function
+  0E   ICON_EN   SGB Function
+  0F   DATA_SND  SUPER NES WRAM Transfer 1
+  10   DATA_TRN  SUPER NES WRAM Transfer 2
+  11   MLT_REG   Controller 2 Request
+  12   JUMP      Set SNES Program Counter
+  13   CHR_TRN   Transfer Character Font Data
+  14   PCT_TRN   Set Screen Data Color Data
+  15   ATTR_TRN  Set Attribute from ATF
+  16   ATTR_SET  Set Data to ATF
+  17   MASK_EN   Game Boy Window Mask
+  18   OBJ_TRN   Super NES OBJ Mode
+

+
+
 SGB Color Palettes Overview

+Available SNES Palettes
+
The SGB/SNES provides 8 palettes of 16 colors each, each color may be +defined out of a selection of 34768 colors (15 bit). Palettes 0-3 are +used to colorize the gamescreen, only the first four colors of each of +these palettes are used. Palettes 4-7 are used for the SGB Border, all +16 colors of each of these palettes may be used.
+
+Color 0 Restriction
+
Color 0 of each of the eight palettes is transparent, causing the +backdrop color to be displayed instead. The backdrop color is typically +defined by the most recently color being assigned to Color 0 (regardless +of the palette number being used for that operation).
+Effectively, gamescreen palettes can have only three custom colors each, +and SGB border palettes only 15 colors each, additionally, color 0 can +be used for for all palettes, which will then all share the same color +though.
+
+Translation of Grayshades into Colors
+
Because the SGB/SNES reads out the gameboy video controllers display +signal, it translates the different grayshades from the signal into SNES +colors as such:
+
  White       -->  Color 0
+  Light Gray  -->  Color 1
+  Dark Gray   -->  Color 2
+  Black       -->  Color 3
+
Note that gameboy colors 0-3 are assigned to user-selectable grayshades +by the gameboys BGP, OBP1, and OBP2 registers. There is thus no fixed +relationship between gameboy colors 0-3 and SNES colors 0-3.
+
+Using Gameboy BGP/OBP Registers
+
A direct translation of color 0-3 into color 0-3 may be produced by +setting BGP/OBP registers to a value of 0E4h each. However, in case that +your program uses black background for example, then you may internally +assign background as "White" at the gameboy side by BGP/OBP registers +(which is then interpreted as SNES color 0, which is shared for all SNES +palettes). The advantage is that you may define Color 0 as Black at the +SNES side, and may assign custom colors for Colors 1-3 of each SNES +palette.
+
+System Color Palette Memory
+
Beside for the actually visible palettes, up to 512 palettes of 4 colors +each may be defined in SNES RAM. Basically, this is completely +irrelevant because the palettes are just stored in RAM whithout any +relationship to the displayed picture, anyways, these pre-defined colors +may be transferred to actually visible palettes slightly faster as when +transferring palette data by separate command packets.
+
+
+
 SGB Palette Commands

+SGB Command 00h - PAL01
+
Transmit color data for SGB palette 0, color 0-3, and for SGB palette 1, +color 1-3 (without separate color 0).
+
  Byte  Content
+  0     Command*8+Length (fixed length=01h)
+  1-E   Color Data for 7 colors of 2 bytes (16bit) each:
+          Bit 0-4   - Red Intensity   (0-31)
+          Bit 5-9   - Green Intensity (0-31)
+          Bit 10-14 - Blue Intensity  (0-31)
+          Bit 15    - Not used (zero)
+  F     Not used (00h)
+
The value transferred as color 0 will be applied for all eight palettes.
+
+SGB Command 01h - PAL23
+
Same as above PAL01, but for Palettes 2 and 3 respectively.
+
+SGB Command 02h - PAL03
+
Same as above PAL01, but for Palettes 0 and 3 respectively.
+
+SGB Command 03h - PAL12
+
Same as above PAL01, but for Palettes 1 and 2 respectively.
+
+SGB Command 0Ah - PAL_SET
+
Used to copy pre-defined palette data from SGB system color palette to +actual SGB palette.
+
  Byte  Content
+  0     Command*8+Length (fixed length=1)
+  1-2   System Palette number for SGB Color Palette 0 (0-511)
+  3-4   System Palette number for SGB Color Palette 1 (0-511)
+  5-6   System Palette number for SGB Color Palette 2 (0-511)
+  7-8   System Palette number for SGB Color Palette 3 (0-511)
+  9     Attribute File
+          Bit 0-5 - Attribute File Number (00h-2Ch) (Used only if Bit7=1)
+          Bit 6   - Cancel Mask           (0=No change, 1=Yes)
+          Bit 7   - Use Attribute File    (0=No, 1=Apply above ATF Number)
+  A-F   Not used (zero)
+
Before using this function, System Palette data should be initialized by +PAL_TRN command, and (when used) Attribute File data should be +initialized by ATTR_TRN.
+
+SGB Command 0Bh - PAL_TRN
+
Used to initialize SGB system color palettes in SNES RAM.
+System color palette memory contains 512 pre-defined palettes, these +palettes do not directly affect the display, however, the PAL_SET +command may be later used to transfer four of these 'logical' palettes +to actual visible 'physical' SGB palettes. Also, the OBJ_TRN function +will use groups of 4 System Color Palettes (4*4 colors) for SNES OBJ +palettes (16 colors).
+
  Byte  Content
+  0     Command*8+Length (fixed length=1)
+  1-F   Not used (zero)
+
The palette data is sent by VRAM-Transfer (4 KBytes).
+
  000-FFF  Data for System Color Palette 0-511
+
Each Palette consists of four 16bit-color definitions (8 bytes).
+Note: The data is stored at 3000h-3FFFh in SNES memory.
+
+
+
 SGB Color Attribute Commands

+SGB Command 04h - ATTR_BLK
+
Used to specify color attributes for the inside or outside of one or +more rectangular screen regions.
+
  Byte  Content
+  0     Command*8+Length (length=1..7)
+  1     Number of Data Sets (01h..12h)
+  2-7   Data Set #1
+          Byte 0 - Control Code (0-7)
+            Bit 0 - Change Colors inside of surrounded area     (1=Yes)
+            Bit 1 - Change Colors of surrounding character line (1=Yes)
+            Bit 2 - Change Colors outside of surrounded area    (1=Yes)
+            Bit 3-7 - Not used (zero)
+            Exception: When changing only the Inside or Outside, then the
+            Surrounding line becomes automatically changed to same color.
+          Byte 1 - Color Palette Designation
+            Bit 0-1 - Palette Number for inside of surrounded area
+            Bit 2-3 - Palette Number for surrounding character line
+            Bit 4-5 - Palette Number for outside of surrounded area
+            Bit 6-7 - Not used (zero)
+          Data Set Byte 2 - Coordinate X1 (left)
+          Data Set Byte 3 - Coordinate Y1 (upper)
+          Data Set Byte 4 - Coordinate X2 (right)
+          Data Set Byte 5 - Coordinate Y2 (lower)
+            Specifies the coordinates of the surrounding rectangle.
+  8-D   Data Set #2 (if any)
+  E-F   Data Set #3 (continued at 0-3 in next packet) (if any)
+
When sending three or more data sets, data is continued in further +packet(s). Unused bytes at the end of the last packet should be set to +zero. The format of the separate Data Sets is described below.
+
+SGB Command 05h - ATTR_LIN
+
Used to specify color attributes of one or more horizontal or vertical +character lines.
+
  Byte  Content
+  0     Command*8+Length (length=1..7)
+  1     Number of Data Sets (01h..6Eh) (one byte each)
+  2     Data Set #1
+          Bit 0-4 - Line Number    (X- or Y-coordinate, depending on bit 7)
+          Bit 5-6 - Palette Number (0-3)
+          Bit 7   - H/V Mode Bit   (0=Vertical line, 1=Horizontal Line)
+  3     Data Set #2 (if any)
+  4     Data Set #3 (if any)
+  etc.
+
When sending 15 or more data sets, data is continued in further +packet(s). Unused bytes at the end of the last packet should be set to +zero. The format of the separate Data Sets (one byte each) is described +below.
+The length of each line reaches from one end of the screen to the other +end. In case that some lines overlap each other, then lines from +lastmost data sets will overwrite lines from previous data sets.
+
+SGB Command 06h - ATTR_DIV
+
Used to split the screen into two halfes, and to assign separate color +attributes to each half, and to the division line between them.
+
  Byte  Content
+  0     Command*8+Length   (fixed length=1)
+  1     Color Palette Numbers and H/V Mode Bit
+          Bit 0-1  Palette Number below/right of division line
+          Bit 2-3  Palette Number above/left of division line
+          Bit 4-5  Palette Number for division line
+          Bit 6    H/V Mode Bit  (0=split left/right, 1=split above/below)
+  2     X- or Y-Coordinate (depending on H/V bit)
+  3-F   Not used (zero)
+

+SGB Command 07h - ATTR_CHR
+
Used to specify color attributes for separate characters.
+
  Byte  Content
+  0     Command*8+Length (length=1..6)
+  1     Beginning X-Coordinate
+  2     Beginning Y-Coordinate
+  3-4   Number of Data Sets (1-360)
+  5     Writing Style   (0=Left to Right, 1=Top to Bottom)
+  6     Data Sets 1-4   (Set 1 in MSBs, Set 4 in LSBs)
+  7     Data Sets 5-8   (if any)
+  8     Data Sets 9-12  (if any)
+  etc.
+
When sending 41 or more data sets, data is continued in further +packet(s). Unused bytes at the end of the last packet should be set to +zero. Each data set consists of two bits, indicating the palette number +for one character.
+Depending on the writing style, data sets are written from left to +right, or from top to bottom. In either case the function wraps to the +next row/column when reaching the end of the screen.
+
+SGB Command 15h - ATTR_TRN
+
Used to initialize Attribute Files (ATFs) in SNES RAM. Each ATF consists +of 20x18 color attributes for the gameboy screen. This function does not +directly affect display attributes. Instead, one of the defined ATFs may +be copied to actual display memory at a later time by using ATTR_SET or +PAL_SET functions.
+
  Byte  Content
+  0     Command*8+Length (fixed length=1)
+  1-F   Not used (zero)
+
The ATF data is sent by VRAM-Transfer (4 KBytes).
+
  000-FD1  Data for ATF0 through ATF44 (4050 bytes)
+  FD2-FFF  Not used
+
Each ATF consists of 90 bytes, that are 5 bytes (20x2bits) for each of +the 18 character lines of the gameboy window. The two most significant +bits of the first byte define the color attribute (0-3) for the first +character of the first line, the next two bits the next character, and +so on.
+
+SGB Command 16h - ATTR_SET
+
Used to transfer attributes from Attribute File (ATF) to gameboy window.
+
  Byte  Content
+  0     Command*8+Length (fixed length=1)
+  1     Attribute File Number (00-2Ch), Bit 6=Cancel Mask
+  2-F   Not used (zero)
+
When above Bit 6 is set, the gameboy screen becomes re-enabled after the +transfer (in case it has been disabled/frozen by MASK_EN command).
+Note: The same functions may be (optionally) also included in PAL_SET +commands, as described in the chapter about Color Palette Commands.
+
+
+
 SGB Sound Functions

+SGB Command 08h - SOUND
+
Used to start/stop internal sound effect, start/stop sound using +internal tone data.
+
  Byte  Content
+  0     Command*8+Length (fixed length=1)
+  1     Sound Effect A (Port 1) Decrescendo 8bit Sound Code
+  2     Sound Effect B (Port 2) Sustain     8bit Sound Code
+  3     Sound Effect Attributes
+          Bit 0-1 - Sound Effect A Pitch  (0..3=Low..High)
+          Bit 2-3 - Sound Effect A Volume (0..2=High..Low, 3=Mute on)
+          Bit 4-5 - Sound Effect B Pitch  (0..3=Low..High)
+          Bit 6-7 - Sound Effect B Volume (0..2=High..Low, 3=Not used)
+  4     Music Score Code (must be zero if not used)
+  5-F   Not used (zero)
+
See Sound Effect Tables below for a list of available pre-defined effects.
+"Notes"
+1) Mute is only active when both bits D2 and D3 are 1.
+2) When the volume is set for either Sound Effect A or Sound Effect B, +mute is turned off.
+3) When Mute on/off has been executed, the sound fades out/fades in.
+4) Mute on/off operates on the (BGM) which is reproduced by Sound Effect +A, Sound Effect B, and the Super NES APU. A "mute off" flag does not +exist by itself. When mute flag is set, volume and pitch of Sound Effect +A (port 1) and Sound Effect B (port 2) must be set.
+
+SGB Command 09h - SOU_TRN
+
Used to transfer sound code or data to SNES Audio Processing Unit memory +(APU-RAM).
+
  Byte  Content
+  0     Command*8+Length (fixed length=1)
+  1-F   Not used (zero)
+
The sound code/data is sent by VRAM-Transfer (4 KBytes).
+
  000      One (or two ???) 16bit expression(s ???) indicating the
+           transfer destination address and transfer length.
+  ...-...  Transfer Data
+  ...-FFF  Remaining bytes not used
+
Possible destinations in APU-RAM are:
+
  0400h-2AFFh  APU-RAM Program Area (9.75KBytes)
+  2B00h-4AFFh  APU-RAM Sound Score Area (8Kbytes)
+  4DB0h-EEFFh  APU-RAM Sampling Data Area (40.25 Kbytes)
+
This function may be used to take control of the SNES sound chip, and/or +to access the SNES MIDI engine. In either case it requires deeper +knowledge of SNES sound programming.
+
+SGB Sound Effect A/B Tables
+
Below lists the digital sound effects that are pre-defined in the +SGB/SNES BIOS, and which can be used with the SGB "SOUND" Command.
+Effect A and B may be simultaneously reproduced.
+The P-column indicates the recommended Pitch value, the V-column +indicates the numbers of Voices used. Sound Effect A uses voices 6,7. +Sound Effect B uses voices 0,1,4,5. Effects that use less voices will +use only the upper voices (eg. 4,5 for Effect B with only two voices).
+
+Sound Effect A Flag Table
+
  Code Description             P V     Code Description             P V
+  00  Dummy flag, re-trigger   - 2     18  Fast Jump                3 1
+  80  Effect A, stop/silent    - 2     19  Jet (rocket) takeoff     0 1
+  01  Nintendo                 3 1     1A  Jet (rocket) landing     0 1
+  02  Game Over                3 2     1B  Cup breaking             2 2
+  03  Drop                     3 1     1C  Glass breaking           1 2
+  04  OK ... A                 3 2     1D  Level UP                 2 2
+  05  OK ... B                 3 2     1E  Insert air               1 1
+  06  Select...A               3 2     1F  Sword swing              1 1
+  07  Select...B               3 1     20  Water falling            2 1
+  08  Select...C               2 2     21  Fire                     1 1
+  09  Mistake...Buzzer         2 1     22  Wall collapsing          1 2
+  0A  Catch Item               2 2     23  Cancel                   1 2
+  0B  Gate squeaks 1 time      2 2     24  Walking                  1 2
+  0C  Explosion...small        1 2     25  Blocking strike          1 2
+  0D  Explosion...medium       1 2     26  Picture floats on & off  3 2
+  0E  Explosion...large        1 2     27  Fade in                  0 2
+  0F  Attacked...A             3 1     28  Fade out                 0 2
+  10  Attacked...B             3 2     29  Window being opened      1 2
+  11  Hit (punch)...A          0 2     2A  Window being closed      0 2
+  12  Hit (punch)...B          0 2     2B  Big Laser                3 2
+  13  Breath in air            3 2     2C  Stone gate closes/opens  0 2
+  14  Rocket Projectile...A    3 2     2D  Teleportation            3 1
+  15  Rocket Projectile...B    3 2     2E  Lightning                0 2
+  16  Escaping Bubble          2 1     2F  Earthquake               0 2
+  17  Jump                     3 1     30  Small Laser              2 2
+
Sound effect A is used for formanto sounds (percussion sounds).
+
+Sound Effect B Flag Table
+
  Code Description             P V     Code Description             P V
+  00  Dummy flag, re-trigger   - 4     0D  Waterfall                2 2
+  80  Effect B, stop/silent    - 4     0E  Small character running  3 1
+  01  Applause...small group   2 1     0F  Horse running            3 1
+  02  Applause...medium group  2 2     10  Warning sound            1 1
+  03  Applause...large group   2 4     11  Approaching car          0 1
+  04  Wind                     1 2     12  Jet flying               1 1
+  05  Rain                     1 1     13  UFO flying               2 1
+  06  Storm                    1 3     14  Electromagnetic waves    0 1
+  07  Storm with wind/thunder  2 4     15  Score UP                 3 1
+  08  Lightning                0 2     16  Fire                     2 1
+  09  Earthquake               0 2     17  Camera shutter, formanto 3 4
+  0A  Avalanche                0 2     18  Write, formanto          0 1
+  0B  Wave                     0 1     19  Show up title, formanto  0 1
+  0C  River                    3 2
+
Sound effect B is mainly used for looping sounds (sustained sounds).
+
+
+
 SGB System Control Commands

+SGB Command 17h - MASK_EN
+
Used to mask the gameboy window, among others this can be used to freeze +the gameboy screen before transferring data through VRAM (the SNES then +keeps displaying the gameboy screen, even though VRAM doesn't contain +meaningful display information during the transfer).
+
  Byte  Content
+  0     Command*8+Length (fixed length=1)
+  1     Gameboy Screen Mask (0-3)
+          0  Cancel Mask   (Display activated)
+          1  Freeze Screen (Keep displaying current picture)
+          2  Blank Screen  (Black)
+          3  Blank Screen  (Color 0)
+  2-F   Not used (zero)
+
Freezing works only if the SNES has stored a picture, ie. if necessary +wait one or two frames before freezing (rather than freezing directly +after having displayed the picture).
+The Cancel Mask function may be also invoked (optionally) by completion +of PAL_SET and ATTR_SET commands.
+
+SGB Command 0Ch - ATRC_EN
+
Used to enable/disable Attraction mode. It is totally unclear what an +attraction mode is ???, but it is enabled by default.
+
  Byte  Content
+  0     Command*8+Length    (fixed length=1)
+  1     Attraction Disable  (0=Enable, 1=Disable)
+  2-F   Not used (zero)
+

+SGB Command 0Dh - TEST_EN
+
Used to enable/disable test mode for "SGB-CPU variable clock speed +function". This function is disabled by default.
+
  Byte  Content
+  0     Command*8+Length    (fixed length=1)
+  1     Test Mode Enable    (0=Disable, 1=Enable)
+  2-F   Not used (zero)
+
Maybe intended to determine whether SNES operates at 50Hz or 60Hz +display refresh rate ??? Possibly result can be read-out from joypad +register ???
+
+SGB Command 0Eh - ICON_EN
+
Used to enable/disable ICON function. Possibly meant to enable/disable +SGB/SNES popup menues which might otherwise activated during gameboy +game play. By default all functions are enabled (0).
+
  Byte  Content
+  0     Command*8+Length    (fixed length=1)
+  1     Disable Bits
+          Bit 0 - Use of SGB-Built-in Color Palettes    (1=Disable)
+          Bit 1 - Controller Set-up Screen    (0=Enable, 1=Disable)
+          Bit 2 - SGB Register File Transfer (0=Receive, 1=Disable)
+          Bit 3-6 - Not used (zero)
+  2-F   Not used (zero)
+
Above Bit 2 will suppress all further packets/commands when set, this +might be useful when starting a monochrome game from inside of the +SGB-menu of a multi-gamepak which contains a collection of different +games.
+
+SGB Command 0Fh - DATA_SND
+
Used to write one or more bytes directly into SNES Work RAM.
+
  Byte  Content
+  0     Command*8+Length    (fixed length=1)
+  1     SNES Destination Address, low
+  2     SNES Destination Address, high
+  3     SNES Destination Address, bank number
+  4     Number of bytes to write (01h-0Bh)
+  5     Data Byte #1
+  6     Data Byte #2 (if any)
+  7     Data Byte #3 (if any)
+  etc.
+
Unused bytes at the end of the packet should be set to zero, this +function is restricted to a single packet, so that not more than 11 +bytes can be defined at once.
+Free Addresses in SNES memory are Bank 0 1800h-1FFFh, Bank 7Fh +0000h-FFFFh.
+
+SGB Command 10h - DATA_TRN
+
Used to transfer binary code or data directly into SNES RAM.
+
  Byte  Content
+  0     Command*8+Length    (fixed length=1)
+  1     SNES Destination Address, low
+  2     SNES Destination Address, high
+  3     SNES Destination Address, bank number
+  4-F   Not used (zero)
+
The data is sent by VRAM-Transfer (4 KBytes).
+
  000-FFF  Data
+
Free Addresses in SNES memory are Bank 0 1800h-1FFFh, Bank 7Fh +0000h-FFFFh. The transfer length is fixed at 4KBytes ???, so that directly +writing to the free 2KBytes at 0:1800h would be a not so good idea ???
+
+SGB Command 12h - JUMP
+
Used to set the SNES program counter to a specified address. Optionally, +it may be used to set a new address for the SNES NMI handler, the NMI +handler remains unchanged if all bytes 4-6 are zero.
+
  Byte  Content
+  0     Command*8+Length    (fixed length=1)
+  1     SNES Program Counter, low
+  2     SNES Program Counter, high
+  3     SNES Program Counter, bank number
+  4     SNES NMI Handler, low
+  5     SNES NMI Handler, high
+  6     SNES NMI Handler, bank number
+  7-F   Not used, zero
+
Note: The game "Space Invaders 94" uses this function when selecting +"Arcade mode" to execute SNES program code which has been previously +transferred from the SGB to the SNES. The type of the CPU which is used +in the SNES is unknown ???
+
+
+
 SGB Multiplayer Command

+SGB Command 11h - MLT_REQ
+
Used to request multiplayer mode (ie. input from more than one joypad).
+Because this function provides feedback from the SGB/SNES to the gameboy +program, it is also used to detect SGB hardware.
+
  Byte  Content
+  0     Command*8+Length    (fixed length=1)
+  1     Multiplayer Control (0-3) (Bit0=Enable, Bit1=Two/Four Players)
+          0 = One player
+          1 = Two players
+          3 = Four players
+  2-F   Not used (zero)
+
In one player mode, the second joypad (if any) is used for the SGB +system program. In two player mode, both joypads are used for the game. +Because SNES have only two joypad sockets, four player mode requires an +external "Multiplayer 5" adapter.
+
+Reading Multiple Controllers (Joypads)
+
When having enabled multiple controllers by MLT_REQ, data for each +joypad can be read out through JOYPAD register (FF00) as follows: First +set P14 and P15 both HIGH (deselect both Buttons and Cursor keys), you +can now read the lower 4bits of FF00 which indicate the joypad ID for +the following joypad input:
+
  0Fh  Joypad 1
+  0Eh  Joypad 2
+  0Dh  Joypad 3
+  0Ch  Joypad 4
+
Next, set P14 and P15 low (one after each other) to select Buttons and +Cursor lines, and read-out joypad state as normally. When completed, set +P14 and P15 back HIGH, this automatically increments the joypad number +(or restarts counting once reached the lastmost joypad). Repeat the +procedure until you have read-out states for all two (or four) joypads.
+
+
+
 SGB Border and OBJ Commands

+SGB Command 13h - CHR_TRN
+
Used to transfer tile data (characters) to SNES Tile memory in VRAM. This +normally used to define BG tiles for the SGB Border (see PCT_TRN), but +might be also used to define moveable SNES foreground sprites (see +OBJ_TRN).
+
  Byte  Content
+  0     Command*8+Length    (fixed length=1)
+  1     Tile Transfer Destination
+          Bit 0   - Tile Numbers   (0=Tiles 00h-7Fh, 1=Tiles 80h-FFh)
+          Bit 1   - Tile Type      (0=BG Tiles, 1=OBJ Tiles)
+          Bit 2-7 - Not used (zero)
+  2-F   Not used (zero)
+
The tile data is sent by VRAM-Transfer (4 KBytes).
+
  000-FFF  Bitmap data for 128 Tiles
+
Each tile occupies 16bytes (8x8 pixels, 16 colors each).
+When intending to transfer more than 128 tiles, call this function twice +(once for tiles 00h-7Fh, and once for tiles 80h-FFh). Note: The BG/OBJ +Bit seems to have no effect and writes to the same VRAM addresses for +both BG and OBJ ???
+
+SGB Command 14h - PCT_TRN
+
Used to transfer tile map data and palette data to SNES BG Map memory in +VRAM to be used for the SGB border. The actual tiles must be separately +transferred by using the CHR_TRN function.
+
  Byte  Content
+  0     Command*8+Length    (fixed length=1)
+  1-F   Not used (zero)
+
The map data is sent by VRAM-Transfer (4 KBytes).
+
  000-7FF  BG Map 32x32 Entries of 16bit each (2048 bytes)
+  800-87F  BG Palette Data (Palettes 4-7, each 16 colors of 16bits each)
+  880-FFF  Not used, don't care
+
Each BG Map Entry consists of a 16bit value as such:
+
  Bit 0-9   - Character Number (use only 00h-FFh, upper 2 bits zero)
+  Bit 10-12 - Palette Number   (use only 4-7, officially use only 4-6)
+  Bit 13    - BG Priority      (use only 0)
+  Bit 14    - X-Flip           (0=Normal, 1=Mirror horizontally)
+  Bit 15    - Y-Flip           (0=Normal, 1=Mirror vertically)
+
Even though 32x32 map entries are transferred, only upper 32x28 are +actually used (256x224 pixels, SNES screen size). The 20x18 entries in +the center of the 32x28 area should be set to 0000h as transparent space +for the gameboy window to be displayed inside. Reportedly, +non-transparent border data will cover the gameboy window.
+
+SGB Command 18h - OBJ_TRN
+
Used to transfer OBJ attributes to SNES OAM memory. Unlike all other +functions with the ending _TRN, this function does not use the usual +one-shot 4KBytes VRAM transfer method.
+Instead, when enabled (below execute bit set), data is permanently (each +frame) read out from the lower character line of the gameboy screen. To +suppress garbage on the display, the lower line is masked, and only the +upper 20x17 characters of the gameboy window are used - the masking +method is unknwon - frozen, black, or recommended to be covered by the +SGB border, or else ??? Also, when the function is enabled, "system +attract mode is not performed" - whatever that means ???
+
  Byte  Content
+  0     Command*8+Length (fixed length=1)
+  1     Control Bits
+          Bit 0   - SNES OBJ Mode enable (0=Cancel, 1=Enable)
+          Bit 1   - Change OBJ Color     (0=No, 1=Use definitions below)
+          Bit 2-7 - Not used (zero)
+  2-3   System Color Palette Number for OBJ Palette 4 (0-511)
+  4-5   System Color Palette Number for OBJ Palette 5 (0-511)
+  6-7   System Color Palette Number for OBJ Palette 6 (0-511)
+  8-9   System Color Palette Number for OBJ Palette 7 (0-511)
+          These color entries are ignored if above Control Bit 1 is zero.
+          Because each OBJ palette consists of 16 colors, four system
+          palette entries (of 4 colors each) are transferred into each
+          OBJ palette. The system palette numbers are not required to be
+          aligned to a multiple of four, and will wrap to palette number
+          0 when exceeding 511. For example, a value of 511 would copy
+          system palettes 511, 0, 1, 2 to the SNES OBJ palette.
+  A-F   Not used (zero)
+
The recommended method is to "display" gameboy BG tiles F9h..FFh from +left to right as first 7 characters of the bottom-most character line of +the gameboy screen. As for normal 4KByte VRAM transfers, this area +should not be scrolled, should not be overlapped by gameboy OBJs, and +the gameboy BGP palette register should be set up properly. By following +that method, SNES OAM data can be defined in the 70h bytes of the +gameboy BG tile memory at following addresses:
+
  8F90-8FEF  SNES OAM, 24 Entries of 4 bytes each (96 bytes)
+  8FF0-8FF5  SNES OAM MSBs, 24 Entries of 2 bits each (6 bytes)
+  8FF6-8FFF  Not used, don't care (10 bytes)
+
The format of SNES OAM Entries is:
+
  Byte 0  OBJ X-Position (0-511, MSB is separately stored, see below)
+  Byte 1  OBJ Y-Position (0-255)
+  Byte 2-3  Attributes (16bit)
+    Bit 0-8    Tile Number     (use only 00h-FFh, upper bit zero)
+    Bit 9-11   Palette Number  (use only 4-7)
+    Bit 12-13  OBJ Priority    (use only 3)
+    Bit 14     X-Flip          (0=Normal, 1=Mirror horizontally)
+    Bit 15     Y-Flip          (0=Normal, 1=Mirror vertically)
+
The format of SNES OAM MSB Entries is:
+
  Actually, the format is unknown ??? However, 2 bits are used per entry:
+  One bit is the most significant bit of the OBJ X-Position.
+  The other bit specifies the OBJ size (8x8 or 16x16 pixels).
+

+
+
 CPU Registers and Flags

+Registers
+
  16bit Hi   Lo   Name/Function
+  AF    A    -    Accumulator & Flags
+  BC    B    C    BC
+  DE    D    E    DE
+  HL    H    L    HL
+  SP    -    -    Stack Pointer
+  PC    -    -    Program Counter/Pointer
+
As shown above, most registers can be accessed either as one 16bit +register, or as two separate 8bit registers.
+
+The Flag Register (lower 8bit of AF register)
+
  Bit  Name  Set Clr  Expl.
+  7    zf    Z   NZ   Zero Flag
+  6    n     -   -    Add/Sub-Flag (BCD)
+  5    h     -   -    Half Carry Flag (BCD)
+  4    cy    C   NC   Carry Flag
+  3-0  -     -   -    Not used (always zero)
+
Conatins the result from the recent instruction which has affected +flags.
+
+The Zero Flag (Z)
+
This bit becomes set (1) if the result of an operation has been zero +(0). Used for conditional jumps.
+
+The Carry Flag (C, or Cy)
+
Becomes set when the result of an addition became bigger than FFh (8bit) +or FFFFh (16bit). Or when the result of a subtraction or comparision +became less than zero (much as for Z80 and 80x86 CPUs, but unlike as for +65XX and ARM CPUs). Also the flag becomes set when a rotate/shift +operation has shifted-out a "1"-bit.
+Used for conditional jumps, and for instructions such like ADC, SBC, RL, +RLA, etc.
+
+The BCD Flags (N, H)
+
These flags are (rarely) used for the DAA instruction only, N Indicates +whether the previous instruction has been an addition or subtraction, +and H indicates carry for lower 4bits of the result, also for DAA, the C +flag must indicate carry for upper 8bits.
+After adding/subtracting two BCD numbers, DAA is intended to convert the +result into BCD format; BCD numbers are ranged from 00h to 99h rather +than 00h to FFh.
+Because C and H flags must contain carry-outs for each digit, DAA cannot +be used for 16bit operations (which have 4 digits), or for INC/DEC +operations (which do not affect C-flag).
+
+
+
 CPU Instruction Set

+Tables below specify the mnemonic, opcode bytes, clock cycles, affected +flags (ordered as znhc), and explanatation.
+The timings assume a CPU clock frequency of 4.194304 MHz (or 8.4
+MHz for CGB in double speed mode), as all gameboy timings are divideable
+by 4, many people specify timings and clock frequency divided by 4.
+
+GMB 8bit-Loadcommands
+
  ld   r,r         xx         4 ---- r=r
+  ld   r,n         xx nn      8 ---- r=n
+  ld   r,(HL)      xx         8 ---- r=(HL)
+  ld   (HL),r      7x         8 ---- (HL)=r
+  ld   (HL),n      36 nn     12 ----
+  ld   A,(BC)      0A         8 ----
+  ld   A,(DE)      1A         8 ----
+  ld   A,(nn)      FA        16 ----
+  ld   (BC),A      02         8 ----
+  ld   (DE),A      12         8 ----
+  ld   (nn),A      EA        16 ----
+  ld   A,(FF00+n)  F0 nn     12 ---- read from io-port n (memory FF00+n)
+  ld   (FF00+n),A  E0 nn     12 ---- write to io-port n (memory FF00+n)
+  ld   A,(FF00+C)  F2         8 ---- read from io-port C (memory FF00+C)
+  ld   (FF00+C),A  E2         8 ---- write to io-port C (memory FF00+C)
+  ldi  (HL),A      22         8 ---- (HL)=A, HL=HL+1
+  ldi  A,(HL)      2A         8 ---- A=(HL), HL=HL+1
+  ldd  (HL),A      32         8 ---- (HL)=A, HL=HL-1
+  ldd  A,(HL)      3A         8 ---- A=(HL), HL=HL-1
+

+GMB 16bit-Loadcommands
+
  ld   rr,nn       x1 nn nn  12 ---- rr=nn (rr may be BC,DE,HL or SP)
+  ld   SP,HL       F9         8 ---- SP=HL
+  push rr          x5        16 ---- SP=SP-2  (SP)=rr   (rr may be BC,DE,HL,AF)
+  pop  rr          x1        12 (AF) rr=(SP)  SP=SP+2   (rr may be BC,DE,HL,AF)
+

+GMB 8bit-Arithmetic/logical Commands
+
  add  A,r         8x         4 z0hc A=A+r
+  add  A,n         C6 nn      8 z0hc A=A+n
+  add  A,(HL)      86         8 z0hc A=A+(HL)
+  adc  A,r         8x         4 z0hc A=A+r+cy
+  adc  A,n         CE nn      8 z0hc A=A+n+cy
+  adc  A,(HL)      8E         8 z0hc A=A+(HL)+cy
+  sub  r           9x         4 z1hc A=A-r
+  sub  n           D6 nn      8 z1hc A=A-n
+  sub  (HL)        96         8 z1hc A=A-(HL)
+  sbc  A,r         9x         4 z1hc A=A-r-cy
+  sbc  A,n         DE nn      8 z1hc A=A-n-cy
+  sbc  A,(HL)      9E         8 z1hc A=A-(HL)-cy
+  and  r           Ax         4 z010 A=A & r
+  and  n           E6 nn      8 z010 A=A & n
+  and  (HL)        A6         8 z010 A=A & (HL)
+  xor  r           Ax         4 z000
+  xor  n           EE nn      8 z000
+  xor  (HL)        AE         8 z000
+  or   r           Bx         4 z000 A=A | r
+  or   n           F6 nn      8 z000 A=A | n
+  or   (HL)        B6         8 z000 A=A | (HL)
+  cp   r           Bx         4 z1hc compare A-r
+  cp   n           FE nn      8 z1hc compare A-n
+  cp   (HL)        BE         8 z1hc compare A-(HL)
+  inc  r           xx         4 z0h- r=r+1
+  inc  (HL)        34        12 z0h- (HL)=(HL)+1
+  dec  r           xx         4 z1h- r=r-1
+  dec  (HL)        35        12 z1h- (HL)=(HL)-1
+  daa              27         4 z-0x decimal adjust akku
+  cpl              2F         4 -11- A = A xor FF
+

+GMB 16bit-Arithmetic/logical Commands
+
  add  HL,rr     x9           8 -0hc HL = HL+rr     ;rr may be BC,DE,HL,SP
+  inc  rr        x3           8 ---- rr = rr+1      ;rr may be BC,DE,HL,SP
+  dec  rr        xB           8 ---- rr = rr-1      ;rr may be BC,DE,HL,SP
+  add  SP,dd     E8          16 00hc SP = SP +/- dd ;dd is 8bit signed number
+  ld   HL,SP+dd  F8          12 00hc HL = SP +/- dd ;dd is 8bit signed number
+

+GMB Rotate- und Shift-Commands
+
  rlca           07           4 000c rotate akku left
+  rla            17           4 000c rotate akku left through carry
+  rrca           0F           4 000c rotate akku right
+  rra            1F           4 000c rotate akku right through carry
+  rlc  r         CB 0x        8 z00c rotate left
+  rlc  (HL)      CB 06       16 z00c rotate left
+  rl   r         CB 1x        8 z00c rotate left through carry
+  rl   (HL)      CB 16       16 z00c rotate left through carry
+  rrc  r         CB 0x        8 z00c rotate right
+  rrc  (HL)      CB 0E       16 z00c rotate right
+  rr   r         CB 1x        8 z00c rotate right through carry
+  rr   (HL)      CB 1E       16 z00c rotate right through carry
+  sla  r         CB 2x        8 z00c shift left arithmetic (b0=0)
+  sla  (HL)      CB 26       16 z00c shift left arithmetic (b0=0)
+  swap r         CB 3x        8 z000 exchange low/hi-nibble
+  swap (HL)      CB 36       16 z000 exchange low/hi-nibble
+  sra  r         CB 2x        8 z00c shift right arithmetic (b7=b7)
+  sra  (HL)      CB 2E       16 z00c shift right arithmetic (b7=b7)
+  srl  r         CB 3x        8 z00c shift right logical (b7=0)
+  srl  (HL)      CB 3E       16 z00c shift right logical (b7=0)
+

+GMB Singlebit Operation Commands
+
  bit  n,r       CB xx        8 z01- test bit n
+  bit  n,(HL)    CB xx       12 z01- test bit n
+  set  n,r       CB xx        8 ---- set bit n
+  set  n,(HL)    CB xx       16 ---- set bit n
+  res  n,r       CB xx        8 ---- reset bit n
+  res  n,(HL)    CB xx       16 ---- reset bit n
+

+GMB CPU-Controlcommands
+
  ccf            3F           4 -00c cy=cy xor 1
+  scf            37           4 -001 cy=1
+  nop            00           4 ---- no operation
+  halt           76         N*4 ---- halt until interrupt occurs (low power)
+  stop           10 00        ? ---- low power standby mode (VERY low power)
+  di             F3           4 ---- disable interrupts, IME=0
+  ei             FB           4 ---- enable interrupts, IME=1
+

+GMB Jumpcommands
+
  jp   nn        C3 nn nn    16 ---- jump to nn, PC=nn
+  jp   HL        E9           4 ---- jump to HL, PC=HL
+  jp   f,nn      xx nn nn 16;12 ---- conditional jump if nz,z,nc,c
+  jr   PC+dd     18 dd       12 ---- relative jump to nn (PC=PC+/-7bit)
+  jr   f,PC+dd   xx dd     12;8 ---- conditional relative jump if nz,z,nc,c
+  call nn        CD nn nn    24 ---- call to nn, SP=SP-2, (SP)=PC, PC=nn
+  call f,nn      xx nn nn 24;12 ---- conditional call if nz,z,nc,c
+  ret            C9          16 ---- return, PC=(SP), SP=SP+2
+  ret  f         xx        20;8 ---- conditional return if nz,z,nc,c
+  reti           D9          16 ---- return and enable interrupts (IME=1)
+  rst  n         xx          16 ---- call to 00,08,10,18,20,28,30,38
+

+
+
 CPU Comparision with Z80

+Comparision with 8080
+
Basically, the gameboy CPU works more like an older 8080 CPU rather than +like a more powerful Z80 CPU. It is, however, supporting CB-prefixed +instructions. Also, all known gameboy assemblers using the more obvious +Z80-style syntax, rather than the chaotic 8080-style syntax.
+
+Comparision with Z80
+
Any DD-, ED-, and FD-prefixed instructions are missing, that means no +IX-, IY-registers, no block commands, and some other missing commands.
+All exchange instructions have been removed (including total absence of +second register set), 16bit memory accesses are mostly missing, and +16bit arithmetic functions are heavily cut-down.
+The gameboy has no IN/OUT instructions, instead I/O ports are accessed +directly by normal LD instructions, or by special LD (FF00+n) opcodes.
+The sign and parity/overflow flags have been removed.
+The gameboy operates approximately as fast as a 4MHz Z80 (8MHz in CGB +double speed mode), execution time of all instructions has been rounded +up to a multiple of 4 cycles though.
+
+Moved, Removed, and Added Opcodes
+
  Opcode  Z80             GMB
+  ---------------------------------------
+  08      EX   AF,AF      LD   (nn),SP
+  10      DJNZ PC+dd      STOP
+  22      LD   (nn),HL    LDI  (HL),A
+  2A      LD   HL,(nn)    LDI  A,(HL)
+  32      LD   (nn),A     LDD  (HL),A
+  3A      LD   A,(nn)     LDD  A,(HL)
+  D3      OUT  (n),A      -
+  D9      EXX             RETI
+  DB      IN   A,(n)      -
+  DD      <IX>            -
+  E0      RET  PO         LD   (FF00+n),A
+  E2      JP   PO,nn      LD   (FF00+C),A
+  E3      EX   (SP),HL    -
+  E4      CALL P0,nn      -
+  E8      RET  PE         ADD  SP,dd
+  EA      JP   PE,nn      LD   (nn),A
+  EB      EX   DE,HL      -
+  EC      CALL PE,nn      -
+  ED      <pref>          -
+  F0      RET  P          LD   A,(FF00+n)
+  F2      JP   P,nn       LD   A,(FF00+C)
+  F4      CALL P,nn       -
+  F8      RET  M          LD   HL,SP+dd
+  FA      JP   M,nn       LD   A,(nn)
+  FC      CALL M,nn       -
+  FD      <IY>            -
+  CB3X    SLL  r/(HL)     SWAP r/(HL)
+
Note: The unused (-) opcodes will lock-up the gameboy CPU when used.
+
+
+
 The Cartridge Header

+An internal information area is located at 0100-014F in
+each cartridge. It contains the following values:
+
+0100-0103 - Entry Point
+
After displaying the Nintendo Logo, the built-in boot procedure jumps to +this address (100h), which should then jump to the actual main program +in the cartridge. Usually this 4 byte area contains a NOP instruction, +followed by a JP 0150h instruction. But not always.
+
+0104-0133 - Nintendo Logo
+
These bytes define the bitmap of the Nintendo logo that is displayed +when the gameboy gets turned on. The hexdump of this bitmap is:
+
  CE ED 66 66 CC 0D 00 0B 03 73 00 83 00 0C 00 0D
+  00 08 11 1F 88 89 00 0E DC CC 6E E6 DD DD D9 99
+  BB BB 67 63 6E 0E EC CC DD DC 99 9F BB B9 33 3E
+
The gameboys boot procedure verifies the content of this bitmap (after +it has displayed it), and LOCKS ITSELF UP if these bytes are incorrect. +A CGB verifies only the first 18h bytes of the bitmap, but others (for +example a pocket gameboy) verify all 30h bytes.
+
+0134-0143 - Title
+
Title of the game in UPPER CASE ASCII. If it is less than 16 characters +then the remaining bytes are filled with 00's. When inventing the CGB, +Nintendo has reduced the length of this area to 15 characters, and some +months later they had the fantastic idea to reduce it to 11 characters +only. The new meaning of the ex-title bytes is described below.
+
+013F-0142 - Manufacturer Code
+
In older cartridges this area has been part of the Title (see above), in +newer cartridges this area contains an 4 character uppercase +manufacturer code. Purpose and Deeper Meaning unknown.
+
+0143 - CGB Flag
+
In older cartridges this byte has been part of the Title (see above). In +CGB cartridges the upper bit is used to enable CGB functions. This is +required, otherwise the CGB switches itself into Non-CGB-Mode. Typical +values are:
+
  80h - Game supports CGB functions, but works on old gameboys also.
+  C0h - Game works on CGB only (physically the same as 80h).
+
Values with Bit 7 set, and either Bit 2 or 3 set, will switch the +gameboy into a special non-CGB-mode with uninitialized palettes. Purpose +unknown, eventually this has been supposed to be used to colorize +monochrome games that include fixed palette data at a special location +in ROM.
+
+0144-0145 - New Licensee Code
+
Specifies a two character ASCII licensee code, indicating the company or +publisher of the game. These two bytes are used in newer games only +(games that have been released after the SGB has been invented). Older +games are using the header entry at 014B instead.
+
+0146 - SGB Flag
+
Specifies whether the game supports SGB functions, common values are:
+
  00h = No SGB functions (Normal Gameboy or CGB only game)
+  03h = Game supports SGB functions
+
The SGB disables its SGB functions if this byte is set to another value +than 03h.
+
+0147 - Cartridge Type
+
Specifies which Memory Bank Controller (if any) is used in the +cartridge, and if further external hardware exists in the cartridge.
+
  00h  ROM ONLY                 13h  MBC3+RAM+BATTERY
+  01h  MBC1                     15h  MBC4
+  02h  MBC1+RAM                 16h  MBC4+RAM
+  03h  MBC1+RAM+BATTERY         17h  MBC4+RAM+BATTERY
+  05h  MBC2                     19h  MBC5
+  06h  MBC2+BATTERY             1Ah  MBC5+RAM
+  08h  ROM+RAM                  1Bh  MBC5+RAM+BATTERY
+  09h  ROM+RAM+BATTERY          1Ch  MBC5+RUMBLE
+  0Bh  MMM01                    1Dh  MBC5+RUMBLE+RAM
+  0Ch  MMM01+RAM                1Eh  MBC5+RUMBLE+RAM+BATTERY
+  0Dh  MMM01+RAM+BATTERY        FCh  POCKET CAMERA
+  0Fh  MBC3+TIMER+BATTERY       FDh  BANDAI TAMA5
+  10h  MBC3+TIMER+RAM+BATTERY   FEh  HuC3
+  11h  MBC3                     FFh  HuC1+RAM+BATTERY
+  12h  MBC3+RAM
+

+0148 - ROM Size
+
Specifies the ROM Size of the cartridge. Typically calculated as "32KB +shl N".
+
  00h -  32KByte (no ROM banking)
+  01h -  64KByte (4 banks)
+  02h - 128KByte (8 banks)
+  03h - 256KByte (16 banks)
+  04h - 512KByte (32 banks)
+  05h -   1MByte (64 banks)  - only 63 banks used by MBC1
+  06h -   2MByte (128 banks) - only 125 banks used by MBC1
+  07h -   4MByte (256 banks)
+  52h - 1.1MByte (72 banks)
+  53h - 1.2MByte (80 banks)
+  54h - 1.5MByte (96 banks)
+

+0149 - RAM Size
+
Specifies the size of the external RAM in the cartridge (if any).
+
  00h - None
+  01h - 2 KBytes
+  02h - 8 Kbytes
+  03h - 32 KBytes (4 banks of 8KBytes each)
+
When using a MBC2 chip 00h must be specified in this entry, even though +the MBC2 includes a built-in RAM of 512 x 4 bits.
+
+014A - Destination Code
+
Specifies if this version of the game is supposed to be sold in japan, +or anywhere else. Only two values are defined.
+
  00h - Japanese
+  01h - Non-Japanese
+

+014B - Old Licensee Code
+
Specifies the games company/publisher code in range 00-FFh. A value of +33h signalizes that the New License Code in header bytes 0144-0145 is +used instead.
+(Super GameBoy functions won't work if <> $33.)
+
+014C - Mask ROM Version number
+
Specifies the version number of the game. That is usually 00h.
+
+014D - Header Checksum
+
Contains an 8 bit checksum across the cartridge header bytes 0134-014C. +The checksum is calculated as follows:
+
  x=0:FOR i=0134h TO 014Ch:x=x-MEM[i]-1:NEXT
+
The lower 8 bits of the result must be the same than the value in this +entry. The GAME WON'T WORK if this checksum is incorrect.
+
+014E-014F - Global Checksum
+
Contains a 16 bit checksum (upper byte first) across the whole cartridge +ROM. Produced by adding all bytes of the cartridge (except for the two +checksum bytes). The Gameboy doesn't verify this checksum.
+
+
+
 Memory Bank Controllers

+As the gameboys 16 bit address bus offers only limited space for ROM and +RAM addressing, many games are using Memory Bank Controllers (MBCs) to +expand the available address space by bank switching. These MBC chips +are located in the game cartridge (ie. not in the gameboy itself), +several different MBC types are available:
+
+None (32KByte ROM only)
+MBC1 (max 2MByte ROM and/or 32KByte RAM)
+MBC2 (max 256KByte ROM and 512x4 bits RAM)
+MBC3 (max 2MByte ROM and/or 32KByte RAM and Timer)
+HuC1 (MBC with Infrared Controller)
+
+MBC Timing Issues
+
+In each cartridge, the required (or preferred) MBC type should be +specified in byte at 0147h of the ROM. (As described in the chapter +about The Cartridge Header.)
+
+
+
 None (32KByte ROM only)

+Small games of not more than 32KBytes ROM do not require a MBC chip for +ROM banking. The ROM is directly mapped to memory at 0000-7FFFh. +Optionally up to 8KByte of RAM could be connected at A000-BFFF, even +though that could require a tiny MBC-like circuit, but no real MBC chip.
+
+
+
 MBC1 (max 2MByte ROM and/or 32KByte RAM)

+This is the first MBC chip for the gameboy. Any newer MBC chips are +working similiar, so that is relative easy to upgrade a program from one +MBC chip to another - or even to make it compatible to several different +types of MBCs.
+
+Note that the memory in range 0000-7FFF is used for both reading from +ROM, and for writing to the MBCs Control Registers.
+
+0000-3FFF - ROM Bank 00 (Read Only)
+
This area always contains the first 16KBytes of the cartridge ROM.
+
+4000-7FFF - ROM Bank 01-7F (Read Only)
+
This area may contain any of the further 16KByte banks of the ROM, +allowing to address up to 125 ROM Banks (almost 2MByte). As described +below, bank numbers 20h, 40h, and 60h cannot be used, resulting in the +odd amount of 125 banks.
+
+A000-BFFF - RAM Bank 00-03, if any (Read/Write)
+
This area is used to address external RAM in the cartridge (if any). +External RAM is often battery buffered, allowing to store game positions +or high score tables, even if the gameboy is turned off, or if the +cartridge is removed from the gameboy. Available RAM sizes are: 2KByte +(at A000-A7FF), 8KByte (at A000-BFFF), and 32KByte (in form of four 8K +banks at A000-BFFF).
+
+0000-1FFF - RAM Enable (Write Only)
+
Before external RAM can be read or written, it must be enabled by +writing to this address space. It is recommended to disable external RAM +after accessing it, in order to protect its contents from damage during +power down of the gameboy. Usually the following values are used:
+
  00h  Disable RAM (default)
+  0Ah  Enable RAM
+
Practically any value with 0Ah in the lower 4 bits enables RAM, and any +other value disables RAM.
+
+2000-3FFF - ROM Bank Number (Write Only)
+
Writing to this address space selects the lower 5 bits of the ROM Bank +Number (in range 01-1Fh). When 00h is written, the MBC translates that +to bank 01h also. That doesn't harm so far, because ROM Bank 00h can be +always directly accessed by reading from 0000-3FFF.
+But (when using the register below to specify the upper ROM Bank bits), +the same happens for Bank 20h, 40h, and 60h. Any attempt to address +these ROM Banks will select Bank 21h, 41h, and 61h instead.
+
+4000-5FFF - RAM Bank Number - or - Upper Bits of ROM Bank Number (Write Only) +This 2bit register can be used to select a RAM Bank in range from +00-03h, or to specify the upper two bits (Bit 5-6) of the ROM Bank +number, depending on the current ROM/RAM Mode. (See below.)
+
+6000-7FFF - ROM/RAM Mode Select (Write Only)
+
This 1bit Register selects whether the two bits of the above register +should be used as upper two bits of the ROM Bank, or as RAM Bank Number.
+
  00h = ROM Banking Mode (up to 8KByte RAM, 2MByte ROM) (default)
+  01h = RAM Banking Mode (up to 32KByte RAM, 512KByte ROM)
+
The program may freely switch between both modes, the only limitiation +is that only RAM Bank 00h can be used during Mode 0, and only ROM Banks +00-1Fh can be used during Mode 1.
+
+
+
 MBC2 (max 256KByte ROM and 512x4 bits RAM)

+0000-3FFF - ROM Bank 00 (Read Only)
+
Same as for MBC1.
+
+4000-7FFF - ROM Bank 01-0F (Read Only)
+
Same as for MBC1, but only a total of 16 ROM banks is supported.
+
+A000-A1FF - 512x4bits RAM, built-in into the MBC2 chip (Read/Write)
+
The MBC2 doesn't support external RAM, instead it includes 512x4 bits of +built-in RAM (in the MBC2 chip itself). It still requires an external +battery to save data during power-off though.
+As the data consists of 4bit values, only the lower 4 bits of the +"bytes" in this memory area are used.
+
+0000-1FFF - RAM Enable (Write Only)
+
The least significant bit of the upper address byte must be zero to +enable/disable cart RAM. For example the following addresses can be used +to enable/disable cart RAM: 0000-00FF, 0200-02FF, 0400-04FF, ..., +1E00-1EFF.
+The suggested address range to use for MBC2 ram enable/disable is +0000-00FF.
+
+2000-3FFF - ROM Bank Number (Write Only)
+
Writing a value (XXXXBBBB - X = Don't cares, B = bank select bits) into +2000-3FFF area will select an appropriate ROM bank at 4000-7FFF.
+
+The least significant bit of the upper address byte must be one to +select a ROM bank. For example the following addresses can be used to +select a ROM bank: 2100-21FF, 2300-23FF, 2500-25FF, ..., 3F00-3FFF.
+The suggested address range to use for MBC2 rom bank selection is +2100-21FF.
+
+
+
 MBC3 (max 2MByte ROM and/or 32KByte RAM and Timer)

+Beside for the ability to access up to 2MB ROM (128 banks), and 32KB RAM +(4 banks), the MBC3 also includes a built-in Real Time Clock (RTC). The +RTC requires an external 32.768 kHz Quartz Oscillator, and an external +battery (if it should continue to tick when the gameboy is turned off).
+
+0000-3FFF - ROM Bank 00 (Read Only)
+
Same as for MBC1.
+
+4000-7FFF - ROM Bank 01-7F (Read Only)
+
Same as for MBC1, except that accessing banks 20h, 40h, and 60h is +supported now.
+
+A000-BFFF - RAM Bank 00-03, if any (Read/Write)
+A000-BFFF - RTC Register 08-0C (Read/Write)
+
Depending on the current Bank Number/RTC Register selection (see below), +this memory space is used to access an 8KByte external RAM Bank, or a +single RTC Register.
+
+0000-1FFF - RAM and Timer Enable (Write Only)
+
Mostly the same as for MBC1, a value of 0Ah will enable reading and +writing to external RAM - and to the RTC Registers! A value of 00h will +disable either.
+
+2000-3FFF - ROM Bank Number (Write Only)
+
Same as for MBC1, except that the whole 7 bits of the RAM Bank Number +are written directly to this address. As for the MBC1, writing a value +of 00h, will select Bank 01h instead. All other values 01-7Fh select the +corresponding ROM Banks.
+
+4000-5FFF - RAM Bank Number - or - RTC Register Select (Write Only)
+
As for the MBC1s RAM Banking Mode, writing a value in range for 00h-03h +maps the corresponding external RAM Bank (if any) into memory at +A000-BFFF.
+When writing a value of 08h-0Ch, this will map the corresponding RTC +register into memory at A000-BFFF. That register could then be +read/written by accessing any address in that area, typically that is +done by using address A000.
+
+6000-7FFF - Latch Clock Data (Write Only)
+
When writing 00h, and then 01h to this register, the current time +becomes latched into the RTC registers. The latched data will not change +until it becomes latched again, by repeating the write 00h->01h +procedure.
+This is supposed for <reading> from the RTC registers. It is proof to +read the latched (frozen) time from the RTC registers, while the clock +itself continues to tick in background.
+
+The Clock Counter Registers
+
  08h  RTC S   Seconds   0-59 (0-3Bh)
+  09h  RTC M   Minutes   0-59 (0-3Bh)
+  0Ah  RTC H   Hours     0-23 (0-17h)
+  0Bh  RTC DL  Lower 8 bits of Day Counter (0-FFh)
+  0Ch  RTC DH  Upper 1 bit of Day Counter, Carry Bit, Halt Flag
+        Bit 0  Most significant bit of Day Counter (Bit 8)
+        Bit 6  Halt (0=Active, 1=Stop Timer)
+        Bit 7  Day Counter Carry Bit (1=Counter Overflow)
+
The Halt Flag is supposed to be set before <writing> to the RTC +Registers.
+
+The Day Counter
+
The total 9 bits of the Day Counter allow to count days in range from +0-511 (0-1FFh). The Day Counter Carry Bit becomes set when this value +overflows. In that case the Carry Bit remains set until the program does +reset it.
+Note that you can store an offset to the Day Counter in battery RAM. For +example, every time you read a non-zero Day Counter, add this Counter to +the offset in RAM, and reset the Counter to zero. This method allows to +count any number of days, making your program Year-10000-Proof, provided +that the cartridge gets used at least every 511 days.
+
+Delays
+
When accessing the RTC Registers it is recommended to execute a 4ms +delay (4 Cycles in Normal Speed Mode) between the separate accesses.
+
+
+
 HuC1 (MBC with Infrared Controller)

+This controller (made by Hudson Soft) appears to be very similar to an +MBC1 with the main difference being that it supports infrared LED input +/ output. (Similiar to the infrared port that has been later invented in +CGBs.)
+
+The Japanese cart "Fighting Phoenix" (internal cart name: SUPER B DAMAN) +is known to contain this chip.
+
+
+
 MBC Timing Issues

+Using MBCs with CGB Double Speed Mode
+
The MBC5 has been designed to support CGB Double Speed Mode.
+There have been rumours that older MBCs (like MBC1-3) wouldn't be fast +enough in that mode. If so, it might be nethertheless possible to use +Double Speed during periods which use only code and data which is +located in internal RAM.
+However, despite of the above, my own good old selfmade MBC1-EPROM card +appears to work stable and fine even in Double Speed Mode though.
+
+
+
 Gamegenie/Shark Cheats

+Game Shark and Gamegenie are external cartridge adapters that can be +plugged between the gameboy and the actual game cartridge. Hexadecimal +codes can be then entered for specific games, typically providing things +like Infinite Sex, 255 Cigarettes, or Starting directly in Wonderland +Level PRO, etc.
+
+Gamegenie (ROM patches)
+
Gamegenie codes consist of nine-digit hex numbers, formatted as +ABC-DEF-GHI, the meaning of the separate digits is:
+
  AB    New data
+  FCDE  Memory address, XORed by 0F000h
+  GI    Old data, XORed by 0BAh and rotated left by two
+  H     Don't know, maybe checksum and/or else
+
The address should be located in ROM area 0000h-7FFFh, the adapter +permanently compares address/old data with address/data being read by +the game, and replaces that data by new data if necessary. That method +(more or less) prohibits unwanted patching of wrong memory banks. +Eventually it is also possible to patch external RAM ?
+Newer devices reportedly allow to specify only the first six digits +(optionally). As far as I rememeber, around three or four codes can be +used simultaneously.
+
+Game Shark (RAM patches)
+
Game Shark codes consist of eight-digit hex numbers, formatted as +ABCDEFGH, the meaning of the separate digits is:
+
  AB    External RAM bank number
+  CD    New Data
+  GHEF  Memory Address (internal or external RAM, A000-DFFF)
+
As far as I understand, patching is implement by hooking the original +VBlank interrupt handler, and re-writing RAM values each frame. The +downside is that this method steals some CPU time, also, it cannot be +used to patch program code in ROM.
+As far as I rememeber, somewhat 10-25 codes can be used simultaneously.
+
+
+
 Power Up Sequence

+When the GameBoy is powered up, a 256 byte program starting at memory +location 0 is executed. This program is located in a ROM inside the +GameBoy. The first thing the program does is read the cartridge +locations from $104 to $133 and place this graphic of a Nintendo logo on +the screen at the top. This image is then scrolled until it is in the +middle of the screen. Two musical notes are then played on the internal +speaker. Again, the cartridge locations $104 to $133 are read but this +time they are compared with a table in the internal rom. If any byte +fails to compare, then the GameBoy stops comparing bytes and simply +halts all operations. If all locations compare the same, then the +GameBoy starts adding all of the bytes in the cartridge from $134 to +$14d. A value of 25 decimal is added to this total. If the least +significant byte of the result is a not a zero, then the GameBoy will +stop doing anything. If it is a zero, then the internal ROM is disabled +and cartridge program execution begins at location $100 with the +following register values:
+
+
   AF=$01B0
+   BC=$0013
+   DE=$00D8
+   HL=$014D
+   Stack Pointer=$FFFE
+   [$FF05] = $00   ; TIMA
+   [$FF06] = $00   ; TMA
+   [$FF07] = $00   ; TAC
+   [$FF10] = $80   ; NR10
+   [$FF11] = $BF   ; NR11
+   [$FF12] = $F3   ; NR12
+   [$FF14] = $BF   ; NR14
+   [$FF16] = $3F   ; NR21
+   [$FF17] = $00   ; NR22
+   [$FF19] = $BF   ; NR24
+   [$FF1A] = $7F   ; NR30
+   [$FF1B] = $FF   ; NR31
+   [$FF1C] = $9F   ; NR32
+   [$FF1E] = $BF   ; NR33
+   [$FF20] = $FF   ; NR41
+   [$FF21] = $00   ; NR42
+   [$FF22] = $00   ; NR43
+   [$FF23] = $BF   ; NR30
+   [$FF24] = $77   ; NR50
+   [$FF25] = $F3   ; NR51
+   [$FF26] = $F1-GB, $F0-SGB ; NR52
+   [$FF40] = $91   ; LCDC
+   [$FF42] = $00   ; SCY
+   [$FF43] = $00   ; SCX
+   [$FF45] = $00   ; LYC
+   [$FF47] = $FC   ; BGP
+   [$FF48] = $FF   ; OBP0
+   [$FF49] = $FF   ; OBP1
+   [$FF4A] = $00   ; WY
+   [$FF4B] = $00   ; WX
+   [$FFFF] = $00   ; IE
+

+It is not a good idea to assume the above values will always exist. A +later version GameBoy could contain different values than these at +reset. Always set these registers on reset rather than assume they are +as above.
+
+Please note that GameBoy internal RAM on power up contains random data. +All of the GameBoy emulators tend to set all RAM to value $00 on entry.
+
+Cart RAM the first time it is accessed on a real GameBoy contains random +data. It will only contain known data if the GameBoy code initializes it +to some value.
+
+
+
 Reducing Power Consumption

+The following can be used to recude the power consumption of the +gameboy, and to extend the life of the batteries.
+
+PWR Using the HALT Instruction
+PWR Using the STOP Instruction
+PWR Disabeling the Sound Controller
+PWR Not using CGB Double Speed Mode
+PWR Using the Skills
+
+
+
 PWR Using the HALT Instruction

+It is recommended that the HALT instruction be used whenever possible to +reduce power consumption & extend the life of the batteries. This +command stops the system clock reducing the power consumption of both +the CPU and ROM.
+
+The CPU will remain suspended until an interrupt occurs at which point +the interrupt is serviced and then the instruction immediately following +the HALT is executed.
+
+Depending on how much CPU time is required by a game, the HALT +instruction can extend battery life anywhere from 5 to 50% or possibly +more.
+
+When waiting for a vblank event, this would be a BAD example:
+
  @@wait:
+   ld   a,(0FF44h)      ;LY
+   cp   a,144
+   jr   nz,@@wait
+

+A better example would be a procedure as shown below. In this case the +vblank interrupt must be enabled, and your vblank interrupt procedure +must set vblank_flag to a non-zero value.
+
   ld   hl,vblank_flag  ;hl=pointer to vblank_flag
+   xor  a               ;a=0
+  @@wait:               ;wait...
+   halt                 ;suspend CPU - wait for ANY interrupt
+   cp   a,(hl)          ;vblank flag still zero?
+   jr   z,@@wait        ;wait more if zero
+   ld   (hl),a          ;set vblank_flag back to zero
+
The vblank_flag is used to determine whether the HALT period has been +terminated by a vblank interrupt, or by another interrupt. In case that +your program has all other interrupts disabled, then it would be proof +to replace the above procedure by a single HALT instruction.
+
+
+
 PWR Using the STOP Instruction

+The STOP instruction is intended to switch the gameboy into VERY low +power standby mode. For example, a program may use this feature when it +hasn't sensed keyboard input for a longer period (assuming that somebody +forgot to turn off the gameboy).
+
+Before invoking STOP, it might be required to disable Sound and Video +manually (as well as IR-link port in CGB). Much like HALT, the STOP +state is terminated by interrupt events - in this case this would be +commonly a joypad interrupt. The joypad register might be required to be +prepared for STOP either.
+
+
+
 PWR Disabeling the Sound Controller

+If your programs doesn't use sound at all (or during some periods) then +write 00h to register FF26 to save 16% or more on GB power consumption.
+Sound can be turned back on by writing 80h to the same register, all +sound registers must be then re-initialized.
+When the gameboy becomes turned on, sound is enabled by default, and +must be turned off manually when not used.
+
+
+
 PWR Not using CGB Double Speed Mode

+Because CGB Double Speed mode consumes more power, it'd be recommended +to use normal speed when possible.
+There's limited ability to switch between both speeds, for example, a +game might use normal speed in the title screen, and double speed in the +game, or vice versa.
+However, during speed switch the display collapses for a short moment, +so that it'd be no good idea to alter speeds within active game or title +screen periods.
+
+
+
 PWR Using the Skills

+Most of the above power saving methods will produce best results when +using efficient and tight assembler code which requires as less CPU +power as possible. Thus, experienced old-school programmers will +(hopefully) produce lower power consumption, as than HLL-programming +teenagers, for example.
+
+
+
 Sprite RAM Bug

+There is a flaw in the GameBoy hardware that causes trash to be written +to OAM RAM if the following commands are used while their 16-bit content +is in the range of $FE00 to $FEFF:
+
  inc rr        dec rr          ;rr = bc,de, or hl
+  ldi a,(hl)    ldd a,(hl)
+  ldi (hl),a    ldd (hl),a
+
Only sprites 1 & 2 ($FE00 & $FE04) are not affected by these +instructions.
+
+
+
 External Connectors

+Cartridge Slot
+
  Pin   Name    Expl.
+  1     VDD     Power Supply +5V DC
+  2     PHI     System Clock
+  3     /WR     Write
+  4     /RD     Read
+  5     /CS     Chip Select
+  6-21  A0-A15  Address Lines
+  22-29 D0-D7   Data Lines
+  30    /RES    Reset signal
+  31    VIN     External Sound Input
+  32    GND     Ground
+

+Link Port
+
Pin numbers are arranged as 2,4,6 in upper row, 1,3,5 un lower row; +outside view of gameboy socket; flat side of socket upside.
+Colors as used in most or all standard link cables, because SIN and SOUT +are crossed, colors Red and Orange are exchanged at one cable end.
+
  Pin Name Color  Expl.
+  1   VCC  -      +5V DC
+  2   SOUT red    Data Out
+  3   SIN  orange Data In
+  4   P14  -      Not used
+  5   SCK  green  Shift Clock
+  6   GND  blue   Ground
+
Note: The original gameboy used larger plugs (unlike pocket gameboys and +newer), linking between older/newer gameboys is possible by using cables +with one large and one small plug though.
+
+Stereo Sound Connector (3.5mm, female)
+
  Pin     Expl.
+  Tip     Sound Left
+  Middle  Sound Right
+  Base    Ground
+

+External Power Supply
+
...
+
+
+
+
 END
+ \ No newline at end of file diff --git a/Dev Documentation/Ultimate Game Boy Talk.url b/Dev Documentation/Ultimate Game Boy Talk.url new file mode 100644 index 0000000..0b417b6 --- /dev/null +++ b/Dev Documentation/Ultimate Game Boy Talk.url @@ -0,0 +1,5 @@ +[{000214A0-0000-0000-C000-000000000046}] +Prop3=19,11 +[InternetShortcut] +IDList= +URL=https://www.youtube.com/watch?v=HyzD8pNlpwI diff --git a/Dev Documentation/gbctr.pdf b/Dev Documentation/gbctr.pdf new file mode 100644 index 0000000000000000000000000000000000000000..37148cf557d241f55f9663a4cd7161d4ae26a894 GIT binary patch literal 146763 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

kv9L>3j?=QT?6nU#`Z$toCG0S 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 literal 0 HcmV?d00001 diff --git a/Dev Documentation/gbspec.txt b/Dev Documentation/gbspec.txt new file mode 100644 index 0000000..443e1c2 --- /dev/null +++ b/Dev Documentation/gbspec.txt @@ -0,0 +1,1792 @@ +============================================================================ + Everything You Always Wanted To Know About GAMEBOY * +============================================================================ + + * but were afraid to ask + + + Pan of -ATX- Document Updated by contributions from: + Marat Fayzullin, Pascal Felber, Paul Robson, Martin Korth + + Last update 12-Mar-98 by kOOPa + + Forward: The following was typed up for informational purposes regarding + the inner workings on the hand-held game machine known as + GameBoy, manufactured and designed by Nintendo Co., LTD. + This info is presented to inform a user on how their Game Boy + works and what makes it "tick". GameBoy is copyrighted by + Nintendo Co., LTD. Any reference to copyrighted material is + not presented for monetary gain, but for educational purposes + and higher learning. + +Terms +----- + + GB = Original GameBoy + GBP = GameBoy Pocket/GameBoy Light + GBC = GameBoy Color + SGB = Super GameBoy + + +Game Boy Specs +-------------- + + CPU: 8-bit (Similar to the Z80 processor.) + Main RAM: 8K Byte + Video RAM: 8K Byte + Screen Size 2.6" + Resolution: 160x144 (20x18 tiles) + Max # of sprites: 40 + Max # sprites/line: 10 + Max sprite size: 8x16 + Min sprite size: 8x8 + Clock Speed: 4.194304 MHz (4.295454 SGB, 4.194/8.388MHz GBC) + Horiz Sync: 9198 KHz (9420 KHz for SGB) + Vert Sync: 59.73 Hz (61.17 Hz for SGB) + Sound: 4 channels with stereo sound + Power: DC6V 0.7W (DC3V 0.7W for GB Pocket) + + +Processor +--------- + + The GameBoy uses a computer chip similar to an Intel 8080. + It contains all of the instructions of an 8080 except there + are no exchange instructions. In many ways the processor is + more similar to the Zilog Z80 processor. Compared to the + Z80, some instructions have been added and some have been + taken away. + + The following are added instructions: + + ADD SP,nn ;nn = signed byte + LDI (HL),A ;Write A to (HL) and increment HL + LDD (HL),A ;Write A to (HL) and decrement HL + LDI A,(HL) ;Write (HL) to A and increment HL + LDD A,(HL) ;Write (HL) to A and decrement HL + LD A,($FF00+nn) + LD A,($FF00+C) + LD ($FF00+nn),A + LD ($FF00+C),A + LD (nnnn),SP + LD HL,SP+nn ;nn = signed byte + STOP ;Stop processor & screen until button press + SWAP r ;Swap high & low nibbles of r + + The following instructions have been removed: + + Any command that uses the IX or IY registers. + All IN/OUT instructions. + All exchange instructions. + All commands prefixed by ED (except remapped RETI). + All conditional jumps/calls/rets on parity/overflow and sign flag. + + The following instructions have different opcodes: + + LD A,[nnnn] + LD [nnnn],A + RETI + + +General Memory Map* Hardware Write Registers +------------------ ------------------------ + + Interrupt Enable Register + --------------------------- FFFF + Internal RAM + --------------------------- FF80 + Empty but unusable for I/O + --------------------------- FF4C + I/O ports + --------------------------- FF00 + Empty but unusable for I/O + --------------------------- FEA0 + Sprite Attrib Memory (OAM) + --------------------------- FE00 + Echo of 8kB Internal RAM + --------------------------- E000 + 8kB Internal RAM + --------------------------- C000 ------------------------- + 8kB switchable RAM bank / MBC1 ROM/RAM Select + --------------------------- A000 / ------------------------ + 8kB Video RAM / / RAM Bank Select + --------------------------- 8000 --/ / ----------------------- + 16kB switchable ROM bank 6000 ----/ / ROM Bank Select + --------------------------- 4000 ------/ ---------------------- + 16kB ROM bank #0 2000 --------/ RAM Bank enable + --------------------------- 0000 ------------------------------- + + * NOTE: b = bit, B = byte + + +Echo of 8kB Internal RAM +------------------------ + + The addresses E000-FE00 appear to access the internal RAM +the same as C000-DE00. (i.e. If you write a byte to address +E000 it will appear at C000 and E000. Similarly, writing a +byte to C000 will appear at C000 and E000.) + + +User I/O +-------- + + There are no empty spaces in the memory map for +implementing input ports except the switchable RAM bank +area (not an option on the Super Smart Card since it's +RAM bank is always enabled). + + An output only port may be implemented anywhere between +A000-FDFF. If implemented in a RAM area care should be +taken to use an area of RAM not used for anything else. +(FE00 and above can't be used because the CPU doesn't +generate an external /WR for these locations.) + + If you have a cart with an MBC1, a ROM 4Mbit or smaller, +and a RAM 8Kbyte or smaller (or no RAM) then you can use +pins 6 & 7 of the MBC1 for 2 digital output pins for +whatever purpose you wish. To use them you must first +put the MBC1 into 4MbitROM/32KbyteRAM mode by writing +01 to 6000. The two least significant bits you write +to 4000 will then be output to these pins. + + +Reserved Memory Locations +------------------------- + +0000 Restart $00 Address (RST $00 calls this address.) + +0008 Restart $08 Address (RST $08 calls this address.) + +0010 Restart $10 Address (RST $10 calls this address.) + +0018 Restart $18 Address (RST $18 calls this address.) + +0020 Restart $20 Address (RST $20 calls this address.) + +0028 Restart $28 Address (RST $28 calls this address.) + +0030 Restart $30 Address (RST $30 calls this address.) + +0038 Restart $38 Address (RST $38 calls this address.) + +0040 Vertical Blank Interrupt Start Address + +0048 LCDC Status Interrupt Start Address + +0050 Timer Overflow Interrupt Start Address + +0058 Serial Transfer Completion Interrupt Start Address + +0060 High-to-Low of P10-P13 Interrupt Start Address + +An internal information area is located at 0100-014F in +each cartridge. It contains the following values: + +0100-0103 This is the begin code execution point in a + cart. Usually there is a NOP and a JP + instruction here but not always. + +0104-0133 Scrolling Nintendo graphic: + CE ED 66 66 CC 0D 00 0B 03 73 00 83 00 0C 00 0D + 00 08 11 1F 88 89 00 0E DC CC 6E E6 DD DD D9 99 + BB BB 67 63 6E 0E EC CC DD DC 99 9F BB B9 33 3E + ( PROGRAM WON'T RUN IF CHANGED!!!) + +0134-0142 Title of the game in UPPER CASE ASCII. If it + is less than 16 characters then the remaining + bytes are filled with 00's. + +0143 $80 = Color GB, $00 or other = not Color GB + +0144 Ascii hex digit, high nibble of licensee code (new). +0145 Ascii hex digit, low nibble of licensee code (new). + (These are normally $00 if [$014B] <> $33.) + +0146 GB/SGB Indicator (00 = GameBoy, 03 = Super GameBoy functions) + (Super GameBoy functions won't work if <> $03.) + +0147 Cartridge type: + 0 - ROM ONLY 12 - ROM+MBC3+RAM + 1 - ROM+MBC1 13 - ROM+MBC3+RAM+BATT + 2 - ROM+MBC1+RAM 19 - ROM+MBC5 + 3 - ROM+MBC1+RAM+BATT 1A - ROM+MBC5+RAM + 5 - ROM+MBC2 1B - ROM+MBC5+RAM+BATT + 6 - ROM+MBC2+BATTERY 1C - ROM+MBC5+RUMBLE + 8 - ROM+RAM 1D - ROM+MBC5+RUMBLE+SRAM + 9 - ROM+RAM+BATTERY 1E - ROM+MBC5+RUMBLE+SRAM+BATT + B - ROM+MMM01 1F - Pocket Camera + C - ROM+MMM01+SRAM FD - Bandai TAMA5 + D - ROM+MMM01+SRAM+BATT FE - Hudson HuC-3 + F - ROM+MBC3+TIMER+BATT FF - Hudson HuC-1 + 10 - ROM+MBC3+TIMER+RAM+BATT + 11 - ROM+MBC3 + +0148 ROM size: + 0 - 256Kbit = 32KByte = 2 banks + 1 - 512Kbit = 64KByte = 4 banks + 2 - 1Mbit = 128KByte = 8 banks + 3 - 2Mbit = 256KByte = 16 banks + 4 - 4Mbit = 512KByte = 32 banks + 5 - 8Mbit = 1MByte = 64 banks + 6 - 16Mbit = 2MByte = 128 banks + $52 - 9Mbit = 1.1MByte = 72 banks + $53 - 10Mbit = 1.2MByte = 80 banks + $54 - 12Mbit = 1.5MByte = 96 banks + +0149 RAM size: + 0 - None + 1 - 16kBit = 2kB = 1 bank + 2 - 64kBit = 8kB = 1 bank + 3 - 256kBit = 32kB = 4 banks + 4 - 1MBit =128kB =16 banks + +014A Destination code: + 0 - Japanese + 1 - Non-Japanese + +014B Licensee code (old): + 33 - Check 0144/0145 for Licensee code. + 79 - Accolade + A4 - Konami + (Super GameBoy function won't work if <> $33.) + +014C Mask ROM Version number (Usually $00) + +014D Complement check + (PROGRAM WON'T RUN ON GB IF NOT CORRECT!!!) + (It will run on Super GB, however, if incorrect.) + +014E-014F Checksum (higher byte first) produced by + adding all bytes of a cartridge except for two + checksum bytes and taking two lower bytes of + the result. (GameBoy ignores this value.) + + +Cartridge Types +--------------- + +The following define the byte at cart location 0147: + + ROM ONLY + This is a 32kB (256kb) ROM and occupies 0000-7FFF. + + MBC1 (Memory Bank Controller 1) + MBC1 has two different maximum memory modes: + 16Mbit ROM/8KByte RAM or 4Mbit ROM/32KByte RAM. + + The MBC1 defaults to 16Mbit ROM/8KByte RAM mode + on power up. Writing a value (XXXXXXXS - X = Don't + care, S = Memory model select) into 6000-7FFF area + will select the memory model to use. S = 0 selects + 16/8 mode. S = 1 selects 4/32 mode. + + Writing a value (XXXBBBBB - X = Don't cares, B = + bank select bits) into 2000-3FFF area will select an + appropriate ROM bank at 4000-7FFF. Values of 0 and 1 + do the same thing and point to ROM bank 1. Rom bank 0 + is not accessible from 4000-7FFF and can only be read + from 0000-3FFF. + + If memory model is set to 4/32: + Writing a value (XXXXXXBB - X = Don't care, B = + bank select bits) into 4000-5FFF area will select an + appropriate RAM bank at A000-C000. Before you can + read or write to a RAM bank you have to enable it by + writing a XXXX1010 into 0000-1FFF area*. To disable + RAM bank operations write any value but XXXX1010 + into 0000-1FFF area. Disabling a RAM bank probably + protects that bank from false writes during power + down of the GameBoy. (NOTE: Nintendo suggests values + $0A to enable and $00 to disable RAM bank!!) + + If memory model is set to 16/8 mode: + Writing a value (XXXXXXBB - X = Don't care, B = + bank select bits) into 4000-5FFF area will set the + two most significant ROM address lines. + + * NOTE: The Super Smart Card doesn't require this + operation because it's RAM bank is ALWAYS enabled. + Include this operation anyway to allow your code + to work with both. + + MBC2 (Memory Bank Controller 2): + This memory controller works much like the MBC1 + controller with the following exceptions: + + MBC2 will work with ROM sizes up to 2Mbit. + + Writing a value (XXXXBBBB - X = Don't cares, B = + bank select bits) into 2000-3FFF area will select an + appropriate ROM bank at 4000-7FFF. + + RAM switching is not provided. Unlike the MBC1 which + uses external RAM, MBC2 has 512 x 4 bits of RAM which + is in the controller itself. It still requires an + external battery to save data during power-off though. + + The least significant bit of the upper address byte + must be zero to enable/disable cart RAM. For example + the following addresses can be used to enable/disable + cart RAM: + 0000-00FF, 0200-02FF, 0400-04FF, ..., 1E00-1EFF. + The suggested address range to use for MBC2 ram + enable/disable is 0000-00FF. + + The least significant bit of the upper address byte + must be one to select a ROM bank. For example the + following addresses can be used to select a ROM bank: + 2100-21FF, 2300-23FF, 2500-25FF, ..., 3F00-3FFF. + The suggested address range to use for MBC2 rom + bank selection is 2100-21FF. + + MBC3 (Memory Bank Controller 3): + This controller is similar to MBC1 except it accesses + all 16mbits of ROM without requiring any writes to the + 4000-5FFF area. + Writing a value (XBBBBBBB - X = Don't care, B = + bank select bits) into 2000-3FFF area will select an + appropriate ROM bank at 4000-7FFF. + + Also, this MBC has a built-in battery-backed Real + Time Clock (RTC) not found in any other MBC. Some + MBC3 carts do not support it (WarioLand II non-color + version) but some do (Harvest Moon/Japanese version.) + + MBC5 (Memory Bank Controller 5): + This controller is the first MBC that is guaranteed + to run in GameBoy Color double-speed mode but it + appears the other MBC's run fine in GBC double-speed + mode as well. + + It is similar to the MBC3 (but no RTC) but can + access up to 64mbits of ROM and up to 1mbit of RAM. + The lower 8 bits of the 9-bit rom bank select is + written to the 2000-2FFF area while the upper bit + is written to the least significant bit of the + 3000-3FFF area. + + Writing a value (XXXXBBBB - X = Don't care, B = + bank select bits) into 4000-5FFF area will select an + appropriate RAM bank at A000-BFFF if the cart + contains RAM. Ram sizes are 64kbit,256kbit, & 1mbit. + + Also, this is the first MBC that allows rom bank 0 + to appear in the 4000-7FFF range by writing $000 + to the rom bank select. + + Rumble Carts: + Rumble carts use an MBC5 memory bank controller. + Rumble carts can only have up to 256kbits of RAM. + The highest RAM address line that allows 1mbit of + RAM on MBC5 non-rumble carts is used as the motor + on/off for the rumble cart. + + Writing a value (XXXXMBBB - X = Don't care, M = + motor, B = bank select bits) into 4000-5FFF area + will select an appropriate RAM bank at A000-BFFF + if the cart contains RAM. RAM sizes are 64kbit or + 256kbits. To turn the rumble motor on set M = 1, + M = 0 turns it off. + + HuC1 (Memory Bank / Infrared Controller): + This controller made by Hudson Soft appears to be + very similar to an MBC1 with the main difference + being that it supports infrared LED input / output. + The Japanese cart "Fighting Phoenix" (internal cart + name: SUPER B DAMAN) is known to contain this chip. + + + +Power Up Sequence +----------------- + + When the GameBoy is powered up, a 256 byte program + starting at memory location 0 is executed. This program + is located in a ROM inside the GameBoy. The first thing + the program does is read the cartridge locations from + $104 to $133 and place this graphic of a Nintendo logo + on the screen at the top. This image is then scrolled + until it is in the middle of the screen. Two musical + notes are then played on the internal speaker. Again, + the cartridge locations $104 to $133 are read but this + time they are compared with a table in the internal rom. + If any byte fails to compare, then the GameBoy stops + comparing bytes and simply halts all operations. + + GB & GB Pocket: + Next, the GameBoy starts adding all of the bytes + in the cartridge from $134 to $14d. A value of 25 + decimal is added to this total. If the least + significant byte of the result is a not a zero, + then the GameBoy will stop doing anything. + + Super GB: + Even though the GB & GBP check the memory locations + from $134 to $14d, the SGB doesn't. + + If the above checks pass then the internal ROM is + disabled and cartridge program execution begins at + location $100 with the following register values: + + AF=$01-GB/SGB, $FF-GBP, $11-GBC + F =$B0 + BC=$0013 + DE=$00D8 + HL=$014D + Stack Pointer=$FFFE + [$FF05] = $00 ; TIMA + [$FF06] = $00 ; TMA + [$FF07] = $00 ; TAC + [$FF10] = $80 ; NR10 + [$FF11] = $BF ; NR11 + [$FF12] = $F3 ; NR12 + [$FF14] = $BF ; NR14 + [$FF16] = $3F ; NR21 + [$FF17] = $00 ; NR22 + [$FF19] = $BF ; NR24 + [$FF1A] = $7F ; NR30 + [$FF1B] = $FF ; NR31 + [$FF1C] = $9F ; NR32 + [$FF1E] = $BF ; NR33 + [$FF20] = $FF ; NR41 + [$FF21] = $00 ; NR42 + [$FF22] = $00 ; NR43 + [$FF23] = $BF ; NR30 + [$FF24] = $77 ; NR50 + [$FF25] = $F3 ; NR51 + [$FF26] = $F1-GB, $F0-SGB ; NR52 + [$FF40] = $91 ; LCDC + [$FF42] = $00 ; SCY + [$FF43] = $00 ; SCX + [$FF45] = $00 ; LYC + [$FF47] = $FC ; BGP + [$FF48] = $FF ; OBP0 + [$FF49] = $FF ; OBP1 + [$FF4A] = $00 ; WY + [$FF4B] = $00 ; WX + [$FFFF] = $00 ; IE + + It is not a good idea to assume the above values +will always exist. A later version GameBoy could +contain different values than these at reset. +Always set these registers on reset rather than +assume they are as above. + + Please note that GameBoy internal RAM on power up +contains random data. All of the GameBoy emulators +tend to set all RAM to value $00 on entry. + + Cart RAM the first time it is accessed on a real +GameBoy contains random data. It will only contain +known data if the GameBoy code initializes it to +some value. + +Stop Mode +--------- + + The STOP command halts the GameBoy processor + and screen until any button is pressed. The GB + and GBP screen goes white with a single dark + horizontal line. The GBC screen goes black. + + +Low-Power Mode +-------------- + + It is recommended that the HALT instruction be used + whenever possible to reduce power consumption & extend + the life of the batteries. This command stops the + system clock reducing the power consumption of both + the CPU and ROM. + + The CPU will remain suspended until an interrupt + occurs at which point the interrupt is serviced and + then the instruction immediately following the HALT + is executed. If interrupts are disabled (DI) then + halt doesn't suspend operation but it does cause + the program counter to stop counting for one + instruction on the GB,GBP, and SGB as mentioned below. + + Depending on how much CPU time is required by a game, + the HALT instruction can extend battery life anywhere + from 5 to 50% or possibly more. + + WARNING: The instruction immediately following the + HALT instruction is "skipped" when interrupts are + disabled (DI) on the GB,GBP, and SGB. As a result, + always put a NOP after the HALT instruction. This + instruction skipping doesn't occur when interrupts + are enabled (EI). + This "skipping" does not seem to occur on the + GameBoy Color even in regular GB mode. ($143=$00) + + EXAMPLES from Martin Korth who documented this problem: + (assuming interrupts disabled for all examples) + +1) This code causes the 'a' register to be incremented TWICE. + 76 halt + 3C inc a + +2) The next example is a bit more difficult. The following code + 76 halt + FA 34 12 ld a,(1234) + + is effectively executed as + + 76 halt + FA FA 34 ld a,(34FA) + 12 ld (de),a + +3) Finally an interesting side effect + 76 halt + 76 halt + + This combination hangs the cpu. + The first HALT causes the second HALT to be repeated, which + therefore causes the following command (=itself) to be + repeated - again and again. + Placing a NOP between the two halts would cause the NOP to + be repeated once, the second HALT wouldn't lock the cpu. + + Below is suggested code for GameBoy programs: + + ; **** Main Game Loop **** + Main: + halt ; stop system clock + ; return from halt when interrupted + nop ; (See WARNING above.) + + ld a,(VblnkFlag) + or a ; V-Blank interrupt ? + jr z,Main ; No, some other interrupt + + xor a + ld (VblnkFlag),a ; Clear V-Blank flag + + call Controls ; button inputs + call Game ; game operation + + jr Main + + ; **** V-Blank Interrupt Routine **** + Vblnk: + push af + push bc + push de + push hl + + call SpriteDma ; Do sprite updates + + ld a,1 + ld (VblnkFlag),a + + pop hl + pop de + pop bc + pop af + reti + + +Video +----- + + The main GameBoy screen buffer (background) consists + of 256x256 pixels or 32x32 tiles (8x8 pixels each). Only + 160x144 pixels can be displayed on the screen. Registers + SCROLLX and SCROLLY hold the coordinates of background to + be displayed in the left upper corner of the screen. + Background wraps around the screen (i.e. when part of it + goes off the screen, it appears on the opposite side.) + + An area of VRAM known as Background Tile Map contains + the numbers of tiles to be displayed. It is organized as + 32 rows of 32 bytes each. Each byte contains a number of + a tile to be displayed. Tile patterns are taken from the + Tile Data Table located either at $8000-8FFF or + $8800-97FF. In the first case, patterns are numbered with + unsigned numbers from 0 to 255 (i.e. pattern #0 lies at + address $8000). In the second case, patterns have signed + numbers from -128 to 127 (i.e. pattern #0 lies at address + $9000). The Tile Data Table address for the background + can be selected by setting the LCDC register. + + There are two different Background Tile Maps. One is + located from $9800-9Bff. The other from $9C00-9FFF. + Only one of these can be viewed at any one time. The + currently displayed background can be selected by + setting the LCDC register. + + Besides background, there is also a "window" overlaying + the background. The window is not scrollable i.e. it is + always displayed starting from its left upper corner. The + location of a window on the screen can be adjusted via + WNDPOSX and WNDPOSY registers. Screen coordinates of the + top left corner of a window are WNDPOSX-7,WNDPOSY. The + tile numbers for the window are stored in the Tile Data + Table. None of the windows tiles are ever transparent. + Both the Background and the window share the same Tile + Data Table. + + Both background and window can be disabled or enabled + separately via bits in the LCDC register. + + If the window is used and a scan line interrupt disables + it (either by writing to LCDC or by setting WX > 166) + and a scan line interrupt a little later on enables it + then the window will resume appearing on the screen at the + exact position of the window where it left off earlier. + This way, even if there are only 16 lines of useful graphics + in the window, you could display the first 8 lines at the + top of the screen and the next 8 lines at the bottom if + you wanted to do so. + + WX may be changed during a scan line interrupt (to either + cause a graphic distortion effect or to disable the window + (WX>166) ) but changes to WY are not dynamic and won't + be noticed until the next screen redraw. + + The tile images are stored in the Tile Pattern Tables. + Each 8x8 image occupies 16 bytes, where each 2 bytes + represent a line: + + Tile: Image: + + .33333.. .33333.. -> 01111100 -> $7C + 22...22. 01111100 -> $7C + 11...11. 22...22. -> 00000000 -> $00 + 2222222. <-- digits 11000110 -> $C6 + 33...33. represent 11...11. -> 11000110 -> $C6 + 22...22. color 00000000 -> $00 + 11...11. numbers 2222222. -> 00000000 -> $00 + ........ 11111110 -> $FE + 33...33. -> 11000110 -> $C6 + 11000110 -> $C6 + 22...22. -> 00000000 -> $00 + 11000110 -> $C6 + 11...11. -> 11000110 -> $C6 + 00000000 -> $00 + ........ -> 00000000 -> $00 + 00000000 -> $00 + + As it was said before, there are two Tile Pattern Tables + at $8000-8FFF and at $8800-97FF. The first one can be used + for sprites, the background, and the window display. Its + tiles are numbered from 0 to 255. The second table can be + used for the background and the window display and its tiles + are numbered from -128 to 127. + + +Sprites +------ + + GameBoy video controller can display up to 40 sprites + either in 8x8 or in 8x16 pixels. Because of a limitation + of hardware, only ten sprites can be displayed per scan + line. Sprite patterns have the same format as tiles, but + they are taken from the Sprite Pattern Table located at + $8000-8FFF and have unsigned numbering. Sprite + attributes reside in the Sprite Attribute Table (OAM + - Object Attribute Memory) at $FE00-FE9F. OAM is divided + into 40 4-byte blocks each of which corresponds to a sprite. + + In 8x16 sprite mode, the least significant bit of the + sprite pattern number is ignored and treated as 0. + + When sprites with different x coordinate values overlap, + the one with the smaller x coordinate (closer to the left) + will have priority and appear above any others. + + When sprites with the same x coordinate values overlap, + they have priority according to table ordering. (i.e. + $FE00 - highest, $FE04 - next highest, etc.) + + Please note that Sprite X=0, Y=0 hides a sprite. To + display a sprite use the following formulas: + + SpriteScreenPositionX(Upper left corner of sprite) = SpriteX - 8 + SpriteScreenPositionY(Upper left corner of sprite) = SpriteY - 16 + + To display a sprite in the upper left corner of the + screen set sprite X=8, Y=16. + + Only 10 sprites can be displayed on any one line. + When this limit is exceeded, the lower priority sprites + (priorities listed above) won't be displayed. To keep + unused sprites from affecting onscreen sprites set their + Y coordinate to Y=0 or Y=>144+16. Just setting the X + coordinate to X=0 or X=>160+8 on a sprite will hide it + but it will still affect other sprites sharing the same + lines. + + Blocks have the following + format: + + Byte0 Y position on the screen + Byte1 X position on the screen + Byte2 Pattern number 0-255 (Unlike some tile + numbers, sprite pattern numbers are unsigned. + LSB is ignored (treated as 0) in 8x16 mode.) + Byte3 Flags: + + Bit7 Priority + If this bit is set to 0, sprite is displayed + on top of background & window. If this bit + is set to 1, then sprite will be hidden behind + colors 1, 2, and 3 of the background & window. + (Sprite only prevails over color 0 of BG & win.) + Bit6 Y flip + Sprite pattern is flipped vertically if + this bit is set to 1. + Bit5 X flip + Sprite pattern is flipped horizontally if + this bit is set to 1. + Bit4 Palette number + Sprite colors are taken from OBJ1PAL if + this bit is set to 1 and from OBJ0PAL + otherwise. + + +Sprite RAM Bug +-------------- + + There is a flaw in the GameBoy hardware that causes + trash to be written to OAM RAM if the following commands + are used while their 16-bit content is in the range + of $FE00 to $FEFF: + + inc xx (xx = bc,de, or hl) + dec xx + + ldi a,(hl) + ldd a,(hl) + + ldi (hl),a + ldd (hl),a + + Only sprites 1 & 2 ($FE00 & $FE04) are not affected + by these instructions. + + +Sound +----- + + There are two sound channels connected to the output + terminals SO1 and SO2. There is also a input terminal Vin + connected to the cartridge. It can be routed to either of + both output terminals. GameBoy circuitry allows producing + sound in four different ways: + + Quadrangular wave patterns with sweep and envelope functions. + Quadrangular wave patterns with envelope functions. + Voluntary wave patterns from wave RAM. + White noise with an envelope function. + + These four sounds can be controlled independantly and + then mixed separately for each of the output terminals. + + Sound registers may be set at all times while producing + sound. + + When setting the initial value of the envelope and + restarting the length counter, set the initial flag to 1 + and initialize the data. + + Under the following situations the Sound ON flag is + reset and the sound output stops: + + 1. When the sound output is stopped by the length counter. + 2. When overflow occurs at the addition mode while sweep + is operating at sound 1. + + When the Sound OFF flag for sound 3 (bit 7 of NR30) is + set at 0, the cancellation of the OFF mode must be done + by setting the sound OFF flag to 1. By initializing + sound 3, it starts it's function. + + When the All Sound OFF flag (bit 7 of NR52) is set to 0, + the mode registers for sounds 1,2,3, and 4 are reset and + the sound output stops. (NOTE: The setting of each sounds + mode register must be done after the All Sound OFF mode + is cancelled. During the All Sound OFF mode, each sound + mode register cannot be set.) + + NOTE: DURING THE ALL SOUND OFF MODE, GB POWER CONSUMPTION + DROPS BY 16% OR MORE! WHILE YOUR PROGRAMS AREN'T USING + SOUND THEN SET THE ALL SOUND OFF FLAG TO 0. IT DEFAULTS + TO 1 ON RESET. + + These tend to be the two most important equations in + converting between Hertz and GB frequency registers: + (Sounds will have a 2.4% higher frequency on Super GB.) + + gb = 2048 - (131072 / Hz) + + Hz = 131072 / (2048 - gb) + + +Timer +----- + + Sometimes it's useful to have a timer that interrupts at + regular intervals for routines that require periodic or + percise updates. The timer in the GameBoy has a selectable + frequency of 4096, 16384, 65536, or 262144 Hertz. This + frequency increments the Timer Counter (TIMA). When it + overflows, it generates an interrupt. It is then loaded + with the contents of Timer Modulo (TMA). The following + are examples: + + ;This interval timer interrupts 4096 times per second + + ld a,-1 + ld ($FF06),a ;Set TMA to divide clock by 1 + ld a,4 + ld ($FF07),a ;Set clock to 4096 Hertz + + ;This interval timer interrupts 65536 times per second + + ld a,-4 + ld ($FF06),a ;Set TMA to divide clock by 4 + ld a,5 + ld ($FF07),a ;Set clock to 262144 Hertz + + +Serial I/O +---------- + + The serial I/O port on the Gameboy is a very simple setup + and is crude compared to standard RS-232 (IBM-PC) or RS-485 + (Macintosh) serial ports. There are no start or stop bits + so the programmer must be more creative when using this port. + + During a transfer, a byte is shifted in at the same time + that a byte is shifted out. The rate of the shift is deter- + mined by whether the clock source is internal or external. + If internal, the bits are shifted out at a rate of 8192Hz + (122 microseconds) per bit. The most significant bit is + shifted in and out first. + + When the internal clock is selected, it drives the clock + pin on the game link port and it stays high when not used. + During a transfer it will go low eight times to clock + in/out each bit. + + A programmer initates a serial transfer by setting bit 7 + of $FF02. This bit may be read and is automatically set + to 0 at the completion of transfer. After this bit is set, + an interrupt will then occur eight bit clocks later if the + serial interrupt is enabled. + If internal clock is selected and serial interrupt is + enabled, this interrupt occurs 122*8 microseconds later. + If external clock is selected and serial interrupt is + enabled, an interrupt will occur eight bit clocks later. + + Initiating a serial transfer with external clock will + wait forever if no external clock is present. This allows + a certain amount of synchronization with each serial port. + + The state of the last bit shifted out determines the + state of the output line until another transfer takes + place. + + If a serial transfer with internal clock is performed + and no external GameBoy is present, a value of $FF will + be received in the transfer. + + The following code causes $75 to be shifted out the + serial port and a byte to be shifted into $FF01: + + ld a,$75 + ld ($FF01),a + ld a,$81 + ld ($FF02),a + + +Interrupt Procedure +------------------- + + The IME (interrupt master enable) flag is reset by DI and + prohibits all interrupts. It is set by EI and acknowledges + the interrupt setting by the IE register. + + 1. When an interrupt is generated, the IF flag will be set. + 2. If the IME flag is set & the corresponding IE flag is + set, the following 3 steps are performed. + 3. Reset the IME flag and prevent all interrupts. + 4. The PC (program counter) is pushed onto the stack. + 5. Jump to the starting address of the interrupt. + + Resetting of the IF register, which was the cause of the + interrupt, is done by hardware. + + During the interrupt, pushing of registers to be used + should be performed by the interrupt routine. + + Once the interrupt service is in progress, all the + interrupts will be prohibited. However, if the IME flag + and the IE flag are controlled, a number of interrupt + services can be made possible by nesting. + + Return from an interrupt routine can be performed by + either RETI or RET instruction. + + The RETI instruction enables interrupts after doing a + return operation. + + If a RET is used as the final instruction in an interrupt + routine, interrupts will remain disabled unless a EI was + used in the interrupt routine or is used at a later time. + + The interrupt will be acknowledged during opcode fetch + period of each instruction. + + +Interrupt Descriptions +---------------------- + + The following interrupts only occur if they have been + enabled in the Interrupt Enable register ($FFFF) and + if the interrupts have actually been enabled using the + EI instruction. + + V-Blank - + + The V-Blank interrupt occurs ~59.7 times a second + on a regular GB and ~61.1 times a second on a Super + GB (SGB). This interrupt occurs at the beginning of + the V-Blank period. During this period video hardware + is not using video ram so it may be freely accessed. + This period lasts approximately 1.1 milliseconds. + + LCDC Status - + + There are various reasons for this interrupt to occur + as described by the STAT register ($FF40). One very + popular reason is to indicate to the user when the + video hardware is about to redraw a given LCD line. + This can be useful for dynamically controlling the SCX/ + SCY registers ($FF43/$FF42) to perform special video + effects. + + Timer Overflow - + + This interrupt occurs when the TIMA register ($FF05) + changes from $FF to $00. + + Serial Transfer Completion - + + This interrupt occurs when a serial transfer has + completed on the game link port. + + High-to-Low of P10-P13 - + + This interrupt occurs on a transition of any of the + keypad input lines from high to low. Due to the fact + that keypad "bounce"* is virtually always present, + software should expect this interrupt to occur one + or more times for every button press and one or more + times for every button release. + + * - Bounce tends to be a side effect of any button + making or breaking a connection. During these + periods, it is very common for a small amount of + oscillation between high & low states to take place. + +I/O Registers +------------- + +FF00 + Name - P1 + Contents - Register for reading joy pad info + and determining system type. (R/W) + + Bit 7 - Not used + Bit 6 - Not used + Bit 5 - P15 out port + Bit 4 - P14 out port + Bit 3 - P13 in port + Bit 2 - P12 in port + Bit 1 - P11 in port + Bit 0 - P10 in port + + This is the matrix layout for register $FF00: + + + P14 P15 + | | + P10-------O-Right----O-A + | | + P11-------O-Left-----O-B + | | + P12-------O-Up-------O-Select + | | + P13-------O-Down-----O-Start + | | + + Example code: + + Game: Ms. Pacman + Address: $3b1 + + LD A,$20 <- bit 5 = $20 + LD ($FF00),A <- select P14 by setting it low + LD A,($FF00) + LD A,($FF00) <- wait a few cycles + CPL <- complement A + AND $0F <- get only first 4 bits + SWAP A <- swap it + LD B,A <- store A in B + LD A,$10 + LD ($FF00),A <- select P15 by setting it low + LD A,($FF00) + LD A,($FF00) + LD A,($FF00) + LD A,($FF00) + LD A,($FF00) + LD A,($FF00) <- Wait a few MORE cycles + CPL <- complement (invert) + AND $0F <- get first 4 bits + OR B <- put A and B together + + LD B,A <- store A in D + LD A,($FF8B) <- read old joy data from ram + XOR B <- toggle w/current button bit + AND B <- get current button bit back + LD ($FF8C),A <- save in new Joydata storage + LD A,B <- put original value in A + LD ($FF8B),A <- store it as old joy data + + + LD A,$30 <- deselect P14 and P15 + LD ($FF00),A <- RESET Joypad + RET <- Return from Subroutine + + The button values using the above method are such: + $80 - Start $8 - Down + $40 - Select $4 - Up + $20 - B $2 - Left + $10 - A $1 - Right + + Let's say we held down A, Start, and Up. + The value returned in accumulator A would be $94 + + +FF01 + Name - SB + Contents - Serial transfer data (R/W) + + 8 Bits of data to be read/written + +FF02 + Name - SC + Contents - SIO control (R/W) + + Bit 7 - Transfer Start Flag + 0: Non transfer + 1: Start transfer + + Bit 0 - Shift Clock + 0: External Clock (500KHz Max.) + 1: Internal Clock (8192Hz) + + Transfer is initiated by setting the + Transfer Start Flag. This bit may be read + and is automatically set to 0 at the end of + Transfer. + + Transmitting and receiving serial data is + done simultaneously. The received data is + automatically stored in SB. + +FF04 + Name - DIV + Contents - Divider Register (R/W) + + This register is incremented 16384 (~16779 + on SGB) times a second. Writing any value + sets it to $00. +FF05 + Name - TIMA + Contents - Timer counter (R/W) + + This timer is incremented by a clock frequency + specified by the TAC register ($FF07). The timer + generates an interrupt when it overflows. + +FF06 + Name - TMA + Contents - Timer Modulo (R/W) + + When the TIMA overflows, this data will be loaded. + +FF07 + Name - TAC + Contents - Timer Control (R/W) + + Bit 2 - Timer Stop + 0: Stop Timer + 1: Start Timer + + Bits 1+0 - Input Clock Select + 00: 4.096 KHz (~4.194 KHz SGB) + 01: 262.144 KHz (~268.4 KHz SGB) + 10: 65.536 KHz (~67.11 KHz SGB) + 11: 16.384 KHz (~16.78 KHz SGB) + +FF0F + Name - IF + Contents - Interrupt Flag (R/W) + + Bit 4: Transition from High to Low of Pin number P10-P13 + Bit 3: Serial I/O transfer complete + Bit 2: Timer Overflow + Bit 1: LCDC (see STAT) + Bit 0: V-Blank + + The priority and jump address for the above 5 interrupts are: + + Interrupt Priority Start Address + + V-Blank 1 $0040 + LCDC Status 2 $0048 - Modes 0, 1, 2 + LYC=LY coincide (selectable) + Timer Overflow 3 $0050 + Serial Transfer 4 $0058 - when transfer is complete + Hi-Lo of P10-P13 5 $0060 + + * When more than 1 interrupts occur at the same time + only the interrupt with the highest priority can be + acknowledged. When an interrupt is used a '0' should + be stored in the IF register before the IE register + is set. + + +FF10 + Name - NR 10 + Contents - Sound Mode 1 register, Sweep register (R/W) + + Bit 6-4 - Sweep Time + Bit 3 - Sweep Increase/Decrease + 0: Addition (frequency increases) + 1: Subtraction (frequency decreases) + Bit 2-0 - Number of sweep shift (n: 0-7) + + Sweep Time: 000: sweep off - no freq change + 001: 7.8 ms (1/128Hz) + 010: 15.6 ms (2/128Hz) + 011: 23.4 ms (3/128Hz) + 100: 31.3 ms (4/128Hz) + 101: 39.1 ms (5/128Hz) + 110: 46.9 ms (6/128Hz) + 111: 54.7 ms (7/128Hz) + + The change of frequency (NR13,NR14) at each shift + is calculated by the following formula where + X(0) is initial freq & X(t-1) is last freq: + + X(t) = X(t-1) +/- X(t-1)/2^n + +FF11 + Name - NR 11 + Contents - Sound Mode 1 register, Sound length/Wave pattern duty (R/W) + + Only Bits 7-6 can be read. + + Bit 7-6 - Wave Pattern Duty + Bit 5-0 - Sound length data (t1: 0-63) + + Wave Duty: 00: 12.5% ( _--------_--------_-------- ) + 01: 25% ( __-------__-------__------- ) + 10: 50% ( ____-----____-----____----- ) (default) + 11: 75% ( ______---______---______--- ) + + Sound Length = (64-t1)*(1/256) seconds +FF12 + Name - NR 12 + Contents - Sound Mode 1 register, Envelope (R/W) + + Bit 7-4 - Initial volume of envelope + Bit 3 - Envelope UP/DOWN + 0: Attenuate + 1: Amplify + Bit 2-0 - Number of envelope sweep (n: 0-7) + (If zero, stop envelope operation.) + + Initial volume of envelope is from 0 to $F. + Zero being no sound. + + Length of 1 step = n*(1/64) seconds + +FF13 + Name - NR 13 + Contents - Sound Mode 1 register, Frequency lo (W) + + Lower 8 bits of 11 bit frequency (x). + Next 3 bit are in NR 14 ($FF14) + +FF14 + Name - NR 14 + Contents - Sound Mode 1 register, Frequency hi (R/W) + + Only Bit 6 can be read. + + Bit 7 - Initial (when set, sound restarts) + Bit 6 - Counter/consecutive selection + Bit 2-0 - Frequency's higher 3 bits (x) + + Frequency = 4194304/(32*(2048-x)) Hz + = 131072/(2048-x) Hz + + Counter/consecutive Selection + 0 = Regardless of the length data in NR11 + sound can be produced consecutively. + 1 = Sound is generated during the time period + set by the length data in NR11. After this + period the sound 1 ON flag (bit 0 of NR52) + is reset. + +FF16 + Name - NR 21 + Contents - Sound Mode 2 register, Sound Length; Wave Pattern Duty (R/W) + + Only bits 7-6 can be read. + + Bit 7-6 - Wave pattern duty + Bit 5-0 - Sound length data (t1: 0-63) + + Wave Duty: 00: 12.5% ( _--------_--------_-------- ) + 01: 25% ( __-------__-------__------- ) + 10: 50% ( ____-----____-----____----- ) (default) + 11: 75% ( ______---______---______--- ) + + Sound Length = (64-t1)*(1/256) seconds + +FF17 + Name - NR 22 + Contents - Sound Mode 2 register, envelope (R/W) + + Bit 7-4 - Initial volume of envelope + Bit 3 - Envelope UP/DOWN + 0: Attenuate + 1: Amplify + Bit 2-0 - Number of envelope sweep (n: 0-7) + (If zero, stop envelope operation.) + + Initial volume of envelope is from 0 to $F. + Zero being no sound. + + Length of 1 step = n*(1/64) seconds + +FF18 + Name - NR 23 + Contents - Sound Mode 2 register, frequency lo data (W) + + Frequency's lower 8 bits of 11 bit data (x). + Next 3 bits are in NR 14 ($FF19). + +FF19 + Name - NR 24 + Contents - Sound Mode 2 register, frequency hi data (R/W) + + Only bit 6 can be read. + + Bit 7 - Initial (when set, sound restarts) + Bit 6 - Counter/consecutive selection + Bit 2-0 - Frequency's higher 3 bits (x) + + Frequency = 4194304/(32*(2048-x)) Hz + = 131072/(2048-x) Hz + + Counter/consecutive Selection + 0 = Regardless of the length data in NR21 + sound can be produced consecutively. + 1 = Sound is generated during the time period + set by the length data in NR21. After this + period the sound 2 ON flag (bit 1 of NR52) + is reset. + +FF1A + Name - NR 30 + Contents - Sound Mode 3 register, Sound on/off (R/W) + + Only bit 7 can be read + + Bit 7 - Sound OFF + 0: Sound 3 output stop + 1: Sound 3 output OK + +FF1B + Name - NR 31 + Contents - Sound Mode 3 register, sound length (R/W) + + Bit 7-0 - Sound length (t1: 0 - 255) + + Sound Length = (256-t1)*(1/2) seconds + +FF1C + Name - NR 32 + Contents - Sound Mode 3 register, Select output level (R/W) + + Only bits 6-5 can be read + + Bit 6-5 - Select output level + 00: Mute + 01: Produce Wave Pattern RAM Data as it is + (4 bit length) + 10: Produce Wave Pattern RAM data shifted once + to the RIGHT (1/2) (4 bit length) + 11: Produce Wave Pattern RAM data shifted twice + to the RIGHT (1/4) (4 bit length) + + * - Wave Pattern RAM is located from $FF30-$FF3f. + +FF1D + Name - NR 33 + Contents - Sound Mode 3 register, frequency's lower data (W) + + Lower 8 bits of an 11 bit frequency (x). + +FF1E + Name - NR 34 + Contents - Sound Mode 3 register, frequency's higher data (R/W) + + Only bit 6 can be read. + + Bit 7 - Initial (when set, sound restarts) + Bit 6 - Counter/consecutive flag + Bit 2-0 - Frequency's higher 3 bits (x). + + Frequency = 4194304/(64*(2048-x)) Hz + = 65536/(2048-x) Hz + + Counter/consecutive Selection + 0 = Regardless of the length data in NR31 + sound can be produced consecutively. + 1 = Sound is generated during the time period + set by the length data in NR31. After this + period the sound 3 ON flag (bit 2 of NR52) + is reset. + +FF20 + Name - NR 41 + Contents - Sound Mode 4 register, sound length (R/W) + + Bit 5-0 - Sound length data (t1: 0-63) + + Sound Length = (64-t1)*(1/256) seconds + +FF21 + Name - NR 42 + Contents - Sound Mode 4 register, envelope (R/W) + + Bit 7-4 - Initial volume of envelope + Bit 3 - Envelope UP/DOWN + 0: Attenuate + 1: Amplify + Bit 2-0 - Number of envelope sweep (n: 0-7) + (If zero, stop envelope operation.) + + Initial volume of envelope is from 0 to $F. + Zero being no sound. + + Length of 1 step = n*(1/64) seconds + +FF22 + Name - NR 43 + Contents - Sound Mode 4 register, polynomial counter (R/W) + + Bit 7-4 - Selection of the shift clock frequency of the + polynomial counter + Bit 3 - Selection of the polynomial counter's step + Bit 2-0 - Selection of the dividing ratio of frequencies + + Selection of the dividing ratio of frequencies: + 000: f * 1/2^3 * 2 + 001: f * 1/2^3 * 1 + 010: f * 1/2^3 * 1/2 + 011: f * 1/2^3 * 1/3 + 100: f * 1/2^3 * 1/4 + 101: f * 1/2^3 * 1/5 + 110: f * 1/2^3 * 1/6 + 111: f * 1/2^3 * 1/7 f = 4.194304 Mhz + + Selection of the polynomial counter step: + 0: 15 steps + 1: 7 steps + + Selection of the shift clock frequency of the polynomial + counter: + + 0000: dividing ratio of frequencies * 1/2 + 0001: dividing ratio of frequencies * 1/2^2 + 0010: dividing ratio of frequencies * 1/2^3 + 0011: dividing ratio of frequencies * 1/2^4 + : : + : : + : : + 0101: dividing ratio of frequencies * 1/2^14 + 1110: prohibited code + 1111: prohibited code + +FF23 + Name - NR 44 + Contents - Sound Mode 4 register, counter/consecutive; inital (R/W) + + Only bit 6 can be read. + + Bit 7 - Initial (when set, sound restarts) + Bit 6 - Counter/consecutive selection + + Counter/consecutive Selection + 0 = Regardless of the length data in NR41 + sound can be produced consecutively. + 1 = Sound is generated during the time period + set by the length data in NR41. After this + period the sound 4 ON flag (bit 3 of NR52) + is reset. + +FF24 + Name - NR 50 + Contents - Channel control / ON-OFF / Volume (R/W) + + Bit 7 - Vin->SO2 ON/OFF + Bit 6-4 - SO2 output level (volume) (# 0-7) + Bit 3 - Vin->SO1 ON/OFF + Bit 2-0 - SO1 output level (volume) (# 0-7) + + Vin->SO1 (Vin->SO2) + + By synthesizing the sound from sound 1 + through 4, the voice input from Vin + terminal is put out. + 0: no output + 1: output OK + +FF25 + Name - NR 51 + Contents - Selection of Sound output terminal (R/W) + + Bit 7 - Output sound 4 to SO2 terminal + Bit 6 - Output sound 3 to SO2 terminal + Bit 5 - Output sound 2 to SO2 terminal + Bit 4 - Output sound 1 to SO2 terminal + Bit 3 - Output sound 4 to SO1 terminal + Bit 2 - Output sound 3 to SO1 terminal + Bit 1 - Output sound 2 to SO1 terminal + Bit 0 - Output sound 1 to SO1 terminal + +FF26 + Name - NR 52 (Value at reset: $F1-GB, $F0-SGB) + Contents - Sound on/off (R/W) + + Bit 7 - All sound on/off + 0: stop all sound circuits + 1: operate all sound circuits + Bit 3 - Sound 4 ON flag + Bit 2 - Sound 3 ON flag + Bit 1 - Sound 2 ON flag + Bit 0 - Sound 1 ON flag + + Bits 0 - 3 of this register are meant to + be status bits to be read. Writing to these + bits does NOT enable/disable sound. + + If your GB programs don't use sound then + write $00 to this register to save 16% or + more on GB power consumption. +FF30 - FF3F + Name - Wave Pattern RAM + Contents - Waveform storage for arbitrary sound data + + This storage area holds 32 4-bit samples + that are played back upper 4 bits first. + +FF40 + Name - LCDC (value $91 at reset) + Contents - LCD Control (R/W) + + Bit 7 - LCD Control Operation * + 0: Stop completely (no picture on screen) + 1: operation + + Bit 6 - Window Tile Map Display Select + 0: $9800-$9BFF + 1: $9C00-$9FFF + + Bit 5 - Window Display + 0: off + 1: on + + Bit 4 - BG & Window Tile Data Select + 0: $8800-$97FF + 1: $8000-$8FFF <- Same area as OBJ + + Bit 3 - BG Tile Map Display Select + 0: $9800-$9BFF + 1: $9C00-$9FFF + + Bit 2 - OBJ (Sprite) Size + 0: 8*8 + 1: 8*16 (width*height) + + Bit 1 - OBJ (Sprite) Display + 0: off + 1: on + + Bit 0 - BG Display + 0: off + 1: on + + * - Stopping LCD operation (bit 7 from 1 to 0) + must be performed during V-blank to work + properly. V-blank can be confirmed when the + value of LY is greater than or equal to 144. + +FF41 + Name - STAT + Contents - LCDC Status (R/W) + + Bits 6-3 - Interrupt Selection By LCDC Status + + Bit 6 - LYC=LY Coincidence (Selectable) + Bit 5 - Mode 10 + Bit 4 - Mode 01 + Bit 3 - Mode 00 + 0: Non Selection + 1: Selection + + Bit 2 - Coincidence Flag + 0: LYC not equal to LCDC LY + 1: LYC = LCDC LY + + Bit 1-0 - Mode Flag + 00: During H-Blank + 01: During V-Blank + 10: During Searching OAM-RAM + 11: During Transfering Data to LCD Driver + + STAT shows the current status of the LCD controller. + Mode 00: When the flag is 00 it is the H-Blank period + and the CPU can access the display RAM + ($8000-$9FFF). + + Mode 01: When the flag is 01 it is the V-Blank period + and the CPU can access the display RAM + ($8000-$9FFF). + + Mode 10: When the flag is 10 then the OAM is being + used ($FE00-$FE9F). The CPU cannot access + the OAM during this period + + Mode 11: When the flag is 11 both the OAM and display + RAM are being used. The CPU cannot access + either during this period. + + + The following are typical when the display is enabled: + +Mode 0 000___000___000___000___000___000___000________________ +Mode 1 _______________________________________11111111111111__ +Mode 2 ___2_____2_____2_____2_____2_____2___________________2_ +Mode 3 ____33____33____33____33____33____33__________________3 + + + The Mode Flag goes through the values 0, 2, + and 3 at a cycle of about 109uS. 0 is present + about 48.6uS, 2 about 19uS, and 3 about 41uS. This + is interrupted every 16.6ms by the VBlank (1). + The mode flag stays set at 1 for about 1.08 ms. + (Mode 0 is present between 201-207 clks, 2 about + 77-83 clks, and 3 about 169-175 clks. A complete + cycle through these states takes 456 clks. + VBlank lasts 4560 clks. A complete screen refresh + occurs every 70224 clks.) + +FF42 + Name - SCY + Contents - Scroll Y (R/W) + + 8 Bit value $00-$FF to scroll BG Y screen + position. + +FF43 + Name - SCX + Contents - Scroll X (R/W) + + 8 Bit value $00-$FF to scroll BG X screen + position. + +FF44 + Name - LY + Contents - LCDC Y-Coordinate (R) + + The LY indicates the vertical line to which + the present data is transferred to the LCD + Driver. The LY can take on any value between + 0 through 153. The values between 144 and 153 + indicate the V-Blank period. Writing will + reset the counter. + +FF45 + Name - LYC + Contents - LY Compare (R/W) + + The LYC compares itself with the LY. If the + values are the same it causes the STAT to set + the coincident flag. + +FF46 + Name - DMA + Contents - DMA Transfer and Start Address (W) + + The DMA Transfer (40*28 bit) from internal ROM or RAM + ($0000-$F19F) to the OAM (address $FE00-$FE9F) can be + performed. It takes 160 microseconds for the transfer. + + 40*28 bit = #140 or #$8C. As you can see, it only + transfers $8C bytes of data. OAM data is $A0 bytes + long, from $0-$9F. + + But if you examine the OAM data you see that 4 bits are + not in use. + + 40*32 bit = #$A0, but since 4 bits for each OAM is not + used it's 40*28 bit. + + It transfers all the OAM data to OAM RAM. + + The DMA transfer start address can be designated every + $100 from address $0000-$F100. That means $0000, $0100, + $0200, $0300.... + + As can be seen by looking at register $FF41 Sprite RAM + ($FE00 - $FE9F) is not always available. A simple routine + that many games use to write data to Sprite memory is shown + below. Since it copies data to the sprite RAM at the appro- + priate times it removes that responsibility from the main + program. + All of the memory space, except high ram ($FF80-$FFFE), + is not accessible during DMA. Because of this, the routine + below must be copied & executed in high ram. It is usually + called from a V-blank Interrupt. + + Example program: + + org $40 + jp VBlank + + org $ff80 +VBlank: + push af <- Save A reg & flags + ld a,BASE_ADRS <- transfer data from BASE_ADRS + ld ($ff46),a <- put A into DMA registers + ld a,28h <- loop length +Wait: <- We need to wait 160 microseconds. + dec a <- 4 cycles - decrease A by 1 + jr nz,Wait <- 12 cycles - branch if Not Zero to Wait + pop af <- Restore A reg & flags + reti <- Return from interrupt + + +FF47 + Name - BGP + Contents - BG & Window Palette Data (R/W) + + Bit 7-6 - Data for Dot Data 11 (Normally darkest color) + Bit 5-4 - Data for Dot Data 10 + Bit 3-2 - Data for Dot Data 01 + Bit 1-0 - Data for Dot Data 00 (Normally lightest color) + + This selects the shade of grays to use for + the background (BG) & window pixels. Since + each pixel uses 2 bits, the corresponding + shade will be selected from here. + +FF48 + Name - OBP0 + Contents - Object Palette 0 Data (R/W) + + This selects the colors for sprite palette 0. + It works exactly as BGP ($FF47) except each + each value of 0 is transparent. + +FF49 + Name - OBP1 + Contents - Object Palette 1 Data (R/W) + + This Selects the colors for sprite palette 1. + It works exactly as OBP0 ($FF48). + See BGP for details. + +FF4A + Name - WY + Contents - Window Y Position (R/W) + + 0 <= WY <= 143 + + WY must be greater than or equal to 0 and + must be less than or equal to 143 for + window to be visible. + +FF4B + Name - WX + Contents - Window X Position (R/W) + + 0 <= WX <= 166 + + WX must be greater than or equal to 0 and + must be less than or equal to 166 for + window to be visible. + + WX is offset from absolute screen coordinates + by 7. Setting the window to WX=7, WY=0 will + put the upper left corner of the window at + absolute screen coordinates 0,0. + + + Lets say WY = 70 and WX = 87. + The window would be positioned as so: + + 0 80 159 + ______________________________________ + 0 | | + | | | + | | + | Background Display | + | Here | + | | + | | + 70 | - +------------------| + | | 80,70 | + | | | + | | Window Display | + | | Here | + | | | + | | | + 143 |___________________|__________________| + + + OBJ Characters (Sprites) can still enter the + window. None of the window colors are + transparent so any background tiles under the + window are hidden. + +FFFF + Name - IE + Contents - Interrupt Enable (R/W) + + Bit 4: Transition from High to Low of Pin + number P10-P13. + Bit 3: Serial I/O transfer complete + Bit 2: Timer Overflow + Bit 1: LCDC (see STAT) + Bit 0: V-Blank + + 0: disable + 1: enable + + + + + diff --git a/MCEmuCore.CPU/Class1.cs b/MCEmuCore.CPU/Class1.cs new file mode 100644 index 0000000..8eb79cb --- /dev/null +++ b/MCEmuCore.CPU/Class1.cs @@ -0,0 +1,8 @@ +using System; + +namespace MCEmuCore.CPU +{ + public class Class1 + { + } +} diff --git a/MCEmuCore.CPU/MCEmuCore.CPU.csproj b/MCEmuCore.CPU/MCEmuCore.CPU.csproj new file mode 100644 index 0000000..c16c6d5 --- /dev/null +++ b/MCEmuCore.CPU/MCEmuCore.CPU.csproj @@ -0,0 +1,7 @@ + + + + netcoreapp2.2 + + + diff --git a/MCEmuCore.Console/MCEmuCore.Console.csproj b/MCEmuCore.Console/MCEmuCore.Console.csproj new file mode 100644 index 0000000..c52b93a --- /dev/null +++ b/MCEmuCore.Console/MCEmuCore.Console.csproj @@ -0,0 +1,8 @@ + + + + Exe + netcoreapp2.2 + + + \ No newline at end of file diff --git a/MCEmuCore.Console/Program.cs b/MCEmuCore.Console/Program.cs new file mode 100644 index 0000000..ff2c446 --- /dev/null +++ b/MCEmuCore.Console/Program.cs @@ -0,0 +1,13 @@ +using System; + +namespace MCEmuCore.Console +{ + class Program + { + static void Main(string[] args) + { + Console.WriteLine("Hello World!"); + Console.ReadLine(); + } + } +} \ No newline at end of file diff --git a/MCEmuCore.GBMonolith/Cpu.cs b/MCEmuCore.GBMonolith/Cpu.cs new file mode 100644 index 0000000..4433798 --- /dev/null +++ b/MCEmuCore.GBMonolith/Cpu.cs @@ -0,0 +1,93 @@ +using System; +using System.Collections.Generic; + +namespace MCEmuCore.GBMonolith +{ + public struct OpCode + { + public readonly byte Instruction; + public byte? Arg1; + public byte? Arg2; + } + class Cpu + { + const byte ZERO_FLAG = 0b10000000; + const byte SUB_FLAG = 0b01000000; + const byte HALF_CARRY = 0b00100000; + const byte FULL_CARRY = 0b00010000; + private readonly CpuRegisters registers; + #region OpCodes + + private readonly Dictionary> OpCodeTable; + #endregion + + public Cpu() + { + registers = new CpuRegisters(); + + OpCodeTable = new Dictionary>() + { + {0x00, (op) => { + registers.PC += 1; + return true; + } }, + {0x01, (op) => + { + // LD BC,d16 + if (op.Arg1.HasValue && op.Arg2.HasValue) + { + ushort operand = (ushort)(op.Arg2 + (op.Arg1 << 8)); + registers.BC = operand; + registers.PC += 3; + return true; + } + else + { + throw new InvalidOperationException(op, "Missing arguments for LD BC"); + } + } }, + {0x02, (op) => + { + // LD (BC), A + throw new NotImplementedException("LD (BC), A"); + } }, + {0x03, (op) => + { + registers.BC += 1; + registers.PC += 1; + return true; + } }, + {0x04, (op) => + { + // INC B + byte reg = (byte)(registers.B + 1); + registers.B = reg; + + registers.Flags.Subtract = false; + registers.Flags.Zero = reg == 0; + registers.Flags.HalfCarry = reg == 16; + + registers.PC += 1; + return true; + } } + }; + } + } + + + [Serializable] + public class InvalidOperationException : Exception + { + public OpCode OpCode { get; set; } + public InvalidOperationException() { } + public InvalidOperationException(OpCode opCode, string message) : base(message) + { + OpCode = opCode; + } + public InvalidOperationException(string message) : base(message) { } + public InvalidOperationException(string message, Exception inner) : base(message, inner) { } + protected InvalidOperationException( + System.Runtime.Serialization.SerializationInfo info, + System.Runtime.Serialization.StreamingContext context) : base(info, context) { } + } +} diff --git a/MCEmuCore.GBMonolith/CpuRegisters.cs b/MCEmuCore.GBMonolith/CpuRegisters.cs new file mode 100644 index 0000000..86d3aa5 --- /dev/null +++ b/MCEmuCore.GBMonolith/CpuRegisters.cs @@ -0,0 +1,308 @@ +using System; +using System.Collections.Generic; + +namespace MCEmuCore.GBMonolith +{ + class CpuRegisters + { + enum Register { A, B, C, D, E, H, L }; + private readonly byte[] Registers = new byte[7]; + public readonly FlagRegister Flags = new FlagRegister(); + + #region Register Accessors + public byte A + { + get + { + return Registers[(int)Register.A]; + } + set + { + Registers[(int)Register.A] = value; + } + } + public byte B + { + get + { + return Registers[(int)Register.B]; + } + set + { + Registers[(int)Register.B] = value; + } + } + public byte D + { + get + { + return Registers[(int)Register.D]; + } + set + { + Registers[(int)Register.D] = value; + } + } + public byte H + { + get + { + return Registers[(int)Register.H]; + } + set + { + Registers[(int)Register.H] = value; + } + } + public byte F + { + get + { + return Flags.Value; + } + set + { + Flags.Value = value; + } + } + public byte C + { + get + { + return Registers[(int)Register.C]; + } + set + { + Registers[(int)Register.C] = value; + } + } + public byte E + { + get + { + return Registers[(int)Register.E]; + } + set + { + Registers[(int)Register.E] = value; + } + } + public byte L + { + get + { + return Registers[(int)Register.L]; + } + set + { + Registers[(int)Register.L] = value; + } + } + #endregion + + #region Wide Register Accessors + public ushort AF + { + get + { + ushort retVal = Flags.Value; + retVal += (ushort)((Registers[(int)Register.A]) << 8); + return retVal; + } + set + { + Flags.Value = (byte)(value & 0x00FF); + Registers[(int)Register.A] = (byte)((value & 0xFF00) >> 8); + } + } + public ushort BC + { + get + { + ushort retVal = Registers[(int)Register.C]; + retVal += (ushort)((Registers[(int)Register.B]) << 8); + return retVal; + } + set + { + Registers[(int)Register.C] = (byte)(value & 0x00FF); + Registers[(int)Register.B] = (byte)((value & 0xFF00) >> 8); + } + } + public ushort DE + { + get + { + ushort retVal = Registers[(int)Register.E]; + retVal += (ushort)((Registers[(int)Register.D]) << 8); + return retVal; + } + set + { + Registers[(int)Register.E] = (byte)(value & 0x00FF); + Registers[(int)Register.D] = (byte)((value & 0xFF00) >> 8); + } + } + public ushort HL + { + get + { + ushort retVal = Registers[(int)Register.L]; + retVal += (ushort)((Registers[(int)Register.H]) << 8); + return retVal; + } + set + { + Registers[(int)Register.L] = (byte)(value & 0x00FF); + Registers[(int)Register.H] = (byte)((value & 0xFF00) >> 8); + } + } + #endregion + + public ushort SP { get; set; } + public ushort PC { get; set; } + + #region Constructors + public CpuRegisters() + { + AF = 0x01B0; + BC = 0x0013; + DE = 0x00D8; + HL = 0x014D; + } + public CpuRegisters(ushort initValue) : base() + { + AF = initValue; + BC = initValue; + DE = initValue; + HL = initValue; + } + public CpuRegisters(byte A, byte F, ushort SP, ushort PC) + { + this.A = A; + this.F = F; + this.SP = SP; + this.PC = PC; + } + public CpuRegisters(byte A, byte F, byte B, byte C, byte D, byte E, byte H, byte L, ushort SP, ushort PC) : this(A, F, SP, PC) + { + this.B = B; + this.C = C; + this.D = D; + this.E = E; + this.H = H; + this.L = L; + } + public CpuRegisters(byte A, byte F, ushort BC, ushort DE, ushort HL, ushort SP, ushort PC) : this(A, F, SP, PC) + { + this.BC = BC; + this.DE = DE; + this.HL = HL; + } + #endregion + + public Dictionary DumpRegisters() + { + return new Dictionary + { + { "A", A }, + { "F", F }, + { "B", B }, + { "C", C }, + { "D", D }, + { "E", E }, + { "H", H }, + { "L", L }, + { "AF", AF }, + { "BC", BC }, + { "DE", DE }, + { "HL", HL }, + { "PC", PC }, + { "SP", SP } + }; + } + + #region Print Functions + public void PrintSingleStatus() + { + Console.WriteLine("Register status:"); + Console.WriteLine($"A:\t{A}\tF:\t{F}"); + Console.WriteLine($"B:\t{B}\tC:\t{C}"); + Console.WriteLine($"D:\t{D}\tE:\t{E}"); + Console.WriteLine($"H:\t{H}\tL:\t{L}\r\n"); + } + public void PrintWideStatus() + { + Console.WriteLine("Wide Register status:"); + Console.WriteLine($"AF:\t{AF}"); + Console.WriteLine($"BC:\t{BC}"); + Console.WriteLine($"DE:\t{DE}"); + Console.WriteLine($"HL:\t{HL}"); + } + public void PrintFlags() + { + Console.WriteLine("Flag status:"); + Console.WriteLine($"Zero:\t\t{Flags.Zero}"); + Console.WriteLine($"Subtract:\t{Flags.Subtract}"); + Console.WriteLine($"Half Carry:\t{Flags.HalfCarry}"); + Console.WriteLine($"Carry:\t\t{Flags.Carry}"); + Console.WriteLine($"Raw Register:\t{Convert.ToString(Flags.Value, 2)}"); + } + #endregion + + public class FlagRegister + { + protected internal byte Value { get; set; } + #region Boolean Flag Properties + public bool Zero + { + get { return (Value & 0b1000_0000) != 0; } + set + { + if (value) + Value |= 0b1000_0000; + else + Value &= 0b0111_1111; + } + } + public bool Subtract + { + get { return (Value & 0b0100_0000) != 0; } + set + { + if (value) + Value |= 0b0100_0000; + else + Value &= 0b1011_1111; + } + } + public bool HalfCarry + { + get { return (Value & 0b0010_0000) != 0; } + set + { + if (value) + Value |= 0b0010_0000; + else + Value &= 0b1101_1111; + } + } + public bool Carry + { + get { return (Value & 0b0001_0000) != 0; } + set + { + if (value) + Value |= 0b0001_0000; + else + Value &= 0b1110_1111; + } + } + #endregion + public bool IsValid + { + get { return (Value & 0b0000_1111) == 0; } + } + } + } +} diff --git a/MCEmuCore.GBMonolith/MCEmuCore.GBMonolith.csproj b/MCEmuCore.GBMonolith/MCEmuCore.GBMonolith.csproj new file mode 100644 index 0000000..21dff5c --- /dev/null +++ b/MCEmuCore.GBMonolith/MCEmuCore.GBMonolith.csproj @@ -0,0 +1,8 @@ + + + + Exe + netcoreapp2.2 + + + diff --git a/MCEmuCore.GBMonolith/Program.cs b/MCEmuCore.GBMonolith/Program.cs new file mode 100644 index 0000000..c533403 --- /dev/null +++ b/MCEmuCore.GBMonolith/Program.cs @@ -0,0 +1,60 @@ +using System; + +namespace MCEmuCore.GBMonolith +{ + class Program + { + static void Main(string[] args) + { + TestRegisters(); + } + + static void TestRegisters() + { + CpuRegisters cpuRegisters = new CpuRegisters(true); + Console.WriteLine("Initializing registers:"); + Console.WriteLine("A:\t1\tF:\t16"); + Console.WriteLine("B:\t2\tC:\t100"); + Console.WriteLine("D:\t3\tE:\t150"); + Console.WriteLine("H:\t4\tL:\t200\r\n"); + cpuRegisters.A += 1; + cpuRegisters.B += 2; + cpuRegisters.D += 3; + cpuRegisters.H += 4; + cpuRegisters.F += 16; + cpuRegisters.C += 100; + cpuRegisters.E += 150; + cpuRegisters.L += 200; + cpuRegisters.PrintSingleStatus(); + Console.WriteLine("Expected Wide Register status:"); + Console.WriteLine("BC:\t612"); + Console.WriteLine("DE:\t918"); + Console.WriteLine("HL:\t1224\r\n"); + Console.Write("Actual "); + cpuRegisters.PrintWideStatus(); + Console.WriteLine("\r\nSetting wide values:"); + Console.WriteLine("BC:\t26214"); + Console.WriteLine("DE:\t22016"); + Console.WriteLine("HL:\t153\r\n"); + cpuRegisters.BC = 26214; + cpuRegisters.DE = 22016; + cpuRegisters.HL = 153; + cpuRegisters.PrintWideStatus(); + Console.WriteLine("\r\nExpected Register status:"); + Console.WriteLine("A:\t1\tF:\t16"); + Console.WriteLine("B:\t102\tC:\t102"); + Console.WriteLine("D:\t86\tE:\t0"); + Console.WriteLine("H:\t0\tL:\t153\r\n"); + Console.Write("Actual "); + cpuRegisters.PrintSingleStatus(); + Console.WriteLine("Testing Flags:"); + cpuRegisters.PrintFlags(); + cpuRegisters.Flags.Zero = true; + cpuRegisters.Flags.Subtract = true; + cpuRegisters.Flags.HalfCarry = true; + cpuRegisters.Flags.Carry = false; + cpuRegisters.PrintFlags(); + Console.ReadLine(); + } + } +} diff --git a/MCEmuCore.GFX/Class1.cs b/MCEmuCore.GFX/Class1.cs new file mode 100644 index 0000000..b6e4648 --- /dev/null +++ b/MCEmuCore.GFX/Class1.cs @@ -0,0 +1,8 @@ +using System; + +namespace MCEmuCore.GFX +{ + public class Class1 + { + } +} diff --git a/MCEmuCore.GFX/MCEmuCore.GFX.csproj b/MCEmuCore.GFX/MCEmuCore.GFX.csproj new file mode 100644 index 0000000..c16c6d5 --- /dev/null +++ b/MCEmuCore.GFX/MCEmuCore.GFX.csproj @@ -0,0 +1,7 @@ + + + + netcoreapp2.2 + + + diff --git a/MCEmuCore.Input/Class1.cs b/MCEmuCore.Input/Class1.cs new file mode 100644 index 0000000..44a0a18 --- /dev/null +++ b/MCEmuCore.Input/Class1.cs @@ -0,0 +1,8 @@ +using System; + +namespace MCEmuCore.Input +{ + public class Class1 + { + } +} diff --git a/MCEmuCore.Input/MCEmuCore.Input.csproj b/MCEmuCore.Input/MCEmuCore.Input.csproj new file mode 100644 index 0000000..c16c6d5 --- /dev/null +++ b/MCEmuCore.Input/MCEmuCore.Input.csproj @@ -0,0 +1,7 @@ + + + + netcoreapp2.2 + + + diff --git a/MCEmuCore.Memory/Class1.cs b/MCEmuCore.Memory/Class1.cs new file mode 100644 index 0000000..6db6723 --- /dev/null +++ b/MCEmuCore.Memory/Class1.cs @@ -0,0 +1,8 @@ +using System; + +namespace MCEmuCore.Memory +{ + public class Class1 + { + } +} diff --git a/MCEmuCore.Memory/MCEmuCore.Memory.csproj b/MCEmuCore.Memory/MCEmuCore.Memory.csproj new file mode 100644 index 0000000..c16c6d5 --- /dev/null +++ b/MCEmuCore.Memory/MCEmuCore.Memory.csproj @@ -0,0 +1,7 @@ + + + + netcoreapp2.2 + + + diff --git a/MCEmuCore.System/Class1.cs b/MCEmuCore.System/Class1.cs new file mode 100644 index 0000000..8ed0db7 --- /dev/null +++ b/MCEmuCore.System/Class1.cs @@ -0,0 +1,8 @@ +using System; + +namespace MCEmuCore.System +{ + public abstract class System + { + } +} diff --git a/MCEmuCore.System/MCEmuCore.System.csproj b/MCEmuCore.System/MCEmuCore.System.csproj new file mode 100644 index 0000000..c0c22e6 --- /dev/null +++ b/MCEmuCore.System/MCEmuCore.System.csproj @@ -0,0 +1,11 @@ + + + + netcoreapp2.2 + + + + + + + diff --git a/MCEmuCore.sln b/MCEmuCore.sln new file mode 100644 index 0000000..e45d3fe --- /dev/null +++ b/MCEmuCore.sln @@ -0,0 +1,61 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26228.64 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MCEmuCore.Console", "MCEmuCore.Console\MCEmuCore.Console.csproj", "{8657E0E4-43DC-4AAB-BCB2-D54AD255E13E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MCEmuCore.CPU", "MCEmuCore.CPU\MCEmuCore.CPU.csproj", "{BB90BFE8-7331-4F68-A6B4-30CB57E8EB6D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MCEmuCore.System", "MCEmuCore.System\MCEmuCore.System.csproj", "{CB962918-F94B-43A0-A7CF-6822EB815BE6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MCEmuCore.Memory", "MCEmuCore.Memory\MCEmuCore.Memory.csproj", "{E29389DA-A4D2-4FD9-A132-B674DACE7C29}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MCEmuCore.GFX", "MCEmuCore.GFX\MCEmuCore.GFX.csproj", "{FADFCC95-60A7-49A0-872E-BBBABD1BA68F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MCEmuCore.Input", "MCEmuCore.Input\MCEmuCore.Input.csproj", "{C95C1D18-8BB8-4203-8520-C02160D5DA6D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MCEmuCore.GBMonolith", "MCEmuCore.GBMonolith\MCEmuCore.GBMonolith.csproj", "{C7208534-EA17-4D10-86BE-1D2A85BF1DEE}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8657E0E4-43DC-4AAB-BCB2-D54AD255E13E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8657E0E4-43DC-4AAB-BCB2-D54AD255E13E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8657E0E4-43DC-4AAB-BCB2-D54AD255E13E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8657E0E4-43DC-4AAB-BCB2-D54AD255E13E}.Release|Any CPU.Build.0 = Release|Any CPU + {BB90BFE8-7331-4F68-A6B4-30CB57E8EB6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BB90BFE8-7331-4F68-A6B4-30CB57E8EB6D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BB90BFE8-7331-4F68-A6B4-30CB57E8EB6D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BB90BFE8-7331-4F68-A6B4-30CB57E8EB6D}.Release|Any CPU.Build.0 = Release|Any CPU + {CB962918-F94B-43A0-A7CF-6822EB815BE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CB962918-F94B-43A0-A7CF-6822EB815BE6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CB962918-F94B-43A0-A7CF-6822EB815BE6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CB962918-F94B-43A0-A7CF-6822EB815BE6}.Release|Any CPU.Build.0 = Release|Any CPU + {E29389DA-A4D2-4FD9-A132-B674DACE7C29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E29389DA-A4D2-4FD9-A132-B674DACE7C29}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E29389DA-A4D2-4FD9-A132-B674DACE7C29}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E29389DA-A4D2-4FD9-A132-B674DACE7C29}.Release|Any CPU.Build.0 = Release|Any CPU + {FADFCC95-60A7-49A0-872E-BBBABD1BA68F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FADFCC95-60A7-49A0-872E-BBBABD1BA68F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FADFCC95-60A7-49A0-872E-BBBABD1BA68F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FADFCC95-60A7-49A0-872E-BBBABD1BA68F}.Release|Any CPU.Build.0 = Release|Any CPU + {C95C1D18-8BB8-4203-8520-C02160D5DA6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C95C1D18-8BB8-4203-8520-C02160D5DA6D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C95C1D18-8BB8-4203-8520-C02160D5DA6D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C95C1D18-8BB8-4203-8520-C02160D5DA6D}.Release|Any CPU.Build.0 = Release|Any CPU + {C7208534-EA17-4D10-86BE-1D2A85BF1DEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C7208534-EA17-4D10-86BE-1D2A85BF1DEE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C7208534-EA17-4D10-86BE-1D2A85BF1DEE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C7208534-EA17-4D10-86BE-1D2A85BF1DEE}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {19299914-A3FB-4FA9-9B50-CD16059FEB08} + EndGlobalSection +EndGlobal