module AddrMon(
input [15:0] addr,
input clk,
+ input [3:0] periods,
output reg [3:0] digit,
- output reg [7:0] out,
+ output wire [7:0] out,
input freeze
);
(dcount == 2'b00) ? latch[3:0] :
(dcount == 2'b01) ? latch[7:4] :
(dcount == 2'b10) ? latch[11:8] :
- latch[15:12];
+ latch[15:12];
+
+ reg [6:0] odigit;
+ assign out = {odigit,
+ ~((dcount == 2'b00) ? periods[0] :
+ (dcount == 2'b01) ? periods[1] :
+ (dcount == 2'b10) ? periods[2] :
+ periods[3]) };
always @ (negedge clk) begin
if (clkdv == 31) begin
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;
+ 4'h0: odigit <= ~8'b1111110;
+ 4'h1: odigit <= ~8'b0110000;
+ 4'h2: odigit <= ~8'b1101101;
+ 4'h3: odigit <= ~8'b1111001;
+ 4'h4: odigit <= ~8'b0110011;
+ 4'h5: odigit <= ~8'b1011011;
+ 4'h6: odigit <= ~8'b1011111;
+ 4'h7: odigit <= ~8'b1110000;
+ 4'h8: odigit <= ~8'b1111111;
+ 4'h9: odigit <= ~8'b1111011;
+ 4'hA: odigit <= ~8'b1110111;
+ 4'hB: odigit <= ~8'b0011111;
+ 4'hC: odigit <= ~8'b1001110;
+ 4'hD: odigit <= ~8'b0111101;
+ 4'hE: odigit <= ~8'b1001111;
+ 4'hF: odigit <= ~8'b1000111;
endcase
end else
clkdv <= clkdv + 1;
+
if (~freeze)
latch <= addr;
end
NET "switches<3>" LOC="k17";
NET "switches<2>" LOC="k18";
NET "switches<1>" LOC="h18";
-NET "switches<0>" LOC="g18";
+NET "switches<0>" LOC="g18" | CLOCK_DEDICATED_ROUTE = FALSE;
NET "seven<7>" LOC="L18";
NET "seven<6>" LOC="F18";
output reg [15:0] busaddress, /* BUS_* is latched on STATE_FETCH. */
inout [7:0] busdata,
output reg buswr, output reg busrd,
- input irq, input [7:0] jaddr);
+ input irq, input [7:0] jaddr,
+ output reg [1:0] state);
- reg [1:0] state; /* State within this bus cycle (see STATE_*). */
+// reg [1:0] state; /* State within this bus cycle (see STATE_*). */
reg [2:0] cycle; /* Cycle for instructions. */
reg [7:0] registers[11:0];
all: CoreTop_rom.svf CoreTop_diag.svf CoreTop.twr
-CoreTop.ngc: CoreTop.xst CoreTop.prj $(VLOGS) CoreTop.ucf
+CoreTop.ngc: CoreTop.xst CoreTop.prj $(VLOGS)
xst -ifn CoreTop.xst -ofn CoreTop.syr
CoreTop.ngd: CoreTop.ngc foo.bmm CoreTop.ucf
wire clk;
CPUDCM dcm (.CLKIN_IN(xtal), .CLKFX_OUT(clk));
+
+ wire cclk;
+ IBUFG ibuf (.O(cclk), .I(switches[0]));
wire [15:0] addr;
wire [7:0] data;
wire irq, tmrirq;
wire [7:0] jaddr;
+ wire [1:0] state;
GBZ80Core core(
- .clk(clk),
+ .clk(cclk),
.busaddress(addr),
.busdata(data),
.buswr(wr),
.busrd(rd),
.irq(irq),
- .jaddr(jaddr));
+ .jaddr(jaddr),
+ .state(state));
ROM rom(
.address(addr),
.clk(clk),
.digit(digits),
.out(seven),
- .freeze(buttons[0]));
+ .freeze(buttons[0]),
+ .periods(
+ (state == 2'b00) ? 4'b1000 :
+ (state == 2'b01) ? 4'b0100 :
+ (state == 2'b10) ? 4'b0010 :
+ 4'b0001) );
Switches sw(
.address(addr),
.wr(wr),
.rd(rd),
.ledout(leds),
- .switches(switches)
+ .switches({switches[7:1],1'b0})
);
UART nouart ( /* no u */
`INSN_stack_HL: `EXEC_WRITE(`_SP - 1, `_H)
endcase
1: case (opcode[5:4])
- `INSN_stack_AF: `EXEC_WRITE(`_SP - 1, `_F)
- `INSN_stack_BC: `EXEC_WRITE(`_SP - 1, `_C)
- `INSN_stack_DE: `EXEC_WRITE(`_SP - 1, `_E)
- `INSN_stack_HL: `EXEC_WRITE(`_SP - 1, `_L)
+ `INSN_stack_AF: `EXEC_WRITE(`_SP - 2, `_F)
+ `INSN_stack_BC: `EXEC_WRITE(`_SP - 2, `_C)
+ `INSN_stack_DE: `EXEC_WRITE(`_SP - 2, `_E)
+ `INSN_stack_HL: `EXEC_WRITE(`_SP - 2, `_L)
endcase
2: begin /* Twiddle thumbs. */ end
3: begin