From 49c326da841985a8aa48e8544173e5c045c6e0eb Mon Sep 17 00:00:00 2001 From: Joshua Wise Date: Wed, 7 May 2008 05:09:21 -0400 Subject: [PATCH] Dual boot ROM support, and the first proof that cellular ram works! --- Makefile | 6 +++++- System.v | 12 +++++++++--- fpgaboot.asm | 38 +++++++++++++++++++++++++++++++++++++ bootstrap.hex => gbboot.hex | 0 4 files changed, 52 insertions(+), 4 deletions(-) create mode 100644 fpgaboot.asm rename bootstrap.hex => gbboot.hex (100%) 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 -- 2.43.0