Difference between revisions of "GBZ80"
| Line 1: | Line 1: | ||
| − | The GBZ80 (Sharp SM83) that powers the original   | + | The GBZ80 (Sharp SM83) is the CPU that powers the original Nintendo Gameboy and Gameboy Color handheld consoles. It is kind of an in-between the [[Intel 8080]] and [[Z80]]. [https://gbdev.io/resources.html Awesome Gameboy resources] [https://gbdev.gg8.se/wiki/ GBDev wiki] [https://emudev.de/ Emudev (q00.gb)]  | 
The GBZ80 lacks the alternate register set, the dedicated I/O bus, the R register, the index registers (thus no DD and FD prefixed opcodes), the ED prefixed opcodes (including block transfer), the sign and parity/overflow flags (and all conditional instructions that used them), the undocumented flags (thus no leaking of WZ and Q internal registers). [https://www.pastraiser.com/cpu/gameboy/gameboy_opcodes.html GBZ80 opcodes]  | The GBZ80 lacks the alternate register set, the dedicated I/O bus, the R register, the index registers (thus no DD and FD prefixed opcodes), the ED prefixed opcodes (including block transfer), the sign and parity/overflow flags (and all conditional instructions that used them), the undocumented flags (thus no leaking of WZ and Q internal registers). [https://www.pastraiser.com/cpu/gameboy/gameboy_opcodes.html GBZ80 opcodes]  | ||
| Line 8: | Line 8: | ||
Fun fact: Way more GBZ80 cores were produced for Gameboy hardware (118 million Gameboys and 81 million GBA) than all the Z80 chips produced for home computers and game consoles. [https://www.chibiakumas.com/z80/Gameboy.php Learn GBZ80 Assembly Programming with ChibiAkumas]  | Fun fact: Way more GBZ80 cores were produced for Gameboy hardware (118 million Gameboys and 81 million GBA) than all the Z80 chips produced for home computers and game consoles. [https://www.chibiakumas.com/z80/Gameboy.php Learn GBZ80 Assembly Programming with ChibiAkumas]  | ||
| + | |||
| + | == Opcodes ==  | ||
| + | |||
| + | Opcode differences with Z80 are in bold. The unused ('''—''') opcodes will lock up the Game Boy CPU when used.  | ||
| + | |||
| + | === Standard opcodes ===  | ||
| + | |||
| + | {| style="white-space: nowrap;"  | ||
| + | |-  | ||
| + | |   | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 00 || NOP  | ||
| + | |-  | ||
| + | | 01 xx xx || LD BC,nn  | ||
| + | |-  | ||
| + | | 02 || LD (BC),A  | ||
| + | |-  | ||
| + | | 03 || INC BC  | ||
| + | |-  | ||
| + | | 04 || INC B  | ||
| + | |-  | ||
| + | | 05 || DEC B  | ||
| + | |-  | ||
| + | | 06 xx || LD B,n  | ||
| + | |-  | ||
| + | | 07 || RLCA  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 08 || EX AF,AF'  | ||
| + | |-  | ||
| + | | 09 || ADD HL,BC  | ||
| + | |-  | ||
| + | | 0A || LD A,(BC)  | ||
| + | |-  | ||
| + | | 0B || DEC BC  | ||
| + | |-  | ||
| + | | 0C || INC C  | ||
| + | |-  | ||
| + | | 0D || DEC C  | ||
| + | |-  | ||
| + | | 0E xx || LD C,n  | ||
| + | |-  | ||
| + | | 0F || RRCA  | ||
| + | |}  | ||
| + | |   | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 10 xx || DJNZ e  | ||
| + | |-  | ||
| + | | 11 xx xx || LD DE,nn  | ||
| + | |-  | ||
| + | | 12 || LD (DE),A  | ||
| + | |-  | ||
| + | | 13 || INC DE  | ||
| + | |-  | ||
| + | | 14 || INC D  | ||
| + | |-  | ||
| + | | 15 || DEC D  | ||
| + | |-  | ||
| + | | 16 xx || LD D,n  | ||
| + | |-  | ||
| + | | 17 || RLA  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 18 xx || JR e  | ||
| + | |-  | ||
| + | | 19 || ADD HL,DE  | ||
| + | |-  | ||
| + | | 1A || LD A,(DE)  | ||
| + | |-  | ||
| + | | 1B || DEC DE  | ||
| + | |-  | ||
| + | | 1C || INC E  | ||
| + | |-  | ||
| + | | 1D || DEC E  | ||
| + | |-  | ||
| + | | 1E xx || LD E,n  | ||
| + | |-  | ||
| + | | 1F || RRA  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 20 xx || JR NZ,e  | ||
| + | |-  | ||
| + | | 21 xx xx || LD HL,nn  | ||
| + | |-  | ||
| + | | 22 xx xx || LD (nn),HL  | ||
| + | |-  | ||
| + | | 23 || INC HL  | ||
| + | |-  | ||
| + | | 24 || INC H  | ||
| + | |-  | ||
| + | | 25 || DEC H  | ||
| + | |-  | ||
| + | | 26 xx || LD H,n  | ||
| + | |-  | ||
| + | | 27 || DAA  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 28 xx || JR Z,e  | ||
| + | |-  | ||
| + | | 29 || ADD HL,HL  | ||
| + | |-  | ||
| + | | 2A xx xx || LD HL,(nn)  | ||
| + | |-  | ||
| + | | 2B || DEC HL  | ||
| + | |-  | ||
| + | | 2C || INC L  | ||
| + | |-  | ||
| + | | 2D || DEC L  | ||
| + | |-  | ||
| + | | 2E xx || LD L,n  | ||
| + | |-  | ||
| + | | 2F || CPL  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 30 xx || JR NC,e  | ||
| + | |-  | ||
| + | | 31 xx xx || LD SP,nn  | ||
| + | |-  | ||
| + | | 32 xx xx || LD (nn),A  | ||
| + | |-  | ||
| + | | 33 || INC SP  | ||
| + | |-  | ||
| + | | 34 || INC (HL)  | ||
| + | |-  | ||
| + | | 35 || DEC (HL)  | ||
| + | |-  | ||
| + | | 36 xx || LD (HL),n  | ||
| + | |-  | ||
| + | | 37 || SCF  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 38 xx || JR C,e  | ||
| + | |-  | ||
| + | | 39 || ADD HL,SP  | ||
| + | |-  | ||
| + | | 3A xx xx || LD A,(nn)  | ||
| + | |-  | ||
| + | | 3B || DEC SP  | ||
| + | |-  | ||
| + | | 3C || INC A  | ||
| + | |-  | ||
| + | | 3D || DEC A  | ||
| + | |-  | ||
| + | | 3E xx || LD A,n  | ||
| + | |-  | ||
| + | | 3F || CCF  | ||
| + | |}  | ||
| + | |}  | ||
| + | |||
| + | {| style="white-space: nowrap;"  | ||
| + | |-  | ||
| + | |   | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 40 || LD B,B  | ||
| + | |-  | ||
| + | | 41 || LD B,C  | ||
| + | |-  | ||
| + | | 42 || LD B,D  | ||
| + | |-  | ||
| + | | 43 || LD B,E  | ||
| + | |-  | ||
| + | | 44 || LD B,H  | ||
| + | |-  | ||
| + | | 45 || LD B,L  | ||
| + | |-  | ||
| + | | 46 || LD B,(HL)  | ||
| + | |-  | ||
| + | | 47 || LD B,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 48 || LD C,B  | ||
| + | |-  | ||
| + | | 49 || LD C,C  | ||
| + | |-  | ||
| + | | 4A || LD C,D  | ||
| + | |-  | ||
| + | | 4B || LD C,E  | ||
| + | |-  | ||
| + | | 4C || LD C,H  | ||
| + | |-  | ||
| + | | 4D || LD C,L  | ||
| + | |-  | ||
| + | | 4E || LD C,(HL)  | ||
| + | |-  | ||
| + | | 4F || LD C,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 50 || LD D,B  | ||
| + | |-  | ||
| + | | 51 || LD D,C  | ||
| + | |-  | ||
| + | | 52 || LD D,D  | ||
| + | |-  | ||
| + | | 53 || LD D,E  | ||
| + | |-  | ||
| + | | 54 || LD D,H  | ||
| + | |-  | ||
| + | | 55 || LD D,L  | ||
| + | |-  | ||
| + | | 56 || LD D,(HL)  | ||
| + | |-  | ||
| + | | 57 || LD D,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 58 || LD E,B  | ||
| + | |-  | ||
| + | | 59 || LD E,C  | ||
| + | |-  | ||
| + | | 5A || LD E,D  | ||
| + | |-  | ||
| + | | 5B || LD E,E  | ||
| + | |-  | ||
| + | | 5C || LD E,H  | ||
| + | |-  | ||
| + | | 5D || LD E,L  | ||
| + | |-  | ||
| + | | 5E || LD E,(HL)  | ||
| + | |-  | ||
| + | | 5F || LD E,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 60 || LD H,B  | ||
| + | |-  | ||
| + | | 61 || LD H,C  | ||
| + | |-  | ||
| + | | 62 || LD H,D  | ||
| + | |-  | ||
| + | | 63 || LD H,E  | ||
| + | |-  | ||
| + | | 64 || LD H,H  | ||
| + | |-  | ||
| + | | 65 || LD H,L  | ||
| + | |-  | ||
| + | | 66 || LD H,(HL)  | ||
| + | |-  | ||
| + | | 67 || LD H,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 68 || LD L,B  | ||
| + | |-  | ||
| + | | 69 || LD L,C  | ||
| + | |-  | ||
| + | | 6A || LD L,D  | ||
| + | |-  | ||
| + | | 6B || LD L,E  | ||
| + | |-  | ||
| + | | 6C || LD L,H  | ||
| + | |-  | ||
| + | | 6D || LD L,L  | ||
| + | |-  | ||
| + | | 6E || LD L,(HL)  | ||
| + | |-  | ||
| + | | 6F || LD L,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 70 || LD (HL),B  | ||
| + | |-  | ||
| + | | 71 || LD (HL),C  | ||
| + | |-  | ||
| + | | 72 || LD (HL),D  | ||
| + | |-  | ||
| + | | 73 || LD (HL),E  | ||
| + | |-  | ||
| + | | 74 || LD (HL),H  | ||
| + | |-  | ||
| + | | 75 || LD (HL),L  | ||
| + | |-  | ||
| + | | 76 || HALT  | ||
| + | |-  | ||
| + | | 77 || LD (HL),A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 78 || LD A,B  | ||
| + | |-  | ||
| + | | 79 || LD A,C  | ||
| + | |-  | ||
| + | | 7A || LD A,D  | ||
| + | |-  | ||
| + | | 7B || LD A,E  | ||
| + | |-  | ||
| + | | 7C || LD A,H  | ||
| + | |-  | ||
| + | | 7D || LD A,L  | ||
| + | |-  | ||
| + | | 7E || LD A,(HL)  | ||
| + | |-  | ||
| + | | 7F || LD A,A  | ||
| + | |}  | ||
| + | |}  | ||
| + | |||
| + | {| style="white-space: nowrap;"  | ||
| + | |-  | ||
| + | |   | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 80 || ADD A,B  | ||
| + | |-  | ||
| + | | 81 || ADD A,C  | ||
| + | |-  | ||
| + | | 82 || ADD A,D  | ||
| + | |-  | ||
| + | | 83 || ADD A,E  | ||
| + | |-  | ||
| + | | 84 || ADD A,H  | ||
| + | |-  | ||
| + | | 85 || ADD A,L  | ||
| + | |-  | ||
| + | | 86 || ADD A,(HL)  | ||
| + | |-  | ||
| + | | 87 || ADD A,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 88 || ADC A,B  | ||
| + | |-  | ||
| + | | 89 || ADC A,C  | ||
| + | |-  | ||
| + | | 8A || ADC A,D  | ||
| + | |-  | ||
| + | | 8B || ADC A,E  | ||
| + | |-  | ||
| + | | 8C || ADC A,H  | ||
| + | |-  | ||
| + | | 8D || ADC A,L  | ||
| + | |-  | ||
| + | | 8E || ADC A,(HL)  | ||
| + | |-  | ||
| + | | 8F || ADC A,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 90 || SUB B  | ||
| + | |-  | ||
| + | | 91 || SUB C  | ||
| + | |-  | ||
| + | | 92 || SUB D  | ||
| + | |-  | ||
| + | | 93 || SUB E  | ||
| + | |-  | ||
| + | | 94 || SUB H  | ||
| + | |-  | ||
| + | | 95 || SUB L  | ||
| + | |-  | ||
| + | | 96 || SUB (HL)  | ||
| + | |-  | ||
| + | | 97 || SUB A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 98 || SBC A,B  | ||
| + | |-  | ||
| + | | 99 || SBC A,C  | ||
| + | |-  | ||
| + | | 9A || SBC A,D  | ||
| + | |-  | ||
| + | | 9B || SBC A,E  | ||
| + | |-  | ||
| + | | 9C || SBC A,H  | ||
| + | |-  | ||
| + | | 9D || SBC A,L  | ||
| + | |-  | ||
| + | | 9E || SBC A,(HL)  | ||
| + | |-  | ||
| + | | 9F || SBC A,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | A0 || AND B  | ||
| + | |-  | ||
| + | | A1 || AND C  | ||
| + | |-  | ||
| + | | A2 || AND D  | ||
| + | |-  | ||
| + | | A3 || AND E  | ||
| + | |-  | ||
| + | | A4 || AND H  | ||
| + | |-  | ||
| + | | A5 || AND L  | ||
| + | |-  | ||
| + | | A6 || AND (HL)  | ||
| + | |-  | ||
| + | | A7 || AND A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | A8 || XOR B  | ||
| + | |-  | ||
| + | | A9 || XOR C  | ||
| + | |-  | ||
| + | | AA || XOR D  | ||
| + | |-  | ||
| + | | AB || XOR E  | ||
| + | |-  | ||
| + | | AC || XOR H  | ||
| + | |-  | ||
| + | | AD || XOR L  | ||
| + | |-  | ||
| + | | AE || XOR (HL)  | ||
| + | |-  | ||
| + | | AF || XOR A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | B0 || OR B  | ||
| + | |-  | ||
| + | | B1 || OR C  | ||
| + | |-  | ||
| + | | B2 || OR D  | ||
| + | |-  | ||
| + | | B3 || OR E  | ||
| + | |-  | ||
| + | | B4 || OR H  | ||
| + | |-  | ||
| + | | B5 || OR L  | ||
| + | |-  | ||
| + | | B6 || OR (HL)  | ||
| + | |-  | ||
| + | | B7 || OR A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | B8 || CP B  | ||
| + | |-  | ||
| + | | B9 || CP C  | ||
| + | |-  | ||
| + | | BA || CP D  | ||
| + | |-  | ||
| + | | BB || CP E  | ||
| + | |-  | ||
| + | | BC || CP H  | ||
| + | |-  | ||
| + | | BD || CP L  | ||
| + | |-  | ||
| + | | BE || CP (HL)  | ||
| + | |-  | ||
| + | | BF || CP A  | ||
| + | |}  | ||
| + | |}  | ||
| + | |||
| + | {| style="white-space: nowrap;"  | ||
| + | |-  | ||
| + | |   | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | C0 || RET NZ  | ||
| + | |-  | ||
| + | | C1 || POP BC  | ||
| + | |-  | ||
| + | | C2 xx xx || JP NZ,nn  | ||
| + | |-  | ||
| + | | C3 xx xx || JP nn  | ||
| + | |-  | ||
| + | | C4 xx xx || CALL NZ,nn  | ||
| + | |-  | ||
| + | | C5 || PUSH BC  | ||
| + | |-  | ||
| + | | C6 xx || ADD A,n  | ||
| + | |-  | ||
| + | | C7 || RST #0  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | C8 || RET Z  | ||
| + | |-  | ||
| + | | C9 || RET  | ||
| + | |-  | ||
| + | | CA xx xx || JP Z,nn  | ||
| + | |-  | ||
| + | | CB || ''Instruction prefix''  | ||
| + | |-  | ||
| + | | CC xx xx || CALL Z,nn  | ||
| + | |-  | ||
| + | | CD xx xx || CALL nn  | ||
| + | |-  | ||
| + | | CE xx || ADC A,n  | ||
| + | |-  | ||
| + | | CF || RST #8  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | D0 || RET NC  | ||
| + | |-  | ||
| + | | D1 || POP DE  | ||
| + | |-  | ||
| + | | D2 xx xx || JP NC,nn  | ||
| + | |-  | ||
| + | | D3 || '''—'''  | ||
| + | |-  | ||
| + | | D4 xx xx || CALL NC,nn  | ||
| + | |-  | ||
| + | | D5 || PUSH DE  | ||
| + | |-  | ||
| + | | D6 xx || SUB n  | ||
| + | |-  | ||
| + | | D7 || RST #10  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | D8 || RET C  | ||
| + | |-  | ||
| + | | D9 || EXX  | ||
| + | |-  | ||
| + | | DA xx xx || JP C,nn  | ||
| + | |-  | ||
| + | | DB || '''—'''  | ||
| + | |-  | ||
| + | | DC xx xx || CALL C,nn  | ||
| + | |-  | ||
| + | | DD || '''—'''  | ||
| + | |-  | ||
| + | | DE xx || SBC A,n  | ||
| + | |-  | ||
| + | | DF || RST #18  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | E0 || RET PO  | ||
| + | |-  | ||
| + | | E1 || POP HL  | ||
| + | |-  | ||
| + | | E2 xx xx || JP PO,nn  | ||
| + | |-  | ||
| + | | E3 || '''—'''  | ||
| + | |-  | ||
| + | | E4 || '''—'''  | ||
| + | |-  | ||
| + | | E5 || PUSH HL  | ||
| + | |-  | ||
| + | | E6 xx || AND n  | ||
| + | |-  | ||
| + | | E7 || RST #20  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | E8 || RET PE  | ||
| + | |-  | ||
| + | | E9 || JP (HL)  | ||
| + | |-  | ||
| + | | EA xx xx || JP PE,nn  | ||
| + | |-  | ||
| + | | EB || '''—'''  | ||
| + | |-  | ||
| + | | EC || '''—'''  | ||
| + | |-  | ||
| + | | ED || '''—'''  | ||
| + | |-  | ||
| + | | EE xx || XOR n  | ||
| + | |-  | ||
| + | | EF || RST #28  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | F0 || RET P  | ||
| + | |-  | ||
| + | | F1 || POP AF  | ||
| + | |-  | ||
| + | | F2 xx xx || JP P,nn  | ||
| + | |-  | ||
| + | | F3 || DI  | ||
| + | |-  | ||
| + | | F4 || '''—'''  | ||
| + | |-  | ||
| + | | F5 || PUSH AF  | ||
| + | |-  | ||
| + | | F6 xx || OR n  | ||
| + | |-  | ||
| + | | F7 || RST #30  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | F8 || RET M  | ||
| + | |-  | ||
| + | | F9 || LD SP,HL  | ||
| + | |-  | ||
| + | | FA xx xx || JP M,nn  | ||
| + | |-  | ||
| + | | FB || EI  | ||
| + | |-  | ||
| + | | FC || '''—'''  | ||
| + | |-  | ||
| + | | FD || '''—'''  | ||
| + | |-  | ||
| + | | FE xx || CP n  | ||
| + | |-  | ||
| + | | FF || RST #38  | ||
| + | |}  | ||
| + | |}  | ||
| + | |||
| + | === CB-prefixed opcodes ===  | ||
| + | |||
| + | {| style="white-space: nowrap;"  | ||
| + | |-  | ||
| + | |   | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 00 || RLC B  | ||
| + | |-  | ||
| + | | 01 || RLC C  | ||
| + | |-  | ||
| + | | 02 || RLC D  | ||
| + | |-  | ||
| + | | 03 || RLC E  | ||
| + | |-  | ||
| + | | 04 || RLC H  | ||
| + | |-  | ||
| + | | 05 || RLC L  | ||
| + | |-  | ||
| + | | 06 || RLC (HL)  | ||
| + | |-  | ||
| + | | 07 || RLC A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 08 || RRC B  | ||
| + | |-  | ||
| + | | 09 || RRC C  | ||
| + | |-  | ||
| + | | 0A || RRC D  | ||
| + | |-  | ||
| + | | 0B || RRC E  | ||
| + | |-  | ||
| + | | 0C || RRC H  | ||
| + | |-  | ||
| + | | 0D || RRC L  | ||
| + | |-  | ||
| + | | 0E || RRC (HL)  | ||
| + | |-  | ||
| + | | 0F || RRC A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 10 || RL B  | ||
| + | |-  | ||
| + | | 11 || RL C  | ||
| + | |-  | ||
| + | | 12 || RL D  | ||
| + | |-  | ||
| + | | 13 || RL E  | ||
| + | |-  | ||
| + | | 14 || RL H  | ||
| + | |-  | ||
| + | | 15 || RL L  | ||
| + | |-  | ||
| + | | 16 || RL (HL)  | ||
| + | |-  | ||
| + | | 17 || RL A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 18 || RR B  | ||
| + | |-  | ||
| + | | 19 || RR C  | ||
| + | |-  | ||
| + | | 1A || RR D  | ||
| + | |-  | ||
| + | | 1B || RR E  | ||
| + | |-  | ||
| + | | 1C || RR H  | ||
| + | |-  | ||
| + | | 1D || RR L  | ||
| + | |-  | ||
| + | | 1E || RR (HL)  | ||
| + | |-  | ||
| + | | 1F || RR A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 20 || SLA B  | ||
| + | |-  | ||
| + | | 21 || SLA C  | ||
| + | |-  | ||
| + | | 22 || SLA D  | ||
| + | |-  | ||
| + | | 23 || SLA E  | ||
| + | |-  | ||
| + | | 24 || SLA H  | ||
| + | |-  | ||
| + | | 25 || SLA L  | ||
| + | |-  | ||
| + | | 26 || SLA (HL)  | ||
| + | |-  | ||
| + | | 27 || SLA A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 28 || SRA B  | ||
| + | |-  | ||
| + | | 29 || SRA C  | ||
| + | |-  | ||
| + | | 2A || SRA D  | ||
| + | |-  | ||
| + | | 2B || SRA E  | ||
| + | |-  | ||
| + | | 2C || SRA H  | ||
| + | |-  | ||
| + | | 2D || SRA L  | ||
| + | |-  | ||
| + | | 2E || SRA (HL)  | ||
| + | |-  | ||
| + | | 2F || SRA A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 30 || '''SWAP B'''  | ||
| + | |-  | ||
| + | | 31 || '''SWAP C'''  | ||
| + | |-  | ||
| + | | 32 || '''SWAP D'''  | ||
| + | |-  | ||
| + | | 33 || '''SWAP E'''  | ||
| + | |-  | ||
| + | | 34 || '''SWAP H'''  | ||
| + | |-  | ||
| + | | 35 || '''SWAP L'''  | ||
| + | |-  | ||
| + | | 36 || '''SWAP (HL)'''  | ||
| + | |-  | ||
| + | | 37 || '''SWAP A'''  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 38 || SRL B  | ||
| + | |-  | ||
| + | | 39 || SRL C  | ||
| + | |-  | ||
| + | | 3A || SRL D  | ||
| + | |-  | ||
| + | | 3B || SRL E  | ||
| + | |-  | ||
| + | | 3C || SRL H  | ||
| + | |-  | ||
| + | | 3D || SRL L  | ||
| + | |-  | ||
| + | | 3E || SRL (HL)  | ||
| + | |-  | ||
| + | | 3F || SRL A  | ||
| + | |}  | ||
| + | |-  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 40 || BIT 0,B  | ||
| + | |-  | ||
| + | | 41 || BIT 0,C  | ||
| + | |-  | ||
| + | | 42 || BIT 0,D  | ||
| + | |-  | ||
| + | | 43 || BIT 0,E  | ||
| + | |-  | ||
| + | | 44 || BIT 0,H  | ||
| + | |-  | ||
| + | | 45 || BIT 0,L  | ||
| + | |-  | ||
| + | | 46 || BIT 0,(HL)  | ||
| + | |-  | ||
| + | | 47 || BIT 0,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 48 || BIT 1,B  | ||
| + | |-  | ||
| + | | 49 || BIT 1,C  | ||
| + | |-  | ||
| + | | 4A || BIT 1,D  | ||
| + | |-  | ||
| + | | 4B || BIT 1,E  | ||
| + | |-  | ||
| + | | 4C || BIT 1,H  | ||
| + | |-  | ||
| + | | 4D || BIT 1,L  | ||
| + | |-  | ||
| + | | 4E || BIT 1,(HL)  | ||
| + | |-  | ||
| + | | 4F || BIT 1,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 50 || BIT 2,B  | ||
| + | |-  | ||
| + | | 51 || BIT 2,C  | ||
| + | |-  | ||
| + | | 52 || BIT 2,D  | ||
| + | |-  | ||
| + | | 53 || BIT 2,E  | ||
| + | |-  | ||
| + | | 54 || BIT 2,H  | ||
| + | |-  | ||
| + | | 55 || BIT 2,L  | ||
| + | |-  | ||
| + | | 56 || BIT 2,(HL)  | ||
| + | |-  | ||
| + | | 57 || BIT 2,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 58 || BIT 3,B  | ||
| + | |-  | ||
| + | | 59 || BIT 3,C  | ||
| + | |-  | ||
| + | | 5A || BIT 3,D  | ||
| + | |-  | ||
| + | | 5B || BIT 3,E  | ||
| + | |-  | ||
| + | | 5C || BIT 3,H  | ||
| + | |-  | ||
| + | | 5D || BIT 3,L  | ||
| + | |-  | ||
| + | | 5E || BIT 3,(HL)  | ||
| + | |-  | ||
| + | | 5F || BIT 3,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 60 || BIT 4,B  | ||
| + | |-  | ||
| + | | 61 || BIT 4,C  | ||
| + | |-  | ||
| + | | 62 || BIT 4,D  | ||
| + | |-  | ||
| + | | 63 || BIT 4,E  | ||
| + | |-  | ||
| + | | 64 || BIT 4,H  | ||
| + | |-  | ||
| + | | 65 || BIT 4,L  | ||
| + | |-  | ||
| + | | 66 || BIT 4,(HL)  | ||
| + | |-  | ||
| + | | 67 || BIT 4,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 68 || BIT 5,B  | ||
| + | |-  | ||
| + | | 69 || BIT 5,C  | ||
| + | |-  | ||
| + | | 6A || BIT 5,D  | ||
| + | |-  | ||
| + | | 6B || BIT 5,E  | ||
| + | |-  | ||
| + | | 6C || BIT 5,H  | ||
| + | |-  | ||
| + | | 6D || BIT 5,L  | ||
| + | |-  | ||
| + | | 6E || BIT 5,(HL)  | ||
| + | |-  | ||
| + | | 6F || BIT 5,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 70 || BIT 6,B  | ||
| + | |-  | ||
| + | | 71 || BIT 6,C  | ||
| + | |-  | ||
| + | | 72 || BIT 6,D  | ||
| + | |-  | ||
| + | | 73 || BIT 6,E  | ||
| + | |-  | ||
| + | | 74 || BIT 6,H  | ||
| + | |-  | ||
| + | | 75 || BIT 6,L  | ||
| + | |-  | ||
| + | | 76 || BIT 6,(HL)  | ||
| + | |-  | ||
| + | | 77 || BIT 6,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 78 || BIT 7,B  | ||
| + | |-  | ||
| + | | 79 || BIT 7,C  | ||
| + | |-  | ||
| + | | 7A || BIT 7,D  | ||
| + | |-  | ||
| + | | 7B || BIT 7,E  | ||
| + | |-  | ||
| + | | 7C || BIT 7,H  | ||
| + | |-  | ||
| + | | 7D || BIT 7,L  | ||
| + | |-  | ||
| + | | 7E || BIT 7,(HL)  | ||
| + | |-  | ||
| + | | 7F || BIT 7,A  | ||
| + | |}  | ||
| + | |-  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 80 || RES 0,B  | ||
| + | |-  | ||
| + | | 81 || RES 0,C  | ||
| + | |-  | ||
| + | | 82 || RES 0,D  | ||
| + | |-  | ||
| + | | 83 || RES 0,E  | ||
| + | |-  | ||
| + | | 84 || RES 0,H  | ||
| + | |-  | ||
| + | | 85 || RES 0,L  | ||
| + | |-  | ||
| + | | 86 || RES 0,(HL)  | ||
| + | |-  | ||
| + | | 87 || RES 0,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 88 || RES 1,B  | ||
| + | |-  | ||
| + | | 89 || RES 1,C  | ||
| + | |-  | ||
| + | | 8A || RES 1,D  | ||
| + | |-  | ||
| + | | 8B || RES 1,E  | ||
| + | |-  | ||
| + | | 8C || RES 1,H  | ||
| + | |-  | ||
| + | | 8D || RES 1,L  | ||
| + | |-  | ||
| + | | 8E || RES 1,(HL)  | ||
| + | |-  | ||
| + | | 8F || RES 1,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 90 || RES 2,B  | ||
| + | |-  | ||
| + | | 91 || RES 2,C  | ||
| + | |-  | ||
| + | | 92 || RES 2,D  | ||
| + | |-  | ||
| + | | 93 || RES 2,E  | ||
| + | |-  | ||
| + | | 94 || RES 2,H  | ||
| + | |-  | ||
| + | | 95 || RES 2,L  | ||
| + | |-  | ||
| + | | 96 || RES 2,(HL)  | ||
| + | |-  | ||
| + | | 97 || RES 2,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | 98 || RES 3,B  | ||
| + | |-  | ||
| + | | 99 || RES 3,C  | ||
| + | |-  | ||
| + | | 9A || RES 3,D  | ||
| + | |-  | ||
| + | | 9B || RES 3,E  | ||
| + | |-  | ||
| + | | 9C || RES 3,H  | ||
| + | |-  | ||
| + | | 9D || RES 3,L  | ||
| + | |-  | ||
| + | | 9E || RES 3,(HL)  | ||
| + | |-  | ||
| + | | 9F || RES 3,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | A0 || RES 4,B  | ||
| + | |-  | ||
| + | | A1 || RES 4,C  | ||
| + | |-  | ||
| + | | A2 || RES 4,D  | ||
| + | |-  | ||
| + | | A3 || RES 4,E  | ||
| + | |-  | ||
| + | | A4 || RES 4,H  | ||
| + | |-  | ||
| + | | A5 || RES 4,L  | ||
| + | |-  | ||
| + | | A6 || RES 4,(HL)  | ||
| + | |-  | ||
| + | | A7 || RES 4,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | A8 || RES 5,B  | ||
| + | |-  | ||
| + | | A9 || RES 5,C  | ||
| + | |-  | ||
| + | | AA || RES 5,D  | ||
| + | |-  | ||
| + | | AB || RES 5,E  | ||
| + | |-  | ||
| + | | AC || RES 5,H  | ||
| + | |-  | ||
| + | | AD || RES 5,L  | ||
| + | |-  | ||
| + | | AE || RES 5,(HL)  | ||
| + | |-  | ||
| + | | AF || RES 5,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | B0 || RES 6,B  | ||
| + | |-  | ||
| + | | B1 || RES 6,C  | ||
| + | |-  | ||
| + | | B2 || RES 6,D  | ||
| + | |-  | ||
| + | | B3 || RES 6,E  | ||
| + | |-  | ||
| + | | B4 || RES 6,H  | ||
| + | |-  | ||
| + | | B5 || RES 6,L  | ||
| + | |-  | ||
| + | | B6 || RES 6,(HL)  | ||
| + | |-  | ||
| + | | B7 || RES 6,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | B8 || RES 7,B  | ||
| + | |-  | ||
| + | | B9 || RES 7,C  | ||
| + | |-  | ||
| + | | BA || RES 7,D  | ||
| + | |-  | ||
| + | | BB || RES 7,E  | ||
| + | |-  | ||
| + | | BC || RES 7,H  | ||
| + | |-  | ||
| + | | BD || RES 7,L  | ||
| + | |-  | ||
| + | | BE || RES 7,(HL)  | ||
| + | |-  | ||
| + | | BF || RES 7,A  | ||
| + | |}  | ||
| + | |-  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | C0 || SET 0,B  | ||
| + | |-  | ||
| + | | C1 || SET 0,C  | ||
| + | |-  | ||
| + | | C2 || SET 0,D  | ||
| + | |-  | ||
| + | | C3 || SET 0,E  | ||
| + | |-  | ||
| + | | C4 || SET 0,H  | ||
| + | |-  | ||
| + | | C5 || SET 0,L  | ||
| + | |-  | ||
| + | | C6 || SET 0,(HL)  | ||
| + | |-  | ||
| + | | C7 || SET 0,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | C8 || SET 1,B  | ||
| + | |-  | ||
| + | | C9 || SET 1,C  | ||
| + | |-  | ||
| + | | CA || SET 1,D  | ||
| + | |-  | ||
| + | | CB || SET 1,E  | ||
| + | |-  | ||
| + | | CC || SET 1,H  | ||
| + | |-  | ||
| + | | CD || SET 1,L  | ||
| + | |-  | ||
| + | | CE || SET 1,(HL)  | ||
| + | |-  | ||
| + | | CF || SET 1,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | D0 || SET 2,B  | ||
| + | |-  | ||
| + | | D1 || SET 2,C  | ||
| + | |-  | ||
| + | | D2 || SET 2,D  | ||
| + | |-  | ||
| + | | D3 || SET 2,E  | ||
| + | |-  | ||
| + | | D4 || SET 2,H  | ||
| + | |-  | ||
| + | | D5 || SET 2,L  | ||
| + | |-  | ||
| + | | D6 || SET 2,(HL)  | ||
| + | |-  | ||
| + | | D7 || SET 2,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | D8 || SET 3,B  | ||
| + | |-  | ||
| + | | D9 || SET 3,C  | ||
| + | |-  | ||
| + | | DA || SET 3,D  | ||
| + | |-  | ||
| + | | DB || SET 3,E  | ||
| + | |-  | ||
| + | | DC || SET 3,H  | ||
| + | |-  | ||
| + | | DD || SET 3,L  | ||
| + | |-  | ||
| + | | DE || SET 3,(HL)  | ||
| + | |-  | ||
| + | | DF || SET 3,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | E0 || SET 4,B  | ||
| + | |-  | ||
| + | | E1 || SET 4,C  | ||
| + | |-  | ||
| + | | E2 || SET 4,D  | ||
| + | |-  | ||
| + | | E3 || SET 4,E  | ||
| + | |-  | ||
| + | | E4 || SET 4,H  | ||
| + | |-  | ||
| + | | E5 || SET 4,L  | ||
| + | |-  | ||
| + | | E6 || SET 4,(HL)  | ||
| + | |-  | ||
| + | | E7 || SET 4,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | E8 || SET 5,B  | ||
| + | |-  | ||
| + | | E9 || SET 5,C  | ||
| + | |-  | ||
| + | | EA || SET 5,D  | ||
| + | |-  | ||
| + | | EB || SET 5,E  | ||
| + | |-  | ||
| + | | EC || SET 5,H  | ||
| + | |-  | ||
| + | | ED || SET 5,L  | ||
| + | |-  | ||
| + | | EE || SET 5,(HL)  | ||
| + | |-  | ||
| + | | EF || SET 5,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | F0 || SET 6,B  | ||
| + | |-  | ||
| + | | F1 || SET 6,C  | ||
| + | |-  | ||
| + | | F2 || SET 6,D  | ||
| + | |-  | ||
| + | | F3 || SET 6,E  | ||
| + | |-  | ||
| + | | F4 || SET 6,H  | ||
| + | |-  | ||
| + | | F5 || SET 6,L  | ||
| + | |-  | ||
| + | | F6 || SET 6,(HL)  | ||
| + | |-  | ||
| + | | F7 || SET 6,A  | ||
| + | |}  | ||
| + | |  | ||
| + | {| class="wikitable"  | ||
| + | ! Opcode !! Mnemonic  | ||
| + | |-  | ||
| + | | F8 || SET 7,B  | ||
| + | |-  | ||
| + | | F9 || SET 7,C  | ||
| + | |-  | ||
| + | | FA || SET 7,D  | ||
| + | |-  | ||
| + | | FB || SET 7,E  | ||
| + | |-  | ||
| + | | FC || SET 7,H  | ||
| + | |-  | ||
| + | | FD || SET 7,L  | ||
| + | |-  | ||
| + | | FE || SET 7,(HL)  | ||
| + | |-  | ||
| + | | FF || SET 7,A  | ||
| + | |}  | ||
| + | |}  | ||
[[Category:Non CPC Computers]]  | [[Category:Non CPC Computers]]  | ||
[[Category:Electronic Component]]  | [[Category:Electronic Component]]  | ||
Revision as of 06:39, 23 April 2025
The GBZ80 (Sharp SM83) is the CPU that powers the original Nintendo Gameboy and Gameboy Color handheld consoles. It is kind of an in-between the Intel 8080 and Z80. Awesome Gameboy resources GBDev wiki Emudev (q00.gb)
The GBZ80 lacks the alternate register set, the dedicated I/O bus, the R register, the index registers (thus no DD and FD prefixed opcodes), the ED prefixed opcodes (including block transfer), the sign and parity/overflow flags (and all conditional instructions that used them), the undocumented flags (thus no leaking of WZ and Q internal registers). GBZ80 opcodes
The GBZ80 also lacks the NMI pin (thus no IFF2 and no RETN), the IM instructions and the I register. It has a different interrupt system than the Z80. Source
The Nintendo documentation does not mention M-cycles or T-states at all. They only mention CPU cycles, which are always equal to 4 T-states (like NOPs in the CPC world). Also, the GBZ80 has different timings than the Z80. For example, CALL nn takes 6 cycles on the GBZ80, but only 5 NOPs on the Z80. Gameboy programming manual
Fun fact: Way more GBZ80 cores were produced for Gameboy hardware (118 million Gameboys and 81 million GBA) than all the Z80 chips produced for home computers and game consoles. Learn GBZ80 Assembly Programming with ChibiAkumas
Opcodes
Opcode differences with Z80 are in bold. The unused (—) opcodes will lock up the Game Boy CPU when used.
Standard opcodes
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | 
CB-prefixed opcodes
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  | 
  | 
  | 
  | 
  | 
  | 
  | 
  |