1
0
mirror of https://github.com/mist-devel/mist-board.git synced 2026-01-23 18:47:16 +00:00

Ethernec work started

This commit is contained in:
harbaum 2014-03-28 10:31:52 +00:00
parent 279329ede0
commit d047f3fa05
3 changed files with 20 additions and 136 deletions

View File

@ -1,117 +0,0 @@
module dongle (
// cpu register interface
input clk,
input sel,
input cpu_as, // cpu_cycle && as
input uds,
input rw,
input [14:0] addr,
output reg [7:0] dout,
output present
);
assign present = 1'b0; // 0 = deactivate dongle
// ------------------------------------------------------------------------------------
// ------------------------------------ CUBASE 2 DONGLE -------------------------------
// ------------------------------------------------------------------------------------
reg [15:8] d;
reg [15:8] next_d;
// read
always @(sel, uds, rw, d) begin
dout = 8'd0;
if(sel && ~uds && rw)
dout = d;
end
wire [8:1] a = addr[7:0];
// special addresses:
// a[8:1] = 8'b11011000,0 -> 0x1b0 clear all
// a[8:1] = 8'bxxx00xx0,0 -> a5+a4+a1 = 0 sets all, incl. $0c
// update register in the middle of the transfer
always @(negedge clk) begin
if(cpu_as && ~uds) begin
next_d[15] <= !(( a[8] & a[7] & !a[6] & a[5] & a[4] & !a[3] & !a[2] & !a[1]) |
(!d[15] & !d[14] & !d[13] & !d[12] & !d[11] & d[10] & !d[9] & a[4] ) |
( d[14] & d[12] & d[10] & a[1]) |
( d[13] & !d[10] & a[4] ) |
( !d[14] & !d[10] & a[1]) |
( d[15] & !d[10] & a[4] ) |
( !d[12] & !d[10] & a[1]) |
(!d[8] & a[5] ));
next_d[14] <= !(( a[8] & a[7] & !a[6] & a[5] & a[4] & !a[3] & !a[2] & !a[1]) |
(!d[15] & !d[14] & !d[13] & !d[12] & !d[11] & !d[10] & !d[9] & d[8] & a[4] ) |
( d[14] & d[12] & d[10] & d[8] & a[1]) |
( !d[10] & !d[8] & a[1]) |
( !d[12] & !d[8] & a[1]) |
( d[15] & !d[8] & a[4] ) |
( !d[14] & !d[8] & a[1]) |
(!d[15] & a[5] ));
next_d[13] <= !(( a[8] & a[7] & !a[6] & a[5] & a[4] & !a[3] & !a[2] & !a[1]) |
(d[15]&d[14]&d[13]&d[12]&d[11]&d[10]&d[8]&a[1]) |
(!d[15]&!d[13]&d[11]&a[4]) |
(d[13]&!d[11]&a[4]) |
(!d[12]&!d[11]&a[1]) |
(d[15]&!d[11]&a[4]) |
(!d[14]&!d[11]&a[1]) |
(!d[9]&a[5]));
next_d[12] <= !(( a[8] & a[7] & !a[6] & a[5] & a[4] & !a[3] & !a[2] & !a[1]) |
(d[15]&d[14]&d[13]&d[12]&d[10]&d[8]&a[1]) |
(!d[13]&!d[10]&a[1]) |
(!d[15]&d[13]&a[4]) |
(!d[13]&!d[12]&a[1]) |
(d[15]&!d[13]&a[4]) |
(!d[14]&!d[13]&a[1]) |
(!d[11]&a[5]));
next_d[11] <= !(( a[8] & a[7] & !a[6] & a[5] & a[4] & !a[3] & !a[2] & !a[1]) |
(d[15]&d[14]&d[12]&d[10]&d[8]&a[1]) |
(!d[15]&!d[8]&a[1]) |
(!d[15]&!d[10]&a[1]) |
(!d[15]&!d[12]&a[1]) |
(!d[15]&!d[14]&a[1]) |
(d[15]&a[4]) |
(!d[13]&a[5]));
next_d[10] <= !(( a[8] & a[7] & !a[6] & a[5] & a[4] & !a[3] & !a[2] & !a[1]) |
(d[15]&d[14]&d[13]&d[12]&d[11]&d[10]&d[9]&d[8]&a[1]) |
(!d[15]&!d[13]&!d[11]&d[9]&a[4]) |
(d[11]&!d[9]&a[4]) |
(d[13]&!d[9]&a[4]) |
(d[15]&!d[9]&a[4]) |
(!d[14]&!d[9]&a[1]) |
(!d[14]&a[5]));
next_d[9] <= !(( a[8] & a[7] & !a[6] & a[5] & a[4] & !a[3] & !a[2] & !a[1]) |
(!d[15]&d[14]&!d[13]&!d[11]&!d[9]&a[4]) |
(!d[14]&d[9]&a[4]) |
(!d[14]&d[11]&a[4]) |
(!d[14]&d[13]&a[4]) |
(d[15]&!d[14]&a[4]) |
(d[14]&a[1]) |
(!d[12]&a[5]));
next_d[8] <= !(( a[8] & a[7] & !a[6] & a[5] & a[4] & !a[3] & !a[2] & !a[1]) |
(!d[15]&!d[14]&!d[13]&d[12]&!d[11]&!d[9]&a[4]) |
(d[14]&d[12]&a[1]) |
(!d[12]&d[11]&a[4]) |
(d[13]&!d[12]&a[4]) |
(d[15]&!d[12]&a[4]) |
(!d[14]&!d[12]&a[1]) |
(!d[10]&a[5]));
end
end
always @(posedge clk)
d <= next_d;
endmodule

