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

Made error messages a bit better, error on mapper other than 0, fixed scrolling in demo

This commit is contained in:
Safiire 2015-02-23 00:24:57 -08:00
parent 2cf2680aaa
commit 337688b456
3 changed files with 21 additions and 45 deletions

View File

@ -93,10 +93,20 @@ module Assembler6502
STDERR.puts "Missing options try --help" STDERR.puts "Missing options try --help"
exit(1) exit(1)
end end
Assembler6502::Assembler.from_file(input_file, options[:out_file])
begin
Assembler6502::Assembler.from_file(input_file, options[:out_file])
rescue StandardError => error
STDERR.puts("Assemble Failed!")
STDERR.puts(error.class)
if error.message
STDERR.puts(error.message)
end
exit(1)
end
end end
module_function :run module_function :run
end end
Assembler6502.run Assembler6502.run

View File

@ -47,6 +47,7 @@ module Assembler6502
## Custom exceptions ## Custom exceptions
class INESHeaderNotFound < StandardError; end class INESHeaderNotFound < StandardError; end
class MapperNotSupported < StandardError; end
#### ####
@ -152,48 +153,6 @@ module Assembler6502
end end
####
## After assembling the binary into the full 16-bit memory space
## we can now slice out the parts that should go into the binary ROM
## I am guessing the ROM size should be 1 bank of 16KB cartridge ROM
## plus the 16 byte iNES header. If the ROM is written into memory
## beginning at 0xC000, this should reach right up to the interrupt vectors
def assemble_old
virtual_memory = assemble_in_virtual_memory
## First we need to be sure we have an iNES header
fail(INESHeaderNotFound) if @ines_header.nil?
## Create memory to hold the ROM
nes_rom = MemorySpace.new(0x10 + 0x4000)
## First write the iNES header itself
nes_rom.write(0x0, @ines_header.emit_bytes)
## Write only one PROG section from 0xC000
start_address = 0xC000
length = 0x4000
prog_rom = virtual_memory.read(start_address, length)
write_start = 0x10
nes_rom.write(write_start, prog_rom)
## Now try writing one CHR-ROM section from 0x0000
start_address = 0x0000
length = 0x4000
char_rom = virtual_memory.read(start_address, length)
write_start = 0x10 + 0x4000
nes_rom.write(write_start, char_rom)
nes_rom.emit_bytes
#rom_size = 16 + (0xffff - 0xc000)
#nes_rom = MemorySpace.new(rom_size)
#nes_rom.write(0x0, virtual_memory.read(0x0, 0x10))
#nes_rom.write(0x10, virtual_memory.read(0xC000, 0x4000))
#nes_rom.emit_bytes
end
#### ####
## New ROM assembly, this is so simplified, and needs to take banks into account ## New ROM assembly, this is so simplified, and needs to take banks into account
## This will happen once I fully understand mappers and banks. ## This will happen once I fully understand mappers and banks.
@ -201,6 +160,9 @@ module Assembler6502
## Assemble into a virtual memory space ## Assemble into a virtual memory space
virtual_memory = assemble_in_virtual_memory virtual_memory = assemble_in_virtual_memory
## First we need to be sure we have an iNES header
fail(MapperNotSupported, "Mapper #{@ines_header.mapper} not supported") if @ines_header.mapper != 0
## First we need to be sure we have an iNES header ## First we need to be sure we have an iNES header
fail(INESHeaderNotFound) if @ines_header.nil? fail(INESHeaderNotFound) if @ines_header.nil?

View File

@ -20,6 +20,7 @@
; *dx = $00 ; The speed delta x of the sprite ; *dx = $00 ; The speed delta x of the sprite
; *a = $01 ; Whether the A button is down ; *a = $01 ; Whether the A button is down
; *scroll = $02 ; The scroll amount ; *scroll = $02 ; The scroll amount
; *dy = $03 ; The speed delta y of the sprite
; ;
; *sprite = $200 ; Some sprite memory ; *sprite = $200 ; Some sprite memory
; Actually I can probably do this with a .org and label pair ; Actually I can probably do this with a .org and label pair
@ -116,7 +117,7 @@ init_sprites:
lda #$00 lda #$00
ldx #$00 ldx #$00
sprite_clear1: sprite_clear1:
sta $0200, X ; $0200 = sprite sta sprite, x
inx inx
bne sprite_clear1 bne sprite_clear1
@ -131,6 +132,9 @@ sprite_clear1:
; Set initial value of dx ; Set initial value of dx
lda #$01 lda #$01
sta $00 ; dx = $00 sta $00 ; dx = $00
; Set initial value of dy
lda #$70
sta $03 ; dy = $03
rts rts
; Load palette into $3F00 ; Load palette into $3F00