Dual boot ROM support, and the first proof that cellular ram works!
authorJoshua Wise <joshua@rebirth.joshuawise.com>
Wed, 7 May 2008 09:09:21 +0000 (05:09 -0400)
committerJoshua Wise <joshua@rebirth.joshuawise.com>
Wed, 7 May 2008 09:09:21 +0000 (05:09 -0400)
Makefile
System.v
fpgaboot.asm [new file with mode: 0644]
gbboot.hex [moved from bootstrap.hex with 100% similarity]

index 4b401d0..fe10ee8 100644 (file)
--- 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
index b1d4c3d..8c4cf1a 100644 (file)
--- 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 (file)
index 0000000..a923657
--- /dev/null
@@ -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
similarity index 100%
rename from bootstrap.hex
rename to gbboot.hex
This page took 0.02687 seconds and 4 git commands to generate.