Subversion Repositories pentevo

Rev

Rev 543 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1. `include "../include/tune.v"
  2.  
  3. // Pentevo project (c) NedoPC 2010,2011,2012
  4. //
  5. // decoding mode setup: which border, which modes in one-hot style coding
  6.  
  7. module video_modedecode(
  8.  
  9.         input  wire        clk,
  10.  
  11.         input  wire [ 1:0] pent_vmode, // inputs as set by Z80 environment
  12.         input  wire [ 2:0] atm_vmode,  //
  13.  
  14.  
  15.         output reg         mode_atm_n_pent, // =1 - atm modes, =0 - pentagon modes (mainly for border and visible area changing)
  16.  
  17.  
  18.         output reg         mode_zx, // standard ZX mode
  19.  
  20.         output reg         mode_p_16c,   // pentagon 16 colors
  21.         output reg         mode_p_hmclr, // pentagon hardware multicolor
  22.  
  23.  
  24.         output reg         mode_a_hmclr, // 640x200 atm hardware multicolor
  25.         output reg         mode_a_16c,   // 320x200 atm 16 colors
  26.         output reg         mode_a_text,  // 640x200 (80x25 symbols) atm text mode
  27.         output reg         mode_a_txt_1page, // atm text mode in a single page (modifier for mode_a_text)
  28.  
  29.         output reg         mode_pixf_14, // =1: 14MHz pixelclock on (default is 7MHz).
  30.  
  31.  
  32.         output reg  [ 1:0] mode_bw // required bandwidth: 2'b00 - 1/8, 2'b01 - 1/4,
  33.                                    //                     2'b10 - 1/2, 2'b11 - 1
  34. );
  35.  
  36. // values for pent_vmode and atm_vmode:
  37.  
  38. // pent:
  39. // 2'b00 - standard ZX
  40. // 2'b01 - hardware multicolor
  41. // 2'b10 - pentagon 16 colors
  42. // 2'b11 - not defined yet
  43.  
  44. // atm:
  45. // 3'b011 - zx modes (pent_vmode is active)
  46. // 3'b010 - 640x200 hardware multicolor
  47. // 3'b000 - 320x200 16 colors
  48. // 3'b110 - 80x25 text mode
  49. // 3'b111 - 80x25 text mode (single page)
  50. // 3'b??? (others) - not defined yet
  51.  
  52.  
  53.  
  54.  
  55.         always @(posedge clk)
  56.         begin
  57.                 case( atm_vmode )
  58.                         3'b010:  mode_atm_n_pent <= 1'b1;
  59.                         3'b000:  mode_atm_n_pent <= 1'b1;
  60.                         3'b110:  mode_atm_n_pent <= 1'b1;
  61.                         3'b111:  mode_atm_n_pent <= 1'b1;
  62.  
  63.                         3'b011:  mode_atm_n_pent <= 1'b0;
  64.                         default: mode_atm_n_pent <= 1'b0;
  65.                 endcase
  66.  
  67.  
  68.                 case( atm_vmode )
  69.                         3'b010: mode_zx <= 1'b0;
  70.                         3'b000: mode_zx <= 1'b0;
  71.                         3'b110: mode_zx <= 1'b0;
  72.                         3'b111: mode_zx <= 1'b0;
  73.  
  74.                         default: begin
  75.                                 if( (pent_vmode==2'b00) || (pent_vmode==2'b11) )
  76.                                         mode_zx <= 1'b1;
  77.                                 else
  78.                                         mode_zx <= 1'b0;
  79.                         end
  80.                 endcase
  81.  
  82.  
  83.                
  84.                 if( (atm_vmode==3'b011) && (pent_vmode==2'b10) )
  85.                         mode_p_16c <= 1'b1;
  86.                 else
  87.                         mode_p_16c <= 1'b0;
  88.  
  89.  
  90.                 if( (atm_vmode==3'b011) && (pent_vmode==2'b01) )
  91.                         mode_p_hmclr <= 1'b1;
  92.                 else
  93.                         mode_p_hmclr <= 1'b0;
  94.  
  95.  
  96.                 if( atm_vmode==3'b010 )
  97.                         mode_a_hmclr <= 1'b1;
  98.                 else
  99.                         mode_a_hmclr <= 1'b0;
  100.                
  101.  
  102.                 if( atm_vmode==3'b000 )
  103.                         mode_a_16c <= 1'b1;
  104.                 else
  105.                         mode_a_16c <= 1'b0;
  106.                
  107.  
  108.                 if( (atm_vmode==3'b110) || (atm_vmode==3'b111) )
  109.                         mode_a_text <= 1'b1;
  110.                 else
  111.                         mode_a_text <= 1'b0;
  112.                
  113.                 if( atm_vmode==3'b111 )
  114.                         mode_a_txt_1page <= 1'b1;
  115.                 else
  116.                         mode_a_txt_1page <= 1'b0;
  117.  
  118.  
  119.  
  120.                 if( (atm_vmode==3'b010) || (atm_vmode==3'b110) || (atm_vmode==3'b111) )
  121.                         mode_pixf_14 <= 1'b1;
  122.                 else
  123.                         mode_pixf_14 <= 1'b0;
  124.  
  125.  
  126.  
  127.                 if( (atm_vmode==3'b011) && (pent_vmode!=2'b10) )
  128.                         mode_bw <= 2'b00; // 1/8
  129.                 else
  130.                         mode_bw <= 2'b01; // 1/4
  131.  
  132.  
  133.         end
  134.  
  135. endmodule
  136.  
  137.