View File

@ -308,7 +308,7 @@ set_instance_assignment -name GLOBAL_SIGNAL "GLOBAL CLOCK" -to clk_32
set_global_assignment -name ENABLE_BENEFICIAL_SKEW_OPTIMIZATION ON
set_global_assignment -name VERILOG_FILE cache.v
set_global_assignment -name VERILOG_FILE dongle.v
set_global_assignment -name VERILOG_FILE ethernec.v
set_global_assignment -name VERILOG_FILE mfp_timer.v
set_global_assignment -name VHDL_FILE vol_table_array.vhd
set_global_assignment -name VHDL_FILE YM2149_volmix.vhd

View File

@ -2,7 +2,7 @@
/* */
/********************************************/
module mist_top (
module mist_top (
// clock inputsxque
input wire [ 2-1:0] CLOCK_27, // 27 MHz
// LED outputs
@ -54,7 +54,8 @@ wire [15:0] video_adj;
// generate dtack for all implemented peripherals
wire io_dtack = vreg_sel || mmu_sel || mfp_sel || mfp_iack ||
acia_sel || psg_sel || dma_sel || auto_iack || blitter_sel ||
ste_joy_sel || ste_dma_snd_sel || mste_ctrl_sel || vme_sel || dongle_sel;
ste_joy_sel || ste_dma_snd_sel || mste_ctrl_sel || vme_sel ||
rom_sel[1] || rom_sel[0];
// the original tg68k did not contain working support for bus fault exceptions. While earlier
// TOS versions cope with that, TOS versions with blitter support need this to work as this is
@ -122,7 +123,7 @@ always @(negedge clk_8)
if(video_cycle)
br <= data_io_br || blitter_br;
`endif
// request interrupt ack from mfp for IPL == 6
wire mfp_iack = cpu_cycle && cpu2iack && tg68_as && (tg68_adr[3:1] == 3'b110);
@ -146,10 +147,14 @@ wire [7:0] auto_vector = auto_vector_vbi | auto_vector_hbi;
// $ffff8e00 - $ffff8e0f - VME (only fake implementation)
wire io_sel = cpu_cycle && cpu2io && tg68_as ;
// dongle interface at $fb0000 - $fbffff
wire dongle_sel = dongle_present && cpu_cycle && tg68_as && tg68_rw && (tg68_adr[23:16] == 8'hfb);
wire [7:0] dongle_data_out;
// TODO: from sysconfig
wire ethernec_present = 1'b1;
// romport interface at $fa0000 - $fbffff
wire rom_sel_all = ethernec_present && cpu_cycle && tg68_as && tg68_rw && ({tg68_adr[23:17], 1'b0} == 8'hfa);
wire [1:0] rom_sel = { rom_sel_all && tg68_adr[16], rom_sel_all && !tg68_adr[16] };
wire [15:0] rom_data_out;
// mmu 8 bit interface at $ff8000 - $ff8001
wire mmu_sel = io_sel && ({tg68_adr[15:1], 1'd0} == 16'h8000);
@ -197,10 +202,10 @@ wire dma_sel = io_sel && ({tg68_adr[15:4], 4'd0} == 16'h8600);
wire [15:0] dma_data_out;
// de-multiplex the various io data output ports into one
wire [7:0] io_data_out_8u = acia_data_out | psg_data_out | dongle_data_out;
wire [7:0] io_data_out_8u = acia_data_out | psg_data_out;
wire [7:0] io_data_out_8l = mmu_data_out | mfp_data_out | auto_vector | mste_ctrl_data_out;
wire [15:0] io_data_out = vreg_data_out | dma_data_out | blitter_data_out |
ste_joy_data_out | ste_dma_snd_data_out |
ste_joy_data_out | ste_dma_snd_data_out | rom_data_out |
{8'h00, io_data_out_8l} | {io_data_out_8u, 8'h00};
wire init = ~pll_locked;
@ -391,16 +396,13 @@ ste_joystick ste_joystick (
.dout (ste_joy_data_out),
);
wire dongle_present; // true if the dongle modules contains functonality
dongle dongle (
ethernec ethernec (
.clk (clk_8 ),
.sel (dongle_sel ),
.present (dongle_present),
.sel (rom_sel ),
.addr (tg68_adr[15:1]),
.cpu_as (cpu_cycle && tg68_as && !br),
.lds (tg68_lds ),
.uds (tg68_uds ),
.rw (tg68_rw ),
.dout (dongle_data_out)
.dout (rom_data_out)
);
wire [22:0] ste_dma_snd_addr;
@ -944,8 +946,7 @@ wire cpu2tos192k = (tg68_adr[23:17] == 7'b1111110) ||
(tg68_adr[23:16] == 8'b11111110);
// 128k cartridge from 0xfa0000 to 0xfbffff
wire cpu2cart = (tg68_adr[23:16] == 8'hfa) ||
((tg68_adr[23:16] == 8'hfb) && !dongle_present); // include fb0000 only if no dongle present
wire cpu2cart = ({tg68_adr[23:17], 1'b0} == 8'hfa) && !ethernec_present;
// all rom areas
wire cpu2rom = cpu2lowrom || cpu2tos192k || cpu2tos256k || cpu2cart;