mirror of
https://github.com/colby-swandale/waterfoul
synced 2024-12-25 21:58:55 +01:00
removed unused code and more documentation cleanup
This commit is contained in:
parent
d305150b05
commit
f4bd164e06
7 changed files with 12 additions and 96 deletions
|
@ -6,7 +6,6 @@ require "waterfoul/interrupt"
|
|||
require "waterfoul/mmu"
|
||||
require "Waterfoul/timer"
|
||||
require "waterfoul/cpu"
|
||||
require "waterfoul/sound"
|
||||
require "waterfoul/errors"
|
||||
require "waterfoul/sdl"
|
||||
require "waterfoul/screen"
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
module LibC
|
||||
extend FFI::Library
|
||||
ffi_lib FFI::Library::LIBC
|
||||
|
||||
attach_function :memcpy, [:pointer, :pointer, :size_t], :pointer
|
||||
end
|
|
@ -1,10 +1,12 @@
|
|||
require 'waterfoul/boot_rom'
|
||||
|
||||
module Waterfoul
|
||||
# The MMU (Memory Management Unit) in a chip in the device that acts a switch.
|
||||
# It allows programs to interact with subsytems like the GPU and IO depending
|
||||
# on the location in memory when reading from or writing to seeing the CPU
|
||||
# does not implement any IO instructions.
|
||||
# The MMU (Memory Management Unit) in a chip in the device that is the
|
||||
# interface to hardware for reading and writing to memory.
|
||||
#
|
||||
# The MMU also provides the program a way to interact with hardware
|
||||
# like the PPU and IO using memory registers. This is due to the CPU
|
||||
# not having any IO instructions.
|
||||
class MMU
|
||||
MEMORY_SIZE = 65536 # bytes
|
||||
# unmap boot rom register address
|
||||
|
|
|
@ -1,65 +0,0 @@
|
|||
module Waterfoul
|
||||
module Render
|
||||
class Background
|
||||
class << self
|
||||
def render
|
||||
line = current_line
|
||||
line_width = line * SCREEN_WIDTH
|
||||
|
||||
if IO::LCDControl.bg_display
|
||||
# tile and map select
|
||||
tiles_select = IO::LCDControl.bg_tile_select
|
||||
map_select = IO::LCDControl.bg_map_select
|
||||
# x pixel offset
|
||||
scx = $mmu.read_byte 0xFF43
|
||||
# y pixel offset
|
||||
scy = $mmu.read_byte 0xFF42
|
||||
# adjusted line with y offset
|
||||
line_adjusted = line + scy
|
||||
# get position of tile row to read
|
||||
y_offset = (line_adjusted / 8) * 32
|
||||
# relative line number in tile
|
||||
tile_line = line_adjusted % 8
|
||||
# relative line number offset
|
||||
tile_line_offset = tile_line * 2
|
||||
|
||||
0.upto(31) do |x|
|
||||
tile = 0
|
||||
if tiles_select == 0x8800
|
||||
tile = signed_value $mmu.read_byte(map_select + y_offset + x)
|
||||
tile += 128
|
||||
else
|
||||
tile = $mmu.read_byte map_select + y_offset + x
|
||||
end
|
||||
|
||||
line_pixel_offset = x * 8
|
||||
tile_select_offset = tile * 16
|
||||
tile_address = tiles_select + tile_select_offset + tile_line_offset
|
||||
|
||||
byte_1 = $mmu.read_byte tile_address
|
||||
byte_2 = $mmu.read_byte (tile_address + 1)
|
||||
|
||||
0.upto(7) do |pixelx|
|
||||
buffer_addr = (line_pixel_offset + pixelx - scx)
|
||||
|
||||
next if (buffer_addr >= SCREEN_WIDTH)
|
||||
|
||||
pixel = (byte_1 & (0x1 << (7 - pixelx)) > 0) ? 1 : 0
|
||||
pixel |= (byte_2 & (0x1 << (7 - pixelx)) > 0) ? 2 : 0
|
||||
position = line_width + buffer_addr
|
||||
palette = $mmu.read_byte 0xFF47
|
||||
color = (palette >> (pixel * 2)) & 0x3
|
||||
|
||||
@framebuffer[position] = color
|
||||
end
|
||||
end
|
||||
else
|
||||
0.upto(SCREEN_WIDTH) do |i|
|
||||
@framebuffer[line_width + i] = 0
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,6 +1,5 @@
|
|||
module Waterfoul
|
||||
class Screen
|
||||
|
||||
WINDOW_WIDTH = 480
|
||||
WINDOW_HEIGHT = 432
|
||||
|
||||
|
|
|
@ -1,20 +1,17 @@
|
|||
module Waterfoul
|
||||
# Set the state of the emulator as defined to the same state as it typically
|
||||
# is after it has finished running the bootloader and ready to execute the
|
||||
# game program.
|
||||
|
||||
# This lets us run the game without needing to execute the boot rom
|
||||
# every time the emulator is started.
|
||||
# set the state of the CPU and memory to the same state when the boot
|
||||
# program has finished executing. This lets us run the game without
|
||||
# needing to execute the boot rom every time the emulator is started.
|
||||
class SkipBoot
|
||||
def self.set_state(cpu)
|
||||
# CPU registers
|
||||
# set cpu register state
|
||||
cpu.set_register :pc, 0x100
|
||||
cpu.set_register :af, 0x1B0
|
||||
cpu.set_register :bc, 0x13
|
||||
cpu.set_register :de, 0xD8
|
||||
cpu.set_register :hl, 0x14D
|
||||
cpu.set_register :sp, 0xFFFE
|
||||
# IO registers
|
||||
# set IO reigster state
|
||||
$mmu.write_byte 0xFF10, 0x80
|
||||
$mmu.write_byte 0xFF11, 0xBF
|
||||
$mmu.write_byte 0xFF12, 0xF3
|
||||
|
@ -37,6 +34,7 @@ module Waterfoul
|
|||
$mmu.write_byte 0xFF49, 0xFF
|
||||
# unmap the boot rom
|
||||
$mmu.write_byte 0xFF50, 0x1
|
||||
|
||||
cpu
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
module Waterfoul
|
||||
class Sound
|
||||
def initialize
|
||||
@clock = 0
|
||||
end
|
||||
|
||||
def step(cpu_time)
|
||||
@clock += cpu_time
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue