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:
parent
2cf2680aaa
commit
337688b456
@ -93,10 +93,20 @@ module Assembler6502
|
|||||||
STDERR.puts "Missing options try --help"
|
STDERR.puts "Missing options try --help"
|
||||||
exit(1)
|
exit(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
begin
|
||||||
Assembler6502::Assembler.from_file(input_file, options[:out_file])
|
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
|
||||||
|
@ -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?
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user