1
0
mirror of https://github.com/safiire/n65.git synced 2024-12-12 00:29:03 +00:00

Added scope directive

This commit is contained in:
Safiire 2015-03-05 13:45:19 -08:00
parent 419617382b
commit 4edbff55a5
5 changed files with 112 additions and 2 deletions

View File

@ -13,7 +13,7 @@ module Assembler6502
def self.parse(line) def self.parse(line)
match_data = line.match(/^\.ascii\s+"([^"]+)"$/) match_data = line.match(/^\.ascii\s+"([^"]+)"$/)
return nil if match_data.nil? return nil if match_data.nil?
ASCII.new($1) ASCII.new(match_data[1])
end end

View File

@ -0,0 +1,42 @@
require_relative '../instruction_base'
module Assembler6502
####
## This directive to include bytes
class EnterScope < InstructionBase
####
## Try to parse an incbin directive
def self.parse(line)
match_data = line.match(/^\.scope\s+([a-zA-Z][a-zA-Z0-9_]+)$/)
return nil if match_data.nil?
EnterScope.new(match_data[1])
end
####
## Initialize with filename
def initialize(name)
@name = name
end
####
## Execute on the assembler
def exec(assembler)
assembler.symbol_table.enter_scope(@name)
end
####
## Display
def to_s
".scope #{@name}"
end
end
end

View File

@ -0,0 +1,35 @@
require_relative '../instruction_base'
module Assembler6502
####
## This directive to include bytes
class ExitScope < InstructionBase
####
## Try to parse an incbin directive
def self.parse(line)
match_data = line.match(/^\.$/)
return nil if match_data.nil?
ExitScope.new
end
####
## Execute on the assembler
def exec(assembler)
assembler.symbol_table.exit_scope
end
####
## Display
def to_s
"."
end
end
end

View File

@ -10,6 +10,8 @@ module Assembler6502
require_relative 'directives/bytes' require_relative 'directives/bytes'
require_relative 'directives/ascii' require_relative 'directives/ascii'
require_relative 'directives/label' require_relative 'directives/label'
require_relative 'directives/enter_scope'
require_relative 'directives/exit_scope'
#### ####
@ -22,7 +24,7 @@ module Assembler6502
class CannotParse < StandardError; end class CannotParse < StandardError; end
Directives = [INESHeader, Org, Segment, IncBin, DW, Bytes, ASCII] Directives = [INESHeader, Org, Segment, IncBin, DW, Bytes, ASCII, EnterScope, ExitScope]
#### ####
## Parses a line of program source into an object ## Parses a line of program source into an object

31
scope.asm Normal file
View File

@ -0,0 +1,31 @@
;;;;
; Create an iNES header
.ines {"prog": 1, "char": 0, "mapper": 0, "mirror": 0}
;;;;
;; Start a prog segment number 0
.segment prog 0
.org $8000
.scope yay
main:
sei
cld
loop:
ldx $00
inx
stx $00
jmp loop
.
vblank:
irq:
rti
;;;;
;; Vector table
.org $FFFA
.dw vblank
.dw yay.main
.dw irq