class Rnes::Emulator
Public Class Methods
new(log_file_path: nil)
click to toggle source
@param [String] log_file_path
# File lib/rnes/emulator.rb, line 9 def initialize(log_file_path: nil) parts_factory = ::Rnes::PartsFactory.new @cpu = parts_factory.cpu @cpu_bus = parts_factory.cpu_bus @dma_controller = parts_factory.dma_controller @keypad1 = parts_factory.keypad1 @keypad2 = parts_factory.keypad2 @ppu = parts_factory.ppu @ppu_bus = parts_factory.ppu_bus if log_file_path @logger = ::Rnes::Logger.new(cpu: @cpu, path: log_file_path, ppu: @ppu) end end
Public Instance Methods
load_rom(rom_bytes)
click to toggle source
@param [Array<Integer>] rom_bytes
# File lib/rnes/emulator.rb, line 24 def load_rom(rom_bytes) rom_loader = ::Rnes::RomLoader.new(rom_bytes) copy(from: rom_loader.character_rom, to: @ppu_bus.character_ram) @cpu_bus.program_rom = rom_loader.program_rom @cpu.reset end
run()
click to toggle source
# File lib/rnes/emulator.rb, line 31 def run allow_break_less_input $stdin.noecho do loop do if @logger @logger.puts end step end end ensure disallow_break_less_input end
step()
click to toggle source
# File lib/rnes/emulator.rb, line 45 def step @dma_controller.transfer_if_requested (@cpu.step * 3).times do @ppu.step end @keypad1.check @keypad2.check end
Private Instance Methods
allow_break_less_input()
click to toggle source
# File lib/rnes/emulator.rb, line 56 def allow_break_less_input `stty -icanon min 1 time 0` end
copy(from:, to:)
click to toggle source
@param [Rnes::Rom] from @param [Rnes::Ram] to
# File lib/rnes/emulator.rb, line 66 def copy(from:, to:) from.bytesize.times do |address| value = from.read(address) to.write(address, value) end end
disallow_break_less_input()
click to toggle source
# File lib/rnes/emulator.rb, line 60 def disallow_break_less_input `stty icanon` end