; Builds program as iNES ROM

; Default is 16K PRG and 8K CHR ROM, NROM (0)

.if 0 ; Options to set before .include "shell.inc":
CHR_RAM=1       ; Use CHR-RAM instead of CHR-ROM
CART_WRAM=1     ; Use mapper that supports 8K WRAM in cart
CUSTOM_MAPPER=n ; Specify mapper number
.endif

.ifndef CUSTOM_MAPPER
	.ifdef CART_WRAM
		CUSTOM_MAPPER = 2 ; UNROM
	.else
		CUSTOM_MAPPER = 0 ; NROM
	.endif
.endif

;;;; iNES header
.ifndef CUSTOM_HEADER
	.segment "HEADER"
		.byte $4E,$45,$53,26 ; "NES" EOF
		
		.ifdef CHR_RAM
			.byte 2,0 ; 32K PRG, CHR RAM
		.else
			.byte 2,1 ; 32K PRG, 8K CHR
		.endif
		
		.byte CUSTOM_MAPPER*$10+$01 ; vertical mirroring
.endif

.ifndef CUSTOM_VECTORS
	.segment "VECTORS"
		.word -1&$FFFF,-1&$FFFF,-1&$FFFF, nmi, reset, irq
.endif

;;;; CHR-RAM/ROM
.ifdef CHR_RAM
	.define CHARS "CHARS_PRG"
	.segment CHARS
		ascii_chr:
	
	.segment "CHARS_PRG_ASCII"
		.align $200
			.incbin "ascii.chr"
		ascii_chr_end:
.else
	.define CHARS "CHARS"
	.segment "CHARS_ASCII"
		;.align $200
		.incbin "ascii_3.chr"
		;.align $200
		.incbin "ascii_2.chr"
		;.align $200
		.incbin "ascii_1.chr"
		.res $E00
.endif

;.segment CHARS
	;.res $10,0

;;;; Shell
.ifndef NEED_CONSOLE
	NEED_CONSOLE=1
.endif

; Move code to $C000
;.segment "DMC"
;	.res $4000

.include "shell.s"

std_reset:
	lda #0
	sta PPUCTRL
	sta PPUMASK
	jmp run_shell

init_runtime:
	.ifdef CHR_RAM
		load_ascii_chr
	.endif
	rts

post_exit:
	jsr set_final_result
	jmp forever

; This helps devcart recover after running test.
; It is never executed by test ROM.
.segment "LOADER"
	.incbin "devcart.bin"

.code
.align 256
