adjust ships to use fill/drain/full/empty macros
[fleet.git] / ships / Video.ship
1 ship: Video
2
3 == Ports ===========================================================
4 data  in:    inX
5 data  in:    inY
6 data  in:    inData
7
8 == TeX ==============================================================
9
10 == Fleeterpreter ====================================================
11
12   private java.awt.Frame frame = null;
13   public void service() {
14   if (box_inX.dataReadyForShip() &&
15       box_inY.dataReadyForShip() &&
16       box_inData.dataReadyForShip()
17       ) {
18       long x      = box_inX.removeDataForShip();
19       long y      = box_inY.removeDataForShip();
20       long d      = box_inData.removeDataForShip();
21
22       if (frame==null) {
23            frame = new java.awt.Frame();
24            java.awt.Dimension dim = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
25            frame.setSize((int)dim.getWidth(),(int)dim.getHeight());
26            frame.show();
27            frame.setBackground(new java.awt.Color(0,0,0));
28       }
29       java.awt.Color c = new java.awt.Color(
30          ((d & (1L<<2))!=0) ? 0xff : 0x00,
31          ((d & (1L<<1))!=0) ? 0xff : 0x00,
32          ((d & (1L<<0))!=0) ? 0xff : 0x00
33       );
34       java.awt.Graphics2D g = (java.awt.Graphics2D)frame.getGraphics();
35       g.transform(java.awt.geom.AffineTransform.getScaleInstance(((double)frame.getWidth())/640, ((double)frame.getHeight())/480));
36       g.setColor(c);
37       g.fillRect((int)x,(int)y,1,1);
38
39     }
40   }
41
42 == FleetSim ==============================================================
43
44 == FPGA ==============================================================
45
46
47   wire [31:0] vga_pixel_addr_;
48   wire        vga_pixel_r;
49   wire        vga_pixel_a_;
50   reg         vga_pixel_a;
51   assign vga_pixel_a_ = vga_pixel_a;
52   wire [18:0] inAddr;
53
54   reg we;
55   wire [2:0] mem_out;
56   wire  [31:0] vga_pixel_data;
57   assign vga_pixel_data = {
58              8'b0,
59              mem_out[2], 7'b0,
60              mem_out[1], 7'b0,
61              mem_out[0], 7'b0
62   };
63
64   assign inAddr = inX_d + (inY_d * 640);
65
66   vram vram(clk, rst, we, inAddr[18:0], vga_pixel_addr_[20:2], inData_d, , mem_out);
67
68   wb_vga wb_vga(
69         .wb_clk_i(clk),
70         .wb_rst_i(!rst),
71         
72         .fbwb_adr_o(vga_pixel_addr_),
73         .fbwb_stb_o(vga_pixel_r),
74         .fbwb_ack_i(vga_pixel_a_),
75         .fbwb_dat_i(vga_pixel_data),
76
77         /* VGA signals */
78         .vga_clk(vga_clk),
79         .vga_psave(vga_psave),
80         .vga_hsync(vga_hsync),
81         .vga_vsync(vga_vsync),
82         .vga_sync(vga_sync),
83         .vga_blank(vga_blank),
84         .vga_r(vga_r),
85         .vga_g(vga_g),
86         .vga_b(vga_b),
87         .vga_clkout(vga_clkout)
88   );
89
90   always @(posedge clk) begin
91
92     if (!rst) begin
93       `reset
94     end else begin
95       `flush
96       `cleanup
97       vga_pixel_a <= vga_pixel_r;
98
99       if (`inX_full && `inY_full && `inData_full) begin
100          we <= 1;
101          `drain_inX
102          `drain_inY
103          `drain_inData
104       end else begin
105          we <= 0;
106       end
107
108     end
109   end
110
111 == Constants ========================================================
112
113 == Test ==============================================================
114
115 // can't test much here; just make sure it accepts values
116
117 #expect 0
118 #expect 0
119 #expect 0
120
121 #ship debug : Debug
122 #ship video : Video
123
124 video.inX:
125   set word=0;
126   deliver;
127   send token to debug.in;
128 video.inY:
129   set word=0;
130   deliver;
131   send token to debug.in;
132 video.inData:
133   set word=0;
134   deliver;
135   send token to debug.in;
136
137 debug.in:
138   set word=0;
139   set ilc=*;
140   recv token, deliver;
141
142
143 == Contributors =========================================================
144 Adam Megacz <megacz@cs.berkeley.edu>