From 9c834ff2149ba2b9b4db71a1bb6b974235c88273 Mon Sep 17 00:00:00 2001 From: Joshua Wise Date: Sun, 6 Apr 2008 01:03:29 -0400 Subject: [PATCH] Some reworks to prepare for transition to makefile. Stack bugfixes. --- 7seg.v | 70 +++++++++++++++++++++++++--------------------------- FPGABoy.ise | Bin 240442 -> 240844 bytes GBZ80Core.v | 36 ++++++++++++++------------- Makefile | 22 ++++++++++++++++- System.v | 22 ++++++++--------- rom.asm | 51 +++++++++++++++++++++++++++++--------- 6 files changed, 124 insertions(+), 77 deletions(-) diff --git a/7seg.v b/7seg.v index 8e91b03..c64e7d5 100644 --- a/7seg.v +++ b/7seg.v @@ -6,7 +6,7 @@ module AddrMon( input freeze ); - reg [10:0] clkdv; + reg [5:0] clkdv; reg [1:0] dcount; reg [15:0] latch = 0; @@ -17,42 +17,40 @@ module AddrMon( (dcount == 2'b10) ? latch[11:8] : latch[15:12]; - always @ (negedge clk) - begin - clkdv <= clkdv + 1; - if (~freeze) - latch <= addr; - end + always @ (negedge clk) begin + if (clkdv == 31) begin + clkdv <= 0; + dcount <= dcount + 1; - always @ (posedge clkdv[10]) - begin - dcount <= dcount + 1; + case(dcount) + 2'b00: digit <= 4'b1110; + 2'b01: digit <= 4'b1101; + 2'b10: digit <= 4'b1011; + 2'b11: digit <= 4'b0111; + endcase - case(dcount) - 2'b00: digit <= 4'b1110; - 2'b01: digit <= 4'b1101; - 2'b10: digit <= 4'b1011; - 2'b11: digit <= 4'b0111; - endcase - - case(curval) - /* ABCDEFGP */ - 4'h0: out <= ~8'b11111100; - 4'h1: out <= ~8'b01100000; - 4'h2: out <= ~8'b11011010; - 4'h3: out <= ~8'b11110010; - 4'h4: out <= ~8'b01100110; - 4'h5: out <= ~8'b10110110; - 4'h6: out <= ~8'b10111110; - 4'h7: out <= ~8'b11100000; - 4'h8: out <= ~8'b11111110; - 4'h9: out <= ~8'b11110110; - 4'hA: out <= ~8'b11101110; - 4'hB: out <= ~8'b00111110; - 4'hC: out <= ~8'b10011100; - 4'hD: out <= ~8'b01111010; - 4'hE: out <= ~8'b10011110; - 4'hF: out <= ~8'b10001110; - endcase + case(curval) + /* ABCDEFGP */ + 4'h0: out <= ~8'b11111100; + 4'h1: out <= ~8'b01100000; + 4'h2: out <= ~8'b11011010; + 4'h3: out <= ~8'b11110010; + 4'h4: out <= ~8'b01100110; + 4'h5: out <= ~8'b10110110; + 4'h6: out <= ~8'b10111110; + 4'h7: out <= ~8'b11100000; + 4'h8: out <= ~8'b11111110; + 4'h9: out <= ~8'b11110110; + 4'hA: out <= ~8'b11101110; + 4'hB: out <= ~8'b00111110; + 4'hC: out <= ~8'b10011100; + 4'hD: out <= ~8'b01111010; + 4'hE: out <= ~8'b10011110; + 4'hF: out <= ~8'b10001110; + endcase + end else + clkdv <= clkdv + 1; + if (~freeze) + latch <= addr; end endmodule diff --git a/FPGABoy.ise b/FPGABoy.ise index 7ef4156167ad5f7bf685c02e058026229cb6c003..3ac09a13b9814b7d8a8692afeb126383ffb7b3e3 100644 GIT binary patch delta 77383 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 CTjOH@ delta 77090 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 diff --git a/GBZ80Core.v b/GBZ80Core.v index 57c22d2..ae6ff00 100644 --- a/GBZ80Core.v +++ b/GBZ80Core.v @@ -95,8 +95,8 @@ module GBZ80Core( output reg buswr = 0, output reg busrd = 0, input irq, input [7:0] jaddr); - reg [1:0] state = 0; /* State within this bus cycle (see STATE_*). */ - reg [2:0] cycle = 0; /* Cycle for instructions. */ + reg [1:0] state; /* State within this bus cycle (see STATE_*). */ + reg [2:0] cycle; /* Cycle for instructions. */ reg [7:0] registers[11:0]; @@ -105,7 +105,7 @@ module GBZ80Core( reg [7:0] opcode; /* Opcode from the current machine cycle. */ reg [7:0] rdata, wdata; /* Read data from this bus cycle, or write data for the next. */ - reg rd = 1, wr = 0, newcycle = 1; + reg rd, wr, newcycle; reg [7:0] tmp, tmp2; /* Generic temporary regs. */ @@ -127,7 +127,6 @@ module GBZ80Core( registers[ 9] <= 0; registers[10] <= 0; registers[11] <= 0; - ie <= 0; rd <= 1; wr <= 0; newcycle <= 1; @@ -136,7 +135,11 @@ module GBZ80Core( busrd <= 0; buswr <= 0; busaddress <= 0; + ie <= 0; iedelay <= 0; + opcode <= 0; + state <= `STATE_WRITEBACK; + cycle <= 0; end always @(posedge clk) @@ -302,7 +305,7 @@ module GBZ80Core( end 1: begin wr <= 1; - address <= {registers[`REG_SPH],registers[`REG_SPL]}-1; + address <= {registers[`REG_SPH],registers[`REG_SPL]}-2; case (opcode[5:4]) `INSN_stack_AF: wdata <= registers[`REG_F]; `INSN_stack_BC: wdata <= registers[`REG_C]; @@ -325,7 +328,7 @@ module GBZ80Core( end 1: begin rd <= 1; - address <= {registers[`REG_SPH],registers[`REG_SPL]}; + address <= {registers[`REG_SPH],registers[`REG_SPL]} + 1; end 2: begin `EXEC_NEWCYCLE; @@ -677,18 +680,16 @@ module GBZ80Core( end `INSN_PUSH_reg: begin /* PUSH is 16 cycles! */ case (cycle) - 0: {registers[`REG_SPH],registers[`REG_SPL]} <= - {registers[`REG_SPH],registers[`REG_SPL]} - 1; - 1: {registers[`REG_SPH],registers[`REG_SPL]} <= - {registers[`REG_SPH],registers[`REG_SPL]} - 1; + 0: begin /* type F */ end + 1: begin /* type F */ end 2: begin /* type F */ end - 3: begin /* type F */ end + 3: {registers[`REG_SPH],registers[`REG_SPL]} <= + {registers[`REG_SPH],registers[`REG_SPL]} - 2; endcase end `INSN_POP_reg: begin /* POP is 12 cycles! */ case (cycle) - 0: {registers[`REG_SPH],registers[`REG_SPL]} <= - {registers[`REG_SPH],registers[`REG_SPL]} + 1; + 0: begin end 1: begin case (opcode[5:4]) `INSN_stack_AF: registers[`REG_F] <= rdata; @@ -696,8 +697,6 @@ module GBZ80Core( `INSN_stack_DE: registers[`REG_E] <= rdata; `INSN_stack_HL: registers[`REG_L] <= rdata; endcase - {registers[`REG_SPH],registers[`REG_SPL]} <= - {registers[`REG_SPH],registers[`REG_SPL]} + 1; end 2: begin case (opcode[5:4]) @@ -706,6 +705,8 @@ module GBZ80Core( `INSN_stack_DE: registers[`REG_D] <= rdata; `INSN_stack_HL: registers[`REG_H] <= rdata; endcase + {registers[`REG_SPH],registers[`REG_SPL]} <= + {registers[`REG_SPH],registers[`REG_SPL]} + 2; end endcase end @@ -939,12 +940,13 @@ module GBZ80Core( `INSN_VOP_INTR: begin case (cycle) 0: begin end - 1: {registers[`REG_SPH],registers[`REG_SPL]} - <= {registers[`REG_SPH],registers[`REG_SPL]} - 2; + 1: begin end 2: begin ie <= 0; {registers[`REG_PCH],registers[`REG_PCL]} <= {8'b0,jaddr}; + {registers[`REG_SPH],registers[`REG_SPL]} <= + {registers[`REG_SPH],registers[`REG_SPL]} - 2; end endcase end diff --git a/Makefile b/Makefile index bf5d698..d89b586 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,24 @@ -all: CoreTop.svf +VLOGS=Uart.v Timer.v Interrupt.v GBZ80Core.v CPUDCM.v 7seg.v System.v + +all: CoreTop.svf CoreTop.twr + +CoreTyp.ngc: CoreTop.xst CoreTop.prj $(VLOGS) CoreTop.ucf + xst -ifn CoreTop.xst -ofn CoreTop.syr + +CoreTop.ngd: CoreTop.ngc foo.bmm + ngdbuild -dd _ngo -nt timestamp -i -bm "foo.bmm" -p xc3s500e-fg320-5 "CoreTop.ngc" CoreTop.ngd + +CoreTop_map.ncd: CoreTop.ngd + map -p xc3s500e-fg320-5 -cm area -pr off -k 4 -c 100 -o CoreTop_map.ncd CoreTop.ngd CoreTop.pcf + +CoreTop.ncd: CoreTop_map.ncd + par -w -ol std -t 1 CoreTop_map.ncd CoreTop.ncd CoreTop.pcf + +CoreTop.twr: CoreTop_map.ncd + trce -e 3 -s 5 -xml CoreTop CoreTop.ncd -o CoreTop.twr CoreTop.pcf -ucf CoreTop.ucf + +CoreTop.bit: CoreTop.ut CoreTop.ncd + bitgen -f CoreTop.ut CoreTop.ncd CoreTop_rom.bit: rom.hex CoreTop.bit foo_bd.bmm data2mem -bm foo_bd.bmm -bd rom.mem -bt CoreTop.bit -o b CoreTop_rom.bit diff --git a/System.v b/System.v index 7319ebf..5d4fbed 100644 --- a/System.v +++ b/System.v @@ -46,7 +46,7 @@ module Switches( input clk, input wr, rd, input [7:0] switches, - output reg [7:0] ledout); + output reg [7:0] ledout = 0); wire decode = address == 16'hFF51; reg [7:0] odata; @@ -162,8 +162,8 @@ module TestBench(); wire irq, tmrirq; wire [7:0] jaddr; -// wire [7:0] leds; -// wire [7:0] switches; + wire [7:0] leds; + wire [7:0] switches; always #10 clk <= ~clk; GBZ80Core core( @@ -220,12 +220,12 @@ module TestBench(); .master(irq), .jaddr(jaddr)); -// Switches sw( -// .clk(clk), -// .address(addr), -// .data(data), -// .wr(wr), -// .rd(rd), -// .switches(switches), -// .leds(leds)); + Switches sw( + .clk(clk), + .address(addr), + .data(data), + .wr(wr), + .rd(rd), + .switches(switches), + .ledout(leds)); endmodule diff --git a/rom.asm b/rom.asm index 437f01e..512cfce 100644 --- a/rom.asm +++ b/rom.asm @@ -5,14 +5,22 @@ main: ld a, $FF ld [c],a - ld sp, $DFFF + ld sp, $DFF0 + + ld hl, $DF81 + ld a, $80 + ld [hl], a + +; ld c, $07 +; ld a, $04 ;start timer, 4.096KHz +; ld [c], a +diqs:; ei + jr diqs ld hl, signon call puts - ld c, $07 - ld a, $04 ;start timer, 4.096KHz - ld [c], a + ei call memtest @@ -24,17 +32,37 @@ main: jr main - section "fuq",HOME[$100] + section "fuq",HOME[$50] irqhand: PUSH AF PUSH BC PUSH DE PUSH HL + +; ld c, $51 +; ld a, $F0 +; ld [c], a + xor a ld c, $0F ; ack the irq ld [c], a - ld a, $41 ; print A - call putc + + ;ld a, $41 ; print A + ;call putc + + ld hl, $DF81 + ld a, [hl] +; ld b, 1 +; add b + ld c, $51 +; ld [c], a +; ld [hl], a + + +; ld c, $51 +; ld a, $0F +; ld [c], a + POP HL POP DE POP BC @@ -49,7 +77,7 @@ memtest: ld hl,memteststr call puts - ld hl, $C000 ; Write loop + ld hl, $C001 ; Write loop .wr: ld a,h xor l @@ -61,7 +89,7 @@ memtest: cp l jr nz, .wr - ld hl, $C000 ; Read loop + ld hl, $C001 ; Read loop .rd: ld a,h xor l @@ -135,6 +163,7 @@ waitsw: .loop1: ld a,[c] cp b + ei jr z,.loop1 .loop2: ld a,[c] @@ -269,8 +298,6 @@ puts: ld a, [hli] ld b, $00 cp b - jr z, .done + ret z call putc jr puts -.done: - ret -- 2.39.2