rubygb 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+
|