mirror of
https://github.com/safiire/n65.git
synced 2024-12-12 15:29:12 +00:00
2c938f7312
bank management, Use of promises to resolve symbols that are used before they are defined. A base class for all instructions and assembler directives. Hopefully my scoped symbols can be used to create C like data structures in the zero page, ie sprite.x New code to prodce the final ROM. Basically everything was rewritten.
47 lines
840 B
Ruby
47 lines
840 B
Ruby
|
|
module Assembler6502
|
|
|
|
####
|
|
## This class represents a label, and will create
|
|
## an entry in the symbol table associated with
|
|
## the address it appears at.
|
|
class Label
|
|
|
|
####
|
|
## Try to parse as a label
|
|
def self.parse(line)
|
|
match_data = line.match(/^([a-zA-Z][a-zA-Z0-9_]+):$/)
|
|
unless match_data.nil?
|
|
label = match_data[1].to_sym
|
|
return self.new(label)
|
|
end
|
|
nil
|
|
end
|
|
|
|
|
|
####
|
|
## Create a new label object
|
|
def initialize(symbol)
|
|
@symbol = symbol
|
|
end
|
|
|
|
|
|
####
|
|
## Create an entry in the symbol table for this label
|
|
def exec(assembler)
|
|
program_counter = assembler.program_counter
|
|
assembler.symbol_table.define_symbol(@symbol, program_counter)
|
|
end
|
|
|
|
|
|
####
|
|
## Display
|
|
def to_s
|
|
"#{@symbol}:"
|
|
end
|
|
|
|
|
|
end
|
|
|
|
end
|