zxuno-git/cores/Spectrum/common/monochrome_rgb.v

126 lines
3.1 KiB
Verilog

`timescale 1ns / 1ps
`default_nettype none
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 06:50:06 22/05/2021
// Design Name:
// Module Name: monochrome
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module monochrome (
input wire [1:0] monochrome_selection,
input wire [2:0] ri,
input wire [2:0] gi,
input wire [2:0] bi,
output reg [2:0] ro,
output reg [2:0] go,
output reg [2:0] bo
);
reg [2:0] monochrome_scale_spectrum;
always @* begin
ro = ri;
go = gi;
bo = bi;
// Escala monocromatica especifica para la paleta original
// de Spectrum. Los colores brillantes no son diferenciados
// respecto a los no brillantes por limitacion del DAC.
// No se representan colores adicionales como los del ULAPlus
if (monochrome_selection > 2'b00) begin
if (ri == 1'b0 && gi == 1'b0 && bi == 1'b0) begin // Negro
monochrome_scale_spectrum = 'd0;
end
else if (ri == 1'b0 && gi == 1'b0 && bi > 1'b0) begin // Azul
if (bi >= 3'b110) begin //Azul brillante
monochrome_scale_spectrum = 'd2;
end
else begin
monochrome_scale_spectrum = 'd1;
end
end
else if (ri > 1'b0 && gi == 1'b0 && bi == 1'b0) begin // Rojo
if (ri >= 3'b110) begin //Rojo brillante
monochrome_scale_spectrum = 'd3;
end
else begin
monochrome_scale_spectrum = 'd2;
end
end
else if (ri > 1'b0 && gi == 1'b0 && bi > 1'b0) begin // Magenta
if (ri >= 3'b110 && bi >= 3'b110) begin //Magenta brillante
monochrome_scale_spectrum = 'd4;
end
else begin
monochrome_scale_spectrum = 'd3;
end
end
else if (ri == 1'b0 && gi > 1'b0 && bi == 1'b0) begin // Verde
if (gi >= 3'b110) begin // Verde brillante
monochrome_scale_spectrum = 'd5;
end
else begin
monochrome_scale_spectrum = 'd4;
end
end
else if (ri == 1'b0 && gi > 1'b0 && bi > 1'b0) begin // Cian
if (gi >= 3'b110 && bi >= 3'b110) begin // Cian brillante
monochrome_scale_spectrum = 'd6;
end
else begin
monochrome_scale_spectrum = 'd5;
end
end
else if (ri > 1'b0 && gi > 1'b0 && bi == 1'b0) begin // Amarillo
if (ri >= 3'b110 && gi >= 3'b110) begin // Amarillo brillante
monochrome_scale_spectrum = 'd7;
end
else begin
monochrome_scale_spectrum = 'd6;
end
end
else if (ri > 1'b0 && gi > 1'b0 && bi > 1'b0) begin // Blanco
monochrome_scale_spectrum = 'd7;
end
// Seleccion de tipos de colores monocromaticos
if (monochrome_selection == 3'b01) begin // Verde
ro = 3'b000;
go = monochrome_scale_spectrum;
bo = 3'b000;
end
else if (monochrome_selection == 3'b10) begin // Ambar
ro = monochrome_scale_spectrum;
go = monochrome_scale_spectrum >> 1;
bo = 3'b000;
end
else if (monochrome_selection == 3'b11) begin // Blanco y negro
ro = monochrome_scale_spectrum;
go = monochrome_scale_spectrum;
bo = monochrome_scale_spectrum;
end
end
end
endmodule