clean gunk out of am42
[fleet.git] / ships / Dvi.ship
index b630072..100314f 100644 (file)
@@ -31,8 +31,6 @@ percolate up:    dvi_xclk_p  1
 percolate up:    dvi_de      1
 percolate up:    dvi_reset_b 1
 
-percolate down:  gpio_sw_c    1
-
 percolate up:    gpio_led_c   1
 percolate up:    gpio_led_e   1
 percolate up:    gpio_led_n   1
@@ -149,7 +147,7 @@ vga_timing_generator
      .V_BP(31),
      .HEIGHT_BITS(10),
      .WIDTH_BITS(10),
-     .DATA_DELAY(1)
+     .DATA_DELAY(0)
   ) my_vga_timing_generator (
      .rst(rst),
      .clk(pix_clk),
@@ -246,7 +244,7 @@ vga_timing_generator
   reg [3:0] wait_until_write;
   reg [3:0] wait_until_video;
   reg [37:0] addr;
-  wire [31:0] data_out;
+  wire [35:0] data_out;
   reg [37:0] out_d;
   reg [37:0] writeData;
   
@@ -309,6 +307,10 @@ vga_timing_generator
   assign data_out[29] = sram_d29;        assign sram_d29       = oe ? 1'bz : writeData[29];
   assign data_out[30] = sram_d30;        assign sram_d30       = oe ? 1'bz : writeData[30];
   assign data_out[31] = sram_d31;        assign sram_d31       = oe ? 1'bz : writeData[31];
+  assign data_out[32] = sram_dqp0;       assign sram_dqp0      = oe ? 1'bz : writeData[32];
+  assign data_out[33] = sram_dqp1;       assign sram_dqp1      = oe ? 1'bz : writeData[33];
+  assign data_out[34] = sram_dqp2;       assign sram_dqp2      = oe ? 1'bz : writeData[34];
+  assign data_out[35] = sram_dqp3;       assign sram_dqp3      = oe ? 1'bz : writeData[35];
   
   assign sram_mode       = 0;
   assign sram_clk        = clk;
@@ -321,10 +323,11 @@ vga_timing_generator
   assign sram_cs_b       = 0;
   assign sram_oe_b       = ~oe;
 
-  // Framebuffer is 548x478 -- yeah, I know that's completely weird.
+  // Framebuffer is 544x478 -- yeah, I know that's completely weird.
 
-  wire on_screen;
-  assign on_screen = (x_coord >= 48) && (x_coord < 592);
+  wire on_screen_;
+  reg on_screen;
+  assign on_screen_ = (x_coord >= 48) && (x_coord < 592);
   wire [9:0] adjusted_x_coord;
   assign adjusted_x_coord = x_coord - 48;
 
@@ -335,12 +338,13 @@ vga_timing_generator
                          + { 7'b0000000, y_coord[8:0], 5'b00000 }
                          + {     3'b000, y_coord[8:0], 9'b0000000000 };
 
-  assign dvi_red         = on_screen ? mem_out[23:16] : 0;
-  assign dvi_green       = on_screen ? mem_out[15:8]  : 0;
-  assign dvi_blue        = on_screen ? mem_out[7:0]   : 0;
+  assign dvi_red         = on_screen ? { mem_out[17:12], 2'b0 } : 0;
+  assign dvi_green       = on_screen ? { mem_out[11:6],  2'b0 } : 0;
+  assign dvi_blue        = on_screen ? { mem_out[5:0],   2'b0 } : 0;
 
   always @(posedge pix_clk) begin
       vga_pixel_addr <= vga_pixel_addr_;
+      on_screen      <= on_screen_;
   end
 
   wire idle;
@@ -455,8 +459,6 @@ NET  dvi_gpio1            LOC="N30" | IOSTANDARD="LVCMOS18";   # Bank 15, Vcco=1
 NET  dvi_iic_scl          LOC="U27" | PULLUP | IOSTANDARD="LVCMOS18";   # Bank 15, Vcco=1.8V, DCI using 49.9 ohm resistors
 NET  dvi_iic_sda          LOC="T29" | PULLUP | IOSTANDARD="LVCMOS18";   # Bank 15, Vcco=1.8V, DCI using 49.9 ohm resistors
 
-NET  gpio_sw_c            LOC="AJ6" | IOSTANDARD="LVCMOS33";   # Bank 18, Vcco=3.3V, No DCI
-
 NET  gpio_led_c           LOC="E8";    # Bank 20, Vcco=3.3V, DCI using 49.9 ohm resistors
 NET  gpio_led_e           LOC="AG23";  # Bank 2, Vcco=3.3V
 NET  gpio_led_n           LOC="AF13";  # Bank 2, Vcco=3.3V
@@ -549,14 +551,76 @@ NET  sram_oe_b            LOC="B12";   # Bank 20, Vcco=3.3V, DCI using 49.9 ohm
 == TeX ==============================================================
 
 == Fleeterpreter ====================================================
-
-  public void service() { }
+private java.awt.Frame frame = null;
+private java.awt.Panel panel = null;
+private long[][] bits;
+public static int SCREEN_WIDTH = 577;
+public static int SCREEN_HEIGHT = 478;
+public void service() {
+    long x,y,d;
+    if (box_inPixelX.dataReadyForShip() &&
+        box_inPixelY.dataReadyForShip() &&
+        box_inPixelValue.dataReadyForShip()) {
+        x      = box_inPixelX.removeDataForShip();
+        y      = box_inPixelY.removeDataForShip();
+        d      = box_inPixelValue.removeDataForShip();
+    } else if (box_inAddrWrite.dataReadyForShip() &&
+               box_inDataWrite.dataReadyForShip() &&
+               box_out.readyForDataFromShip()) {
+        long addr = box_inAddrWrite.removeDataForShip();
+        x      = addr % SCREEN_WIDTH;
+        y      = addr / SCREEN_WIDTH;
+        d      = box_inDataWrite.removeDataForShip();
+        box_out.addDataFromShip(0,true);
+    } else if (box_inAddrRead.dataReadyForShip() &&
+               box_out.readyForDataFromShip()) {
+        long addr = box_inAddrRead.removeDataForShip();
+        x      = addr % SCREEN_WIDTH;
+        y      = addr / SCREEN_WIDTH;
+        box_out.addDataFromShip(bits[(int)x][(int)y],false);
+        return;
+    } else {
+        return;
+    }
+    if (frame==null) {
+        frame = new java.awt.Frame();
+        bits = new long[SCREEN_WIDTH][SCREEN_HEIGHT];
+        for(int i=0; i<SCREEN_WIDTH; i++) bits[i] = new long[SCREEN_HEIGHT];
+        frame.setSize(SCREEN_WIDTH,SCREEN_HEIGHT);
+        panel = new java.awt.Panel() {
+                public void paint(java.awt.Graphics g_) {
+                    java.awt.Graphics2D g2 = (java.awt.Graphics2D)g_;
+                    g2.transform(java.awt.geom.AffineTransform.getScaleInstance(((double)panel.getWidth())/SCREEN_WIDTH,
+                                                                                ((double)panel.getHeight())/SCREEN_HEIGHT));
+                    for(int xx=0; xx<SCREEN_WIDTH; xx++) {
+                        for(int yy=0; yy<SCREEN_HEIGHT; yy++) {
+                            long d = bits[xx][yy];
+                            java.awt.Color c = new java.awt.Color(
+                                                                  (int)(((d >> 12) & ~((-1L) << 6)) << 2),
+                                                                  (int)(((d >>  6) & ~((-1L) << 6)) << 2),
+                                                                  (int)(((d >>  0) & ~((-1L) << 6)) << 2)
+                                                                  );
+                            g2.setColor(c);
+                            g2.fillRect((int)xx,(int)yy,1,1);
+                        }
+                    }
+                }
+            };
+        frame.setLayout(new java.awt.BorderLayout());
+        frame.add(panel, java.awt.BorderLayout.CENTER);
+        panel.setBackground(java.awt.Color.black);
+        frame.show();
+    }
+    bits[(int)x][(int)y] = d;
+    panel.repaint();
+}
 
 == FleetSim ==============================================================
 
 == Constants =========================================================
 
 == Test ==============================================================
+#skip
 
 #expect 0
 #expect 0