// ZX-Evo Base Configuration (c) NedoPC 2014
//
// CMOS emulator: cmos is needed for zxevo.rom to function correctly
/*
This file is part of ZX-Evo Base Configuration firmware.
ZX-Evo Base Configuration firmware is free software:
you can redistribute it and/or modify it under the terms of
the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
ZX-Evo Base Configuration firmware is distributed in the hope that
it will be useful, but WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with ZX-Evo Base Configuration firmware.
If not, see <http://www.gnu.org/licenses/>.
*/
module cmosemu
(
input wire zclk,
input wire cmos_req,
input wire [7:0] cmos_addr,
input wire cmos_rnw,
output reg [7:0] cmos_read,
input wire [7:0] cmos_write
);
reg [7:0] mem [0:239];
reg req_r;
function [7:0] cmos_rd
(
input [7:0] addr
);
if( addr<8'd240 )
cmos_rd = mem[addr];
else
cmos_rd = 8'hFF;
endfunction
task cmos_wr
(
input [7:0] addr,
input [7:0] data
);
if( addr<8'd240 )
mem[addr] <= data;
endtask
initial
begin
int i;
for(i=0;i<256;i=i+1)
mem[i] <= 8'd0;
end
always @(posedge zclk)
req_r <= cmos_req;
always @(posedge zclk)
begin
cmos_read <= cmos_rd(cmos_addr);
if( req_r && !cmos_rnw )
cmos_wr(cmos_addr,cmos_write);
end
endmodule