rubygb 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.DS_Store +0 -0
- data/.gitignore +5 -0
- data/.travis.yml +20 -0
- data/CHANGELOG.md +6 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +23 -0
- data/MIT-LICENSE.txt +53 -0
- data/README.md +30 -0
- data/Rakefile +30 -0
- data/bin/rubygb +5 -0
- data/lib/galp/AND.GIF +0 -0
- data/lib/galp/ARROW.GIF +0 -0
- data/lib/galp/C.BAT +5 -0
- data/lib/galp/CHANGES.TXT +5 -0
- data/lib/galp/EXAMPLE.LNK +7 -0
- data/lib/galp/EXAMPLE1.TXT +266 -0
- data/lib/galp/GBHW.TXT +645 -0
- data/lib/galp/GBSPEC.TXT +1761 -0
- data/lib/galp/IBMPC1.TXT +2400 -0
- data/lib/galp/INDEX.HTM +23 -0
- data/lib/galp/INSTR.HTM +563 -0
- data/lib/galp/MEM1.HTM +199 -0
- data/lib/galp/MEMORY.TXT +160 -0
- data/lib/galp/OPCODES.HTM +351 -0
- data/lib/galp/OR.GIF +0 -0
- data/lib/galp/README.TXT +4 -0
- data/lib/galp/REGS.HTM +77 -0
- data/lib/galp/RL.GIF +0 -0
- data/lib/galp/RLC.GIF +0 -0
- data/lib/galp/RR.GIF +0 -0
- data/lib/galp/RRC.GIF +0 -0
- data/lib/galp/SETUP.BAT +7 -0
- data/lib/galp/SLA.GIF +0 -0
- data/lib/galp/SRA.GIF +0 -0
- data/lib/galp/SRL.GIF +0 -0
- data/lib/galp/START.HTM +24 -0
- data/lib/galp/SWAP.GIF +0 -0
- data/lib/galp/VID1.HTM +34 -0
- data/lib/galp/XOR.GIF +0 -0
- data/lib/rgbds/rgbasm +0 -0
- data/lib/rgbds/rgbfix +0 -0
- data/lib/rgbds/rgblink +0 -0
- data/lib/rubygb/cli.rb +11 -0
- data/lib/rubygb/rubygb.rb +15 -0
- data/lib/rubygb/version.rb +4 -0
- data/lib/rubygb.rb +7 -0
- data/rubygb.gemspec +23 -0
- data/scrap/basic.gb +0 -0
- data/scrap/basic.map +55 -0
- data/scrap/basic.obj +0 -0
- data/scrap/basic.s +176 -0
- data/scrap/basic.sym +8 -0
- data/spec/basic.s +176 -0
- data/spec/rubygb_spec.rb +19 -0
- metadata +129 -0
@@ -0,0 +1,351 @@
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//SQ//DTD HTML 2.0 HoTMetaL + extensions//EN">
|
2
|
+
<HTML><HEAD><TITLE>GameBoy Opcodes Summary</TITLE></HEAD>
|
3
|
+
<BODY><H1>GameBoy Opcode Summary</H1>
|
4
|
+
<P>The GameBoy has instructions & registers similiar to the 8080, 8085, &
|
5
|
+
Z80 microprocessors. The internal 8-bit registers are A, B, C, D, E, F, H, &
|
6
|
+
L. Theses registers may be used in pairs for 16-bit operations as AF, BC, DE, &
|
7
|
+
HL. The two remaining 16-bit registers are the program counter (PC) and the
|
8
|
+
stack pointer (SP).</P>
|
9
|
+
<P>The F register holds the cpu flags. The operation of these flags is
|
10
|
+
identical to their Z80 relative. The lower four bits of this register always
|
11
|
+
read zero even if written with a one.</P>
|
12
|
+
<TABLE BORDER="1"><TR><TD ALIGN="CENTER" COLSTART="1" COLSPAN="8">Flag
|
13
|
+
Register</TD></TR><TR><TD COLSTART="1">7</TD><TD COLSTART="2">6</TD><TD
|
14
|
+
COLSTART="3">5</TD><TD COLSTART="4">4</TD><TD COLSTART="5">3</TD><TD
|
15
|
+
COLSTART="6">2</TD><TD COLSTART="7">1</TD><TD COLSTART="8">0</TD></TR><TR><TD
|
16
|
+
COLSTART="1">Z</TD><TD COLSTART="2">N</TD><TD COLSTART="3">H</TD><TD
|
17
|
+
COLSTART="4">C</TD><TD COLSTART="5">0</TD><TD COLSTART="6">0</TD><TD
|
18
|
+
COLSTART="7">0</TD><TD COLSTART="8">0</TD></TR>
|
19
|
+
|
20
|
+
</TABLE>
|
21
|
+
<P>The GameBoy CPU is based on a subset of the Z80 microprocessor. A summary of
|
22
|
+
these commands is given below.</P>
|
23
|
+
<TABLE BORDER="3"><TR><TD COLSTART="1">Mnemonic</TD><TD COLSTART="2">Symbolic
|
24
|
+
Operation</TD><TD COLSTART="3">Comments</TD><TD COLSTART="4">CPU Clocks</TD><TD
|
25
|
+
COLSTART="5">Flags - Z,N,H,C</TD></TR>
|
26
|
+
|
27
|
+
</TABLE>
|
28
|
+
<H3>8-Bit Loads</H3>
|
29
|
+
<TABLE BORDER="1"><TR><TD COLSTART="1">LD r,s</TD><TD COLSTART="2">r
|
30
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> s</TD><TD
|
31
|
+
ALIGN="CENTER" COLSTART="3">s=r,n,(HL)</TD><TD ALIGN="CENTER" COLSTART="4">r=4,
|
32
|
+
n=8, (HL)=8</TD><TD ALIGN="CENTER" COLSTART="5"></TD></TR><TR><TD COLSTART="1">LD
|
33
|
+
d,r</TD><TD COLSTART="2">d
|
34
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> r</TD><TD
|
35
|
+
ALIGN="CENTER" COLSTART="3" ROWSPAN="2">d=r,(HL)</TD><TD
|
36
|
+
ALIGN="CENTER" COLSTART="4">r=4, (HL)=8</TD><TD ALIGN="CENTER" COLSTART="5"></TD></TR>
|
37
|
+
<TR><TD COLSTART="1">LD d,n</TD><TD COLSTART="2">d
|
38
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> n</TD><TD
|
39
|
+
ALIGN="CENTER" COLSTART="4">r=8, (HL)=12</TD><TD ALIGN="CENTER" COLSTART="5"></TD></TR>
|
40
|
+
<TR><TD COLSTART="1">LD A,(ss)</TD><TD COLSTART="2">A
|
41
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> (ss)</TD><TD
|
42
|
+
ALIGN="CENTER" COLSTART="3">ss=BC,DE,HL,nn</TD><TD COLSTART="4" ROWSPAN="2">[BC,DE,HL]=8,
|
43
|
+
nn=16</TD><TD COLSTART="5" ROWSPAN="1"></TD></TR><TR><TD COLSTART="1">LD
|
44
|
+
(dd),A</TD><TD COLSTART="2">(dd)
|
45
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> A</TD><TD
|
46
|
+
COLSTART="3">dd=BC,DE,HL,nn</TD><TD COLSTART="5"></TD></TR><TR><TD
|
47
|
+
COLSTART="1" ROWSPAN="2">LD A,(C)</TD><TD COLSTART="2" ROWSPAN="2">A
|
48
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> ($FF00+C)</TD><TD
|
49
|
+
ALIGN="CENTER" COLSTART="3" ROWSPAN="9">-</TD><TD
|
50
|
+
ALIGN="CENTER" COLSTART="4" ROWSPAN="2">8</TD><TD
|
51
|
+
ALIGN="CENTER" COLSTART="5" ROWSPAN="1"></TD></TR><TR><TD
|
52
|
+
ALIGN="CENTER" COLSTART="5" ROWSPAN="1"></TD></TR><TR><TD COLSTART="1">LD
|
53
|
+
(C),A</TD><TD COLSTART="2">($FF00+C)
|
54
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> A</TD><TD
|
55
|
+
ALIGN="CENTER" COLSTART="4">8</TD><TD ALIGN="CENTER" COLSTART="5"></TD></TR><TR><TD
|
56
|
+
COLSTART="1">LDD A,(HL)</TD><TD COLSTART="2">A
|
57
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> (HL), HL
|
58
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> HL - 1</TD><TD
|
59
|
+
ALIGN="CENTER" COLSTART="4">8</TD><TD ALIGN="CENTER" COLSTART="5"></TD></TR><TR><TD
|
60
|
+
COLSTART="1">LDD (HL),A</TD><TD COLSTART="2">(HL)
|
61
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> A, HL
|
62
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> HL - 1</TD><TD
|
63
|
+
ALIGN="CENTER" COLSTART="4">8</TD><TD ALIGN="CENTER" COLSTART="5"></TD></TR><TR><TD
|
64
|
+
COLSTART="1">LDI A,(HL)</TD><TD COLSTART="2">A
|
65
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> (HL), HL
|
66
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> HL + 1</TD><TD
|
67
|
+
ALIGN="CENTER" COLSTART="4">8</TD><TD ALIGN="CENTER" COLSTART="5"></TD></TR><TR><TD
|
68
|
+
COLSTART="1">LDI (HL),A</TD><TD COLSTART="2">(HL)
|
69
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> A, HL
|
70
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> HL + 1</TD><TD
|
71
|
+
ALIGN="CENTER" COLSTART="4">8</TD><TD ALIGN="CENTER" COLSTART="5"></TD></TR><TR><TD
|
72
|
+
COLSTART="1">LDH (n),A</TD><TD COLSTART="2">($FF00+n)
|
73
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> A</TD><TD
|
74
|
+
ALIGN="CENTER" COLSTART="4">12</TD><TD ALIGN="CENTER" COLSTART="5"></TD></TR><TR><TD
|
75
|
+
COLSTART="1">LDH A,(n)</TD><TD COLSTART="2">A
|
76
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> ($FF00+n)</TD><TD
|
77
|
+
ALIGN="CENTER" COLSTART="4">12</TD><TD ALIGN="CENTER" COLSTART="5"></TD></TR>
|
78
|
+
|
79
|
+
|
80
|
+
</TABLE>
|
81
|
+
<H3>16-Bit Loads</H3>
|
82
|
+
<TABLE BORDER="1"><TR><TD COLSTART="1">LD dd,nn</TD><TD COLSTART="2">dd
|
83
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> nn</TD><TD
|
84
|
+
COLSTART="3">dd=BC,DE,HL,SP</TD><TD COLSTART="4">12</TD><TD
|
85
|
+
COLSTART="5" ROWSPAN="3">-</TD><TD COLSTART="6" ROWSPAN="3">-</TD><TD
|
86
|
+
COLSTART="7" ROWSPAN="3">-</TD><TD COLSTART="8" ROWSPAN="3">-</TD><TD
|
87
|
+
COLSTART="9" ROWSPAN="1"></TD></TR><TR><TD COLSTART="1">LD (nn),SP</TD><TD
|
88
|
+
COLSTART="2">(nn)
|
89
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> SP
|
90
|
+
</TD><TD ALIGN="CENTER" COLSTART="3" ROWSPAN="3">-</TD><TD COLSTART="4">20</TD><TD
|
91
|
+
COLSTART="9"></TD></TR>
|
92
|
+
<TR><TD COLSTART="1">LD SP,HL
|
93
|
+
</TD><TD COLSTART="2">SP
|
94
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> HL</TD><TD
|
95
|
+
ALIGN="CENTER" COLSTART="4">8</TD><TD ALIGN="CENTER" COLSTART="9"></TD></TR><TR><TD
|
96
|
+
COLSTART="1">LD HL,(SP+e)</TD><TD COLSTART="2">HL
|
97
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> (SP+e)</TD><TD
|
98
|
+
COLSTART="4">12</TD><TD COLSTART="5">0</TD><TD COLSTART="6">0</TD><TD
|
99
|
+
COLSTART="7">*</TD><TD COLSTART="8">*</TD><TD COLSTART="9"></TD></TR><TR><TD
|
100
|
+
COLSTART="1" ROWSPAN="2">PUSH ss</TD><TD COLSTART="2" ROWSPAN="2">
|
101
|
+
(SP-1) <IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> ssh,
|
102
|
+
(SP-2) <IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> ssl, SP<IMG
|
103
|
+
ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7">SP-2
|
104
|
+
</TD><TD COLSTART="3" ROWSPAN="2">ss=BC,DE,HL,AF</TD><TD
|
105
|
+
COLSTART="4" ROWSPAN="2">16</TD><TD COLSTART="5" ROWSPAN="3">-</TD><TD
|
106
|
+
COLSTART="6" ROWSPAN="3">-</TD><TD COLSTART="7" ROWSPAN="3">-</TD><TD
|
107
|
+
COLSTART="8" ROWSPAN="3">-</TD><TD COLSTART="9" ROWSPAN="1"></TD></TR><TR><TD
|
108
|
+
COLSTART="9" ROWSPAN="1"></TD></TR><TR><TD COLSTART="1">POP dd
|
109
|
+
</TD><TD COLSTART="2">ddl
|
110
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> (SP), ddh
|
111
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> (SP+1), SP<IMG
|
112
|
+
ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7">SP+2
|
113
|
+
</TD><TD COLSTART="3">dd=BC,DE,HL,AF
|
114
|
+
</TD><TD COLSTART="4">12</TD><TD COLSTART="9"></TD></TR>
|
115
|
+
|
116
|
+
|
117
|
+
</TABLE>
|
118
|
+
<H3>8-Bit ALU</H3>
|
119
|
+
<TABLE BORDER="1"><TR><TD COLSTART="1">ADD A,s</TD><TD COLSTART="2">A
|
120
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> A + s
|
121
|
+
</TD><TD COLSTART="3" ROWSPAN="8">CY is the carry flag. s=r,n,(HL)</TD><TD
|
122
|
+
COLSTART="4" ROWSPAN="8">r=4, n=8, (HL)=8</TD><TD COLSTART="5" ROWSPAN="2">*</TD><TD
|
123
|
+
COLSTART="6" ROWSPAN="2">0</TD><TD COLSTART="7" ROWSPAN="2">*</TD><TD
|
124
|
+
COLSTART="8" ROWSPAN="2">*</TD>
|
125
|
+
</TR><TR><TD COLSTART="1">ADC A,s</TD><TD COLSTART="2">A
|
126
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> A + s + CY
|
127
|
+
</TD></TR><TR><TD COLSTART="1">SUB s</TD><TD COLSTART="2">A
|
128
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> A - s
|
129
|
+
</TD><TD COLSTART="5" ROWSPAN="2">*</TD><TD COLSTART="6" ROWSPAN="2">1</TD><TD
|
130
|
+
COLSTART="7" ROWSPAN="2">*</TD><TD COLSTART="8" ROWSPAN="2">*</TD>
|
131
|
+
</TR><TR><TD COLSTART="1">SBC A,s</TD><TD COLSTART="2">A
|
132
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> A - s - CY
|
133
|
+
</TD></TR><TR><TD COLSTART="1">AND s</TD><TD COLSTART="2">A
|
134
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> A
|
135
|
+
<IMG ALIGN="BOTTOM" SRC="and.gif" WIDTH="8" HEIGHT="8"> s</TD><TD COLSTART="5">*</TD>
|
136
|
+
<TD COLSTART="6">0</TD><TD COLSTART="7">1</TD><TD COLSTART="8">0</TD></TR><TR>
|
137
|
+
|
138
|
+
<TD COLSTART="1">OR s</TD><TD COLSTART="2">A
|
139
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> A
|
140
|
+
<IMG ALIGN="BOTTOM" SRC="or.gif" WIDTH="8" HEIGHT="8"> s
|
141
|
+
</TD><TD COLSTART="5" ROWSPAN="2">*</TD><TD COLSTART="6" ROWSPAN="2">0</TD><TD
|
142
|
+
COLSTART="7" ROWSPAN="2">0</TD><TD COLSTART="8" ROWSPAN="2">0</TD></TR><TR><TD
|
143
|
+
COLSTART="1">XOR s</TD><TD COLSTART="2">A
|
144
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> A
|
145
|
+
<IMG ALIGN="BOTTOM" SRC="xor.gif" WIDTH="7" HEIGHT="7"> s
|
146
|
+
</TD></TR><TR><TD COLSTART="1">CP s</TD><TD COLSTART="2">A - s</TD><TD
|
147
|
+
COLSTART="5">*</TD><TD COLSTART="6">1</TD><TD COLSTART="7">*</TD><TD
|
148
|
+
COLSTART="8">*</TD></TR><TR><TD COLSTART="1">INC s</TD><TD COLSTART="2">s
|
149
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> s + 1
|
150
|
+
</TD><TD ALIGN="CENTER" COLSTART="3" ROWSPAN="2">s=r,(HL)</TD><TD
|
151
|
+
ALIGN="CENTER" COLSTART="4" ROWSPAN="2">r=4, (HL)=12</TD><TD
|
152
|
+
ALIGN="CENTER" COLSTART="5">*</TD><TD ALIGN="CENTER" COLSTART="6">0</TD><TD
|
153
|
+
ALIGN="CENTER" COLSTART="7">*</TD><TD ALIGN="CENTER" COLSTART="8">-</TD></TR><TR><TD
|
154
|
+
COLSTART="1">DEC s</TD>
|
155
|
+
<TD COLSTART="2">s
|
156
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> s - 1
|
157
|
+
</TD><TD COLSTART="5">*</TD><TD COLSTART="6">1</TD><TD COLSTART="7">*</TD><TD
|
158
|
+
ALIGN="CENTER" COLSTART="8">-</TD></TR>
|
159
|
+
|
160
|
+
</TABLE>
|
161
|
+
<H3>16-Bit Arithmetic</H3>
|
162
|
+
<TABLE BORDER="1"><TR><TD COLSTART="1">ADD HL,ss</TD><TD COLSTART="2">HL
|
163
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> HL + ss
|
164
|
+
</TD><TD COLSTART="3" ROWSPAN="4">ss=BC,DE,HL,SP</TD><TD
|
165
|
+
ALIGN="CENTER" COLSTART="4">8</TD><TD ALIGN="CENTER" COLSTART="5">-</TD><TD
|
166
|
+
ALIGN="CENTER" COLSTART="6">0</TD><TD ALIGN="CENTER" COLSTART="7">*</TD><TD
|
167
|
+
ALIGN="CENTER" COLSTART="8">*</TD></TR><TR><TD COLSTART="1">ADD SP,e</TD><TD
|
168
|
+
COLSTART="2">SP
|
169
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> SP + e
|
170
|
+
</TD><TD COLSTART="4">16</TD><TD COLSTART="5">0</TD><TD COLSTART="6">0</TD><TD
|
171
|
+
COLSTART="7">*</TD><TD COLSTART="8">*</TD></TR><TR><TD COLSTART="1">INC ss</TD><TD
|
172
|
+
COLSTART="2">ss
|
173
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> ss + 1
|
174
|
+
</TD><TD ALIGN="CENTER" COLSTART="4">8</TD><TD
|
175
|
+
ALIGN="CENTER" COLSTART="5" ROWSPAN="2">-</TD><TD
|
176
|
+
ALIGN="CENTER" COLSTART="6" ROWSPAN="2">-</TD><TD
|
177
|
+
ALIGN="CENTER" COLSTART="7" ROWSPAN="2">-</TD><TD
|
178
|
+
ALIGN="CENTER" COLSTART="8" ROWSPAN="2">-</TD></TR><TR><TD COLSTART="1">DEC
|
179
|
+
ss</TD><TD COLSTART="2">ss
|
180
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> ss - 1
|
181
|
+
</TD><TD ALIGN="CENTER" COLSTART="4">8</TD></TR>
|
182
|
+
|
183
|
+
</TABLE>
|
184
|
+
<H3>Miscellaneous</H3>
|
185
|
+
<TABLE BORDER="1"><TR><TD COLSTART="1">SWAP s</TD><TD COLSTART="2"><IMG
|
186
|
+
ALIGN="BOTTOM" SRC="swap.gif" WIDTH="70" HEIGHT="37"></TD><TD COLSTART="3">Swap
|
187
|
+
nibbles. s=r,(HL)</TD><TD COLSTART="4">r=8, (HL)=16</TD><TD COLSTART="5">*</TD><TD
|
188
|
+
COLSTART="6">0</TD><TD COLSTART="7">0</TD><TD COLSTART="8">0</TD></TR><TR><TD
|
189
|
+
COLSTART="1">DAA</TD><TD COLSTART="2">Converts A into packed BCD.</TD><TD
|
190
|
+
ALIGN="CENTER" COLSTART="3" ROWSPAN="2">-</TD><TD ALIGN="CENTER" COLSTART="4">4</TD>
|
191
|
+
<TD ALIGN="CENTER" COLSTART="5">*</TD><TD ALIGN="CENTER" COLSTART="6">-</TD><TD
|
192
|
+
ALIGN="CENTER" COLSTART="7">0</TD><TD ALIGN="CENTER" COLSTART="8">*</TD></TR>
|
193
|
+
<TR><TD COLSTART="1">CPL</TD><TD COLSTART="2">A
|
194
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> /A</TD><TD
|
195
|
+
ALIGN="CENTER" COLSTART="4">4</TD><TD ALIGN="CENTER" COLSTART="5">-</TD><TD
|
196
|
+
ALIGN="CENTER" COLSTART="6">1</TD><TD ALIGN="CENTER" COLSTART="7">1</TD><TD
|
197
|
+
ALIGN="CENTER" COLSTART="8">-</TD></TR><TR><TD COLSTART="1">CCF</TD><TD
|
198
|
+
COLSTART="2">
|
199
|
+
CY <IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> /CY
|
200
|
+
</TD><TD COLSTART="3" ROWSPAN="2">CY is the carry flag.</TD><TD
|
201
|
+
ALIGN="CENTER" COLSTART="4">4</TD><TD ALIGN="CENTER" COLSTART="5">-</TD><TD
|
202
|
+
ALIGN="CENTER" COLSTART="6">0</TD><TD ALIGN="CENTER" COLSTART="7">0</TD><TD
|
203
|
+
ALIGN="CENTER" COLSTART="8">*</TD></TR>
|
204
|
+
<TR><TD COLSTART="1">SCF</TD><TD COLSTART="2">CY
|
205
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> 1</TD><TD
|
206
|
+
ALIGN="CENTER" COLSTART="4">4</TD><TD ALIGN="CENTER" COLSTART="5">-</TD><TD
|
207
|
+
ALIGN="CENTER" COLSTART="6">0</TD><TD ALIGN="CENTER" COLSTART="7">0</TD><TD
|
208
|
+
ALIGN="CENTER" COLSTART="8">1</TD></TR><TR><TD COLSTART="1">NOP</TD><TD
|
209
|
+
COLSTART="2">No operation.</TD><TD ALIGN="CENTER" COLSTART="3" ROWSPAN="5">-</TD><TD
|
210
|
+
ALIGN="CENTER" COLSTART="4">4</TD><TD ALIGN="CENTER" COLSTART="5" ROWSPAN="5">-</TD>
|
211
|
+
<TD ALIGN="CENTER" COLSTART="6" ROWSPAN="5">-</TD><TD
|
212
|
+
ALIGN="CENTER" COLSTART="7" ROWSPAN="5">-</TD><TD
|
213
|
+
ALIGN="CENTER" COLSTART="8" ROWSPAN="5">-</TD></TR><TR><TD COLSTART="1">HALT</TD><TD
|
214
|
+
COLSTART="2">Halt CPU until an interrupt occurs.</TD><TD
|
215
|
+
ALIGN="CENTER" COLSTART="4">4</TD></TR><TR><TD COLSTART="1">STOP
|
216
|
+
</TD><TD COLSTART="2">Halt CPU.</TD><TD ALIGN="CENTER" COLSTART="4">4</TD></TR><TR
|
217
|
+
><TD COLSTART="1">DI</TD><TD COLSTART="2">Disable Interrupts.</TD><TD
|
218
|
+
ALIGN="CENTER" COLSTART="4">4</TD></TR>
|
219
|
+
<TR><TD COLSTART="1">EI</TD><TD COLSTART="2">Enable Interrupts.
|
220
|
+
</TD><TD ALIGN="CENTER" COLSTART="4">4</TD></TR>
|
221
|
+
|
222
|
+
</TABLE>
|
223
|
+
<H3>Rotates & Shifts</H3>
|
224
|
+
<TABLE BORDER="1"><TR><TD COLSTART="1">RLCA</TD><TD COLSTART="2"><IMG
|
225
|
+
SRC="rlc.gif" WIDTH="92" HEIGHT="22"></TD><TD COLSTART="3" ROWSPAN="4"></TD><TD
|
226
|
+
COLSTART="4" ROWSPAN="4">4</TD><TD COLSTART="5" ROWSPAN="4">0</TD><TD
|
227
|
+
COLSTART="6" ROWSPAN="4">0</TD><TD COLSTART="7" ROWSPAN="4">0</TD><TD
|
228
|
+
COLSTART="8" ROWSPAN="4">*</TD></TR><TR><TD COLSTART="1">RLA</TD><TD
|
229
|
+
COLSTART="2"><IMG ALIGN="BOTTOM" SRC="rl.gif" WIDTH="92" HEIGHT="22"></TD></TR><TR
|
230
|
+
><TD COLSTART="1">RRCA</TD><TD COLSTART="2"><IMG
|
231
|
+
ALIGN="BOTTOM" SRC="rrc.gif" WIDTH="92" HEIGHT="22"></TD></TR><TR><TD
|
232
|
+
COLSTART="1">RRA</TD><TD COLSTART="2"><IMG
|
233
|
+
ALIGN="BOTTOM" SRC="rr.gif" WIDTH="92" HEIGHT="22"></TD></TR><TR><TD
|
234
|
+
COLSTART="1">RLC s</TD><TD COLSTART="2"><IMG
|
235
|
+
SRC="rlc.gif" WIDTH="92" HEIGHT="22"></TD><TD COLSTART="3" ROWSPAN="4">s=A,r,(HL)</TD>
|
236
|
+
<TD COLSTART="4" ROWSPAN="4">r=8, (HL)=16</TD><TD COLSTART="5" ROWSPAN="7">*</TD><TD
|
237
|
+
COLSTART="6" ROWSPAN="7">0</TD><TD COLSTART="7" ROWSPAN="7">0</TD><TD
|
238
|
+
COLSTART="8" ROWSPAN="7">*</TD>
|
239
|
+
</TR><TR><TD COLSTART="1">RL s</TD><TD COLSTART="2"><IMG
|
240
|
+
ALIGN="BOTTOM" SRC="rl.gif" WIDTH="92" HEIGHT="22"></TD></TR><TR><TD
|
241
|
+
COLSTART="1">RRC s</TD><TD COLSTART="2"><IMG
|
242
|
+
ALIGN="BOTTOM" SRC="rrc.gif" WIDTH="92" HEIGHT="22"></TD></TR><TR><TD
|
243
|
+
COLSTART="1">RR s</TD><TD COLSTART="2"><IMG
|
244
|
+
ALIGN="BOTTOM" SRC="rr.gif" WIDTH="92" HEIGHT="22"></TD></TR><TR><TD
|
245
|
+
COLSTART="1">SLA s</TD><TD COLSTART="2"><IMG
|
246
|
+
ALIGN="BOTTOM" SRC="sla.gif" WIDTH="92" HEIGHT="23"></TD><TD
|
247
|
+
COLSTART="3" ROWSPAN="3">s=r,(HL)</TD><TD COLSTART="4" ROWSPAN="3">r=8,
|
248
|
+
(HL)=16</TD></TR><TR><TD COLSTART="1">SRA s</TD><TD COLSTART="2"><IMG
|
249
|
+
ALIGN="BOTTOM" SRC="sra.gif" WIDTH="92" HEIGHT="22"></TD></TR><TR><TD
|
250
|
+
COLSTART="1">SRL s</TD><TD COLSTART="2"><IMG
|
251
|
+
ALIGN="BOTTOM" SRC="srl.gif" WIDTH="92" HEIGHT="22"></TD></TR>
|
252
|
+
|
253
|
+
|
254
|
+
</TABLE>
|
255
|
+
<H3>Bit Opcodes</H3>
|
256
|
+
<TABLE BORDER="1"><TR><TD COLSTART="1">BIT b,s</TD><TD COLSTART="2">Z
|
257
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> /sb</TD><TD
|
258
|
+
COLSTART="3" ROWSPAN="3">Z is zero flag. s=r,(HL)</TD><TD COLSTART="4">r=8,
|
259
|
+
(HL)=12</TD><TD COLSTART="5">*</TD><TD COLSTART="6">0</TD><TD COLSTART="7">1</TD><TD
|
260
|
+
COLSTART="8">-</TD></TR><TR><TD COLSTART="1">SET b,s</TD><TD COLSTART="2">sb
|
261
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> 1</TD><TD
|
262
|
+
COLSTART="4" ROWSPAN="2">r=8, (HL)=16</TD><TD COLSTART="5" ROWSPAN="2">-</TD><TD
|
263
|
+
COLSTART="6" ROWSPAN="2">-</TD><TD COLSTART="7" ROWSPAN="2">-</TD><TD
|
264
|
+
COLSTART="8" ROWSPAN="2">-</TD></TR><TR><TD COLSTART="1">RES b,s</TD><TD
|
265
|
+
COLSTART="2">sb
|
266
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> 0</TD>
|
267
|
+
</TR>
|
268
|
+
|
269
|
+
</TABLE>
|
270
|
+
<H3>Jumps</H3>
|
271
|
+
<TABLE BORDER="1"><TR><TD COLSTART="1">JP nn</TD><TD COLSTART="2">PC
|
272
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> nn</TD><TD
|
273
|
+
ALIGN="CENTER" COLSTART="3" ROWSPAN="5">-</TD><TD ALIGN="CENTER" COLSTART="4">16</TD></TR>
|
274
|
+
<TR><TD COLSTART="1">JP cc,nn</TD><TD COLSTART="2">If cc is true, PC
|
275
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> nn, else continue.</TD><TD
|
276
|
+
COLSTART="4">If cc is true, 16 else 12.</TD></TR><TR><TD COLSTART="1">JP
|
277
|
+
(HL)</TD><TD COLSTART="2">PC
|
278
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> HL</TD><TD
|
279
|
+
ALIGN="CENTER" COLSTART="4">4</TD></TR><TR><TD COLSTART="1">JR e</TD><TD
|
280
|
+
COLSTART="2">PC
|
281
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> PC + e
|
282
|
+
</TD><TD ALIGN="CENTER" COLSTART="4">12</TD></TR><TR><TD COLSTART="1">JR cc,e</TD>
|
283
|
+
<TD COLSTART="2">if cc is true, PC
|
284
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> PC + e, else
|
285
|
+
continue.</TD><TD COLSTART="4">If cc is true, 12 else 8.</TD></TR>
|
286
|
+
|
287
|
+
|
288
|
+
</TABLE>
|
289
|
+
<H3>Calls</H3>
|
290
|
+
<TABLE BORDER="1"><TR><TD COLSTART="1">CALL nn</TD><TD COLSTART="2">(SP-1)
|
291
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> PCh, (SP-2)
|
292
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> PCl, PC
|
293
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> nn, SP<IMG
|
294
|
+
ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7">SP-2
|
295
|
+
</TD><TD ALIGN="CENTER" COLSTART="3" ROWSPAN="2">-</TD><TD
|
296
|
+
ALIGN="CENTER" COLSTART="4">24</TD></TR><TR><TD COLSTART="1">CALL cc,nn</TD><TD
|
297
|
+
COLSTART="2">If condition cc is false continue, else same as CALL nn.</TD><TD
|
298
|
+
COLSTART="4">If cc is true, 24 else 12.</TD></TR>
|
299
|
+
|
300
|
+
</TABLE>
|
301
|
+
<H3>Restarts</H3>
|
302
|
+
<TABLE BORDER="1"><TR><TD COLSTART="1">RST f</TD><TD COLSTART="2">(SP-1)
|
303
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> PCh, (SP-2)
|
304
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> PCl, PCh
|
305
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> 0, PCl
|
306
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> f, SP<IMG
|
307
|
+
ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7">SP-2
|
308
|
+
</TD><TD ALIGN="CENTER" COLSTART="3">-
|
309
|
+
</TD><TD ALIGN="CENTER" COLSTART="4">16</TD></TR>
|
310
|
+
|
311
|
+
</TABLE>
|
312
|
+
<H3>Returns</H3>
|
313
|
+
<TABLE BORDER="1"><TR><TD COLSTART="1">RET</TD><TD COLSTART="2">pcl
|
314
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> (SP), pch
|
315
|
+
<IMG ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7"> (SP+1), SP<IMG
|
316
|
+
ALIGN="BOTTOM" SRC="arrow.gif" WIDTH="15" HEIGHT="7">SP+2
|
317
|
+
</TD><TD ALIGN="CENTER" COLSTART="3" ROWSPAN="3">-</TD><TD
|
318
|
+
ALIGN="CENTER" COLSTART="4">16</TD></TR><TR><TD COLSTART="1">RET cc</TD><TD
|
319
|
+
COLSTART="2">If cc is true, RET else continue.</TD><TD COLSTART="4">If cc is
|
320
|
+
true, 20 else 8.</TD></TR><TR><TD COLSTART="1">RETI</TD><TD COLSTART="2">Return
|
321
|
+
then enable interrupts.</TD><TD ALIGN="CENTER" COLSTART="4">16</TD></TR>
|
322
|
+
|
323
|
+
|
324
|
+
</TABLE>
|
325
|
+
<H3>Terminology</H3>
|
326
|
+
<TABLE BORDER="1"><TR><TD COLSTART="1">-</TD><TD COLSTART="2">Flag is not
|
327
|
+
affected by this operation.</TD></TR><TR><TD COLSTART="1">*</TD><TD
|
328
|
+
COLSTART="2">Flag is affected according to result of operation.</TD></TR><TR><TD
|
329
|
+
COLSTART="1">b</TD><TD COLSTART="2">A bit number in any 8-bit register or
|
330
|
+
memory location.</TD></TR><TR><TD COLSTART="1">C</TD><TD COLSTART="2">Carry
|
331
|
+
flag.</TD></TR><TR><TD COLSTART="1">cc
|
332
|
+
</TD><TD COLSTART="2">Flag condition code: C,NC,NZ,Z</TD></TR><TR><TD
|
333
|
+
COLSTART="1">d</TD><TD COLSTART="2">Any 8-bit destination register or memory
|
334
|
+
location.</TD></TR><TR><TD COLSTART="1">dd</TD><TD COLSTART="2">Any 16-bit
|
335
|
+
destination register or memory location.</TD></TR><TR><TD COLSTART="1">e</TD><TD
|
336
|
+
COLSTART="2">8-bit signed 2's complement displacement.</TD></TR><TR><TD
|
337
|
+
COLSTART="1">f</TD><TD COLSTART="2">8 special call locations in page zero.
|
338
|
+
</TD></TR><TR><TD COLSTART="1">H</TD><TD COLSTART="2">Half-carry flag.</TD></TR><TR
|
339
|
+
><TD COLSTART="1">N</TD><TD COLSTART="2">Subtraction flag.</TD></TR><TR><TD
|
340
|
+
COLSTART="1">NC</TD><TD COLSTART="2">Not carry flag</TD></TR><TR><TD
|
341
|
+
COLSTART="1">NZ</TD><TD COLSTART="2">Not zero flag.</TD></TR><TR><TD
|
342
|
+
COLSTART="1">n</TD><TD COLSTART="2">Any 8-bit binary number.</TD></TR><TR><TD
|
343
|
+
COLSTART="1">nn</TD><TD COLSTART="2">Any 16-bit binary number.</TD></TR><TR><TD
|
344
|
+
COLSTART="1">r</TD><TD COLSTART="2">Any 8-bit register. (A,B,C,D,E,H, or L)</TD></TR>
|
345
|
+
<TR><TD COLSTART="1">s</TD><TD COLSTART="2">Any 8-bit source register or
|
346
|
+
memory location.</TD></TR><TR><TD COLSTART="1">sb</TD><TD COLSTART="2">A bit
|
347
|
+
in a specific 8-bit register or memory location.</TD></TR><TR><TD COLSTART="1">ss</TD>
|
348
|
+
<TD COLSTART="2">Any 16-bit source register or memory location.</TD></TR><TR><TD
|
349
|
+
COLSTART="1">Z</TD><TD COLSTART="2">Zero Flag.</TD></TR>
|
350
|
+
</TABLE></BODY>
|
351
|
+
</HTML>
|
data/lib/galp/OR.GIF
ADDED
Binary file
|
data/lib/galp/README.TXT
ADDED
data/lib/galp/REGS.HTM
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//SQ//DTD HTML 2.0 HoTMetaL + extensions//EN">
|
2
|
+
<HTML><HEAD><TITLE>GameBoy Assembly Language Primer - Registers</TITLE></HEAD>
|
3
|
+
<BODY><CENTER><H2>GameBoy Assembly Language Primer</H2></CENTER>
|
4
|
+
<HR>
|
5
|
+
<CENTER><H2>GameBoy CPU Registers</H2></CENTER>
|
6
|
+
<P>The GameBoy has instructions & registers similar to the Intel 8080,
|
7
|
+
Intel 8085, & Zilog Z80 microprocessors. It has eight 8-bit registers
|
8
|
+
A,B,C,D,E,F,H,L and two 16-bit registers SP & PC:</P>
|
9
|
+
<CENTER><TABLE BORDER="1" WIDTH="200"><TR><TD COLSTART="1" ALIGN="CENTER">15....8</TD>
|
10
|
+
<TD COLSTART="2" ALIGN="CENTER">7......0</TD></TR><TR><TD
|
11
|
+
COLSTART="1" WIDTH="10" ALIGN="CENTER"><STRONG>A</STRONG></TD><TD
|
12
|
+
COLSTART="2" ALIGN="CENTER"><STRONG>F</STRONG></TD></TR><TR><TD
|
13
|
+
COLSTART="1" ALIGN="CENTER"><STRONG>B</STRONG></TD><TD
|
14
|
+
COLSTART="2" ALIGN="CENTER"><STRONG>C</STRONG></TD></TR><TR><TD
|
15
|
+
COLSTART="1" ALIGN="CENTER"><STRONG>D</STRONG></TD><TD
|
16
|
+
COLSTART="2" ALIGN="CENTER"><STRONG>E</STRONG></TD></TR><TR><TD
|
17
|
+
COLSTART="1" ALIGN="CENTER"><STRONG>H</STRONG></TD><TD
|
18
|
+
COLSTART="2" ALIGN="CENTER"><STRONG>L</STRONG></TD></TR><TR><TD
|
19
|
+
COLSTART="1" COLSPAN="2" ALIGN="CENTER"><STRONG>SP</STRONG></TD></TR><TR><TD
|
20
|
+
COLSTART="1" COLSPAN="2" ALIGN="CENTER"><STRONG>PC</STRONG></TD></TR></TABLE></CENTER>
|
21
|
+
<P>Some instructions, however, allow you to use the registers A,B,C,D,E,H, &
|
22
|
+
L as 16-bit registers by pairing them up in the following manner: <STRONG>AF,BC,DE,
|
23
|
+
& HL</STRONG>. The <STRONG>F</STRONG> register is indirectly accessible by
|
24
|
+
the programmer and is used to store the results of various math operations.</P>
|
25
|
+
<P>The <STRONG>PC</STRONG>, or Program Counter, register points to the next
|
26
|
+
instruction to be executed in the GameBoy memory. The <STRONG>SP</STRONG>, or
|
27
|
+
Stack Pointer, register points to the current stack position.</P>
|
28
|
+
<HR>
|
29
|
+
<H2>Program Counter</H2>
|
30
|
+
<P>On power up, the GameBoy Program Counter is initialized to $100 (100 hex)
|
31
|
+
and the instruction found at this location in ROM is executed. The Program
|
32
|
+
Counter from this point on is controlled, indirectly, by the program
|
33
|
+
instructions themselves that were generated by the programmer of the ROM cart.</P>
|
34
|
+
<H2>Stack Pointer</H2>
|
35
|
+
<P>A big key to understanding programming in assembly language on the GameBoy
|
36
|
+
is understanding the concept of a stack pointer. A familiarity with assembly
|
37
|
+
language for other processors helps greatly as the concepts are the same.</P>
|
38
|
+
<P>The GameBoy Stack Pointer is used to keep track of the top of the "stack".
|
39
|
+
The stack is used for saving variables, saving return addresses, passing
|
40
|
+
arguments to subroutines, and various other uses that might be conceived by the
|
41
|
+
individual programmer.</P>
|
42
|
+
<P>The instructions CALL, PUSH, and RST all put information onto the stack. The
|
43
|
+
instructions POP, RET, and RETI all take information off of the stack.
|
44
|
+
(Interrupts put a return address on the stack and remove it at their completion
|
45
|
+
as well.) As information is put onto the stack, the stack grows downward in RAM
|
46
|
+
memory. As a result, the Stack Pointer should always be initialized at the
|
47
|
+
highest location of RAM space that has been allocated for use by the stack. For
|
48
|
+
instance, if a programmer wishes to locate the Stack Pointer at the top of low
|
49
|
+
RAM space ($C000-$DFFF) he would set the Stack Pointer to $E000 using the
|
50
|
+
command <STRONG>LD SP,$E000</STRONG>. (The Stack Pointer automatically
|
51
|
+
decrements before it puts something onto the stack so it is perfectly acceptable
|
52
|
+
to assign it a value which points to a memory address which is one location past
|
53
|
+
the end of available RAM.)</P>
|
54
|
+
<P>The GameBoy stack pointer is initialized to $FFFE on power up but a
|
55
|
+
programmer should not rely on this setting and rather should explicitly set its
|
56
|
+
value.</P>
|
57
|
+
<H2>Flag Register</H2>
|
58
|
+
<CENTER><TABLE BORDER="1" WIDTH="200"><TR><TD COLSTART="1">7</TD><TD
|
59
|
+
COLSTART="2">6</TD><TD COLSTART="3">5</TD><TD COLSTART="4">4</TD><TD
|
60
|
+
COLSTART="5">3</TD><TD COLSTART="6">2</TD><TD COLSTART="7">1</TD><TD
|
61
|
+
COLSTART="8">0</TD></TR><TR><TD COLSTART="1"><STRONG>Z</STRONG></TD><TD
|
62
|
+
COLSTART="2"><STRONG>N</STRONG></TD><TD COLSTART="3"><STRONG>H</STRONG></TD><TD
|
63
|
+
COLSTART="4"><STRONG>C</STRONG></TD><TD COLSTART="5"><STRONG>0</STRONG></TD><TD
|
64
|
+
COLSTART="6"><STRONG>0</STRONG></TD>
|
65
|
+
<TD COLSTART="7"><STRONG>0</STRONG></TD><TD COLSTART="8"><STRONG>0</STRONG></TD></TR></TABLE></CENTER>
|
66
|
+
<UL>
|
67
|
+
<LI><STRONG>Zero Flag (Z)</STRONG> - This bit is set when the result of a math
|
68
|
+
operation is zero or two values match when using the CP instruction. </LI>
|
69
|
+
<LI><STRONG>Subtract Flag (N)</STRONG> - This bit is set if a subtraction was
|
70
|
+
performed in the last math instruction.</LI>
|
71
|
+
<LI><STRONG>Half Carry Flag (H)</STRONG> - This bit is set if a carry occurred
|
72
|
+
from the lower nibble in the last math operation.</LI>
|
73
|
+
<LI><STRONG>Carry Flag (C)</STRONG> - This bit is set if a carry occurred from
|
74
|
+
the last math operation or if register A is the smaller value when executing the
|
75
|
+
CP instruction.</LI>
|
76
|
+
</UL>
|
77
|
+
<HR></BODY></HTML>
|
data/lib/galp/RL.GIF
ADDED
Binary file
|
data/lib/galp/RLC.GIF
ADDED
Binary file
|
data/lib/galp/RR.GIF
ADDED
Binary file
|
data/lib/galp/RRC.GIF
ADDED
Binary file
|
data/lib/galp/SETUP.BAT
ADDED
data/lib/galp/SLA.GIF
ADDED
Binary file
|
data/lib/galp/SRA.GIF
ADDED
Binary file
|
data/lib/galp/SRL.GIF
ADDED
Binary file
|
data/lib/galp/START.HTM
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//SQ//DTD HTML 2.0 HoTMetaL + extensions//EN">
|
2
|
+
<HTML><HEAD><TITLE>GameBoy Assembly Language Primer - Registers</TITLE></HEAD>
|
3
|
+
<BODY><CENTER><H2>GameBoy Assembly Language Primer</H2></CENTER>
|
4
|
+
<HR>
|
5
|
+
<CENTER><H2>Getting Started</H2></CENTER>
|
6
|
+
<P>This primer is geared towards beginners but it might be helpful to those
|
7
|
+
that have more advanced knowledge as well. It is designed to let a person
|
8
|
+
immediately try the samples to familiarize them with GameBoy Programming.</P>
|
9
|
+
<P>The samples in this primer are geared around the RGBDS GameBoy Assembler
|
10
|
+
written by Carsten Sorensen. This assember was chosen because it is by far the
|
11
|
+
most powerful GameBoy assembler currently available and it is also currently
|
12
|
+
free as well. To compile the samples found in these examples you need the
|
13
|
+
following files from the RGBDS distribution somewhere in the DOS path: <STRONG>RGBASM.EXE,
|
14
|
+
RGBFIX.EXE, </STRONG>and <STRONG>XLINK.EXE</STRONG> (or RGBLINK.EXE). If you
|
15
|
+
are not sure how to include these in the DOS path then just copy them to
|
16
|
+
C:\WINDOWS and you should be set.</P>
|
17
|
+
<P>The samples you see in the following pages are automatically put into their
|
18
|
+
own directory for compiling/testing by going to the DOS directory that contains
|
19
|
+
these html pages and just typing: <STRONG>SETUP</STRONG>. Then, to compile
|
20
|
+
Example 1 (for instance) you just do a <STRONG>cd example1</STRONG> and then
|
21
|
+
just type <STRONG>c</STRONG> to compile Example 1 into a standard .GB ROM file.
|
22
|
+
This ROM file is then useable on a GameBoy Emulator or on the real GameBoy
|
23
|
+
hardware with a suitable flash cartridge or other setup.</P>
|
24
|
+
<HR></BODY></HTML>
|
data/lib/galp/SWAP.GIF
ADDED
Binary file
|
data/lib/galp/VID1.HTM
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//SQ//DTD HTML 2.0 HoTMetaL + extensions//EN">
|
2
|
+
<HTML><HEAD><TITLE>GameBoy Assembly Language Primer - Registers</TITLE></HEAD>
|
3
|
+
<BODY><CENTER><H2>GameBoy Assembly Language Primer</H2></CENTER>
|
4
|
+
<HR>
|
5
|
+
<CENTER><H2>GameBoy Video Hardware</H2></CENTER>
|
6
|
+
<P>The GameBoy has physical memory space from $0000 to $FFFF:</P>
|
7
|
+
<CENTER><TABLE BORDER="1"><TR><TD COLSTART="1">$9800</TD><TD COLSTART="2">$9801</TD>
|
8
|
+
<TD COLSTART="3">$9802</TD><TD COLSTART="4">$9803</TD><TD COLSTART="5">....</TD><TD
|
9
|
+
COLSTART="6">$981F</TD></TR><TR><TD COLSTART="1">$9820</TD><TD COLSTART="2">$9821</TD>
|
10
|
+
<TD COLSTART="3">$9822</TD><TD COLSTART="4">....</TD><TD COLSTART="5">....</TD><TD
|
11
|
+
COLSTART="6">....</TD></TR><TR><TD COLSTART="1">$9840</TD><TD COLSTART="2">$9841</TD>
|
12
|
+
<TD COLSTART="3">....</TD><TD COLSTART="4">....</TD><TD COLSTART="5">....</TD><TD
|
13
|
+
COLSTART="6">....</TD></TR><TR><TD COLSTART="1">$9860</TD><TD COLSTART="2">....</TD>
|
14
|
+
<TD COLSTART="3">....</TD><TD COLSTART="4">....</TD><TD COLSTART="5">....</TD><TD
|
15
|
+
COLSTART="6">....</TD></TR><TR><TD COLSTART="1">....</TD><TD COLSTART="2">....</TD>
|
16
|
+
<TD COLSTART="3">....</TD><TD COLSTART="4">....</TD><TD COLSTART="5">....</TD><TD
|
17
|
+
COLSTART="6">....</TD></TR><TR><TD COLSTART="1">$9BE0</TD><TD COLSTART="2">....</TD>
|
18
|
+
<TD COLSTART="3">....</TD><TD COLSTART="4">....</TD><TD COLSTART="5">....</TD><TD
|
19
|
+
COLSTART="6">$9BFF</TD></TR></TABLE></CENTER>
|
20
|
+
<CENTER><TABLE BORDER="1"><TR><TD COLSTART="1">$9C00</TD><TD COLSTART="2">$9C01</TD>
|
21
|
+
<TD COLSTART="3">$9C02</TD><TD COLSTART="4">$9C03</TD><TD COLSTART="5">....</TD><TD
|
22
|
+
COLSTART="6">$9C1F</TD></TR><TR><TD COLSTART="1">$9C20</TD><TD COLSTART="2">$9C21</TD>
|
23
|
+
<TD COLSTART="3">$9C22</TD><TD COLSTART="4">....</TD><TD COLSTART="5">....</TD><TD
|
24
|
+
COLSTART="6">....</TD></TR><TR><TD COLSTART="1">$9C40</TD><TD COLSTART="2">$9C41</TD>
|
25
|
+
<TD COLSTART="3">....</TD><TD COLSTART="4">....</TD><TD COLSTART="5">....</TD><TD
|
26
|
+
COLSTART="6">....</TD></TR><TR><TD COLSTART="1">$9C60</TD><TD COLSTART="2">....</TD>
|
27
|
+
<TD COLSTART="3">....</TD><TD COLSTART="4">....</TD><TD COLSTART="5">....</TD><TD
|
28
|
+
COLSTART="6">....</TD></TR><TR><TD COLSTART="1">....</TD><TD COLSTART="2">....</TD>
|
29
|
+
<TD COLSTART="3">....</TD><TD COLSTART="4">....</TD><TD COLSTART="5">....</TD><TD
|
30
|
+
COLSTART="6">....</TD></TR><TR><TD COLSTART="1">$9FE0</TD><TD COLSTART="2">....</TD>
|
31
|
+
<TD COLSTART="3">....</TD><TD COLSTART="4">....</TD><TD COLSTART="5">....</TD><TD
|
32
|
+
COLSTART="6">$9FFF</TD></TR></TABLE></CENTER>
|
33
|
+
<HR>
|
34
|
+
</BODY></HTML>
|
data/lib/galp/XOR.GIF
ADDED
Binary file
|
data/lib/rgbds/rgbasm
ADDED
Binary file
|
data/lib/rgbds/rgbfix
ADDED
Binary file
|
data/lib/rgbds/rgblink
ADDED
Binary file
|
data/lib/rubygb/cli.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'thor'
|
2
|
+
|
3
|
+
module Rubygb
|
4
|
+
class CLI < Thor
|
5
|
+
desc 'build FILENAME', 'attempt to assemble, link and fix FILENAME and create a gb rom from it'
|
6
|
+
option :no_fix, :type => :boolean
|
7
|
+
def build filename
|
8
|
+
Rubygb.build filename, options
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Rubygb
|
2
|
+
def self.build filename, options={}
|
3
|
+
unless File.exists? filename
|
4
|
+
raise "Fatal: can't find #{filename}"
|
5
|
+
end
|
6
|
+
|
7
|
+
base = File.basename(filename, ".*")
|
8
|
+
|
9
|
+
exe_path = File.expand_path(File.join(File.dirname(__FILE__),"..","rgbds"))
|
10
|
+
puts `#{exe_path}/rgbasm -v -o#{base}.obj #{filename}`
|
11
|
+
puts `#{exe_path}/rgblink -m#{base}.map -n#{base}.sym -o#{base}.gb #{base}.obj`
|
12
|
+
puts `#{exe_path}/rgbfix -p0 -v #{base}.gb` unless options[:no_fix]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|