From: Joshua Wise <joshua@rebirth.joshuawise.com>
Date: Wed, 7 May 2008 09:09:21 +0000 (-0400)
Subject: Dual boot ROM support, and the first proof that cellular ram works!
X-Git-Url: http://git.joshuawise.com/fpgaboy.git/commitdiff_plain/49c326da841985a8aa48e8544173e5c045c6e0eb?hp=58f7754ae52df7679f3224d7e77f6312e45ba4bb

Dual boot ROM support, and the first proof that cellular ram works!
---

diff --git a/Makefile b/Makefile
index 4b401d0..fe10ee8 100644
--- a/Makefile
+++ b/Makefile
@@ -14,7 +14,7 @@ all: CoreTop.svf CoreTop.twr
 
 sim: CoreTop_isim.exe
 
-CoreTop.ngc: CoreTop.xst CoreTop.prj $(VLOGS_ALL) rom.mem
+CoreTop.ngc: CoreTop.xst CoreTop.prj $(VLOGS_ALL) fpgaboot.hex gbboot.hex
 	xst -ifn CoreTop.xst -ofn CoreTop.syr
 
 CoreTop.ngd: CoreTop.ngc foo.bmm CoreTop.ucf
@@ -63,6 +63,10 @@ parsim: CoreTop_isim_par.exe
 %.mem: %.bin mashrom
 	./mashrom < $< > $@
 
+fpgaboot.hex: fpgaboot.bin mashrom
+	./mashrom 256 < $< > $@
+
+
 CoreTop.svf: CoreTop.bit impact.cmd
 	sed -e s/XXX/$(subst .bit,,$<)/ < impact.cmd > tmp.cmd
 	impact -batch tmp.cmd
diff --git a/System.v b/System.v
index b1d4c3d..8c4cf1a 100644
--- a/System.v
+++ b/System.v
@@ -29,14 +29,20 @@ module BootstrapROM(
 
 	reg rdlatch = 0;
 	reg [7:0] addrlatch = 0;
-	reg [7:0] brom [255:0];
-	initial $readmemh("bootstrap.hex", brom);
+	reg romno = 0, romnotmp = 0;
+	reg [7:0] brom0 [255:0];
+	reg [7:0] brom1 [255:0];
+	
+	initial $readmemh("fpgaboot.hex", brom0);
+	initial $readmemh("gbboot.hex", brom1);
 
 	wire decode = address[15:8] == 0;
-	wire [7:0] odata = brom[addrlatch];
+	wire [7:0] odata = (romno == 0) ? brom0[addrlatch] : brom1[addrlatch];
 	always @(posedge clk) begin
 		rdlatch <= rd && decode;
 		addrlatch <= address[7:0];
+		if (wr && decode) romnotmp <= data[0];
+		if (rd && address == 16'h0000) romno <= romnotmp;	/* Latch when the program restarts. */
 	end
 	assign data = rdlatch ? odata : 8'bzzzzzzzz;
 endmodule
diff --git a/fpgaboot.asm b/fpgaboot.asm
new file mode 100644
index 0000000..a923657
--- /dev/null
+++ b/fpgaboot.asm
@@ -0,0 +1,38 @@
+	SECTION "boot", HOME[$0]
+	ld a, $AA
+	ld [$FF51], A	; Poke the LEDs
+	
+	; Write a little bit to the RAM
+	ld H, $01
+	ld L, $00
+	ld A, $00
+	ld [HLI], A
+	ld [HLI], A
+	ld [HLI], A
+	ld [HLI], A
+	ld [HLI], A
+	ld [HLI], A
+	ld [HLI], A
+	ld [HLI], A
+	
+	ld a, $55
+	ld [$FF51], A	; Poke the LEDs
+	
+	ld A, $FF
+	ld [HLI], A
+	ld [HLI], A
+	ld [HLI], A
+	ld [HLI], A
+	ld [HLI], A
+	ld [HLI], A
+	ld [HLI], A
+	ld [HLI], A
+	
+	ld H, $00
+	ld L, $00
+	ld [HL], $01	; Select the GB boot rom
+	rst $00		; Boot
+	
+	SECTION "a", HOME[$100]
+	nop	; Make sure we don't overflow.
+	
\ No newline at end of file
diff --git a/bootstrap.hex b/gbboot.hex
similarity index 100%
rename from bootstrap.hex
rename to gbboot.hex