--- /dev/null
+ship: Video
+
+== Ports ===========================================================
+data in: inX
+data in: inY
+data in: inData
+
+== TeX ==============================================================
+
+== Fleeterpreter ====================================================
+
+ private java.awt.Frame frame = null;
+ public void service() {
+ if (box_inX.dataReadyForShip() &&
+ box_inY.dataReadyForShip() &&
+ box_inData.dataReadyForShip()
+ ) {
+ long x = box_inX.removeDataForShip();
+ long y = box_inY.removeDataForShip();
+ long d = box_inData.removeDataForShip();
+
+ if (frame==null) {
+ frame = new java.awt.Frame();
+ java.awt.Dimension dim = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
+ frame.setSize((int)dim.getWidth(),(int)dim.getHeight());
+ frame.show();
+ frame.setBackground(new java.awt.Color(0,0,0));
+ }
+ java.awt.Color c = new java.awt.Color(
+ ((d & (1L<<2))!=0) ? 0xff : 0x00,
+ ((d & (1L<<1))!=0) ? 0xff : 0x00,
+ ((d & (1L<<0))!=0) ? 0xff : 0x00
+ );
+ java.awt.Graphics2D g = (java.awt.Graphics2D)frame.getGraphics();
+ g.transform(java.awt.geom.AffineTransform.getScaleInstance(((double)frame.getWidth())/640, ((double)frame.getHeight())/480));
+ g.setColor(c);
+ g.fillRect((int)x,(int)y,1,1);
+
+ }
+ }
+
+== FleetSim ==============================================================
+
+== FPGA ==============================================================
+
+
+ wire [31:0] vga_pixel_addr_;
+ wire vga_pixel_r;
+ wire vga_pixel_a_;
+ reg vga_pixel_a;
+ assign vga_pixel_a_ = vga_pixel_a;
+ wire [18:0] inAddr;
+
+ reg we;
+ wire [2:0] mem_out;
+ wire [31:0] vga_pixel_data;
+ assign vga_pixel_data = {
+ 8'b0,
+ mem_out[2], 7'b0,
+ mem_out[1], 7'b0,
+ mem_out[0], 7'b0
+ };
+
+ assign inAddr = inX_d + (inY_d * 640);
+
+ vram vram(clk, rst, we, inAddr[18:0], vga_pixel_addr_[20:2], inData_d, , mem_out);
+
+ wb_vga wb_vga(
+ .wb_clk_i(clk),
+ .wb_rst_i(!rst),
+
+ .fbwb_adr_o(vga_pixel_addr_),
+ .fbwb_stb_o(vga_pixel_r),
+ .fbwb_ack_i(vga_pixel_a_),
+ .fbwb_dat_i(vga_pixel_data),
+
+ /* VGA signals */
+ .vga_clk(vga_clk),
+ .vga_psave(vga_psave),
+ .vga_hsync(vga_hsync),
+ .vga_vsync(vga_vsync),
+ .vga_sync(vga_sync),
+ .vga_blank(vga_blank),
+ .vga_r(vga_r),
+ .vga_g(vga_g),
+ .vga_b(vga_b),
+ .vga_clkout(vga_clkout)
+ );
+
+ always @(posedge clk) begin
+
+ if (!rst) begin
+ `reset
+ end else begin
+
+ vga_pixel_a <= vga_pixel_r;
+
+ if (!inData_r && inData_a) inData_a <= 0;
+ if (!inX_r && inX_a) inX_a <= 0;
+ if (!inY_r && inY_a) inY_a <= 0;
+ if (inX_r && !inX_a && inY_r && !inY_a && inData_r && !inData_a) begin
+ we <= 1;
+ inX_a <= 1;
+ inY_a <= 1;
+ inData_a <= 1;
+ end else begin
+ we <= 0;
+ end
+
+ end
+ end
+
+== Constants ========================================================
+
+== Contributors =========================================================
+Adam Megacz <megacz@cs.berkeley.edu>