Index: /lang/ruby/misc/rz80as/rz80as.rb
===================================================================
--- /lang/ruby/misc/rz80as/rz80as.rb (revision 2438)
+++ /lang/ruby/misc/rz80as/rz80as.rb (revision 2508)
@@ -470,5 +470,5 @@
 			rescue => excep
 				error excep
-				nil
+				[]
 			end
 		end
@@ -720,4 +720,7 @@
 				[:any,		nil,			Proc.new {|*arg| parseDW *arg}],
 			],
+			'DS' => [
+				[:any,		nil,			Proc.new {|*arg| parseDS *arg}],
+			],
 		}
 		@opecode1_table = {
@@ -1232,48 +1235,92 @@
 
 	def parseDB(str)
-		res = []
-		loop do
-			if /^\s*'(.*?)'/o =~ str || /^\s*"(.*?)"/o =~ str
-				$1.each_byte {|ch| res << (ch & 255)}
-				str = $'
-			else
+		begin
+			res = []
+			loop do
+				if /^\s*'(.*?)'/o =~ str || /^\s*"(.*?)"/o =~ str
+					$1.each_byte {|ch| res << (ch & 255)}
+					str = $'
+				else
+					r, s = @evalexp.eval @label_table, str
+					str = s
+
+					res << r if r
+				end
+
+				case str
+				when /^\s*,/o
+					str = $'
+				when /^\s*$/o
+					break
+				else
+					syntax_error str
+				end
+			end
+			res
+		rescue => excep
+			error excep
+			[]
+		end
+	end
+
+	def parseDW(str)
+		begin
+			res = []
+			loop do
 				r, s = @evalexp.eval @label_table, str
+
+				if !r.kind_of?(Numeric)
+					error "number expected: #{str}"
+					break
+				end
+
+				res.concat [r & 255, (r >> 8) & 255]
+
 				str = s
-
-				res << r if r
-			end
-
-			case str
-			when /^\s*,/o
-				str = $'
-			when /^\s*$/o
-				break
-			else
-				syntax_error str
-			end
-		end
-		res
-	end
-
-	def parseDW(str)
-		res = []
-		loop do
-			r, s = @evalexp.eval @label_table, str
-			str = s
-
-			if r
-				res.concat [r & 255, (r >> 8) & 255]
-			end
-
-			case str
-			when /^\s*,/o
-				str = $'
-			when /^\s*$/o
-				break
-			else
-				syntax_error
-			end
-		end
-		res
+				case str
+				when /^\s*,/o
+					str = $'
+				when /^\s*$/o
+					break
+				else
+					syntax_error str
+				end
+			end
+			res
+		rescue => excep
+			error excep
+			[]
+		end
+	end
+
+	def parseDS(str)
+		begin
+			res = []
+			loop do
+				r, s = @evalexp.eval @label_table, str
+
+				if !r.kind_of?(Numeric)
+					error "number expected: #{str}"
+					break
+				end
+
+				res.concat [0] * r
+
+				str = s
+				case str
+				when /^\s*,/o
+					str = $'
+				when /^\s*$/o
+					break
+				else
+					syntax_error str
+					break
+				end
+			end
+			res
+		rescue => excep
+			error excep
+			[]
+		end
 	end
 end
Index: /lang/ruby/misc/rz80as/README.TXT
===================================================================
--- /lang/ruby/misc/rz80as/README.TXT (revision 2374)
+++ /lang/ruby/misc/rz80as/README.TXT (revision 2508)
@@ -24,7 +24,5 @@
 
 * todo
-- 「DS」 を追加する
 - ニーモニックごとのコード生成関数の呼び出しを自動に名前付けする
-- ソースが UTF-8 なところに、「;」コメント中にS-JISの文字があっても平気にする
 - 後ろに「:」のつかないラベル定義もできるようにする
 - 式の計算でシフトとか論理計算とか追加する
@@ -32,2 +30,5 @@
 - できれば１パスにする
 - "" 文字列を追加して \n とか \t とか使えるようにする
+
+-[v] 「DS」 を追加する
+-[v] ソースが UTF-8 なところに、「;」コメント中にS-JISの文字があっても平気にする
