From: adam Date: Thu, 21 Aug 2008 10:34:27 +0000 (+0100) Subject: add Video ship X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=85d968586dd487cc74f2a19d9019fff31c79725d;p=fleet.git add Video ship --- diff --git a/ships/Video.ship b/ships/Video.ship new file mode 100644 index 0000000..24f9423 --- /dev/null +++ b/ships/Video.ship @@ -0,0 +1,116 @@ +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