OpenCores
URL https://opencores.org/ocsvn/zet86/zet86/trunk

Subversion Repositories zet86

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 38 to Rev 39
    Reverse comparison

Rev 38 → Rev 39

/trunk/uart16550/altera/uart_test.v File deleted \ No newline at end of file
/trunk/uart16550/altera/simulation/modelsim/gate.do File deleted \ No newline at end of file
/trunk/uart16550/altera/uart_top.qsf File deleted \ No newline at end of file
/trunk/files.txt File deleted
/trunk/rtl-model/defines.v
23,4 → 23,4
`define ADD_IP `IR_SIZE'bx__0__1__0__1__10_001_001__0__01__0__0_1111_xxxx_xxxx_1111_xx
`define OP_NOP 8'h90
 
`define DEBUG 1
//`define DEBUG 1
/trunk/rtl-model/regfile.v
22,7 → 22,8
 
module regfile (
`ifdef DEBUG
output [15:0] sp,
output [15:0] r1,
output [15:0] r2,
`endif
 
output [15:0] a,
60,7 → 61,8
 
// Assignments
`ifdef DEBUG
assign sp = r[4];
assign r1 = r[1];
assign r2 = r[7];
`endif
assign a = (a_byte & ~addr_a[3]) ? { {8{a8[7]}}, a8} : r[addr_a];
assign a8 = addr_a[2] ? r[addr_a[1:0]][15:8] : r[addr_a][7:0];
81,19 → 83,19
// Behaviour
always @(posedge clk)
if (rst) begin
r[0] <= 16'd0; r[1] <= 16'd0;
r[2] <= 16'd0; r[3] <= 16'd0;
r[4] <= 16'd0; r[5] <= 16'd0;
r[6] <= 16'd0; r[7] <= 16'd0;
r[0] <= 16'd0; r[1] <= 16'd0;
r[2] <= 16'd0; r[3] <= 16'd0;
r[4] <= 16'd0; r[5] <= 16'd0;
r[6] <= 16'd0; r[7] <= 16'd0;
r[8] <= 16'd0; r[9] <= 16'hf000;
r[10] <= 16'd0; r[11] <= 16'd0;
r[12] <= 16'd0; r[13] <= 16'd0;
r[10] <= 16'd0; r[11] <= 16'd0;
r[12] <= 16'd0; r[13] <= 16'd0;
r[14] <= 16'd0; r[15] <= 16'hfff0;
flags <= 9'd0;
end else
begin
if (wr) begin
if (word_op | addr_d[3:2]==2'b10)
if (word_op | addr_d[3:2]==2'b10)
r[addr_d] <= word_op ? d[15:0] : {{8{d[7]}},d[7:0]};
else if (addr_d[3]~^addr_d[2]) r[addr_d][7:0] <= d[7:0];
else r[{2'b0,addr_d[1:0]}][15:8] <= d[7:0];
/trunk/rtl-model/exec.v
26,7 → 26,8
output [15:0] x,
output [15:0] y,
output [15:0] aluo,
output [15:0] sp,
output [15:0] r1,
output [15:0] r2,
`endif
input [`IR_SIZE-1:0] ir,
input [15:0] off,
70,11 → 71,11
wire dive;
 
// Module instances
alu alu0( {c, a }, bus_b, aluout, t, func, alu_iflags, oflags,
alu alu0( {c, a }, bus_b, aluout, t, func, alu_iflags, oflags,
alu_word, s, off, clk, dive);
regfile reg0 (
`ifdef DEBUG
sp,
r1, r2,
`endif
a, b, c, cs, ip, {aluout[31:16], omemalu}, s, flags, wr_reg, wrfl,
wr_high, clk, rst, addr_a, addr_b, addr_c, addr_d, addr_s, iflags,
112,7 → 113,7
assign zf = flags[3];
 
assign iflags = oflags;
assign alu_iflags = { 4'b0, flags[8:3], 1'b0, flags[2], 1'b0, flags[1],
assign alu_iflags = { 4'b0, flags[8:3], 1'b0, flags[2], 1'b0, flags[1],
1'b1, flags[0] };
assign logic_flags = { flags[8], flags[4], flags[3], flags[1], flags[0] };
 
/trunk/rtl-model/cpu.v
31,7 → 31,8
output [15:0] y,
output [15:0] imm,
output [15:0] aluo,
output [15:0] sp,
output [15:0] r1,
output [15:0] r2,
`endif
 
// Wishbone master interface
102,7 → 103,8
.x (x),
.y (y),
.aluo (aluo),
.sp (sp),
.r1 (r1),
.r2 (r2),
`endif
.ir (ir),
.off (off),
/trunk/rtl-model/fetch.v
1662,9 → 1662,9
dst <= 4'b0;
end
 
default: // nop
default: // hlt
begin
seq_addr <= `NOP;
seq_addr <= `HLT;
need_modrm <= 1'b0;
need_off <= 1'b0;
need_imm <= 1'b0;
/trunk/rtl-model/util/div_uu.v
34,10 → 34,10
 
// CVS Log
//
// $Id: div_uu.v,v 1.2 2008-10-20 00:48:28 zeus Exp $
// $Id: div_uu.v,v 1.3 2008-11-14 03:31:17 zeus Exp $
//
// $Date: 2008-10-20 00:48:28 $
// $Revision: 1.2 $
// $Date: 2008-11-14 03:31:17 $
// $Revision: 1.3 $
// $Author: zeus $
// $Locker: $
// $State: Exp $
/trunk/rtl-model/util/div_su.v
35,10 → 35,10
 
// CVS Log
//
// $Id: div_su.v,v 1.2 2008-10-20 00:48:28 zeus Exp $
// $Id: div_su.v,v 1.3 2008-11-14 03:31:17 zeus Exp $
//
// $Date: 2008-10-20 00:48:28 $
// $Revision: 1.2 $
// $Date: 2008-11-14 03:31:17 $
// $Revision: 1.3 $
// $Author: zeus $
// $Locker: $
// $State: Exp $
/trunk/impl/stratix2-nios2dk/zet/simulation/modelsim/gate.do File deleted \ No newline at end of file
/trunk/impl/stratix2-nios2dk/zet/simulation/modelsim/rtl.do File deleted \ No newline at end of file
/trunk/impl/stratix2-nios2dk/zet/simulation/modelsim/cpu_gate.v File deleted \ No newline at end of file
/trunk/impl/stratix2-nios2dk/zet/exec.v File deleted \ No newline at end of file
/trunk/impl/stratix2-nios2dk/zet/zet.qsf File deleted \ No newline at end of file
/trunk/impl/stratix2-nios2dk/zet/cpu.v File deleted \ No newline at end of file
/trunk/impl/stratix2-nios2dk/zet/memory.v File deleted \ No newline at end of file
/trunk/impl/stratix2-nios2dk/zet/defines.v File deleted \ No newline at end of file
/trunk/impl/stratix2-nios2dk/zet/regfile.v File deleted \ No newline at end of file
/trunk/impl/virtex4-ml403ep/lcd_display/lcd_display.v File deleted \ No newline at end of file
/trunk/impl/virtex4-ml403ep/lcd_display/ml403.ucf File deleted \ No newline at end of file
/trunk/impl/virtex4-ml403ep/vdu_test/clock.xaw File deleted \ No newline at end of file
/trunk/impl/virtex4-ml403ep/memory/ml403-with-tft.ucf File deleted \ No newline at end of file
/trunk/impl/virtex4-ml403ep/memory/clocks.xaw File deleted \ No newline at end of file
/trunk/impl/virtex4-ml403ep/memory/ml403-with-but.ucf File deleted \ No newline at end of file
/trunk/impl/virtex4-ml403ep/test/ml403.ucf File deleted \ No newline at end of file
/trunk/impl/virtex4-ml403ep/test/uart.v
0,0 → 1,47
module uart_ctrl(wr, trx_req, trx_ack, trx,
clr, clk);
// Entrades
input [6:0] wr;
input trx_req;
input clr, clk;
 
// Sortides
output reg trx_ack, trx;
 
// Registres
reg [7:0] et, etrx;
reg [6:0] data_wr;
 
// Algorisme de transmissi�
always @(negedge clk)
if (clr)
begin
et <= 8'd00;
etrx <= 8'd00;
trx <= 1'b1;
trx_ack <= 1'b0;
end
else
case (et)
8'd00: if (trx_req) et <= 8'd05;
8'd05:
if (~trx_req)
begin et <= 8'd00; etrx <= 8'd00; end
else
case (etrx)
8'd00: begin data_wr <= wr; trx <= 1'b1; etrx <= 8'd05; end
8'd05: begin trx <= 1'b0; etrx <= 8'd10; end // Start bit
8'd10: begin trx <= data_wr[0]; etrx <= 8'd15; end
8'd15: begin trx <= data_wr[1]; etrx <= 8'd20; end
8'd20: begin trx <= data_wr[2]; etrx <= 8'd25; end
8'd25: begin trx <= data_wr[3]; etrx <= 8'd30; end
8'd30: begin trx <= data_wr[4]; etrx <= 8'd35; end
8'd35: begin trx <= data_wr[5]; etrx <= 8'd40; end
8'd40: begin trx <= data_wr[6]; etrx <= 8'd45; end
8'd45: begin trx <= 1'b0; etrx <= 8'd50; end
8'd50: begin trx_ack <= 1'b1; trx <= 1'b1; etrx <= 8'd00; et <= 8'd10; end
endcase
8'd10: if (~trx_req) begin trx_ack <= 1'b0; et <= 8'd00; end
endcase
 
endmodule
/trunk/impl/virtex4-ml403ep/test/base.cpj
0,0 → 1,3923
#ChipScope Pro Analyzer Project File, Version 3.0
#Fri Nov 07 17:28:21 GMT+01:00 2008
device.2.configFileDir=/home/zeus/zet/impl/virtex4-ml403ep/ise-kotku
device.2.configFilename=kotku_ml403.bit
deviceChain.deviceName0=System_ACE_CF
deviceChain.deviceName1=XCF32P
deviceChain.deviceName2=XC4VFX12
deviceChain.deviceName3=XC9500XL
deviceChain.iRLength0=8
deviceChain.iRLength1=16
deviceChain.iRLength2=10
deviceChain.iRLength3=8
deviceChain.name0=MyDevice0
deviceChain.name1=MyDevice1
deviceChain.name2=MyDevice2
deviceChain.name3=MyDevice3
deviceIds=0a001093f505909321e5809359608093
mdiAreaHeight=0.7047872340425532
mdiAreaHeightLast=0.8218085106382979
mdiCount=2
mdiDevice0=2
mdiDevice1=2
mdiType0=1
mdiType1=0
mdiUnit0=0
mdiUnit1=0
navigatorHeight=0.4295212765957447
navigatorHeightLast=0.16356382978723405
navigatorWidth=0.14155629139072848
navigatorWidthLast=0.271523178807947
unit.-1.-1.username=
unit.1.-1.username=
unit.2.-1.username=
unit.2.0.0.HEIGHT0=0.83111954
unit.2.0.0.TriggerRow0=1
unit.2.0.0.TriggerRow1=1
unit.2.0.0.TriggerRow2=1
unit.2.0.0.WIDTH0=0.64630544
unit.2.0.0.X0=0.10640394
unit.2.0.0.Y0=0.032258064
unit.2.0.1.HEIGHT1=1.0
unit.2.0.1.WIDTH1=1.0
unit.2.0.1.X1=0.0
unit.2.0.1.Y1=0.0
unit.2.0.MFBitsA0=XXXXXXXXXXXXXXXXXXXX
unit.2.0.MFBitsA1=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
unit.2.0.MFBitsA10=XXXXXXXXXXXXXXXXXXXXX
unit.2.0.MFBitsA11=XXXXXXXXXXXXXXXX
unit.2.0.MFBitsA12=XXXXXXXXX
unit.2.0.MFBitsA13=XXX
unit.2.0.MFBitsA14=XXXXX
unit.2.0.MFBitsA15=10111111100000001000000000000000
unit.2.0.MFBitsA2=11000010100011100100
unit.2.0.MFBitsA3=XXXXXX
unit.2.0.MFBitsA4=XXXXXX
unit.2.0.MFBitsA5=XXXXXX
unit.2.0.MFBitsA6=XXXXXXXXXXXXXXXX
unit.2.0.MFBitsA7=XXXXXXXXXXXXXXXX
unit.2.0.MFBitsA8=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
unit.2.0.MFBitsA9=XXXXXXXXXXXXXXXX
unit.2.0.MFBitsB0=00000000000000000000
unit.2.0.MFBitsB1=00000000000000000000000000000000
unit.2.0.MFBitsB10=000000000000000000000
unit.2.0.MFBitsB11=0000000000000000
unit.2.0.MFBitsB12=000000000
unit.2.0.MFBitsB13=000
unit.2.0.MFBitsB14=00000
unit.2.0.MFBitsB15=00000000000000000000000000000000
unit.2.0.MFBitsB2=00000000000000000000
unit.2.0.MFBitsB3=000000
unit.2.0.MFBitsB4=000000
unit.2.0.MFBitsB5=000000
unit.2.0.MFBitsB6=0000000000000000
unit.2.0.MFBitsB7=0000000000000000
unit.2.0.MFBitsB8=00000000000000000000000000000000
unit.2.0.MFBitsB9=0000000000000000
unit.2.0.MFCompareA0=0
unit.2.0.MFCompareA1=0
unit.2.0.MFCompareA10=0
unit.2.0.MFCompareA11=0
unit.2.0.MFCompareA12=0
unit.2.0.MFCompareA13=0
unit.2.0.MFCompareA14=0
unit.2.0.MFCompareA15=0
unit.2.0.MFCompareA2=0
unit.2.0.MFCompareA3=0
unit.2.0.MFCompareA4=0
unit.2.0.MFCompareA5=0
unit.2.0.MFCompareA6=0
unit.2.0.MFCompareA7=0
unit.2.0.MFCompareA8=0
unit.2.0.MFCompareA9=0
unit.2.0.MFCompareB0=999
unit.2.0.MFCompareB1=999
unit.2.0.MFCompareB10=999
unit.2.0.MFCompareB11=999
unit.2.0.MFCompareB12=999
unit.2.0.MFCompareB13=999
unit.2.0.MFCompareB14=999
unit.2.0.MFCompareB15=999
unit.2.0.MFCompareB2=999
unit.2.0.MFCompareB3=999
unit.2.0.MFCompareB4=999
unit.2.0.MFCompareB5=999
unit.2.0.MFCompareB6=999
unit.2.0.MFCompareB7=999
unit.2.0.MFCompareB8=999
unit.2.0.MFCompareB9=999
unit.2.0.MFCount=16
unit.2.0.MFDisplay0=0
unit.2.0.MFDisplay1=1
unit.2.0.MFDisplay10=1
unit.2.0.MFDisplay11=0
unit.2.0.MFDisplay12=0
unit.2.0.MFDisplay13=0
unit.2.0.MFDisplay14=0
unit.2.0.MFDisplay15=1
unit.2.0.MFDisplay2=1
unit.2.0.MFDisplay3=0
unit.2.0.MFDisplay4=0
unit.2.0.MFDisplay5=0
unit.2.0.MFDisplay6=0
unit.2.0.MFDisplay7=0
unit.2.0.MFDisplay8=0
unit.2.0.MFDisplay9=0
unit.2.0.MFEventType0=3
unit.2.0.MFEventType1=3
unit.2.0.MFEventType10=3
unit.2.0.MFEventType11=3
unit.2.0.MFEventType12=3
unit.2.0.MFEventType13=3
unit.2.0.MFEventType14=3
unit.2.0.MFEventType15=3
unit.2.0.MFEventType2=3
unit.2.0.MFEventType3=3
unit.2.0.MFEventType4=3
unit.2.0.MFEventType5=3
unit.2.0.MFEventType6=3
unit.2.0.MFEventType7=3
unit.2.0.MFEventType8=3
unit.2.0.MFEventType9=3
unit.2.0.SQCondition=All Data
unit.2.0.SQContiguous0=0
unit.2.0.SequencerOn=0
unit.2.0.TCActive=0
unit.2.0.TCAdvanced0=0
unit.2.0.TCCondition0_0=M2
unit.2.0.TCCondition0_1=
unit.2.0.TCConditionType0=0
unit.2.0.TCCount=1
unit.2.0.TCEventCount0=1
unit.2.0.TCEventType0=3
unit.2.0.TCName0=TriggerCondition0
unit.2.0.TCOutputEnable0=0
unit.2.0.TCOutputHigh0=1
unit.2.0.TCOutputMode0=0
unit.2.0.browser_tree_state<Data\ Port>=1
unit.2.0.browser_tree_state<adr>=0
unit.2.0.browser_tree_state<cnt>=0
unit.2.0.browser_tree_state<dat_i>=0
unit.2.0.browser_tree_state<dat_o>=0
unit.2.0.browser_tree_state<ds>=0
unit.2.0.browser_tree_state<func>=0
unit.2.0.browser_tree_state<io_reg>=0
unit.2.0.browser_tree_state<next_state>=0
unit.2.0.browser_tree_state<pc>=0
unit.2.0.browser_tree_state<s_addr_>=0
unit.2.0.browser_tree_state<sp>=1
unit.2.0.browser_tree_state<state>=1
unit.2.0.browser_tree_state<x>=0
unit.2.0.browser_tree_state<y>=0
unit.2.0.coretype=ILA
unit.2.0.eventCount0=1
unit.2.0.eventCount1=1
unit.2.0.eventCount10=1
unit.2.0.eventCount11=1
unit.2.0.eventCount12=1
unit.2.0.eventCount13=1
unit.2.0.eventCount14=1
unit.2.0.eventCount15=1
unit.2.0.eventCount2=1
unit.2.0.eventCount3=1
unit.2.0.eventCount4=1
unit.2.0.eventCount5=1
unit.2.0.eventCount6=1
unit.2.0.eventCount7=1
unit.2.0.eventCount8=1
unit.2.0.eventCount9=1
unit.2.0.export.format=2
unit.2.0.export.signals=Waveform Signals/Buses
unit.2.0.export.unitName=DEV\:2 MyDevice2 (XC4VFX12) UNIT\:0 MyILA0 (ILA)
unit.2.0.port.-1.b.0.alias=adr
unit.2.0.port.-1.b.0.channellist=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
unit.2.0.port.-1.b.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.b.0.name=DataPort
unit.2.0.port.-1.b.0.orderindex=-1
unit.2.0.port.-1.b.0.radix=Hex
unit.2.0.port.-1.b.0.signedOffset=0.0
unit.2.0.port.-1.b.0.signedPrecision=0
unit.2.0.port.-1.b.0.signedScaleFactor=1.0
unit.2.0.port.-1.b.0.tokencount=0
unit.2.0.port.-1.b.0.unsignedOffset=0.0
unit.2.0.port.-1.b.0.unsignedPrecision=0
unit.2.0.port.-1.b.0.unsignedScaleFactor=1.0
unit.2.0.port.-1.b.0.visible=1
unit.2.0.port.-1.b.1.alias=aluo
unit.2.0.port.-1.b.1.channellist=154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
unit.2.0.port.-1.b.1.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.b.1.name=DataPort
unit.2.0.port.-1.b.1.orderindex=-1
unit.2.0.port.-1.b.1.radix=Hex
unit.2.0.port.-1.b.1.signedOffset=0.0
unit.2.0.port.-1.b.1.signedPrecision=0
unit.2.0.port.-1.b.1.signedScaleFactor=1.0
unit.2.0.port.-1.b.1.tokencount=0
unit.2.0.port.-1.b.1.unsignedOffset=0.0
unit.2.0.port.-1.b.1.unsignedPrecision=0
unit.2.0.port.-1.b.1.unsignedScaleFactor=1.0
unit.2.0.port.-1.b.1.visible=1
unit.2.0.port.-1.b.10.alias=next_state
unit.2.0.port.-1.b.10.channellist=84 85 86
unit.2.0.port.-1.b.10.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.b.10.name=DataPort
unit.2.0.port.-1.b.10.orderindex=-1
unit.2.0.port.-1.b.10.radix=Hex
unit.2.0.port.-1.b.10.signedOffset=0.0
unit.2.0.port.-1.b.10.signedPrecision=0
unit.2.0.port.-1.b.10.signedScaleFactor=1.0
unit.2.0.port.-1.b.10.tokencount=0
unit.2.0.port.-1.b.10.unsignedOffset=0.0
unit.2.0.port.-1.b.10.unsignedPrecision=0
unit.2.0.port.-1.b.10.unsignedScaleFactor=1.0
unit.2.0.port.-1.b.10.visible=1
unit.2.0.port.-1.b.11.alias=pc
unit.2.0.port.-1.b.11.channellist=52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
unit.2.0.port.-1.b.11.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.b.11.name=DataPort
unit.2.0.port.-1.b.11.orderindex=-1
unit.2.0.port.-1.b.11.radix=Hex
unit.2.0.port.-1.b.11.signedOffset=0.0
unit.2.0.port.-1.b.11.signedPrecision=0
unit.2.0.port.-1.b.11.signedScaleFactor=1.0
unit.2.0.port.-1.b.11.tokencount=0
unit.2.0.port.-1.b.11.unsignedOffset=0.0
unit.2.0.port.-1.b.11.unsignedPrecision=0
unit.2.0.port.-1.b.11.unsignedScaleFactor=1.0
unit.2.0.port.-1.b.11.visible=1
unit.2.0.port.-1.b.12.alias=state
unit.2.0.port.-1.b.12.channellist=87 88 89
unit.2.0.port.-1.b.12.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.b.12.name=DataPort
unit.2.0.port.-1.b.12.orderindex=-1
unit.2.0.port.-1.b.12.radix=Hex
unit.2.0.port.-1.b.12.signedOffset=0.0
unit.2.0.port.-1.b.12.signedPrecision=0
unit.2.0.port.-1.b.12.signedScaleFactor=1.0
unit.2.0.port.-1.b.12.tokencount=0
unit.2.0.port.-1.b.12.unsignedOffset=0.0
unit.2.0.port.-1.b.12.unsignedPrecision=0
unit.2.0.port.-1.b.12.unsignedScaleFactor=1.0
unit.2.0.port.-1.b.12.visible=1
unit.2.0.port.-1.b.13.alias=s_addr_
unit.2.0.port.-1.b.13.channellist=170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
unit.2.0.port.-1.b.13.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.b.13.name=DataPort
unit.2.0.port.-1.b.13.orderindex=-1
unit.2.0.port.-1.b.13.radix=Hex
unit.2.0.port.-1.b.13.signedOffset=0.0
unit.2.0.port.-1.b.13.signedPrecision=0
unit.2.0.port.-1.b.13.signedScaleFactor=1.0
unit.2.0.port.-1.b.13.tokencount=0
unit.2.0.port.-1.b.13.unsignedOffset=0.0
unit.2.0.port.-1.b.13.unsignedPrecision=0
unit.2.0.port.-1.b.13.unsignedScaleFactor=1.0
unit.2.0.port.-1.b.13.visible=1
unit.2.0.port.-1.b.14.alias=s_bw_
unit.2.0.port.-1.b.14.channellist=210 211 212 213
unit.2.0.port.-1.b.14.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.b.14.name=DataPort
unit.2.0.port.-1.b.14.orderindex=-1
unit.2.0.port.-1.b.14.radix=Hex
unit.2.0.port.-1.b.14.signedOffset=0.0
unit.2.0.port.-1.b.14.signedPrecision=0
unit.2.0.port.-1.b.14.signedScaleFactor=1.0
unit.2.0.port.-1.b.14.tokencount=0
unit.2.0.port.-1.b.14.unsignedOffset=0.0
unit.2.0.port.-1.b.14.unsignedPrecision=0
unit.2.0.port.-1.b.14.unsignedScaleFactor=1.0
unit.2.0.port.-1.b.14.visible=1
unit.2.0.port.-1.b.15.alias=s_data_
unit.2.0.port.-1.b.15.channellist=191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
unit.2.0.port.-1.b.15.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.b.15.name=DataPort
unit.2.0.port.-1.b.15.orderindex=-1
unit.2.0.port.-1.b.15.radix=Hex
unit.2.0.port.-1.b.15.signedOffset=0.0
unit.2.0.port.-1.b.15.signedPrecision=0
unit.2.0.port.-1.b.15.signedScaleFactor=1.0
unit.2.0.port.-1.b.15.tokencount=0
unit.2.0.port.-1.b.15.unsignedOffset=0.0
unit.2.0.port.-1.b.15.unsignedPrecision=0
unit.2.0.port.-1.b.15.unsignedScaleFactor=1.0
unit.2.0.port.-1.b.15.visible=1
unit.2.0.port.-1.b.16.alias=t
unit.2.0.port.-1.b.16.channellist=78 79 80
unit.2.0.port.-1.b.16.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.b.16.name=DataPort
unit.2.0.port.-1.b.16.orderindex=-1
unit.2.0.port.-1.b.16.radix=Hex
unit.2.0.port.-1.b.16.signedOffset=0.0
unit.2.0.port.-1.b.16.signedPrecision=0
unit.2.0.port.-1.b.16.signedScaleFactor=1.0
unit.2.0.port.-1.b.16.tokencount=0
unit.2.0.port.-1.b.16.unsignedOffset=0.0
unit.2.0.port.-1.b.16.unsignedPrecision=0
unit.2.0.port.-1.b.16.unsignedScaleFactor=1.0
unit.2.0.port.-1.b.16.visible=1
unit.2.0.port.-1.b.17.alias=x
unit.2.0.port.-1.b.17.channellist=138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
unit.2.0.port.-1.b.17.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.b.17.name=DataPort
unit.2.0.port.-1.b.17.orderindex=-1
unit.2.0.port.-1.b.17.radix=Hex
unit.2.0.port.-1.b.17.signedOffset=0.0
unit.2.0.port.-1.b.17.signedPrecision=0
unit.2.0.port.-1.b.17.signedScaleFactor=1.0
unit.2.0.port.-1.b.17.tokencount=0
unit.2.0.port.-1.b.17.unsignedOffset=0.0
unit.2.0.port.-1.b.17.unsignedPrecision=0
unit.2.0.port.-1.b.17.unsignedScaleFactor=1.0
unit.2.0.port.-1.b.17.visible=1
unit.2.0.port.-1.b.18.alias=y
unit.2.0.port.-1.b.18.channellist=122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
unit.2.0.port.-1.b.18.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.b.18.name=DataPort
unit.2.0.port.-1.b.18.orderindex=-1
unit.2.0.port.-1.b.18.radix=Hex
unit.2.0.port.-1.b.18.signedOffset=0.0
unit.2.0.port.-1.b.18.signedPrecision=0
unit.2.0.port.-1.b.18.signedScaleFactor=1.0
unit.2.0.port.-1.b.18.tokencount=0
unit.2.0.port.-1.b.18.unsignedOffset=0.0
unit.2.0.port.-1.b.18.unsignedPrecision=0
unit.2.0.port.-1.b.18.unsignedScaleFactor=1.0
unit.2.0.port.-1.b.18.visible=1
unit.2.0.port.-1.b.2.alias=cnt
unit.2.0.port.-1.b.2.channellist=216 217 218
unit.2.0.port.-1.b.2.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.b.2.name=DataPort
unit.2.0.port.-1.b.2.orderindex=-1
unit.2.0.port.-1.b.2.radix=Hex
unit.2.0.port.-1.b.2.signedOffset=0.0
unit.2.0.port.-1.b.2.signedPrecision=0
unit.2.0.port.-1.b.2.signedScaleFactor=1.0
unit.2.0.port.-1.b.2.tokencount=0
unit.2.0.port.-1.b.2.unsignedOffset=0.0
unit.2.0.port.-1.b.2.unsignedPrecision=0
unit.2.0.port.-1.b.2.unsignedScaleFactor=1.0
unit.2.0.port.-1.b.2.visible=1
unit.2.0.port.-1.b.3.alias=cx
unit.2.0.port.-1.b.3.channellist=240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
unit.2.0.port.-1.b.3.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.b.3.name=DataPort
unit.2.0.port.-1.b.3.orderindex=-1
unit.2.0.port.-1.b.3.radix=Hex
unit.2.0.port.-1.b.3.signedOffset=0.0
unit.2.0.port.-1.b.3.signedPrecision=0
unit.2.0.port.-1.b.3.signedScaleFactor=1.0
unit.2.0.port.-1.b.3.tokencount=0
unit.2.0.port.-1.b.3.unsignedOffset=0.0
unit.2.0.port.-1.b.3.unsignedPrecision=0
unit.2.0.port.-1.b.3.unsignedScaleFactor=1.0
unit.2.0.port.-1.b.3.visible=1
unit.2.0.port.-1.b.4.alias=dat_i
unit.2.0.port.-1.b.4.channellist=20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
unit.2.0.port.-1.b.4.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.b.4.name=DataPort
unit.2.0.port.-1.b.4.orderindex=-1
unit.2.0.port.-1.b.4.radix=Hex
unit.2.0.port.-1.b.4.signedOffset=0.0
unit.2.0.port.-1.b.4.signedPrecision=0
unit.2.0.port.-1.b.4.signedScaleFactor=1.0
unit.2.0.port.-1.b.4.tokencount=0
unit.2.0.port.-1.b.4.unsignedOffset=0.0
unit.2.0.port.-1.b.4.unsignedPrecision=0
unit.2.0.port.-1.b.4.unsignedScaleFactor=1.0
unit.2.0.port.-1.b.4.visible=1
unit.2.0.port.-1.b.5.alias=dat_o
unit.2.0.port.-1.b.5.channellist=36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
unit.2.0.port.-1.b.5.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.b.5.name=DataPort
unit.2.0.port.-1.b.5.orderindex=-1
unit.2.0.port.-1.b.5.radix=Hex
unit.2.0.port.-1.b.5.signedOffset=0.0
unit.2.0.port.-1.b.5.signedPrecision=0
unit.2.0.port.-1.b.5.signedScaleFactor=1.0
unit.2.0.port.-1.b.5.tokencount=0
unit.2.0.port.-1.b.5.unsignedOffset=0.0
unit.2.0.port.-1.b.5.unsignedPrecision=0
unit.2.0.port.-1.b.5.unsignedScaleFactor=1.0
unit.2.0.port.-1.b.5.visible=1
unit.2.0.port.-1.b.6.alias=di
unit.2.0.port.-1.b.6.channellist=224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
unit.2.0.port.-1.b.6.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.b.6.name=DataPort
unit.2.0.port.-1.b.6.orderindex=-1
unit.2.0.port.-1.b.6.radix=Hex
unit.2.0.port.-1.b.6.signedOffset=0.0
unit.2.0.port.-1.b.6.signedPrecision=0
unit.2.0.port.-1.b.6.signedScaleFactor=1.0
unit.2.0.port.-1.b.6.tokencount=0
unit.2.0.port.-1.b.6.unsignedOffset=0.0
unit.2.0.port.-1.b.6.unsignedPrecision=0
unit.2.0.port.-1.b.6.unsignedScaleFactor=1.0
unit.2.0.port.-1.b.6.visible=1
unit.2.0.port.-1.b.7.alias=func
unit.2.0.port.-1.b.7.channellist=81 82 83
unit.2.0.port.-1.b.7.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.b.7.name=DataPort
unit.2.0.port.-1.b.7.orderindex=-1
unit.2.0.port.-1.b.7.radix=Hex
unit.2.0.port.-1.b.7.signedOffset=0.0
unit.2.0.port.-1.b.7.signedPrecision=0
unit.2.0.port.-1.b.7.signedScaleFactor=1.0
unit.2.0.port.-1.b.7.tokencount=0
unit.2.0.port.-1.b.7.unsignedOffset=0.0
unit.2.0.port.-1.b.7.unsignedPrecision=0
unit.2.0.port.-1.b.7.unsignedScaleFactor=1.0
unit.2.0.port.-1.b.7.visible=1
unit.2.0.port.-1.b.8.alias=imm
unit.2.0.port.-1.b.8.channellist=116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
unit.2.0.port.-1.b.8.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.b.8.name=DataPort
unit.2.0.port.-1.b.8.orderindex=-1
unit.2.0.port.-1.b.8.radix=Hex
unit.2.0.port.-1.b.8.signedOffset=0.0
unit.2.0.port.-1.b.8.signedPrecision=0
unit.2.0.port.-1.b.8.signedScaleFactor=1.0
unit.2.0.port.-1.b.8.tokencount=0
unit.2.0.port.-1.b.8.unsignedOffset=0.0
unit.2.0.port.-1.b.8.unsignedPrecision=0
unit.2.0.port.-1.b.8.unsignedScaleFactor=1.0
unit.2.0.port.-1.b.8.visible=1
unit.2.0.port.-1.b.9.alias=io_reg
unit.2.0.port.-1.b.9.channellist=90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
unit.2.0.port.-1.b.9.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.b.9.name=DataPort
unit.2.0.port.-1.b.9.orderindex=-1
unit.2.0.port.-1.b.9.radix=Hex
unit.2.0.port.-1.b.9.signedOffset=0.0
unit.2.0.port.-1.b.9.signedPrecision=0
unit.2.0.port.-1.b.9.signedScaleFactor=1.0
unit.2.0.port.-1.b.9.tokencount=0
unit.2.0.port.-1.b.9.unsignedOffset=0.0
unit.2.0.port.-1.b.9.unsignedPrecision=0
unit.2.0.port.-1.b.9.unsignedScaleFactor=1.0
unit.2.0.port.-1.b.9.visible=1
unit.2.0.port.-1.buscount=19
unit.2.0.port.-1.channelcount=256
unit.2.0.port.-1.s.0.alias=
unit.2.0.port.-1.s.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.0.name=DataPort[0]
unit.2.0.port.-1.s.0.orderindex=-1
unit.2.0.port.-1.s.0.visible=1
unit.2.0.port.-1.s.1.alias=
unit.2.0.port.-1.s.1.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.1.name=DataPort[1]
unit.2.0.port.-1.s.1.orderindex=-1
unit.2.0.port.-1.s.1.visible=1
unit.2.0.port.-1.s.10.alias=
unit.2.0.port.-1.s.10.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.10.name=DataPort[10]
unit.2.0.port.-1.s.10.orderindex=-1
unit.2.0.port.-1.s.10.visible=1
unit.2.0.port.-1.s.100.alias=
unit.2.0.port.-1.s.100.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.100.name=DataPort[100]
unit.2.0.port.-1.s.100.orderindex=-1
unit.2.0.port.-1.s.100.visible=1
unit.2.0.port.-1.s.101.alias=
unit.2.0.port.-1.s.101.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.101.name=DataPort[101]
unit.2.0.port.-1.s.101.orderindex=-1
unit.2.0.port.-1.s.101.visible=1
unit.2.0.port.-1.s.102.alias=
unit.2.0.port.-1.s.102.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.102.name=DataPort[102]
unit.2.0.port.-1.s.102.orderindex=-1
unit.2.0.port.-1.s.102.visible=1
unit.2.0.port.-1.s.103.alias=
unit.2.0.port.-1.s.103.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.103.name=DataPort[103]
unit.2.0.port.-1.s.103.orderindex=-1
unit.2.0.port.-1.s.103.visible=1
unit.2.0.port.-1.s.104.alias=
unit.2.0.port.-1.s.104.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.104.name=DataPort[104]
unit.2.0.port.-1.s.104.orderindex=-1
unit.2.0.port.-1.s.104.visible=1
unit.2.0.port.-1.s.105.alias=
unit.2.0.port.-1.s.105.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.105.name=DataPort[105]
unit.2.0.port.-1.s.105.orderindex=-1
unit.2.0.port.-1.s.105.visible=1
unit.2.0.port.-1.s.106.alias=
unit.2.0.port.-1.s.106.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.106.name=DataPort[106]
unit.2.0.port.-1.s.106.orderindex=-1
unit.2.0.port.-1.s.106.visible=1
unit.2.0.port.-1.s.107.alias=
unit.2.0.port.-1.s.107.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.107.name=DataPort[107]
unit.2.0.port.-1.s.107.orderindex=-1
unit.2.0.port.-1.s.107.visible=1
unit.2.0.port.-1.s.108.alias=
unit.2.0.port.-1.s.108.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.108.name=DataPort[108]
unit.2.0.port.-1.s.108.orderindex=-1
unit.2.0.port.-1.s.108.visible=1
unit.2.0.port.-1.s.109.alias=
unit.2.0.port.-1.s.109.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.109.name=DataPort[109]
unit.2.0.port.-1.s.109.orderindex=-1
unit.2.0.port.-1.s.109.visible=1
unit.2.0.port.-1.s.11.alias=
unit.2.0.port.-1.s.11.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.11.name=DataPort[11]
unit.2.0.port.-1.s.11.orderindex=-1
unit.2.0.port.-1.s.11.visible=1
unit.2.0.port.-1.s.110.alias=
unit.2.0.port.-1.s.110.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.110.name=DataPort[110]
unit.2.0.port.-1.s.110.orderindex=-1
unit.2.0.port.-1.s.110.visible=1
unit.2.0.port.-1.s.111.alias=
unit.2.0.port.-1.s.111.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.111.name=DataPort[111]
unit.2.0.port.-1.s.111.orderindex=-1
unit.2.0.port.-1.s.111.visible=1
unit.2.0.port.-1.s.112.alias=
unit.2.0.port.-1.s.112.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.112.name=DataPort[112]
unit.2.0.port.-1.s.112.orderindex=-1
unit.2.0.port.-1.s.112.visible=1
unit.2.0.port.-1.s.113.alias=
unit.2.0.port.-1.s.113.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.113.name=DataPort[113]
unit.2.0.port.-1.s.113.orderindex=-1
unit.2.0.port.-1.s.113.visible=1
unit.2.0.port.-1.s.114.alias=
unit.2.0.port.-1.s.114.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.114.name=DataPort[114]
unit.2.0.port.-1.s.114.orderindex=-1
unit.2.0.port.-1.s.114.visible=1
unit.2.0.port.-1.s.115.alias=
unit.2.0.port.-1.s.115.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.115.name=DataPort[115]
unit.2.0.port.-1.s.115.orderindex=-1
unit.2.0.port.-1.s.115.visible=1
unit.2.0.port.-1.s.116.alias=
unit.2.0.port.-1.s.116.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.116.name=DataPort[116]
unit.2.0.port.-1.s.116.orderindex=-1
unit.2.0.port.-1.s.116.visible=1
unit.2.0.port.-1.s.117.alias=
unit.2.0.port.-1.s.117.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.117.name=DataPort[117]
unit.2.0.port.-1.s.117.orderindex=-1
unit.2.0.port.-1.s.117.visible=1
unit.2.0.port.-1.s.118.alias=
unit.2.0.port.-1.s.118.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.118.name=DataPort[118]
unit.2.0.port.-1.s.118.orderindex=-1
unit.2.0.port.-1.s.118.visible=1
unit.2.0.port.-1.s.119.alias=
unit.2.0.port.-1.s.119.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.119.name=DataPort[119]
unit.2.0.port.-1.s.119.orderindex=-1
unit.2.0.port.-1.s.119.visible=1
unit.2.0.port.-1.s.12.alias=
unit.2.0.port.-1.s.12.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.12.name=DataPort[12]
unit.2.0.port.-1.s.12.orderindex=-1
unit.2.0.port.-1.s.12.visible=1
unit.2.0.port.-1.s.120.alias=
unit.2.0.port.-1.s.120.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.120.name=DataPort[120]
unit.2.0.port.-1.s.120.orderindex=-1
unit.2.0.port.-1.s.120.visible=1
unit.2.0.port.-1.s.121.alias=
unit.2.0.port.-1.s.121.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.121.name=DataPort[121]
unit.2.0.port.-1.s.121.orderindex=-1
unit.2.0.port.-1.s.121.visible=1
unit.2.0.port.-1.s.122.alias=
unit.2.0.port.-1.s.122.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.122.name=DataPort[122]
unit.2.0.port.-1.s.122.orderindex=-1
unit.2.0.port.-1.s.122.visible=1
unit.2.0.port.-1.s.123.alias=
unit.2.0.port.-1.s.123.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.123.name=DataPort[123]
unit.2.0.port.-1.s.123.orderindex=-1
unit.2.0.port.-1.s.123.visible=1
unit.2.0.port.-1.s.124.alias=
unit.2.0.port.-1.s.124.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.124.name=DataPort[124]
unit.2.0.port.-1.s.124.orderindex=-1
unit.2.0.port.-1.s.124.visible=1
unit.2.0.port.-1.s.125.alias=
unit.2.0.port.-1.s.125.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.125.name=DataPort[125]
unit.2.0.port.-1.s.125.orderindex=-1
unit.2.0.port.-1.s.125.visible=1
unit.2.0.port.-1.s.126.alias=
unit.2.0.port.-1.s.126.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.126.name=DataPort[126]
unit.2.0.port.-1.s.126.orderindex=-1
unit.2.0.port.-1.s.126.visible=1
unit.2.0.port.-1.s.127.alias=
unit.2.0.port.-1.s.127.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.127.name=DataPort[127]
unit.2.0.port.-1.s.127.orderindex=-1
unit.2.0.port.-1.s.127.visible=1
unit.2.0.port.-1.s.128.alias=
unit.2.0.port.-1.s.128.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.128.name=DataPort[128]
unit.2.0.port.-1.s.128.orderindex=-1
unit.2.0.port.-1.s.128.visible=1
unit.2.0.port.-1.s.129.alias=
unit.2.0.port.-1.s.129.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.129.name=DataPort[129]
unit.2.0.port.-1.s.129.orderindex=-1
unit.2.0.port.-1.s.129.visible=1
unit.2.0.port.-1.s.13.alias=
unit.2.0.port.-1.s.13.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.13.name=DataPort[13]
unit.2.0.port.-1.s.13.orderindex=-1
unit.2.0.port.-1.s.13.visible=1
unit.2.0.port.-1.s.130.alias=
unit.2.0.port.-1.s.130.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.130.name=DataPort[130]
unit.2.0.port.-1.s.130.orderindex=-1
unit.2.0.port.-1.s.130.visible=1
unit.2.0.port.-1.s.131.alias=
unit.2.0.port.-1.s.131.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.131.name=DataPort[131]
unit.2.0.port.-1.s.131.orderindex=-1
unit.2.0.port.-1.s.131.visible=1
unit.2.0.port.-1.s.132.alias=
unit.2.0.port.-1.s.132.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.132.name=DataPort[132]
unit.2.0.port.-1.s.132.orderindex=-1
unit.2.0.port.-1.s.132.visible=1
unit.2.0.port.-1.s.133.alias=
unit.2.0.port.-1.s.133.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.133.name=DataPort[133]
unit.2.0.port.-1.s.133.orderindex=-1
unit.2.0.port.-1.s.133.visible=1
unit.2.0.port.-1.s.134.alias=
unit.2.0.port.-1.s.134.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.134.name=DataPort[134]
unit.2.0.port.-1.s.134.orderindex=-1
unit.2.0.port.-1.s.134.visible=1
unit.2.0.port.-1.s.135.alias=
unit.2.0.port.-1.s.135.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.135.name=DataPort[135]
unit.2.0.port.-1.s.135.orderindex=-1
unit.2.0.port.-1.s.135.visible=1
unit.2.0.port.-1.s.136.alias=
unit.2.0.port.-1.s.136.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.136.name=DataPort[136]
unit.2.0.port.-1.s.136.orderindex=-1
unit.2.0.port.-1.s.136.visible=1
unit.2.0.port.-1.s.137.alias=
unit.2.0.port.-1.s.137.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.137.name=DataPort[137]
unit.2.0.port.-1.s.137.orderindex=-1
unit.2.0.port.-1.s.137.visible=1
unit.2.0.port.-1.s.138.alias=
unit.2.0.port.-1.s.138.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.138.name=DataPort[138]
unit.2.0.port.-1.s.138.orderindex=-1
unit.2.0.port.-1.s.138.visible=1
unit.2.0.port.-1.s.139.alias=
unit.2.0.port.-1.s.139.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.139.name=DataPort[139]
unit.2.0.port.-1.s.139.orderindex=-1
unit.2.0.port.-1.s.139.visible=1
unit.2.0.port.-1.s.14.alias=
unit.2.0.port.-1.s.14.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.14.name=DataPort[14]
unit.2.0.port.-1.s.14.orderindex=-1
unit.2.0.port.-1.s.14.visible=1
unit.2.0.port.-1.s.140.alias=
unit.2.0.port.-1.s.140.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.140.name=DataPort[140]
unit.2.0.port.-1.s.140.orderindex=-1
unit.2.0.port.-1.s.140.visible=1
unit.2.0.port.-1.s.141.alias=
unit.2.0.port.-1.s.141.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.141.name=DataPort[141]
unit.2.0.port.-1.s.141.orderindex=-1
unit.2.0.port.-1.s.141.visible=1
unit.2.0.port.-1.s.142.alias=
unit.2.0.port.-1.s.142.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.142.name=DataPort[142]
unit.2.0.port.-1.s.142.orderindex=-1
unit.2.0.port.-1.s.142.visible=1
unit.2.0.port.-1.s.143.alias=
unit.2.0.port.-1.s.143.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.143.name=DataPort[143]
unit.2.0.port.-1.s.143.orderindex=-1
unit.2.0.port.-1.s.143.visible=1
unit.2.0.port.-1.s.144.alias=
unit.2.0.port.-1.s.144.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.144.name=DataPort[144]
unit.2.0.port.-1.s.144.orderindex=-1
unit.2.0.port.-1.s.144.visible=1
unit.2.0.port.-1.s.145.alias=
unit.2.0.port.-1.s.145.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.145.name=DataPort[145]
unit.2.0.port.-1.s.145.orderindex=-1
unit.2.0.port.-1.s.145.visible=1
unit.2.0.port.-1.s.146.alias=
unit.2.0.port.-1.s.146.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.146.name=DataPort[146]
unit.2.0.port.-1.s.146.orderindex=-1
unit.2.0.port.-1.s.146.visible=1
unit.2.0.port.-1.s.147.alias=
unit.2.0.port.-1.s.147.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.147.name=DataPort[147]
unit.2.0.port.-1.s.147.orderindex=-1
unit.2.0.port.-1.s.147.visible=1
unit.2.0.port.-1.s.148.alias=
unit.2.0.port.-1.s.148.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.148.name=DataPort[148]
unit.2.0.port.-1.s.148.orderindex=-1
unit.2.0.port.-1.s.148.visible=1
unit.2.0.port.-1.s.149.alias=
unit.2.0.port.-1.s.149.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.149.name=DataPort[149]
unit.2.0.port.-1.s.149.orderindex=-1
unit.2.0.port.-1.s.149.visible=1
unit.2.0.port.-1.s.15.alias=
unit.2.0.port.-1.s.15.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.15.name=DataPort[15]
unit.2.0.port.-1.s.15.orderindex=-1
unit.2.0.port.-1.s.15.visible=1
unit.2.0.port.-1.s.150.alias=
unit.2.0.port.-1.s.150.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.150.name=DataPort[150]
unit.2.0.port.-1.s.150.orderindex=-1
unit.2.0.port.-1.s.150.visible=1
unit.2.0.port.-1.s.151.alias=
unit.2.0.port.-1.s.151.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.151.name=DataPort[151]
unit.2.0.port.-1.s.151.orderindex=-1
unit.2.0.port.-1.s.151.visible=1
unit.2.0.port.-1.s.152.alias=
unit.2.0.port.-1.s.152.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.152.name=DataPort[152]
unit.2.0.port.-1.s.152.orderindex=-1
unit.2.0.port.-1.s.152.visible=1
unit.2.0.port.-1.s.153.alias=
unit.2.0.port.-1.s.153.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.153.name=DataPort[153]
unit.2.0.port.-1.s.153.orderindex=-1
unit.2.0.port.-1.s.153.visible=1
unit.2.0.port.-1.s.154.alias=
unit.2.0.port.-1.s.154.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.154.name=DataPort[154]
unit.2.0.port.-1.s.154.orderindex=-1
unit.2.0.port.-1.s.154.visible=1
unit.2.0.port.-1.s.155.alias=
unit.2.0.port.-1.s.155.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.155.name=DataPort[155]
unit.2.0.port.-1.s.155.orderindex=-1
unit.2.0.port.-1.s.155.visible=1
unit.2.0.port.-1.s.156.alias=
unit.2.0.port.-1.s.156.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.156.name=DataPort[156]
unit.2.0.port.-1.s.156.orderindex=-1
unit.2.0.port.-1.s.156.visible=1
unit.2.0.port.-1.s.157.alias=
unit.2.0.port.-1.s.157.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.157.name=DataPort[157]
unit.2.0.port.-1.s.157.orderindex=-1
unit.2.0.port.-1.s.157.visible=1
unit.2.0.port.-1.s.158.alias=
unit.2.0.port.-1.s.158.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.158.name=DataPort[158]
unit.2.0.port.-1.s.158.orderindex=-1
unit.2.0.port.-1.s.158.visible=1
unit.2.0.port.-1.s.159.alias=
unit.2.0.port.-1.s.159.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.159.name=DataPort[159]
unit.2.0.port.-1.s.159.orderindex=-1
unit.2.0.port.-1.s.159.visible=1
unit.2.0.port.-1.s.16.alias=
unit.2.0.port.-1.s.16.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.16.name=DataPort[16]
unit.2.0.port.-1.s.16.orderindex=-1
unit.2.0.port.-1.s.16.visible=1
unit.2.0.port.-1.s.160.alias=
unit.2.0.port.-1.s.160.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.160.name=DataPort[160]
unit.2.0.port.-1.s.160.orderindex=-1
unit.2.0.port.-1.s.160.visible=1
unit.2.0.port.-1.s.161.alias=
unit.2.0.port.-1.s.161.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.161.name=DataPort[161]
unit.2.0.port.-1.s.161.orderindex=-1
unit.2.0.port.-1.s.161.visible=1
unit.2.0.port.-1.s.162.alias=
unit.2.0.port.-1.s.162.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.162.name=DataPort[162]
unit.2.0.port.-1.s.162.orderindex=-1
unit.2.0.port.-1.s.162.visible=1
unit.2.0.port.-1.s.163.alias=
unit.2.0.port.-1.s.163.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.163.name=DataPort[163]
unit.2.0.port.-1.s.163.orderindex=-1
unit.2.0.port.-1.s.163.visible=1
unit.2.0.port.-1.s.164.alias=
unit.2.0.port.-1.s.164.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.164.name=DataPort[164]
unit.2.0.port.-1.s.164.orderindex=-1
unit.2.0.port.-1.s.164.visible=1
unit.2.0.port.-1.s.165.alias=
unit.2.0.port.-1.s.165.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.165.name=DataPort[165]
unit.2.0.port.-1.s.165.orderindex=-1
unit.2.0.port.-1.s.165.visible=1
unit.2.0.port.-1.s.166.alias=
unit.2.0.port.-1.s.166.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.166.name=DataPort[166]
unit.2.0.port.-1.s.166.orderindex=-1
unit.2.0.port.-1.s.166.visible=1
unit.2.0.port.-1.s.167.alias=
unit.2.0.port.-1.s.167.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.167.name=DataPort[167]
unit.2.0.port.-1.s.167.orderindex=-1
unit.2.0.port.-1.s.167.visible=1
unit.2.0.port.-1.s.168.alias=
unit.2.0.port.-1.s.168.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.168.name=DataPort[168]
unit.2.0.port.-1.s.168.orderindex=-1
unit.2.0.port.-1.s.168.visible=1
unit.2.0.port.-1.s.169.alias=
unit.2.0.port.-1.s.169.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.169.name=DataPort[169]
unit.2.0.port.-1.s.169.orderindex=-1
unit.2.0.port.-1.s.169.visible=1
unit.2.0.port.-1.s.17.alias=
unit.2.0.port.-1.s.17.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.17.name=DataPort[17]
unit.2.0.port.-1.s.17.orderindex=-1
unit.2.0.port.-1.s.17.visible=1
unit.2.0.port.-1.s.170.alias=
unit.2.0.port.-1.s.170.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.170.name=DataPort[170]
unit.2.0.port.-1.s.170.orderindex=-1
unit.2.0.port.-1.s.170.visible=1
unit.2.0.port.-1.s.171.alias=
unit.2.0.port.-1.s.171.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.171.name=DataPort[171]
unit.2.0.port.-1.s.171.orderindex=-1
unit.2.0.port.-1.s.171.visible=1
unit.2.0.port.-1.s.172.alias=
unit.2.0.port.-1.s.172.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.172.name=DataPort[172]
unit.2.0.port.-1.s.172.orderindex=-1
unit.2.0.port.-1.s.172.visible=1
unit.2.0.port.-1.s.173.alias=
unit.2.0.port.-1.s.173.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.173.name=DataPort[173]
unit.2.0.port.-1.s.173.orderindex=-1
unit.2.0.port.-1.s.173.visible=1
unit.2.0.port.-1.s.174.alias=
unit.2.0.port.-1.s.174.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.174.name=DataPort[174]
unit.2.0.port.-1.s.174.orderindex=-1
unit.2.0.port.-1.s.174.visible=1
unit.2.0.port.-1.s.175.alias=
unit.2.0.port.-1.s.175.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.175.name=DataPort[175]
unit.2.0.port.-1.s.175.orderindex=-1
unit.2.0.port.-1.s.175.visible=1
unit.2.0.port.-1.s.176.alias=
unit.2.0.port.-1.s.176.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.176.name=DataPort[176]
unit.2.0.port.-1.s.176.orderindex=-1
unit.2.0.port.-1.s.176.visible=1
unit.2.0.port.-1.s.177.alias=
unit.2.0.port.-1.s.177.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.177.name=DataPort[177]
unit.2.0.port.-1.s.177.orderindex=-1
unit.2.0.port.-1.s.177.visible=1
unit.2.0.port.-1.s.178.alias=
unit.2.0.port.-1.s.178.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.178.name=DataPort[178]
unit.2.0.port.-1.s.178.orderindex=-1
unit.2.0.port.-1.s.178.visible=1
unit.2.0.port.-1.s.179.alias=
unit.2.0.port.-1.s.179.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.179.name=DataPort[179]
unit.2.0.port.-1.s.179.orderindex=-1
unit.2.0.port.-1.s.179.visible=1
unit.2.0.port.-1.s.18.alias=
unit.2.0.port.-1.s.18.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.18.name=DataPort[18]
unit.2.0.port.-1.s.18.orderindex=-1
unit.2.0.port.-1.s.18.visible=1
unit.2.0.port.-1.s.180.alias=
unit.2.0.port.-1.s.180.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.180.name=DataPort[180]
unit.2.0.port.-1.s.180.orderindex=-1
unit.2.0.port.-1.s.180.visible=1
unit.2.0.port.-1.s.181.alias=
unit.2.0.port.-1.s.181.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.181.name=DataPort[181]
unit.2.0.port.-1.s.181.orderindex=-1
unit.2.0.port.-1.s.181.visible=1
unit.2.0.port.-1.s.182.alias=
unit.2.0.port.-1.s.182.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.182.name=DataPort[182]
unit.2.0.port.-1.s.182.orderindex=-1
unit.2.0.port.-1.s.182.visible=1
unit.2.0.port.-1.s.183.alias=
unit.2.0.port.-1.s.183.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.183.name=DataPort[183]
unit.2.0.port.-1.s.183.orderindex=-1
unit.2.0.port.-1.s.183.visible=1
unit.2.0.port.-1.s.184.alias=
unit.2.0.port.-1.s.184.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.184.name=DataPort[184]
unit.2.0.port.-1.s.184.orderindex=-1
unit.2.0.port.-1.s.184.visible=1
unit.2.0.port.-1.s.185.alias=
unit.2.0.port.-1.s.185.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.185.name=DataPort[185]
unit.2.0.port.-1.s.185.orderindex=-1
unit.2.0.port.-1.s.185.visible=1
unit.2.0.port.-1.s.186.alias=
unit.2.0.port.-1.s.186.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.186.name=DataPort[186]
unit.2.0.port.-1.s.186.orderindex=-1
unit.2.0.port.-1.s.186.visible=1
unit.2.0.port.-1.s.187.alias=
unit.2.0.port.-1.s.187.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.187.name=DataPort[187]
unit.2.0.port.-1.s.187.orderindex=-1
unit.2.0.port.-1.s.187.visible=1
unit.2.0.port.-1.s.188.alias=
unit.2.0.port.-1.s.188.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.188.name=DataPort[188]
unit.2.0.port.-1.s.188.orderindex=-1
unit.2.0.port.-1.s.188.visible=1
unit.2.0.port.-1.s.189.alias=
unit.2.0.port.-1.s.189.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.189.name=DataPort[189]
unit.2.0.port.-1.s.189.orderindex=-1
unit.2.0.port.-1.s.189.visible=1
unit.2.0.port.-1.s.19.alias=
unit.2.0.port.-1.s.19.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.19.name=DataPort[19]
unit.2.0.port.-1.s.19.orderindex=-1
unit.2.0.port.-1.s.19.visible=1
unit.2.0.port.-1.s.190.alias=
unit.2.0.port.-1.s.190.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.190.name=DataPort[190]
unit.2.0.port.-1.s.190.orderindex=-1
unit.2.0.port.-1.s.190.visible=1
unit.2.0.port.-1.s.191.alias=
unit.2.0.port.-1.s.191.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.191.name=DataPort[191]
unit.2.0.port.-1.s.191.orderindex=-1
unit.2.0.port.-1.s.191.visible=1
unit.2.0.port.-1.s.192.alias=
unit.2.0.port.-1.s.192.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.192.name=DataPort[192]
unit.2.0.port.-1.s.192.orderindex=-1
unit.2.0.port.-1.s.192.visible=1
unit.2.0.port.-1.s.193.alias=
unit.2.0.port.-1.s.193.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.193.name=DataPort[193]
unit.2.0.port.-1.s.193.orderindex=-1
unit.2.0.port.-1.s.193.visible=1
unit.2.0.port.-1.s.194.alias=
unit.2.0.port.-1.s.194.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.194.name=DataPort[194]
unit.2.0.port.-1.s.194.orderindex=-1
unit.2.0.port.-1.s.194.visible=1
unit.2.0.port.-1.s.195.alias=
unit.2.0.port.-1.s.195.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.195.name=DataPort[195]
unit.2.0.port.-1.s.195.orderindex=-1
unit.2.0.port.-1.s.195.visible=1
unit.2.0.port.-1.s.196.alias=
unit.2.0.port.-1.s.196.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.196.name=DataPort[196]
unit.2.0.port.-1.s.196.orderindex=-1
unit.2.0.port.-1.s.196.visible=1
unit.2.0.port.-1.s.197.alias=
unit.2.0.port.-1.s.197.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.197.name=DataPort[197]
unit.2.0.port.-1.s.197.orderindex=-1
unit.2.0.port.-1.s.197.visible=1
unit.2.0.port.-1.s.198.alias=
unit.2.0.port.-1.s.198.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.198.name=DataPort[198]
unit.2.0.port.-1.s.198.orderindex=-1
unit.2.0.port.-1.s.198.visible=1
unit.2.0.port.-1.s.199.alias=
unit.2.0.port.-1.s.199.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.199.name=DataPort[199]
unit.2.0.port.-1.s.199.orderindex=-1
unit.2.0.port.-1.s.199.visible=1
unit.2.0.port.-1.s.2.alias=
unit.2.0.port.-1.s.2.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.2.name=DataPort[2]
unit.2.0.port.-1.s.2.orderindex=-1
unit.2.0.port.-1.s.2.visible=1
unit.2.0.port.-1.s.20.alias=
unit.2.0.port.-1.s.20.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.20.name=DataPort[20]
unit.2.0.port.-1.s.20.orderindex=-1
unit.2.0.port.-1.s.20.visible=1
unit.2.0.port.-1.s.200.alias=
unit.2.0.port.-1.s.200.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.200.name=DataPort[200]
unit.2.0.port.-1.s.200.orderindex=-1
unit.2.0.port.-1.s.200.visible=1
unit.2.0.port.-1.s.201.alias=
unit.2.0.port.-1.s.201.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.201.name=DataPort[201]
unit.2.0.port.-1.s.201.orderindex=-1
unit.2.0.port.-1.s.201.visible=1
unit.2.0.port.-1.s.202.alias=
unit.2.0.port.-1.s.202.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.202.name=DataPort[202]
unit.2.0.port.-1.s.202.orderindex=-1
unit.2.0.port.-1.s.202.visible=1
unit.2.0.port.-1.s.203.alias=
unit.2.0.port.-1.s.203.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.203.name=DataPort[203]
unit.2.0.port.-1.s.203.orderindex=-1
unit.2.0.port.-1.s.203.visible=1
unit.2.0.port.-1.s.204.alias=
unit.2.0.port.-1.s.204.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.204.name=DataPort[204]
unit.2.0.port.-1.s.204.orderindex=-1
unit.2.0.port.-1.s.204.visible=1
unit.2.0.port.-1.s.205.alias=
unit.2.0.port.-1.s.205.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.205.name=DataPort[205]
unit.2.0.port.-1.s.205.orderindex=-1
unit.2.0.port.-1.s.205.visible=1
unit.2.0.port.-1.s.206.alias=
unit.2.0.port.-1.s.206.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.206.name=DataPort[206]
unit.2.0.port.-1.s.206.orderindex=-1
unit.2.0.port.-1.s.206.visible=1
unit.2.0.port.-1.s.207.alias=flash_ce2_
unit.2.0.port.-1.s.207.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.207.name=DataPort[207]
unit.2.0.port.-1.s.207.orderindex=-1
unit.2.0.port.-1.s.207.visible=1
unit.2.0.port.-1.s.208.alias=sram_adv_
unit.2.0.port.-1.s.208.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.208.name=DataPort[208]
unit.2.0.port.-1.s.208.orderindex=-1
unit.2.0.port.-1.s.208.visible=1
unit.2.0.port.-1.s.209.alias=sram_cen_
unit.2.0.port.-1.s.209.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.209.name=DataPort[209]
unit.2.0.port.-1.s.209.orderindex=-1
unit.2.0.port.-1.s.209.visible=1
unit.2.0.port.-1.s.21.alias=
unit.2.0.port.-1.s.21.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.21.name=DataPort[21]
unit.2.0.port.-1.s.21.orderindex=-1
unit.2.0.port.-1.s.21.visible=1
unit.2.0.port.-1.s.210.alias=
unit.2.0.port.-1.s.210.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.210.name=DataPort[210]
unit.2.0.port.-1.s.210.orderindex=-1
unit.2.0.port.-1.s.210.visible=1
unit.2.0.port.-1.s.211.alias=
unit.2.0.port.-1.s.211.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.211.name=DataPort[211]
unit.2.0.port.-1.s.211.orderindex=-1
unit.2.0.port.-1.s.211.visible=1
unit.2.0.port.-1.s.212.alias=
unit.2.0.port.-1.s.212.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.212.name=DataPort[212]
unit.2.0.port.-1.s.212.orderindex=-1
unit.2.0.port.-1.s.212.visible=1
unit.2.0.port.-1.s.213.alias=
unit.2.0.port.-1.s.213.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.213.name=DataPort[213]
unit.2.0.port.-1.s.213.orderindex=-1
unit.2.0.port.-1.s.213.visible=1
unit.2.0.port.-1.s.214.alias=sf_we_
unit.2.0.port.-1.s.214.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.214.name=DataPort[214]
unit.2.0.port.-1.s.214.orderindex=-1
unit.2.0.port.-1.s.214.visible=1
unit.2.0.port.-1.s.215.alias=sf_oe_
unit.2.0.port.-1.s.215.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.215.name=DataPort[215]
unit.2.0.port.-1.s.215.orderindex=-1
unit.2.0.port.-1.s.215.visible=1
unit.2.0.port.-1.s.216.alias=
unit.2.0.port.-1.s.216.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.216.name=DataPort[216]
unit.2.0.port.-1.s.216.orderindex=-1
unit.2.0.port.-1.s.216.visible=1
unit.2.0.port.-1.s.217.alias=
unit.2.0.port.-1.s.217.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.217.name=DataPort[217]
unit.2.0.port.-1.s.217.orderindex=-1
unit.2.0.port.-1.s.217.visible=1
unit.2.0.port.-1.s.218.alias=
unit.2.0.port.-1.s.218.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.218.name=DataPort[218]
unit.2.0.port.-1.s.218.orderindex=-1
unit.2.0.port.-1.s.218.visible=1
unit.2.0.port.-1.s.219.alias=op
unit.2.0.port.-1.s.219.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.219.name=DataPort[219]
unit.2.0.port.-1.s.219.orderindex=-1
unit.2.0.port.-1.s.219.visible=1
unit.2.0.port.-1.s.22.alias=
unit.2.0.port.-1.s.22.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.22.name=DataPort[22]
unit.2.0.port.-1.s.22.orderindex=-1
unit.2.0.port.-1.s.22.visible=1
unit.2.0.port.-1.s.220.alias=zbt_stb
unit.2.0.port.-1.s.220.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.220.name=DataPort[220]
unit.2.0.port.-1.s.220.orderindex=-1
unit.2.0.port.-1.s.220.visible=1
unit.2.0.port.-1.s.221.alias=flash_stb
unit.2.0.port.-1.s.221.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.221.name=DataPort[221]
unit.2.0.port.-1.s.221.orderindex=-1
unit.2.0.port.-1.s.221.visible=1
unit.2.0.port.-1.s.222.alias=flash_arena
unit.2.0.port.-1.s.222.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.222.name=DataPort[222]
unit.2.0.port.-1.s.222.orderindex=-1
unit.2.0.port.-1.s.222.visible=1
unit.2.0.port.-1.s.223.alias=vdu_arena
unit.2.0.port.-1.s.223.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.223.name=DataPort[223]
unit.2.0.port.-1.s.223.orderindex=-1
unit.2.0.port.-1.s.223.visible=1
unit.2.0.port.-1.s.224.alias=
unit.2.0.port.-1.s.224.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.224.name=DataPort[224]
unit.2.0.port.-1.s.224.orderindex=-1
unit.2.0.port.-1.s.224.visible=1
unit.2.0.port.-1.s.225.alias=
unit.2.0.port.-1.s.225.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.225.name=DataPort[225]
unit.2.0.port.-1.s.225.orderindex=-1
unit.2.0.port.-1.s.225.visible=1
unit.2.0.port.-1.s.226.alias=
unit.2.0.port.-1.s.226.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.226.name=DataPort[226]
unit.2.0.port.-1.s.226.orderindex=-1
unit.2.0.port.-1.s.226.visible=1
unit.2.0.port.-1.s.227.alias=
unit.2.0.port.-1.s.227.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.227.name=DataPort[227]
unit.2.0.port.-1.s.227.orderindex=-1
unit.2.0.port.-1.s.227.visible=1
unit.2.0.port.-1.s.228.alias=
unit.2.0.port.-1.s.228.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.228.name=DataPort[228]
unit.2.0.port.-1.s.228.orderindex=-1
unit.2.0.port.-1.s.228.visible=1
unit.2.0.port.-1.s.229.alias=
unit.2.0.port.-1.s.229.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.229.name=DataPort[229]
unit.2.0.port.-1.s.229.orderindex=-1
unit.2.0.port.-1.s.229.visible=1
unit.2.0.port.-1.s.23.alias=
unit.2.0.port.-1.s.23.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.23.name=DataPort[23]
unit.2.0.port.-1.s.23.orderindex=-1
unit.2.0.port.-1.s.23.visible=1
unit.2.0.port.-1.s.230.alias=
unit.2.0.port.-1.s.230.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.230.name=DataPort[230]
unit.2.0.port.-1.s.230.orderindex=-1
unit.2.0.port.-1.s.230.visible=1
unit.2.0.port.-1.s.231.alias=
unit.2.0.port.-1.s.231.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.231.name=DataPort[231]
unit.2.0.port.-1.s.231.orderindex=-1
unit.2.0.port.-1.s.231.visible=1
unit.2.0.port.-1.s.232.alias=
unit.2.0.port.-1.s.232.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.232.name=DataPort[232]
unit.2.0.port.-1.s.232.orderindex=-1
unit.2.0.port.-1.s.232.visible=1
unit.2.0.port.-1.s.233.alias=
unit.2.0.port.-1.s.233.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.233.name=DataPort[233]
unit.2.0.port.-1.s.233.orderindex=-1
unit.2.0.port.-1.s.233.visible=1
unit.2.0.port.-1.s.234.alias=
unit.2.0.port.-1.s.234.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.234.name=DataPort[234]
unit.2.0.port.-1.s.234.orderindex=-1
unit.2.0.port.-1.s.234.visible=1
unit.2.0.port.-1.s.235.alias=
unit.2.0.port.-1.s.235.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.235.name=DataPort[235]
unit.2.0.port.-1.s.235.orderindex=-1
unit.2.0.port.-1.s.235.visible=1
unit.2.0.port.-1.s.236.alias=
unit.2.0.port.-1.s.236.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.236.name=DataPort[236]
unit.2.0.port.-1.s.236.orderindex=-1
unit.2.0.port.-1.s.236.visible=1
unit.2.0.port.-1.s.237.alias=
unit.2.0.port.-1.s.237.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.237.name=DataPort[237]
unit.2.0.port.-1.s.237.orderindex=-1
unit.2.0.port.-1.s.237.visible=1
unit.2.0.port.-1.s.238.alias=
unit.2.0.port.-1.s.238.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.238.name=DataPort[238]
unit.2.0.port.-1.s.238.orderindex=-1
unit.2.0.port.-1.s.238.visible=1
unit.2.0.port.-1.s.239.alias=
unit.2.0.port.-1.s.239.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.239.name=DataPort[239]
unit.2.0.port.-1.s.239.orderindex=-1
unit.2.0.port.-1.s.239.visible=1
unit.2.0.port.-1.s.24.alias=
unit.2.0.port.-1.s.24.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.24.name=DataPort[24]
unit.2.0.port.-1.s.24.orderindex=-1
unit.2.0.port.-1.s.24.visible=1
unit.2.0.port.-1.s.240.alias=
unit.2.0.port.-1.s.240.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.240.name=DataPort[240]
unit.2.0.port.-1.s.240.orderindex=-1
unit.2.0.port.-1.s.240.visible=1
unit.2.0.port.-1.s.241.alias=
unit.2.0.port.-1.s.241.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.241.name=DataPort[241]
unit.2.0.port.-1.s.241.orderindex=-1
unit.2.0.port.-1.s.241.visible=1
unit.2.0.port.-1.s.242.alias=
unit.2.0.port.-1.s.242.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.242.name=DataPort[242]
unit.2.0.port.-1.s.242.orderindex=-1
unit.2.0.port.-1.s.242.visible=1
unit.2.0.port.-1.s.243.alias=
unit.2.0.port.-1.s.243.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.243.name=DataPort[243]
unit.2.0.port.-1.s.243.orderindex=-1
unit.2.0.port.-1.s.243.visible=1
unit.2.0.port.-1.s.244.alias=
unit.2.0.port.-1.s.244.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.244.name=DataPort[244]
unit.2.0.port.-1.s.244.orderindex=-1
unit.2.0.port.-1.s.244.visible=1
unit.2.0.port.-1.s.245.alias=
unit.2.0.port.-1.s.245.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.245.name=DataPort[245]
unit.2.0.port.-1.s.245.orderindex=-1
unit.2.0.port.-1.s.245.visible=1
unit.2.0.port.-1.s.246.alias=
unit.2.0.port.-1.s.246.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.246.name=DataPort[246]
unit.2.0.port.-1.s.246.orderindex=-1
unit.2.0.port.-1.s.246.visible=1
unit.2.0.port.-1.s.247.alias=
unit.2.0.port.-1.s.247.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.247.name=DataPort[247]
unit.2.0.port.-1.s.247.orderindex=-1
unit.2.0.port.-1.s.247.visible=1
unit.2.0.port.-1.s.248.alias=
unit.2.0.port.-1.s.248.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.248.name=DataPort[248]
unit.2.0.port.-1.s.248.orderindex=-1
unit.2.0.port.-1.s.248.visible=1
unit.2.0.port.-1.s.249.alias=
unit.2.0.port.-1.s.249.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.249.name=DataPort[249]
unit.2.0.port.-1.s.249.orderindex=-1
unit.2.0.port.-1.s.249.visible=1
unit.2.0.port.-1.s.25.alias=
unit.2.0.port.-1.s.25.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.25.name=DataPort[25]
unit.2.0.port.-1.s.25.orderindex=-1
unit.2.0.port.-1.s.25.visible=1
unit.2.0.port.-1.s.250.alias=
unit.2.0.port.-1.s.250.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.250.name=DataPort[250]
unit.2.0.port.-1.s.250.orderindex=-1
unit.2.0.port.-1.s.250.visible=1
unit.2.0.port.-1.s.251.alias=
unit.2.0.port.-1.s.251.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.251.name=DataPort[251]
unit.2.0.port.-1.s.251.orderindex=-1
unit.2.0.port.-1.s.251.visible=1
unit.2.0.port.-1.s.252.alias=
unit.2.0.port.-1.s.252.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.252.name=DataPort[252]
unit.2.0.port.-1.s.252.orderindex=-1
unit.2.0.port.-1.s.252.visible=1
unit.2.0.port.-1.s.253.alias=
unit.2.0.port.-1.s.253.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.253.name=DataPort[253]
unit.2.0.port.-1.s.253.orderindex=-1
unit.2.0.port.-1.s.253.visible=1
unit.2.0.port.-1.s.254.alias=
unit.2.0.port.-1.s.254.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.254.name=DataPort[254]
unit.2.0.port.-1.s.254.orderindex=-1
unit.2.0.port.-1.s.254.visible=1
unit.2.0.port.-1.s.255.alias=
unit.2.0.port.-1.s.255.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.255.name=DataPort[255]
unit.2.0.port.-1.s.255.orderindex=-1
unit.2.0.port.-1.s.255.visible=1
unit.2.0.port.-1.s.26.alias=
unit.2.0.port.-1.s.26.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.26.name=DataPort[26]
unit.2.0.port.-1.s.26.orderindex=-1
unit.2.0.port.-1.s.26.visible=1
unit.2.0.port.-1.s.27.alias=
unit.2.0.port.-1.s.27.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.27.name=DataPort[27]
unit.2.0.port.-1.s.27.orderindex=-1
unit.2.0.port.-1.s.27.visible=1
unit.2.0.port.-1.s.28.alias=
unit.2.0.port.-1.s.28.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.28.name=DataPort[28]
unit.2.0.port.-1.s.28.orderindex=-1
unit.2.0.port.-1.s.28.visible=1
unit.2.0.port.-1.s.29.alias=
unit.2.0.port.-1.s.29.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.29.name=DataPort[29]
unit.2.0.port.-1.s.29.orderindex=-1
unit.2.0.port.-1.s.29.visible=1
unit.2.0.port.-1.s.3.alias=
unit.2.0.port.-1.s.3.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.3.name=DataPort[3]
unit.2.0.port.-1.s.3.orderindex=-1
unit.2.0.port.-1.s.3.visible=1
unit.2.0.port.-1.s.30.alias=
unit.2.0.port.-1.s.30.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.30.name=DataPort[30]
unit.2.0.port.-1.s.30.orderindex=-1
unit.2.0.port.-1.s.30.visible=1
unit.2.0.port.-1.s.31.alias=
unit.2.0.port.-1.s.31.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.31.name=DataPort[31]
unit.2.0.port.-1.s.31.orderindex=-1
unit.2.0.port.-1.s.31.visible=1
unit.2.0.port.-1.s.32.alias=
unit.2.0.port.-1.s.32.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.32.name=DataPort[32]
unit.2.0.port.-1.s.32.orderindex=-1
unit.2.0.port.-1.s.32.visible=1
unit.2.0.port.-1.s.33.alias=
unit.2.0.port.-1.s.33.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.33.name=DataPort[33]
unit.2.0.port.-1.s.33.orderindex=-1
unit.2.0.port.-1.s.33.visible=1
unit.2.0.port.-1.s.34.alias=
unit.2.0.port.-1.s.34.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.34.name=DataPort[34]
unit.2.0.port.-1.s.34.orderindex=-1
unit.2.0.port.-1.s.34.visible=1
unit.2.0.port.-1.s.35.alias=
unit.2.0.port.-1.s.35.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.35.name=DataPort[35]
unit.2.0.port.-1.s.35.orderindex=-1
unit.2.0.port.-1.s.35.visible=1
unit.2.0.port.-1.s.36.alias=
unit.2.0.port.-1.s.36.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.36.name=DataPort[36]
unit.2.0.port.-1.s.36.orderindex=-1
unit.2.0.port.-1.s.36.visible=1
unit.2.0.port.-1.s.37.alias=
unit.2.0.port.-1.s.37.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.37.name=DataPort[37]
unit.2.0.port.-1.s.37.orderindex=-1
unit.2.0.port.-1.s.37.visible=1
unit.2.0.port.-1.s.38.alias=
unit.2.0.port.-1.s.38.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.38.name=DataPort[38]
unit.2.0.port.-1.s.38.orderindex=-1
unit.2.0.port.-1.s.38.visible=1
unit.2.0.port.-1.s.39.alias=
unit.2.0.port.-1.s.39.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.39.name=DataPort[39]
unit.2.0.port.-1.s.39.orderindex=-1
unit.2.0.port.-1.s.39.visible=1
unit.2.0.port.-1.s.4.alias=
unit.2.0.port.-1.s.4.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.4.name=DataPort[4]
unit.2.0.port.-1.s.4.orderindex=-1
unit.2.0.port.-1.s.4.visible=1
unit.2.0.port.-1.s.40.alias=
unit.2.0.port.-1.s.40.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.40.name=DataPort[40]
unit.2.0.port.-1.s.40.orderindex=-1
unit.2.0.port.-1.s.40.visible=1
unit.2.0.port.-1.s.41.alias=
unit.2.0.port.-1.s.41.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.41.name=DataPort[41]
unit.2.0.port.-1.s.41.orderindex=-1
unit.2.0.port.-1.s.41.visible=1
unit.2.0.port.-1.s.42.alias=
unit.2.0.port.-1.s.42.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.42.name=DataPort[42]
unit.2.0.port.-1.s.42.orderindex=-1
unit.2.0.port.-1.s.42.visible=1
unit.2.0.port.-1.s.43.alias=
unit.2.0.port.-1.s.43.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.43.name=DataPort[43]
unit.2.0.port.-1.s.43.orderindex=-1
unit.2.0.port.-1.s.43.visible=1
unit.2.0.port.-1.s.44.alias=
unit.2.0.port.-1.s.44.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.44.name=DataPort[44]
unit.2.0.port.-1.s.44.orderindex=-1
unit.2.0.port.-1.s.44.visible=1
unit.2.0.port.-1.s.45.alias=
unit.2.0.port.-1.s.45.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.45.name=DataPort[45]
unit.2.0.port.-1.s.45.orderindex=-1
unit.2.0.port.-1.s.45.visible=1
unit.2.0.port.-1.s.46.alias=
unit.2.0.port.-1.s.46.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.46.name=DataPort[46]
unit.2.0.port.-1.s.46.orderindex=-1
unit.2.0.port.-1.s.46.visible=1
unit.2.0.port.-1.s.47.alias=
unit.2.0.port.-1.s.47.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.47.name=DataPort[47]
unit.2.0.port.-1.s.47.orderindex=-1
unit.2.0.port.-1.s.47.visible=1
unit.2.0.port.-1.s.48.alias=
unit.2.0.port.-1.s.48.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.48.name=DataPort[48]
unit.2.0.port.-1.s.48.orderindex=-1
unit.2.0.port.-1.s.48.visible=1
unit.2.0.port.-1.s.49.alias=
unit.2.0.port.-1.s.49.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.49.name=DataPort[49]
unit.2.0.port.-1.s.49.orderindex=-1
unit.2.0.port.-1.s.49.visible=1
unit.2.0.port.-1.s.5.alias=
unit.2.0.port.-1.s.5.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.5.name=DataPort[5]
unit.2.0.port.-1.s.5.orderindex=-1
unit.2.0.port.-1.s.5.visible=1
unit.2.0.port.-1.s.50.alias=
unit.2.0.port.-1.s.50.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.50.name=DataPort[50]
unit.2.0.port.-1.s.50.orderindex=-1
unit.2.0.port.-1.s.50.visible=1
unit.2.0.port.-1.s.51.alias=
unit.2.0.port.-1.s.51.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.51.name=DataPort[51]
unit.2.0.port.-1.s.51.orderindex=-1
unit.2.0.port.-1.s.51.visible=1
unit.2.0.port.-1.s.52.alias=
unit.2.0.port.-1.s.52.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.52.name=DataPort[52]
unit.2.0.port.-1.s.52.orderindex=-1
unit.2.0.port.-1.s.52.visible=1
unit.2.0.port.-1.s.53.alias=
unit.2.0.port.-1.s.53.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.53.name=DataPort[53]
unit.2.0.port.-1.s.53.orderindex=-1
unit.2.0.port.-1.s.53.visible=1
unit.2.0.port.-1.s.54.alias=
unit.2.0.port.-1.s.54.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.54.name=DataPort[54]
unit.2.0.port.-1.s.54.orderindex=-1
unit.2.0.port.-1.s.54.visible=1
unit.2.0.port.-1.s.55.alias=
unit.2.0.port.-1.s.55.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.55.name=DataPort[55]
unit.2.0.port.-1.s.55.orderindex=-1
unit.2.0.port.-1.s.55.visible=1
unit.2.0.port.-1.s.56.alias=
unit.2.0.port.-1.s.56.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.56.name=DataPort[56]
unit.2.0.port.-1.s.56.orderindex=-1
unit.2.0.port.-1.s.56.visible=1
unit.2.0.port.-1.s.57.alias=
unit.2.0.port.-1.s.57.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.57.name=DataPort[57]
unit.2.0.port.-1.s.57.orderindex=-1
unit.2.0.port.-1.s.57.visible=1
unit.2.0.port.-1.s.58.alias=
unit.2.0.port.-1.s.58.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.58.name=DataPort[58]
unit.2.0.port.-1.s.58.orderindex=-1
unit.2.0.port.-1.s.58.visible=1
unit.2.0.port.-1.s.59.alias=
unit.2.0.port.-1.s.59.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.59.name=DataPort[59]
unit.2.0.port.-1.s.59.orderindex=-1
unit.2.0.port.-1.s.59.visible=1
unit.2.0.port.-1.s.6.alias=
unit.2.0.port.-1.s.6.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.6.name=DataPort[6]
unit.2.0.port.-1.s.6.orderindex=-1
unit.2.0.port.-1.s.6.visible=1
unit.2.0.port.-1.s.60.alias=
unit.2.0.port.-1.s.60.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.60.name=DataPort[60]
unit.2.0.port.-1.s.60.orderindex=-1
unit.2.0.port.-1.s.60.visible=1
unit.2.0.port.-1.s.61.alias=
unit.2.0.port.-1.s.61.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.61.name=DataPort[61]
unit.2.0.port.-1.s.61.orderindex=-1
unit.2.0.port.-1.s.61.visible=1
unit.2.0.port.-1.s.62.alias=
unit.2.0.port.-1.s.62.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.62.name=DataPort[62]
unit.2.0.port.-1.s.62.orderindex=-1
unit.2.0.port.-1.s.62.visible=1
unit.2.0.port.-1.s.63.alias=
unit.2.0.port.-1.s.63.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.63.name=DataPort[63]
unit.2.0.port.-1.s.63.orderindex=-1
unit.2.0.port.-1.s.63.visible=1
unit.2.0.port.-1.s.64.alias=
unit.2.0.port.-1.s.64.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.64.name=DataPort[64]
unit.2.0.port.-1.s.64.orderindex=-1
unit.2.0.port.-1.s.64.visible=1
unit.2.0.port.-1.s.65.alias=
unit.2.0.port.-1.s.65.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.65.name=DataPort[65]
unit.2.0.port.-1.s.65.orderindex=-1
unit.2.0.port.-1.s.65.visible=1
unit.2.0.port.-1.s.66.alias=
unit.2.0.port.-1.s.66.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.66.name=DataPort[66]
unit.2.0.port.-1.s.66.orderindex=-1
unit.2.0.port.-1.s.66.visible=1
unit.2.0.port.-1.s.67.alias=
unit.2.0.port.-1.s.67.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.67.name=DataPort[67]
unit.2.0.port.-1.s.67.orderindex=-1
unit.2.0.port.-1.s.67.visible=1
unit.2.0.port.-1.s.68.alias=
unit.2.0.port.-1.s.68.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.68.name=DataPort[68]
unit.2.0.port.-1.s.68.orderindex=-1
unit.2.0.port.-1.s.68.visible=1
unit.2.0.port.-1.s.69.alias=
unit.2.0.port.-1.s.69.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.69.name=DataPort[69]
unit.2.0.port.-1.s.69.orderindex=-1
unit.2.0.port.-1.s.69.visible=1
unit.2.0.port.-1.s.7.alias=
unit.2.0.port.-1.s.7.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.7.name=DataPort[7]
unit.2.0.port.-1.s.7.orderindex=-1
unit.2.0.port.-1.s.7.visible=1
unit.2.0.port.-1.s.70.alias=
unit.2.0.port.-1.s.70.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.70.name=DataPort[70]
unit.2.0.port.-1.s.70.orderindex=-1
unit.2.0.port.-1.s.70.visible=1
unit.2.0.port.-1.s.71.alias=
unit.2.0.port.-1.s.71.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.71.name=DataPort[71]
unit.2.0.port.-1.s.71.orderindex=-1
unit.2.0.port.-1.s.71.visible=1
unit.2.0.port.-1.s.72.alias=ack
unit.2.0.port.-1.s.72.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.72.name=DataPort[72]
unit.2.0.port.-1.s.72.orderindex=-1
unit.2.0.port.-1.s.72.visible=1
unit.2.0.port.-1.s.73.alias=stb
unit.2.0.port.-1.s.73.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.73.name=DataPort[73]
unit.2.0.port.-1.s.73.orderindex=-1
unit.2.0.port.-1.s.73.visible=1
unit.2.0.port.-1.s.74.alias=cyc
unit.2.0.port.-1.s.74.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.74.name=DataPort[74]
unit.2.0.port.-1.s.74.orderindex=-1
unit.2.0.port.-1.s.74.visible=1
unit.2.0.port.-1.s.75.alias=tga
unit.2.0.port.-1.s.75.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.75.name=DataPort[75]
unit.2.0.port.-1.s.75.orderindex=-1
unit.2.0.port.-1.s.75.visible=1
unit.2.0.port.-1.s.76.alias=we
unit.2.0.port.-1.s.76.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.76.name=DataPort[76]
unit.2.0.port.-1.s.76.orderindex=-1
unit.2.0.port.-1.s.76.visible=1
unit.2.0.port.-1.s.77.alias=clk
unit.2.0.port.-1.s.77.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.77.name=DataPort[77]
unit.2.0.port.-1.s.77.orderindex=-1
unit.2.0.port.-1.s.77.visible=1
unit.2.0.port.-1.s.78.alias=
unit.2.0.port.-1.s.78.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.78.name=DataPort[78]
unit.2.0.port.-1.s.78.orderindex=-1
unit.2.0.port.-1.s.78.visible=1
unit.2.0.port.-1.s.79.alias=
unit.2.0.port.-1.s.79.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.79.name=DataPort[79]
unit.2.0.port.-1.s.79.orderindex=-1
unit.2.0.port.-1.s.79.visible=1
unit.2.0.port.-1.s.8.alias=
unit.2.0.port.-1.s.8.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.8.name=DataPort[8]
unit.2.0.port.-1.s.8.orderindex=-1
unit.2.0.port.-1.s.8.visible=1
unit.2.0.port.-1.s.80.alias=
unit.2.0.port.-1.s.80.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.80.name=DataPort[80]
unit.2.0.port.-1.s.80.orderindex=-1
unit.2.0.port.-1.s.80.visible=1
unit.2.0.port.-1.s.81.alias=
unit.2.0.port.-1.s.81.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.81.name=DataPort[81]
unit.2.0.port.-1.s.81.orderindex=-1
unit.2.0.port.-1.s.81.visible=1
unit.2.0.port.-1.s.82.alias=
unit.2.0.port.-1.s.82.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.82.name=DataPort[82]
unit.2.0.port.-1.s.82.orderindex=-1
unit.2.0.port.-1.s.82.visible=1
unit.2.0.port.-1.s.83.alias=
unit.2.0.port.-1.s.83.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.83.name=DataPort[83]
unit.2.0.port.-1.s.83.orderindex=-1
unit.2.0.port.-1.s.83.visible=1
unit.2.0.port.-1.s.84.alias=
unit.2.0.port.-1.s.84.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.84.name=DataPort[84]
unit.2.0.port.-1.s.84.orderindex=-1
unit.2.0.port.-1.s.84.visible=1
unit.2.0.port.-1.s.85.alias=
unit.2.0.port.-1.s.85.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.85.name=DataPort[85]
unit.2.0.port.-1.s.85.orderindex=-1
unit.2.0.port.-1.s.85.visible=1
unit.2.0.port.-1.s.86.alias=
unit.2.0.port.-1.s.86.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.86.name=DataPort[86]
unit.2.0.port.-1.s.86.orderindex=-1
unit.2.0.port.-1.s.86.visible=1
unit.2.0.port.-1.s.87.alias=
unit.2.0.port.-1.s.87.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.87.name=DataPort[87]
unit.2.0.port.-1.s.87.orderindex=-1
unit.2.0.port.-1.s.87.visible=1
unit.2.0.port.-1.s.88.alias=
unit.2.0.port.-1.s.88.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.88.name=DataPort[88]
unit.2.0.port.-1.s.88.orderindex=-1
unit.2.0.port.-1.s.88.visible=1
unit.2.0.port.-1.s.89.alias=
unit.2.0.port.-1.s.89.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.89.name=DataPort[89]
unit.2.0.port.-1.s.89.orderindex=-1
unit.2.0.port.-1.s.89.visible=1
unit.2.0.port.-1.s.9.alias=
unit.2.0.port.-1.s.9.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.9.name=DataPort[9]
unit.2.0.port.-1.s.9.orderindex=-1
unit.2.0.port.-1.s.9.visible=1
unit.2.0.port.-1.s.90.alias=
unit.2.0.port.-1.s.90.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.90.name=DataPort[90]
unit.2.0.port.-1.s.90.orderindex=-1
unit.2.0.port.-1.s.90.visible=1
unit.2.0.port.-1.s.91.alias=
unit.2.0.port.-1.s.91.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.91.name=DataPort[91]
unit.2.0.port.-1.s.91.orderindex=-1
unit.2.0.port.-1.s.91.visible=1
unit.2.0.port.-1.s.92.alias=
unit.2.0.port.-1.s.92.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.92.name=DataPort[92]
unit.2.0.port.-1.s.92.orderindex=-1
unit.2.0.port.-1.s.92.visible=1
unit.2.0.port.-1.s.93.alias=
unit.2.0.port.-1.s.93.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.93.name=DataPort[93]
unit.2.0.port.-1.s.93.orderindex=-1
unit.2.0.port.-1.s.93.visible=1
unit.2.0.port.-1.s.94.alias=
unit.2.0.port.-1.s.94.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.94.name=DataPort[94]
unit.2.0.port.-1.s.94.orderindex=-1
unit.2.0.port.-1.s.94.visible=1
unit.2.0.port.-1.s.95.alias=
unit.2.0.port.-1.s.95.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.95.name=DataPort[95]
unit.2.0.port.-1.s.95.orderindex=-1
unit.2.0.port.-1.s.95.visible=1
unit.2.0.port.-1.s.96.alias=
unit.2.0.port.-1.s.96.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.96.name=DataPort[96]
unit.2.0.port.-1.s.96.orderindex=-1
unit.2.0.port.-1.s.96.visible=1
unit.2.0.port.-1.s.97.alias=
unit.2.0.port.-1.s.97.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.97.name=DataPort[97]
unit.2.0.port.-1.s.97.orderindex=-1
unit.2.0.port.-1.s.97.visible=1
unit.2.0.port.-1.s.98.alias=
unit.2.0.port.-1.s.98.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.98.name=DataPort[98]
unit.2.0.port.-1.s.98.orderindex=-1
unit.2.0.port.-1.s.98.visible=1
unit.2.0.port.-1.s.99.alias=
unit.2.0.port.-1.s.99.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.-1.s.99.name=DataPort[99]
unit.2.0.port.-1.s.99.orderindex=-1
unit.2.0.port.-1.s.99.visible=1
unit.2.0.port.0.b.0.alias=
unit.2.0.port.0.b.0.channellist=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
unit.2.0.port.0.b.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.0.b.0.name=TriggerPort0
unit.2.0.port.0.b.0.orderindex=-1
unit.2.0.port.0.b.0.radix=Hex
unit.2.0.port.0.b.0.signedOffset=0.0
unit.2.0.port.0.b.0.signedPrecision=0
unit.2.0.port.0.b.0.signedScaleFactor=1.0
unit.2.0.port.0.b.0.unsignedOffset=0.0
unit.2.0.port.0.b.0.unsignedPrecision=0
unit.2.0.port.0.b.0.unsignedScaleFactor=1.0
unit.2.0.port.0.b.0.visible=1
unit.2.0.port.0.buscount=1
unit.2.0.port.0.channelcount=20
unit.2.0.port.0.s.0.alias=
unit.2.0.port.0.s.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.0.s.0.name=TriggerPort0[0]
unit.2.0.port.0.s.0.orderindex=-1
unit.2.0.port.0.s.0.visible=1
unit.2.0.port.0.s.1.alias=
unit.2.0.port.0.s.1.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.0.s.1.name=TriggerPort0[1]
unit.2.0.port.0.s.1.orderindex=-1
unit.2.0.port.0.s.1.visible=1
unit.2.0.port.0.s.10.alias=
unit.2.0.port.0.s.10.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.0.s.10.name=TriggerPort0[10]
unit.2.0.port.0.s.10.orderindex=-1
unit.2.0.port.0.s.10.visible=1
unit.2.0.port.0.s.11.alias=
unit.2.0.port.0.s.11.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.0.s.11.name=TriggerPort0[11]
unit.2.0.port.0.s.11.orderindex=-1
unit.2.0.port.0.s.11.visible=1
unit.2.0.port.0.s.12.alias=
unit.2.0.port.0.s.12.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.0.s.12.name=TriggerPort0[12]
unit.2.0.port.0.s.12.orderindex=-1
unit.2.0.port.0.s.12.visible=1
unit.2.0.port.0.s.13.alias=
unit.2.0.port.0.s.13.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.0.s.13.name=TriggerPort0[13]
unit.2.0.port.0.s.13.orderindex=-1
unit.2.0.port.0.s.13.visible=1
unit.2.0.port.0.s.14.alias=
unit.2.0.port.0.s.14.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.0.s.14.name=TriggerPort0[14]
unit.2.0.port.0.s.14.orderindex=-1
unit.2.0.port.0.s.14.visible=1
unit.2.0.port.0.s.15.alias=
unit.2.0.port.0.s.15.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.0.s.15.name=TriggerPort0[15]
unit.2.0.port.0.s.15.orderindex=-1
unit.2.0.port.0.s.15.visible=1
unit.2.0.port.0.s.16.alias=
unit.2.0.port.0.s.16.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.0.s.16.name=TriggerPort0[16]
unit.2.0.port.0.s.16.orderindex=-1
unit.2.0.port.0.s.16.visible=1
unit.2.0.port.0.s.17.alias=
unit.2.0.port.0.s.17.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.0.s.17.name=TriggerPort0[17]
unit.2.0.port.0.s.17.orderindex=-1
unit.2.0.port.0.s.17.visible=1
unit.2.0.port.0.s.18.alias=
unit.2.0.port.0.s.18.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.0.s.18.name=TriggerPort0[18]
unit.2.0.port.0.s.18.orderindex=-1
unit.2.0.port.0.s.18.visible=1
unit.2.0.port.0.s.19.alias=
unit.2.0.port.0.s.19.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.0.s.19.name=TriggerPort0[19]
unit.2.0.port.0.s.19.orderindex=-1
unit.2.0.port.0.s.19.visible=1
unit.2.0.port.0.s.2.alias=
unit.2.0.port.0.s.2.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.0.s.2.name=TriggerPort0[2]
unit.2.0.port.0.s.2.orderindex=-1
unit.2.0.port.0.s.2.visible=1
unit.2.0.port.0.s.3.alias=
unit.2.0.port.0.s.3.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.0.s.3.name=TriggerPort0[3]
unit.2.0.port.0.s.3.orderindex=-1
unit.2.0.port.0.s.3.visible=1
unit.2.0.port.0.s.4.alias=
unit.2.0.port.0.s.4.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.0.s.4.name=TriggerPort0[4]
unit.2.0.port.0.s.4.orderindex=-1
unit.2.0.port.0.s.4.visible=1
unit.2.0.port.0.s.5.alias=
unit.2.0.port.0.s.5.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.0.s.5.name=TriggerPort0[5]
unit.2.0.port.0.s.5.orderindex=-1
unit.2.0.port.0.s.5.visible=1
unit.2.0.port.0.s.6.alias=
unit.2.0.port.0.s.6.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.0.s.6.name=TriggerPort0[6]
unit.2.0.port.0.s.6.orderindex=-1
unit.2.0.port.0.s.6.visible=1
unit.2.0.port.0.s.7.alias=
unit.2.0.port.0.s.7.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.0.s.7.name=TriggerPort0[7]
unit.2.0.port.0.s.7.orderindex=-1
unit.2.0.port.0.s.7.visible=1
unit.2.0.port.0.s.8.alias=
unit.2.0.port.0.s.8.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.0.s.8.name=TriggerPort0[8]
unit.2.0.port.0.s.8.orderindex=-1
unit.2.0.port.0.s.8.visible=1
unit.2.0.port.0.s.9.alias=
unit.2.0.port.0.s.9.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.0.s.9.name=TriggerPort0[9]
unit.2.0.port.0.s.9.orderindex=-1
unit.2.0.port.0.s.9.visible=1
unit.2.0.port.1.b.0.alias=
unit.2.0.port.1.b.0.channellist=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
unit.2.0.port.1.b.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.b.0.name=TriggerPort1
unit.2.0.port.1.b.0.orderindex=-1
unit.2.0.port.1.b.0.radix=Hex
unit.2.0.port.1.b.0.signedOffset=0.0
unit.2.0.port.1.b.0.signedPrecision=0
unit.2.0.port.1.b.0.signedScaleFactor=1.0
unit.2.0.port.1.b.0.unsignedOffset=0.0
unit.2.0.port.1.b.0.unsignedPrecision=0
unit.2.0.port.1.b.0.unsignedScaleFactor=1.0
unit.2.0.port.1.b.0.visible=1
unit.2.0.port.1.buscount=1
unit.2.0.port.1.channelcount=32
unit.2.0.port.1.s.0.alias=
unit.2.0.port.1.s.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.0.name=TriggerPort1[0]
unit.2.0.port.1.s.0.orderindex=-1
unit.2.0.port.1.s.0.visible=1
unit.2.0.port.1.s.1.alias=
unit.2.0.port.1.s.1.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.1.name=TriggerPort1[1]
unit.2.0.port.1.s.1.orderindex=-1
unit.2.0.port.1.s.1.visible=1
unit.2.0.port.1.s.10.alias=
unit.2.0.port.1.s.10.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.10.name=TriggerPort1[10]
unit.2.0.port.1.s.10.orderindex=-1
unit.2.0.port.1.s.10.visible=1
unit.2.0.port.1.s.11.alias=
unit.2.0.port.1.s.11.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.11.name=TriggerPort1[11]
unit.2.0.port.1.s.11.orderindex=-1
unit.2.0.port.1.s.11.visible=1
unit.2.0.port.1.s.12.alias=
unit.2.0.port.1.s.12.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.12.name=TriggerPort1[12]
unit.2.0.port.1.s.12.orderindex=-1
unit.2.0.port.1.s.12.visible=1
unit.2.0.port.1.s.13.alias=
unit.2.0.port.1.s.13.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.13.name=TriggerPort1[13]
unit.2.0.port.1.s.13.orderindex=-1
unit.2.0.port.1.s.13.visible=1
unit.2.0.port.1.s.14.alias=
unit.2.0.port.1.s.14.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.14.name=TriggerPort1[14]
unit.2.0.port.1.s.14.orderindex=-1
unit.2.0.port.1.s.14.visible=1
unit.2.0.port.1.s.15.alias=
unit.2.0.port.1.s.15.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.15.name=TriggerPort1[15]
unit.2.0.port.1.s.15.orderindex=-1
unit.2.0.port.1.s.15.visible=1
unit.2.0.port.1.s.16.alias=
unit.2.0.port.1.s.16.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.16.name=TriggerPort1[16]
unit.2.0.port.1.s.16.orderindex=-1
unit.2.0.port.1.s.16.visible=1
unit.2.0.port.1.s.17.alias=
unit.2.0.port.1.s.17.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.17.name=TriggerPort1[17]
unit.2.0.port.1.s.17.orderindex=-1
unit.2.0.port.1.s.17.visible=1
unit.2.0.port.1.s.18.alias=
unit.2.0.port.1.s.18.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.18.name=TriggerPort1[18]
unit.2.0.port.1.s.18.orderindex=-1
unit.2.0.port.1.s.18.visible=1
unit.2.0.port.1.s.19.alias=
unit.2.0.port.1.s.19.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.19.name=TriggerPort1[19]
unit.2.0.port.1.s.19.orderindex=-1
unit.2.0.port.1.s.19.visible=1
unit.2.0.port.1.s.2.alias=
unit.2.0.port.1.s.2.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.2.name=TriggerPort1[2]
unit.2.0.port.1.s.2.orderindex=-1
unit.2.0.port.1.s.2.visible=1
unit.2.0.port.1.s.20.alias=
unit.2.0.port.1.s.20.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.20.name=TriggerPort1[20]
unit.2.0.port.1.s.20.orderindex=-1
unit.2.0.port.1.s.20.visible=1
unit.2.0.port.1.s.21.alias=
unit.2.0.port.1.s.21.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.21.name=TriggerPort1[21]
unit.2.0.port.1.s.21.orderindex=-1
unit.2.0.port.1.s.21.visible=1
unit.2.0.port.1.s.22.alias=
unit.2.0.port.1.s.22.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.22.name=TriggerPort1[22]
unit.2.0.port.1.s.22.orderindex=-1
unit.2.0.port.1.s.22.visible=1
unit.2.0.port.1.s.23.alias=
unit.2.0.port.1.s.23.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.23.name=TriggerPort1[23]
unit.2.0.port.1.s.23.orderindex=-1
unit.2.0.port.1.s.23.visible=1
unit.2.0.port.1.s.24.alias=
unit.2.0.port.1.s.24.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.24.name=TriggerPort1[24]
unit.2.0.port.1.s.24.orderindex=-1
unit.2.0.port.1.s.24.visible=1
unit.2.0.port.1.s.25.alias=
unit.2.0.port.1.s.25.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.25.name=TriggerPort1[25]
unit.2.0.port.1.s.25.orderindex=-1
unit.2.0.port.1.s.25.visible=1
unit.2.0.port.1.s.26.alias=
unit.2.0.port.1.s.26.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.26.name=TriggerPort1[26]
unit.2.0.port.1.s.26.orderindex=-1
unit.2.0.port.1.s.26.visible=1
unit.2.0.port.1.s.27.alias=
unit.2.0.port.1.s.27.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.27.name=TriggerPort1[27]
unit.2.0.port.1.s.27.orderindex=-1
unit.2.0.port.1.s.27.visible=1
unit.2.0.port.1.s.28.alias=
unit.2.0.port.1.s.28.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.28.name=TriggerPort1[28]
unit.2.0.port.1.s.28.orderindex=-1
unit.2.0.port.1.s.28.visible=1
unit.2.0.port.1.s.29.alias=
unit.2.0.port.1.s.29.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.29.name=TriggerPort1[29]
unit.2.0.port.1.s.29.orderindex=-1
unit.2.0.port.1.s.29.visible=1
unit.2.0.port.1.s.3.alias=
unit.2.0.port.1.s.3.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.3.name=TriggerPort1[3]
unit.2.0.port.1.s.3.orderindex=-1
unit.2.0.port.1.s.3.visible=1
unit.2.0.port.1.s.30.alias=
unit.2.0.port.1.s.30.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.30.name=TriggerPort1[30]
unit.2.0.port.1.s.30.orderindex=-1
unit.2.0.port.1.s.30.visible=1
unit.2.0.port.1.s.31.alias=
unit.2.0.port.1.s.31.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.31.name=TriggerPort1[31]
unit.2.0.port.1.s.31.orderindex=-1
unit.2.0.port.1.s.31.visible=1
unit.2.0.port.1.s.4.alias=
unit.2.0.port.1.s.4.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.4.name=TriggerPort1[4]
unit.2.0.port.1.s.4.orderindex=-1
unit.2.0.port.1.s.4.visible=1
unit.2.0.port.1.s.5.alias=
unit.2.0.port.1.s.5.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.5.name=TriggerPort1[5]
unit.2.0.port.1.s.5.orderindex=-1
unit.2.0.port.1.s.5.visible=1
unit.2.0.port.1.s.6.alias=
unit.2.0.port.1.s.6.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.6.name=TriggerPort1[6]
unit.2.0.port.1.s.6.orderindex=-1
unit.2.0.port.1.s.6.visible=1
unit.2.0.port.1.s.7.alias=
unit.2.0.port.1.s.7.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.7.name=TriggerPort1[7]
unit.2.0.port.1.s.7.orderindex=-1
unit.2.0.port.1.s.7.visible=1
unit.2.0.port.1.s.8.alias=
unit.2.0.port.1.s.8.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.8.name=TriggerPort1[8]
unit.2.0.port.1.s.8.orderindex=-1
unit.2.0.port.1.s.8.visible=1
unit.2.0.port.1.s.9.alias=
unit.2.0.port.1.s.9.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.1.s.9.name=TriggerPort1[9]
unit.2.0.port.1.s.9.orderindex=-1
unit.2.0.port.1.s.9.visible=1
unit.2.0.port.10.b.0.alias=
unit.2.0.port.10.b.0.channellist=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
unit.2.0.port.10.b.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.b.0.name=TriggerPort10
unit.2.0.port.10.b.0.orderindex=-1
unit.2.0.port.10.b.0.radix=Hex
unit.2.0.port.10.b.0.signedOffset=0.0
unit.2.0.port.10.b.0.signedPrecision=0
unit.2.0.port.10.b.0.signedScaleFactor=1.0
unit.2.0.port.10.b.0.unsignedOffset=0.0
unit.2.0.port.10.b.0.unsignedPrecision=0
unit.2.0.port.10.b.0.unsignedScaleFactor=1.0
unit.2.0.port.10.b.0.visible=1
unit.2.0.port.10.buscount=1
unit.2.0.port.10.channelcount=21
unit.2.0.port.10.s.0.alias=
unit.2.0.port.10.s.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.s.0.name=TriggerPort10[0]
unit.2.0.port.10.s.0.orderindex=-1
unit.2.0.port.10.s.0.visible=1
unit.2.0.port.10.s.1.alias=
unit.2.0.port.10.s.1.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.s.1.name=TriggerPort10[1]
unit.2.0.port.10.s.1.orderindex=-1
unit.2.0.port.10.s.1.visible=1
unit.2.0.port.10.s.10.alias=
unit.2.0.port.10.s.10.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.s.10.name=TriggerPort10[10]
unit.2.0.port.10.s.10.orderindex=-1
unit.2.0.port.10.s.10.visible=1
unit.2.0.port.10.s.11.alias=
unit.2.0.port.10.s.11.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.s.11.name=TriggerPort10[11]
unit.2.0.port.10.s.11.orderindex=-1
unit.2.0.port.10.s.11.visible=1
unit.2.0.port.10.s.12.alias=
unit.2.0.port.10.s.12.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.s.12.name=TriggerPort10[12]
unit.2.0.port.10.s.12.orderindex=-1
unit.2.0.port.10.s.12.visible=1
unit.2.0.port.10.s.13.alias=
unit.2.0.port.10.s.13.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.s.13.name=TriggerPort10[13]
unit.2.0.port.10.s.13.orderindex=-1
unit.2.0.port.10.s.13.visible=1
unit.2.0.port.10.s.14.alias=
unit.2.0.port.10.s.14.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.s.14.name=TriggerPort10[14]
unit.2.0.port.10.s.14.orderindex=-1
unit.2.0.port.10.s.14.visible=1
unit.2.0.port.10.s.15.alias=
unit.2.0.port.10.s.15.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.s.15.name=TriggerPort10[15]
unit.2.0.port.10.s.15.orderindex=-1
unit.2.0.port.10.s.15.visible=1
unit.2.0.port.10.s.16.alias=
unit.2.0.port.10.s.16.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.s.16.name=TriggerPort10[16]
unit.2.0.port.10.s.16.orderindex=-1
unit.2.0.port.10.s.16.visible=1
unit.2.0.port.10.s.17.alias=
unit.2.0.port.10.s.17.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.s.17.name=TriggerPort10[17]
unit.2.0.port.10.s.17.orderindex=-1
unit.2.0.port.10.s.17.visible=1
unit.2.0.port.10.s.18.alias=
unit.2.0.port.10.s.18.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.s.18.name=TriggerPort10[18]
unit.2.0.port.10.s.18.orderindex=-1
unit.2.0.port.10.s.18.visible=1
unit.2.0.port.10.s.19.alias=
unit.2.0.port.10.s.19.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.s.19.name=TriggerPort10[19]
unit.2.0.port.10.s.19.orderindex=-1
unit.2.0.port.10.s.19.visible=1
unit.2.0.port.10.s.2.alias=
unit.2.0.port.10.s.2.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.s.2.name=TriggerPort10[2]
unit.2.0.port.10.s.2.orderindex=-1
unit.2.0.port.10.s.2.visible=1
unit.2.0.port.10.s.20.alias=
unit.2.0.port.10.s.20.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.s.20.name=TriggerPort10[20]
unit.2.0.port.10.s.20.orderindex=-1
unit.2.0.port.10.s.20.visible=1
unit.2.0.port.10.s.3.alias=
unit.2.0.port.10.s.3.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.s.3.name=TriggerPort10[3]
unit.2.0.port.10.s.3.orderindex=-1
unit.2.0.port.10.s.3.visible=1
unit.2.0.port.10.s.4.alias=
unit.2.0.port.10.s.4.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.s.4.name=TriggerPort10[4]
unit.2.0.port.10.s.4.orderindex=-1
unit.2.0.port.10.s.4.visible=1
unit.2.0.port.10.s.5.alias=
unit.2.0.port.10.s.5.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.s.5.name=TriggerPort10[5]
unit.2.0.port.10.s.5.orderindex=-1
unit.2.0.port.10.s.5.visible=1
unit.2.0.port.10.s.6.alias=
unit.2.0.port.10.s.6.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.s.6.name=TriggerPort10[6]
unit.2.0.port.10.s.6.orderindex=-1
unit.2.0.port.10.s.6.visible=1
unit.2.0.port.10.s.7.alias=
unit.2.0.port.10.s.7.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.s.7.name=TriggerPort10[7]
unit.2.0.port.10.s.7.orderindex=-1
unit.2.0.port.10.s.7.visible=1
unit.2.0.port.10.s.8.alias=
unit.2.0.port.10.s.8.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.s.8.name=TriggerPort10[8]
unit.2.0.port.10.s.8.orderindex=-1
unit.2.0.port.10.s.8.visible=1
unit.2.0.port.10.s.9.alias=
unit.2.0.port.10.s.9.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.10.s.9.name=TriggerPort10[9]
unit.2.0.port.10.s.9.orderindex=-1
unit.2.0.port.10.s.9.visible=1
unit.2.0.port.11.b.0.alias=
unit.2.0.port.11.b.0.channellist=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
unit.2.0.port.11.b.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.11.b.0.name=TriggerPort11
unit.2.0.port.11.b.0.orderindex=-1
unit.2.0.port.11.b.0.radix=Hex
unit.2.0.port.11.b.0.signedOffset=0.0
unit.2.0.port.11.b.0.signedPrecision=0
unit.2.0.port.11.b.0.signedScaleFactor=1.0
unit.2.0.port.11.b.0.unsignedOffset=0.0
unit.2.0.port.11.b.0.unsignedPrecision=0
unit.2.0.port.11.b.0.unsignedScaleFactor=1.0
unit.2.0.port.11.b.0.visible=1
unit.2.0.port.11.buscount=1
unit.2.0.port.11.channelcount=16
unit.2.0.port.11.s.0.alias=
unit.2.0.port.11.s.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.11.s.0.name=TriggerPort11[0]
unit.2.0.port.11.s.0.orderindex=-1
unit.2.0.port.11.s.0.visible=1
unit.2.0.port.11.s.1.alias=
unit.2.0.port.11.s.1.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.11.s.1.name=TriggerPort11[1]
unit.2.0.port.11.s.1.orderindex=-1
unit.2.0.port.11.s.1.visible=1
unit.2.0.port.11.s.10.alias=
unit.2.0.port.11.s.10.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.11.s.10.name=TriggerPort11[10]
unit.2.0.port.11.s.10.orderindex=-1
unit.2.0.port.11.s.10.visible=1
unit.2.0.port.11.s.11.alias=
unit.2.0.port.11.s.11.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.11.s.11.name=TriggerPort11[11]
unit.2.0.port.11.s.11.orderindex=-1
unit.2.0.port.11.s.11.visible=1
unit.2.0.port.11.s.12.alias=
unit.2.0.port.11.s.12.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.11.s.12.name=TriggerPort11[12]
unit.2.0.port.11.s.12.orderindex=-1
unit.2.0.port.11.s.12.visible=1
unit.2.0.port.11.s.13.alias=
unit.2.0.port.11.s.13.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.11.s.13.name=TriggerPort11[13]
unit.2.0.port.11.s.13.orderindex=-1
unit.2.0.port.11.s.13.visible=1
unit.2.0.port.11.s.14.alias=
unit.2.0.port.11.s.14.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.11.s.14.name=TriggerPort11[14]
unit.2.0.port.11.s.14.orderindex=-1
unit.2.0.port.11.s.14.visible=1
unit.2.0.port.11.s.15.alias=
unit.2.0.port.11.s.15.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.11.s.15.name=TriggerPort11[15]
unit.2.0.port.11.s.15.orderindex=-1
unit.2.0.port.11.s.15.visible=1
unit.2.0.port.11.s.2.alias=
unit.2.0.port.11.s.2.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.11.s.2.name=TriggerPort11[2]
unit.2.0.port.11.s.2.orderindex=-1
unit.2.0.port.11.s.2.visible=1
unit.2.0.port.11.s.3.alias=
unit.2.0.port.11.s.3.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.11.s.3.name=TriggerPort11[3]
unit.2.0.port.11.s.3.orderindex=-1
unit.2.0.port.11.s.3.visible=1
unit.2.0.port.11.s.4.alias=
unit.2.0.port.11.s.4.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.11.s.4.name=TriggerPort11[4]
unit.2.0.port.11.s.4.orderindex=-1
unit.2.0.port.11.s.4.visible=1
unit.2.0.port.11.s.5.alias=
unit.2.0.port.11.s.5.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.11.s.5.name=TriggerPort11[5]
unit.2.0.port.11.s.5.orderindex=-1
unit.2.0.port.11.s.5.visible=1
unit.2.0.port.11.s.6.alias=
unit.2.0.port.11.s.6.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.11.s.6.name=TriggerPort11[6]
unit.2.0.port.11.s.6.orderindex=-1
unit.2.0.port.11.s.6.visible=1
unit.2.0.port.11.s.7.alias=
unit.2.0.port.11.s.7.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.11.s.7.name=TriggerPort11[7]
unit.2.0.port.11.s.7.orderindex=-1
unit.2.0.port.11.s.7.visible=1
unit.2.0.port.11.s.8.alias=
unit.2.0.port.11.s.8.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.11.s.8.name=TriggerPort11[8]
unit.2.0.port.11.s.8.orderindex=-1
unit.2.0.port.11.s.8.visible=1
unit.2.0.port.11.s.9.alias=
unit.2.0.port.11.s.9.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.11.s.9.name=TriggerPort11[9]
unit.2.0.port.11.s.9.orderindex=-1
unit.2.0.port.11.s.9.visible=1
unit.2.0.port.12.b.0.alias=
unit.2.0.port.12.b.0.channellist=0 1 2 3 4 5 6 7 8
unit.2.0.port.12.b.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.12.b.0.name=TriggerPort12
unit.2.0.port.12.b.0.orderindex=-1
unit.2.0.port.12.b.0.radix=Hex
unit.2.0.port.12.b.0.signedOffset=0.0
unit.2.0.port.12.b.0.signedPrecision=0
unit.2.0.port.12.b.0.signedScaleFactor=1.0
unit.2.0.port.12.b.0.unsignedOffset=0.0
unit.2.0.port.12.b.0.unsignedPrecision=0
unit.2.0.port.12.b.0.unsignedScaleFactor=1.0
unit.2.0.port.12.b.0.visible=1
unit.2.0.port.12.buscount=1
unit.2.0.port.12.channelcount=9
unit.2.0.port.12.s.0.alias=flash_ce2_
unit.2.0.port.12.s.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.12.s.0.name=TriggerPort12[0]
unit.2.0.port.12.s.0.orderindex=-1
unit.2.0.port.12.s.0.visible=1
unit.2.0.port.12.s.1.alias=sram_adv_
unit.2.0.port.12.s.1.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.12.s.1.name=TriggerPort12[1]
unit.2.0.port.12.s.1.orderindex=-1
unit.2.0.port.12.s.1.visible=1
unit.2.0.port.12.s.2.alias=sram_cen_
unit.2.0.port.12.s.2.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.12.s.2.name=TriggerPort12[2]
unit.2.0.port.12.s.2.orderindex=-1
unit.2.0.port.12.s.2.visible=1
unit.2.0.port.12.s.3.alias=DataPort[210]
unit.2.0.port.12.s.3.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.12.s.3.name=TriggerPort12[3]
unit.2.0.port.12.s.3.orderindex=-1
unit.2.0.port.12.s.3.visible=1
unit.2.0.port.12.s.4.alias=
unit.2.0.port.12.s.4.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.12.s.4.name=TriggerPort12[4]
unit.2.0.port.12.s.4.orderindex=-1
unit.2.0.port.12.s.4.visible=1
unit.2.0.port.12.s.5.alias=
unit.2.0.port.12.s.5.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.12.s.5.name=TriggerPort12[5]
unit.2.0.port.12.s.5.orderindex=-1
unit.2.0.port.12.s.5.visible=1
unit.2.0.port.12.s.6.alias=
unit.2.0.port.12.s.6.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.12.s.6.name=TriggerPort12[6]
unit.2.0.port.12.s.6.orderindex=-1
unit.2.0.port.12.s.6.visible=1
unit.2.0.port.12.s.7.alias=sf_we_
unit.2.0.port.12.s.7.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.12.s.7.name=TriggerPort12[7]
unit.2.0.port.12.s.7.orderindex=-1
unit.2.0.port.12.s.7.visible=1
unit.2.0.port.12.s.8.alias=sf_oe_
unit.2.0.port.12.s.8.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.12.s.8.name=TriggerPort12[8]
unit.2.0.port.12.s.8.orderindex=-1
unit.2.0.port.12.s.8.visible=1
unit.2.0.port.13.b.0.alias=
unit.2.0.port.13.b.0.channellist=0 1 2
unit.2.0.port.13.b.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.13.b.0.name=TriggerPort13
unit.2.0.port.13.b.0.orderindex=-1
unit.2.0.port.13.b.0.radix=Hex
unit.2.0.port.13.b.0.signedOffset=0.0
unit.2.0.port.13.b.0.signedPrecision=0
unit.2.0.port.13.b.0.signedScaleFactor=1.0
unit.2.0.port.13.b.0.unsignedOffset=0.0
unit.2.0.port.13.b.0.unsignedPrecision=0
unit.2.0.port.13.b.0.unsignedScaleFactor=1.0
unit.2.0.port.13.b.0.visible=1
unit.2.0.port.13.buscount=1
unit.2.0.port.13.channelcount=3
unit.2.0.port.13.s.0.alias=
unit.2.0.port.13.s.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.13.s.0.name=TriggerPort13[0]
unit.2.0.port.13.s.0.orderindex=-1
unit.2.0.port.13.s.0.visible=1
unit.2.0.port.13.s.1.alias=
unit.2.0.port.13.s.1.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.13.s.1.name=TriggerPort13[1]
unit.2.0.port.13.s.1.orderindex=-1
unit.2.0.port.13.s.1.visible=1
unit.2.0.port.13.s.2.alias=
unit.2.0.port.13.s.2.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.13.s.2.name=TriggerPort13[2]
unit.2.0.port.13.s.2.orderindex=-1
unit.2.0.port.13.s.2.visible=1
unit.2.0.port.14.b.0.alias=
unit.2.0.port.14.b.0.channellist=0 1 2 3 4
unit.2.0.port.14.b.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.14.b.0.name=TriggerPort14
unit.2.0.port.14.b.0.orderindex=-1
unit.2.0.port.14.b.0.radix=Hex
unit.2.0.port.14.b.0.signedOffset=0.0
unit.2.0.port.14.b.0.signedPrecision=0
unit.2.0.port.14.b.0.signedScaleFactor=1.0
unit.2.0.port.14.b.0.unsignedOffset=0.0
unit.2.0.port.14.b.0.unsignedPrecision=0
unit.2.0.port.14.b.0.unsignedScaleFactor=1.0
unit.2.0.port.14.b.0.visible=1
unit.2.0.port.14.buscount=1
unit.2.0.port.14.channelcount=5
unit.2.0.port.14.s.0.alias=op
unit.2.0.port.14.s.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.14.s.0.name=TriggerPort14[0]
unit.2.0.port.14.s.0.orderindex=-1
unit.2.0.port.14.s.0.visible=1
unit.2.0.port.14.s.1.alias=zbt_stb
unit.2.0.port.14.s.1.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.14.s.1.name=TriggerPort14[1]
unit.2.0.port.14.s.1.orderindex=-1
unit.2.0.port.14.s.1.visible=1
unit.2.0.port.14.s.2.alias=flash_stb
unit.2.0.port.14.s.2.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.14.s.2.name=TriggerPort14[2]
unit.2.0.port.14.s.2.orderindex=-1
unit.2.0.port.14.s.2.visible=1
unit.2.0.port.14.s.3.alias=flash_arena
unit.2.0.port.14.s.3.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.14.s.3.name=TriggerPort14[3]
unit.2.0.port.14.s.3.orderindex=-1
unit.2.0.port.14.s.3.visible=1
unit.2.0.port.14.s.4.alias=vdu_arena
unit.2.0.port.14.s.4.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.14.s.4.name=TriggerPort14[4]
unit.2.0.port.14.s.4.orderindex=-1
unit.2.0.port.14.s.4.visible=1
unit.2.0.port.15.b.0.alias=
unit.2.0.port.15.b.0.channellist=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
unit.2.0.port.15.b.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.b.0.name=TriggerPort15
unit.2.0.port.15.b.0.orderindex=-1
unit.2.0.port.15.b.0.radix=Hex
unit.2.0.port.15.b.0.signedOffset=0.0
unit.2.0.port.15.b.0.signedPrecision=0
unit.2.0.port.15.b.0.signedScaleFactor=1.0
unit.2.0.port.15.b.0.unsignedOffset=0.0
unit.2.0.port.15.b.0.unsignedPrecision=0
unit.2.0.port.15.b.0.unsignedScaleFactor=1.0
unit.2.0.port.15.b.0.visible=1
unit.2.0.port.15.buscount=1
unit.2.0.port.15.channelcount=32
unit.2.0.port.15.s.0.alias=
unit.2.0.port.15.s.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.0.name=TriggerPort15[0]
unit.2.0.port.15.s.0.orderindex=-1
unit.2.0.port.15.s.0.visible=1
unit.2.0.port.15.s.1.alias=
unit.2.0.port.15.s.1.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.1.name=TriggerPort15[1]
unit.2.0.port.15.s.1.orderindex=-1
unit.2.0.port.15.s.1.visible=1
unit.2.0.port.15.s.10.alias=
unit.2.0.port.15.s.10.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.10.name=TriggerPort15[10]
unit.2.0.port.15.s.10.orderindex=-1
unit.2.0.port.15.s.10.visible=1
unit.2.0.port.15.s.11.alias=
unit.2.0.port.15.s.11.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.11.name=TriggerPort15[11]
unit.2.0.port.15.s.11.orderindex=-1
unit.2.0.port.15.s.11.visible=1
unit.2.0.port.15.s.12.alias=
unit.2.0.port.15.s.12.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.12.name=TriggerPort15[12]
unit.2.0.port.15.s.12.orderindex=-1
unit.2.0.port.15.s.12.visible=1
unit.2.0.port.15.s.13.alias=
unit.2.0.port.15.s.13.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.13.name=TriggerPort15[13]
unit.2.0.port.15.s.13.orderindex=-1
unit.2.0.port.15.s.13.visible=1
unit.2.0.port.15.s.14.alias=
unit.2.0.port.15.s.14.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.14.name=TriggerPort15[14]
unit.2.0.port.15.s.14.orderindex=-1
unit.2.0.port.15.s.14.visible=1
unit.2.0.port.15.s.15.alias=
unit.2.0.port.15.s.15.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.15.name=TriggerPort15[15]
unit.2.0.port.15.s.15.orderindex=-1
unit.2.0.port.15.s.15.visible=1
unit.2.0.port.15.s.16.alias=
unit.2.0.port.15.s.16.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.16.name=TriggerPort15[16]
unit.2.0.port.15.s.16.orderindex=-1
unit.2.0.port.15.s.16.visible=1
unit.2.0.port.15.s.17.alias=
unit.2.0.port.15.s.17.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.17.name=TriggerPort15[17]
unit.2.0.port.15.s.17.orderindex=-1
unit.2.0.port.15.s.17.visible=1
unit.2.0.port.15.s.18.alias=
unit.2.0.port.15.s.18.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.18.name=TriggerPort15[18]
unit.2.0.port.15.s.18.orderindex=-1
unit.2.0.port.15.s.18.visible=1
unit.2.0.port.15.s.19.alias=
unit.2.0.port.15.s.19.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.19.name=TriggerPort15[19]
unit.2.0.port.15.s.19.orderindex=-1
unit.2.0.port.15.s.19.visible=1
unit.2.0.port.15.s.2.alias=
unit.2.0.port.15.s.2.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.2.name=TriggerPort15[2]
unit.2.0.port.15.s.2.orderindex=-1
unit.2.0.port.15.s.2.visible=1
unit.2.0.port.15.s.20.alias=
unit.2.0.port.15.s.20.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.20.name=TriggerPort15[20]
unit.2.0.port.15.s.20.orderindex=-1
unit.2.0.port.15.s.20.visible=1
unit.2.0.port.15.s.21.alias=
unit.2.0.port.15.s.21.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.21.name=TriggerPort15[21]
unit.2.0.port.15.s.21.orderindex=-1
unit.2.0.port.15.s.21.visible=1
unit.2.0.port.15.s.22.alias=
unit.2.0.port.15.s.22.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.22.name=TriggerPort15[22]
unit.2.0.port.15.s.22.orderindex=-1
unit.2.0.port.15.s.22.visible=1
unit.2.0.port.15.s.23.alias=
unit.2.0.port.15.s.23.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.23.name=TriggerPort15[23]
unit.2.0.port.15.s.23.orderindex=-1
unit.2.0.port.15.s.23.visible=1
unit.2.0.port.15.s.24.alias=
unit.2.0.port.15.s.24.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.24.name=TriggerPort15[24]
unit.2.0.port.15.s.24.orderindex=-1
unit.2.0.port.15.s.24.visible=1
unit.2.0.port.15.s.25.alias=
unit.2.0.port.15.s.25.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.25.name=TriggerPort15[25]
unit.2.0.port.15.s.25.orderindex=-1
unit.2.0.port.15.s.25.visible=1
unit.2.0.port.15.s.26.alias=
unit.2.0.port.15.s.26.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.26.name=TriggerPort15[26]
unit.2.0.port.15.s.26.orderindex=-1
unit.2.0.port.15.s.26.visible=1
unit.2.0.port.15.s.27.alias=
unit.2.0.port.15.s.27.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.27.name=TriggerPort15[27]
unit.2.0.port.15.s.27.orderindex=-1
unit.2.0.port.15.s.27.visible=1
unit.2.0.port.15.s.28.alias=
unit.2.0.port.15.s.28.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.28.name=TriggerPort15[28]
unit.2.0.port.15.s.28.orderindex=-1
unit.2.0.port.15.s.28.visible=1
unit.2.0.port.15.s.29.alias=
unit.2.0.port.15.s.29.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.29.name=TriggerPort15[29]
unit.2.0.port.15.s.29.orderindex=-1
unit.2.0.port.15.s.29.visible=1
unit.2.0.port.15.s.3.alias=
unit.2.0.port.15.s.3.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.3.name=TriggerPort15[3]
unit.2.0.port.15.s.3.orderindex=-1
unit.2.0.port.15.s.3.visible=1
unit.2.0.port.15.s.30.alias=
unit.2.0.port.15.s.30.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.30.name=TriggerPort15[30]
unit.2.0.port.15.s.30.orderindex=-1
unit.2.0.port.15.s.30.visible=1
unit.2.0.port.15.s.31.alias=
unit.2.0.port.15.s.31.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.31.name=TriggerPort15[31]
unit.2.0.port.15.s.31.orderindex=-1
unit.2.0.port.15.s.31.visible=1
unit.2.0.port.15.s.4.alias=
unit.2.0.port.15.s.4.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.4.name=TriggerPort15[4]
unit.2.0.port.15.s.4.orderindex=-1
unit.2.0.port.15.s.4.visible=1
unit.2.0.port.15.s.5.alias=
unit.2.0.port.15.s.5.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.5.name=TriggerPort15[5]
unit.2.0.port.15.s.5.orderindex=-1
unit.2.0.port.15.s.5.visible=1
unit.2.0.port.15.s.6.alias=
unit.2.0.port.15.s.6.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.6.name=TriggerPort15[6]
unit.2.0.port.15.s.6.orderindex=-1
unit.2.0.port.15.s.6.visible=1
unit.2.0.port.15.s.7.alias=
unit.2.0.port.15.s.7.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.7.name=TriggerPort15[7]
unit.2.0.port.15.s.7.orderindex=-1
unit.2.0.port.15.s.7.visible=1
unit.2.0.port.15.s.8.alias=
unit.2.0.port.15.s.8.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.8.name=TriggerPort15[8]
unit.2.0.port.15.s.8.orderindex=-1
unit.2.0.port.15.s.8.visible=1
unit.2.0.port.15.s.9.alias=
unit.2.0.port.15.s.9.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.15.s.9.name=TriggerPort15[9]
unit.2.0.port.15.s.9.orderindex=-1
unit.2.0.port.15.s.9.visible=1
unit.2.0.port.2.b.0.alias=
unit.2.0.port.2.b.0.channellist=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
unit.2.0.port.2.b.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.2.b.0.name=TriggerPort2
unit.2.0.port.2.b.0.orderindex=-1
unit.2.0.port.2.b.0.radix=Hex
unit.2.0.port.2.b.0.signedOffset=0.0
unit.2.0.port.2.b.0.signedPrecision=0
unit.2.0.port.2.b.0.signedScaleFactor=1.0
unit.2.0.port.2.b.0.unsignedOffset=0.0
unit.2.0.port.2.b.0.unsignedPrecision=0
unit.2.0.port.2.b.0.unsignedScaleFactor=1.0
unit.2.0.port.2.b.0.visible=1
unit.2.0.port.2.buscount=1
unit.2.0.port.2.channelcount=20
unit.2.0.port.2.s.0.alias=
unit.2.0.port.2.s.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.2.s.0.name=TriggerPort2[0]
unit.2.0.port.2.s.0.orderindex=-1
unit.2.0.port.2.s.0.visible=1
unit.2.0.port.2.s.1.alias=
unit.2.0.port.2.s.1.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.2.s.1.name=TriggerPort2[1]
unit.2.0.port.2.s.1.orderindex=-1
unit.2.0.port.2.s.1.visible=1
unit.2.0.port.2.s.10.alias=
unit.2.0.port.2.s.10.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.2.s.10.name=TriggerPort2[10]
unit.2.0.port.2.s.10.orderindex=-1
unit.2.0.port.2.s.10.visible=1
unit.2.0.port.2.s.11.alias=
unit.2.0.port.2.s.11.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.2.s.11.name=TriggerPort2[11]
unit.2.0.port.2.s.11.orderindex=-1
unit.2.0.port.2.s.11.visible=1
unit.2.0.port.2.s.12.alias=
unit.2.0.port.2.s.12.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.2.s.12.name=TriggerPort2[12]
unit.2.0.port.2.s.12.orderindex=-1
unit.2.0.port.2.s.12.visible=1
unit.2.0.port.2.s.13.alias=
unit.2.0.port.2.s.13.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.2.s.13.name=TriggerPort2[13]
unit.2.0.port.2.s.13.orderindex=-1
unit.2.0.port.2.s.13.visible=1
unit.2.0.port.2.s.14.alias=
unit.2.0.port.2.s.14.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.2.s.14.name=TriggerPort2[14]
unit.2.0.port.2.s.14.orderindex=-1
unit.2.0.port.2.s.14.visible=1
unit.2.0.port.2.s.15.alias=
unit.2.0.port.2.s.15.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.2.s.15.name=TriggerPort2[15]
unit.2.0.port.2.s.15.orderindex=-1
unit.2.0.port.2.s.15.visible=1
unit.2.0.port.2.s.16.alias=
unit.2.0.port.2.s.16.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.2.s.16.name=TriggerPort2[16]
unit.2.0.port.2.s.16.orderindex=-1
unit.2.0.port.2.s.16.visible=1
unit.2.0.port.2.s.17.alias=
unit.2.0.port.2.s.17.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.2.s.17.name=TriggerPort2[17]
unit.2.0.port.2.s.17.orderindex=-1
unit.2.0.port.2.s.17.visible=1
unit.2.0.port.2.s.18.alias=
unit.2.0.port.2.s.18.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.2.s.18.name=TriggerPort2[18]
unit.2.0.port.2.s.18.orderindex=-1
unit.2.0.port.2.s.18.visible=1
unit.2.0.port.2.s.19.alias=
unit.2.0.port.2.s.19.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.2.s.19.name=TriggerPort2[19]
unit.2.0.port.2.s.19.orderindex=-1
unit.2.0.port.2.s.19.visible=1
unit.2.0.port.2.s.2.alias=
unit.2.0.port.2.s.2.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.2.s.2.name=TriggerPort2[2]
unit.2.0.port.2.s.2.orderindex=-1
unit.2.0.port.2.s.2.visible=1
unit.2.0.port.2.s.3.alias=
unit.2.0.port.2.s.3.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.2.s.3.name=TriggerPort2[3]
unit.2.0.port.2.s.3.orderindex=-1
unit.2.0.port.2.s.3.visible=1
unit.2.0.port.2.s.4.alias=
unit.2.0.port.2.s.4.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.2.s.4.name=TriggerPort2[4]
unit.2.0.port.2.s.4.orderindex=-1
unit.2.0.port.2.s.4.visible=1
unit.2.0.port.2.s.5.alias=
unit.2.0.port.2.s.5.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.2.s.5.name=TriggerPort2[5]
unit.2.0.port.2.s.5.orderindex=-1
unit.2.0.port.2.s.5.visible=1
unit.2.0.port.2.s.6.alias=
unit.2.0.port.2.s.6.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.2.s.6.name=TriggerPort2[6]
unit.2.0.port.2.s.6.orderindex=-1
unit.2.0.port.2.s.6.visible=1
unit.2.0.port.2.s.7.alias=
unit.2.0.port.2.s.7.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.2.s.7.name=TriggerPort2[7]
unit.2.0.port.2.s.7.orderindex=-1
unit.2.0.port.2.s.7.visible=1
unit.2.0.port.2.s.8.alias=
unit.2.0.port.2.s.8.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.2.s.8.name=TriggerPort2[8]
unit.2.0.port.2.s.8.orderindex=-1
unit.2.0.port.2.s.8.visible=1
unit.2.0.port.2.s.9.alias=
unit.2.0.port.2.s.9.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.2.s.9.name=TriggerPort2[9]
unit.2.0.port.2.s.9.orderindex=-1
unit.2.0.port.2.s.9.visible=1
unit.2.0.port.3.b.0.alias=
unit.2.0.port.3.b.0.channellist=0 1 2 3 4 5
unit.2.0.port.3.b.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.3.b.0.name=TriggerPort3
unit.2.0.port.3.b.0.orderindex=-1
unit.2.0.port.3.b.0.radix=Hex
unit.2.0.port.3.b.0.signedOffset=0.0
unit.2.0.port.3.b.0.signedPrecision=0
unit.2.0.port.3.b.0.signedScaleFactor=1.0
unit.2.0.port.3.b.0.unsignedOffset=0.0
unit.2.0.port.3.b.0.unsignedPrecision=0
unit.2.0.port.3.b.0.unsignedScaleFactor=1.0
unit.2.0.port.3.b.0.visible=1
unit.2.0.port.3.buscount=1
unit.2.0.port.3.channelcount=6
unit.2.0.port.3.s.0.alias=ack
unit.2.0.port.3.s.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.3.s.0.name=TriggerPort3[0]
unit.2.0.port.3.s.0.orderindex=-1
unit.2.0.port.3.s.0.visible=1
unit.2.0.port.3.s.1.alias=stb
unit.2.0.port.3.s.1.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.3.s.1.name=TriggerPort3[1]
unit.2.0.port.3.s.1.orderindex=-1
unit.2.0.port.3.s.1.visible=1
unit.2.0.port.3.s.2.alias=cyc
unit.2.0.port.3.s.2.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.3.s.2.name=TriggerPort3[2]
unit.2.0.port.3.s.2.orderindex=-1
unit.2.0.port.3.s.2.visible=1
unit.2.0.port.3.s.3.alias=tga
unit.2.0.port.3.s.3.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.3.s.3.name=TriggerPort3[3]
unit.2.0.port.3.s.3.orderindex=-1
unit.2.0.port.3.s.3.visible=1
unit.2.0.port.3.s.4.alias=we
unit.2.0.port.3.s.4.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.3.s.4.name=TriggerPort3[4]
unit.2.0.port.3.s.4.orderindex=-1
unit.2.0.port.3.s.4.visible=1
unit.2.0.port.3.s.5.alias=clk
unit.2.0.port.3.s.5.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.3.s.5.name=TriggerPort3[5]
unit.2.0.port.3.s.5.orderindex=-1
unit.2.0.port.3.s.5.visible=1
unit.2.0.port.4.b.0.alias=
unit.2.0.port.4.b.0.channellist=0 1 2 3 4 5
unit.2.0.port.4.b.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.4.b.0.name=TriggerPort4
unit.2.0.port.4.b.0.orderindex=-1
unit.2.0.port.4.b.0.radix=Hex
unit.2.0.port.4.b.0.signedOffset=0.0
unit.2.0.port.4.b.0.signedPrecision=0
unit.2.0.port.4.b.0.signedScaleFactor=1.0
unit.2.0.port.4.b.0.unsignedOffset=0.0
unit.2.0.port.4.b.0.unsignedPrecision=0
unit.2.0.port.4.b.0.unsignedScaleFactor=1.0
unit.2.0.port.4.b.0.visible=1
unit.2.0.port.4.buscount=1
unit.2.0.port.4.channelcount=6
unit.2.0.port.4.s.0.alias=DataPort[78]
unit.2.0.port.4.s.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.4.s.0.name=TriggerPort4[0]
unit.2.0.port.4.s.0.orderindex=-1
unit.2.0.port.4.s.0.visible=1
unit.2.0.port.4.s.1.alias=
unit.2.0.port.4.s.1.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.4.s.1.name=TriggerPort4[1]
unit.2.0.port.4.s.1.orderindex=-1
unit.2.0.port.4.s.1.visible=1
unit.2.0.port.4.s.10.alias=
unit.2.0.port.4.s.10.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.4.s.10.name=TriggerPort4[10]
unit.2.0.port.4.s.10.orderindex=-1
unit.2.0.port.4.s.10.visible=1
unit.2.0.port.4.s.11.alias=
unit.2.0.port.4.s.11.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.4.s.11.name=TriggerPort4[11]
unit.2.0.port.4.s.11.orderindex=-1
unit.2.0.port.4.s.11.visible=1
unit.2.0.port.4.s.12.alias=
unit.2.0.port.4.s.12.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.4.s.12.name=TriggerPort4[12]
unit.2.0.port.4.s.12.orderindex=-1
unit.2.0.port.4.s.12.visible=1
unit.2.0.port.4.s.13.alias=
unit.2.0.port.4.s.13.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.4.s.13.name=TriggerPort4[13]
unit.2.0.port.4.s.13.orderindex=-1
unit.2.0.port.4.s.13.visible=1
unit.2.0.port.4.s.14.alias=
unit.2.0.port.4.s.14.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.4.s.14.name=TriggerPort4[14]
unit.2.0.port.4.s.14.orderindex=-1
unit.2.0.port.4.s.14.visible=1
unit.2.0.port.4.s.15.alias=
unit.2.0.port.4.s.15.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.4.s.15.name=TriggerPort4[15]
unit.2.0.port.4.s.15.orderindex=-1
unit.2.0.port.4.s.15.visible=1
unit.2.0.port.4.s.2.alias=
unit.2.0.port.4.s.2.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.4.s.2.name=TriggerPort4[2]
unit.2.0.port.4.s.2.orderindex=-1
unit.2.0.port.4.s.2.visible=1
unit.2.0.port.4.s.3.alias=
unit.2.0.port.4.s.3.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.4.s.3.name=TriggerPort4[3]
unit.2.0.port.4.s.3.orderindex=-1
unit.2.0.port.4.s.3.visible=1
unit.2.0.port.4.s.4.alias=
unit.2.0.port.4.s.4.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.4.s.4.name=TriggerPort4[4]
unit.2.0.port.4.s.4.orderindex=-1
unit.2.0.port.4.s.4.visible=1
unit.2.0.port.4.s.5.alias=
unit.2.0.port.4.s.5.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.4.s.5.name=TriggerPort4[5]
unit.2.0.port.4.s.5.orderindex=-1
unit.2.0.port.4.s.5.visible=1
unit.2.0.port.4.s.6.alias=
unit.2.0.port.4.s.6.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.4.s.6.name=TriggerPort4[6]
unit.2.0.port.4.s.6.orderindex=-1
unit.2.0.port.4.s.6.visible=1
unit.2.0.port.4.s.7.alias=
unit.2.0.port.4.s.7.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.4.s.7.name=TriggerPort4[7]
unit.2.0.port.4.s.7.orderindex=-1
unit.2.0.port.4.s.7.visible=1
unit.2.0.port.4.s.8.alias=
unit.2.0.port.4.s.8.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.4.s.8.name=TriggerPort4[8]
unit.2.0.port.4.s.8.orderindex=-1
unit.2.0.port.4.s.8.visible=1
unit.2.0.port.4.s.9.alias=
unit.2.0.port.4.s.9.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.4.s.9.name=TriggerPort4[9]
unit.2.0.port.4.s.9.orderindex=-1
unit.2.0.port.4.s.9.visible=1
unit.2.0.port.5.b.0.alias=
unit.2.0.port.5.b.0.channellist=0 1 2 3 4 5
unit.2.0.port.5.b.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.5.b.0.name=TriggerPort5
unit.2.0.port.5.b.0.orderindex=-1
unit.2.0.port.5.b.0.radix=Hex
unit.2.0.port.5.b.0.signedOffset=0.0
unit.2.0.port.5.b.0.signedPrecision=0
unit.2.0.port.5.b.0.signedScaleFactor=1.0
unit.2.0.port.5.b.0.unsignedOffset=0.0
unit.2.0.port.5.b.0.unsignedPrecision=0
unit.2.0.port.5.b.0.unsignedScaleFactor=1.0
unit.2.0.port.5.b.0.visible=1
unit.2.0.port.5.buscount=1
unit.2.0.port.5.channelcount=6
unit.2.0.port.5.s.0.alias=
unit.2.0.port.5.s.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.5.s.0.name=TriggerPort5[0]
unit.2.0.port.5.s.0.orderindex=-1
unit.2.0.port.5.s.0.visible=1
unit.2.0.port.5.s.1.alias=
unit.2.0.port.5.s.1.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.5.s.1.name=TriggerPort5[1]
unit.2.0.port.5.s.1.orderindex=-1
unit.2.0.port.5.s.1.visible=1
unit.2.0.port.5.s.2.alias=
unit.2.0.port.5.s.2.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.5.s.2.name=TriggerPort5[2]
unit.2.0.port.5.s.2.orderindex=-1
unit.2.0.port.5.s.2.visible=1
unit.2.0.port.5.s.3.alias=
unit.2.0.port.5.s.3.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.5.s.3.name=TriggerPort5[3]
unit.2.0.port.5.s.3.orderindex=-1
unit.2.0.port.5.s.3.visible=1
unit.2.0.port.5.s.4.alias=
unit.2.0.port.5.s.4.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.5.s.4.name=TriggerPort5[4]
unit.2.0.port.5.s.4.orderindex=-1
unit.2.0.port.5.s.4.visible=1
unit.2.0.port.5.s.5.alias=
unit.2.0.port.5.s.5.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.5.s.5.name=TriggerPort5[5]
unit.2.0.port.5.s.5.orderindex=-1
unit.2.0.port.5.s.5.visible=1
unit.2.0.port.6.b.0.alias=
unit.2.0.port.6.b.0.channellist=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
unit.2.0.port.6.b.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.6.b.0.name=TriggerPort6
unit.2.0.port.6.b.0.orderindex=-1
unit.2.0.port.6.b.0.radix=Hex
unit.2.0.port.6.b.0.signedOffset=0.0
unit.2.0.port.6.b.0.signedPrecision=0
unit.2.0.port.6.b.0.signedScaleFactor=1.0
unit.2.0.port.6.b.0.unsignedOffset=0.0
unit.2.0.port.6.b.0.unsignedPrecision=0
unit.2.0.port.6.b.0.unsignedScaleFactor=1.0
unit.2.0.port.6.b.0.visible=1
unit.2.0.port.6.buscount=1
unit.2.0.port.6.channelcount=16
unit.2.0.port.6.s.0.alias=
unit.2.0.port.6.s.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.6.s.0.name=TriggerPort6[0]
unit.2.0.port.6.s.0.orderindex=-1
unit.2.0.port.6.s.0.visible=1
unit.2.0.port.6.s.1.alias=
unit.2.0.port.6.s.1.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.6.s.1.name=TriggerPort6[1]
unit.2.0.port.6.s.1.orderindex=-1
unit.2.0.port.6.s.1.visible=1
unit.2.0.port.6.s.10.alias=
unit.2.0.port.6.s.10.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.6.s.10.name=TriggerPort6[10]
unit.2.0.port.6.s.10.orderindex=-1
unit.2.0.port.6.s.10.visible=1
unit.2.0.port.6.s.11.alias=
unit.2.0.port.6.s.11.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.6.s.11.name=TriggerPort6[11]
unit.2.0.port.6.s.11.orderindex=-1
unit.2.0.port.6.s.11.visible=1
unit.2.0.port.6.s.12.alias=
unit.2.0.port.6.s.12.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.6.s.12.name=TriggerPort6[12]
unit.2.0.port.6.s.12.orderindex=-1
unit.2.0.port.6.s.12.visible=1
unit.2.0.port.6.s.13.alias=
unit.2.0.port.6.s.13.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.6.s.13.name=TriggerPort6[13]
unit.2.0.port.6.s.13.orderindex=-1
unit.2.0.port.6.s.13.visible=1
unit.2.0.port.6.s.14.alias=
unit.2.0.port.6.s.14.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.6.s.14.name=TriggerPort6[14]
unit.2.0.port.6.s.14.orderindex=-1
unit.2.0.port.6.s.14.visible=1
unit.2.0.port.6.s.15.alias=
unit.2.0.port.6.s.15.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.6.s.15.name=TriggerPort6[15]
unit.2.0.port.6.s.15.orderindex=-1
unit.2.0.port.6.s.15.visible=1
unit.2.0.port.6.s.2.alias=
unit.2.0.port.6.s.2.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.6.s.2.name=TriggerPort6[2]
unit.2.0.port.6.s.2.orderindex=-1
unit.2.0.port.6.s.2.visible=1
unit.2.0.port.6.s.3.alias=
unit.2.0.port.6.s.3.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.6.s.3.name=TriggerPort6[3]
unit.2.0.port.6.s.3.orderindex=-1
unit.2.0.port.6.s.3.visible=1
unit.2.0.port.6.s.4.alias=
unit.2.0.port.6.s.4.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.6.s.4.name=TriggerPort6[4]
unit.2.0.port.6.s.4.orderindex=-1
unit.2.0.port.6.s.4.visible=1
unit.2.0.port.6.s.5.alias=
unit.2.0.port.6.s.5.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.6.s.5.name=TriggerPort6[5]
unit.2.0.port.6.s.5.orderindex=-1
unit.2.0.port.6.s.5.visible=1
unit.2.0.port.6.s.6.alias=
unit.2.0.port.6.s.6.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.6.s.6.name=TriggerPort6[6]
unit.2.0.port.6.s.6.orderindex=-1
unit.2.0.port.6.s.6.visible=1
unit.2.0.port.6.s.7.alias=
unit.2.0.port.6.s.7.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.6.s.7.name=TriggerPort6[7]
unit.2.0.port.6.s.7.orderindex=-1
unit.2.0.port.6.s.7.visible=1
unit.2.0.port.6.s.8.alias=
unit.2.0.port.6.s.8.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.6.s.8.name=TriggerPort6[8]
unit.2.0.port.6.s.8.orderindex=-1
unit.2.0.port.6.s.8.visible=1
unit.2.0.port.6.s.9.alias=
unit.2.0.port.6.s.9.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.6.s.9.name=TriggerPort6[9]
unit.2.0.port.6.s.9.orderindex=-1
unit.2.0.port.6.s.9.visible=1
unit.2.0.port.7.b.0.alias=
unit.2.0.port.7.b.0.channellist=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
unit.2.0.port.7.b.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.7.b.0.name=TriggerPort7
unit.2.0.port.7.b.0.orderindex=-1
unit.2.0.port.7.b.0.radix=Hex
unit.2.0.port.7.b.0.signedOffset=0.0
unit.2.0.port.7.b.0.signedPrecision=0
unit.2.0.port.7.b.0.signedScaleFactor=1.0
unit.2.0.port.7.b.0.unsignedOffset=0.0
unit.2.0.port.7.b.0.unsignedPrecision=0
unit.2.0.port.7.b.0.unsignedScaleFactor=1.0
unit.2.0.port.7.b.0.visible=1
unit.2.0.port.7.buscount=1
unit.2.0.port.7.channelcount=16
unit.2.0.port.7.s.0.alias=
unit.2.0.port.7.s.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.7.s.0.name=TriggerPort7[0]
unit.2.0.port.7.s.0.orderindex=-1
unit.2.0.port.7.s.0.visible=1
unit.2.0.port.7.s.1.alias=
unit.2.0.port.7.s.1.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.7.s.1.name=TriggerPort7[1]
unit.2.0.port.7.s.1.orderindex=-1
unit.2.0.port.7.s.1.visible=1
unit.2.0.port.7.s.10.alias=
unit.2.0.port.7.s.10.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.7.s.10.name=TriggerPort7[10]
unit.2.0.port.7.s.10.orderindex=-1
unit.2.0.port.7.s.10.visible=1
unit.2.0.port.7.s.11.alias=
unit.2.0.port.7.s.11.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.7.s.11.name=TriggerPort7[11]
unit.2.0.port.7.s.11.orderindex=-1
unit.2.0.port.7.s.11.visible=1
unit.2.0.port.7.s.12.alias=
unit.2.0.port.7.s.12.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.7.s.12.name=TriggerPort7[12]
unit.2.0.port.7.s.12.orderindex=-1
unit.2.0.port.7.s.12.visible=1
unit.2.0.port.7.s.13.alias=
unit.2.0.port.7.s.13.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.7.s.13.name=TriggerPort7[13]
unit.2.0.port.7.s.13.orderindex=-1
unit.2.0.port.7.s.13.visible=1
unit.2.0.port.7.s.14.alias=
unit.2.0.port.7.s.14.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.7.s.14.name=TriggerPort7[14]
unit.2.0.port.7.s.14.orderindex=-1
unit.2.0.port.7.s.14.visible=1
unit.2.0.port.7.s.15.alias=
unit.2.0.port.7.s.15.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.7.s.15.name=TriggerPort7[15]
unit.2.0.port.7.s.15.orderindex=-1
unit.2.0.port.7.s.15.visible=1
unit.2.0.port.7.s.2.alias=
unit.2.0.port.7.s.2.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.7.s.2.name=TriggerPort7[2]
unit.2.0.port.7.s.2.orderindex=-1
unit.2.0.port.7.s.2.visible=1
unit.2.0.port.7.s.3.alias=
unit.2.0.port.7.s.3.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.7.s.3.name=TriggerPort7[3]
unit.2.0.port.7.s.3.orderindex=-1
unit.2.0.port.7.s.3.visible=1
unit.2.0.port.7.s.4.alias=
unit.2.0.port.7.s.4.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.7.s.4.name=TriggerPort7[4]
unit.2.0.port.7.s.4.orderindex=-1
unit.2.0.port.7.s.4.visible=1
unit.2.0.port.7.s.5.alias=
unit.2.0.port.7.s.5.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.7.s.5.name=TriggerPort7[5]
unit.2.0.port.7.s.5.orderindex=-1
unit.2.0.port.7.s.5.visible=1
unit.2.0.port.7.s.6.alias=
unit.2.0.port.7.s.6.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.7.s.6.name=TriggerPort7[6]
unit.2.0.port.7.s.6.orderindex=-1
unit.2.0.port.7.s.6.visible=1
unit.2.0.port.7.s.7.alias=
unit.2.0.port.7.s.7.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.7.s.7.name=TriggerPort7[7]
unit.2.0.port.7.s.7.orderindex=-1
unit.2.0.port.7.s.7.visible=1
unit.2.0.port.7.s.8.alias=
unit.2.0.port.7.s.8.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.7.s.8.name=TriggerPort7[8]
unit.2.0.port.7.s.8.orderindex=-1
unit.2.0.port.7.s.8.visible=1
unit.2.0.port.7.s.9.alias=
unit.2.0.port.7.s.9.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.7.s.9.name=TriggerPort7[9]
unit.2.0.port.7.s.9.orderindex=-1
unit.2.0.port.7.s.9.visible=1
unit.2.0.port.8.b.0.alias=
unit.2.0.port.8.b.0.channellist=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
unit.2.0.port.8.b.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.b.0.name=TriggerPort8
unit.2.0.port.8.b.0.orderindex=-1
unit.2.0.port.8.b.0.radix=Hex
unit.2.0.port.8.b.0.signedOffset=0.0
unit.2.0.port.8.b.0.signedPrecision=0
unit.2.0.port.8.b.0.signedScaleFactor=1.0
unit.2.0.port.8.b.0.unsignedOffset=0.0
unit.2.0.port.8.b.0.unsignedPrecision=0
unit.2.0.port.8.b.0.unsignedScaleFactor=1.0
unit.2.0.port.8.b.0.visible=1
unit.2.0.port.8.buscount=1
unit.2.0.port.8.channelcount=32
unit.2.0.port.8.s.0.alias=
unit.2.0.port.8.s.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.0.name=TriggerPort8[0]
unit.2.0.port.8.s.0.orderindex=-1
unit.2.0.port.8.s.0.visible=1
unit.2.0.port.8.s.1.alias=
unit.2.0.port.8.s.1.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.1.name=TriggerPort8[1]
unit.2.0.port.8.s.1.orderindex=-1
unit.2.0.port.8.s.1.visible=1
unit.2.0.port.8.s.10.alias=
unit.2.0.port.8.s.10.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.10.name=TriggerPort8[10]
unit.2.0.port.8.s.10.orderindex=-1
unit.2.0.port.8.s.10.visible=1
unit.2.0.port.8.s.11.alias=
unit.2.0.port.8.s.11.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.11.name=TriggerPort8[11]
unit.2.0.port.8.s.11.orderindex=-1
unit.2.0.port.8.s.11.visible=1
unit.2.0.port.8.s.12.alias=
unit.2.0.port.8.s.12.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.12.name=TriggerPort8[12]
unit.2.0.port.8.s.12.orderindex=-1
unit.2.0.port.8.s.12.visible=1
unit.2.0.port.8.s.13.alias=
unit.2.0.port.8.s.13.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.13.name=TriggerPort8[13]
unit.2.0.port.8.s.13.orderindex=-1
unit.2.0.port.8.s.13.visible=1
unit.2.0.port.8.s.14.alias=
unit.2.0.port.8.s.14.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.14.name=TriggerPort8[14]
unit.2.0.port.8.s.14.orderindex=-1
unit.2.0.port.8.s.14.visible=1
unit.2.0.port.8.s.15.alias=
unit.2.0.port.8.s.15.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.15.name=TriggerPort8[15]
unit.2.0.port.8.s.15.orderindex=-1
unit.2.0.port.8.s.15.visible=1
unit.2.0.port.8.s.16.alias=
unit.2.0.port.8.s.16.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.16.name=TriggerPort8[16]
unit.2.0.port.8.s.16.orderindex=-1
unit.2.0.port.8.s.16.visible=1
unit.2.0.port.8.s.17.alias=
unit.2.0.port.8.s.17.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.17.name=TriggerPort8[17]
unit.2.0.port.8.s.17.orderindex=-1
unit.2.0.port.8.s.17.visible=1
unit.2.0.port.8.s.18.alias=
unit.2.0.port.8.s.18.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.18.name=TriggerPort8[18]
unit.2.0.port.8.s.18.orderindex=-1
unit.2.0.port.8.s.18.visible=1
unit.2.0.port.8.s.19.alias=
unit.2.0.port.8.s.19.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.19.name=TriggerPort8[19]
unit.2.0.port.8.s.19.orderindex=-1
unit.2.0.port.8.s.19.visible=1
unit.2.0.port.8.s.2.alias=
unit.2.0.port.8.s.2.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.2.name=TriggerPort8[2]
unit.2.0.port.8.s.2.orderindex=-1
unit.2.0.port.8.s.2.visible=1
unit.2.0.port.8.s.20.alias=
unit.2.0.port.8.s.20.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.20.name=TriggerPort8[20]
unit.2.0.port.8.s.20.orderindex=-1
unit.2.0.port.8.s.20.visible=1
unit.2.0.port.8.s.21.alias=
unit.2.0.port.8.s.21.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.21.name=TriggerPort8[21]
unit.2.0.port.8.s.21.orderindex=-1
unit.2.0.port.8.s.21.visible=1
unit.2.0.port.8.s.22.alias=
unit.2.0.port.8.s.22.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.22.name=TriggerPort8[22]
unit.2.0.port.8.s.22.orderindex=-1
unit.2.0.port.8.s.22.visible=1
unit.2.0.port.8.s.23.alias=
unit.2.0.port.8.s.23.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.23.name=TriggerPort8[23]
unit.2.0.port.8.s.23.orderindex=-1
unit.2.0.port.8.s.23.visible=1
unit.2.0.port.8.s.24.alias=
unit.2.0.port.8.s.24.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.24.name=TriggerPort8[24]
unit.2.0.port.8.s.24.orderindex=-1
unit.2.0.port.8.s.24.visible=1
unit.2.0.port.8.s.25.alias=
unit.2.0.port.8.s.25.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.25.name=TriggerPort8[25]
unit.2.0.port.8.s.25.orderindex=-1
unit.2.0.port.8.s.25.visible=1
unit.2.0.port.8.s.26.alias=
unit.2.0.port.8.s.26.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.26.name=TriggerPort8[26]
unit.2.0.port.8.s.26.orderindex=-1
unit.2.0.port.8.s.26.visible=1
unit.2.0.port.8.s.27.alias=
unit.2.0.port.8.s.27.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.27.name=TriggerPort8[27]
unit.2.0.port.8.s.27.orderindex=-1
unit.2.0.port.8.s.27.visible=1
unit.2.0.port.8.s.28.alias=
unit.2.0.port.8.s.28.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.28.name=TriggerPort8[28]
unit.2.0.port.8.s.28.orderindex=-1
unit.2.0.port.8.s.28.visible=1
unit.2.0.port.8.s.29.alias=
unit.2.0.port.8.s.29.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.29.name=TriggerPort8[29]
unit.2.0.port.8.s.29.orderindex=-1
unit.2.0.port.8.s.29.visible=1
unit.2.0.port.8.s.3.alias=
unit.2.0.port.8.s.3.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.3.name=TriggerPort8[3]
unit.2.0.port.8.s.3.orderindex=-1
unit.2.0.port.8.s.3.visible=1
unit.2.0.port.8.s.30.alias=
unit.2.0.port.8.s.30.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.30.name=TriggerPort8[30]
unit.2.0.port.8.s.30.orderindex=-1
unit.2.0.port.8.s.30.visible=1
unit.2.0.port.8.s.31.alias=
unit.2.0.port.8.s.31.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.31.name=TriggerPort8[31]
unit.2.0.port.8.s.31.orderindex=-1
unit.2.0.port.8.s.31.visible=1
unit.2.0.port.8.s.4.alias=
unit.2.0.port.8.s.4.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.4.name=TriggerPort8[4]
unit.2.0.port.8.s.4.orderindex=-1
unit.2.0.port.8.s.4.visible=1
unit.2.0.port.8.s.5.alias=
unit.2.0.port.8.s.5.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.5.name=TriggerPort8[5]
unit.2.0.port.8.s.5.orderindex=-1
unit.2.0.port.8.s.5.visible=1
unit.2.0.port.8.s.6.alias=
unit.2.0.port.8.s.6.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.6.name=TriggerPort8[6]
unit.2.0.port.8.s.6.orderindex=-1
unit.2.0.port.8.s.6.visible=1
unit.2.0.port.8.s.7.alias=
unit.2.0.port.8.s.7.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.7.name=TriggerPort8[7]
unit.2.0.port.8.s.7.orderindex=-1
unit.2.0.port.8.s.7.visible=1
unit.2.0.port.8.s.8.alias=
unit.2.0.port.8.s.8.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.8.name=TriggerPort8[8]
unit.2.0.port.8.s.8.orderindex=-1
unit.2.0.port.8.s.8.visible=1
unit.2.0.port.8.s.9.alias=
unit.2.0.port.8.s.9.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.8.s.9.name=TriggerPort8[9]
unit.2.0.port.8.s.9.orderindex=-1
unit.2.0.port.8.s.9.visible=1
unit.2.0.port.9.b.0.alias=
unit.2.0.port.9.b.0.channellist=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
unit.2.0.port.9.b.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.b.0.name=TriggerPort9
unit.2.0.port.9.b.0.orderindex=-1
unit.2.0.port.9.b.0.radix=Hex
unit.2.0.port.9.b.0.signedOffset=0.0
unit.2.0.port.9.b.0.signedPrecision=0
unit.2.0.port.9.b.0.signedScaleFactor=1.0
unit.2.0.port.9.b.0.unsignedOffset=0.0
unit.2.0.port.9.b.0.unsignedPrecision=0
unit.2.0.port.9.b.0.unsignedScaleFactor=1.0
unit.2.0.port.9.b.0.visible=1
unit.2.0.port.9.buscount=1
unit.2.0.port.9.channelcount=16
unit.2.0.port.9.s.0.alias=
unit.2.0.port.9.s.0.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.0.name=TriggerPort9[0]
unit.2.0.port.9.s.0.orderindex=-1
unit.2.0.port.9.s.0.visible=1
unit.2.0.port.9.s.1.alias=
unit.2.0.port.9.s.1.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.1.name=TriggerPort9[1]
unit.2.0.port.9.s.1.orderindex=-1
unit.2.0.port.9.s.1.visible=1
unit.2.0.port.9.s.10.alias=
unit.2.0.port.9.s.10.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.10.name=TriggerPort9[10]
unit.2.0.port.9.s.10.orderindex=-1
unit.2.0.port.9.s.10.visible=1
unit.2.0.port.9.s.11.alias=
unit.2.0.port.9.s.11.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.11.name=TriggerPort9[11]
unit.2.0.port.9.s.11.orderindex=-1
unit.2.0.port.9.s.11.visible=1
unit.2.0.port.9.s.12.alias=
unit.2.0.port.9.s.12.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.12.name=TriggerPort9[12]
unit.2.0.port.9.s.12.orderindex=-1
unit.2.0.port.9.s.12.visible=1
unit.2.0.port.9.s.13.alias=
unit.2.0.port.9.s.13.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.13.name=TriggerPort9[13]
unit.2.0.port.9.s.13.orderindex=-1
unit.2.0.port.9.s.13.visible=1
unit.2.0.port.9.s.14.alias=
unit.2.0.port.9.s.14.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.14.name=TriggerPort9[14]
unit.2.0.port.9.s.14.orderindex=-1
unit.2.0.port.9.s.14.visible=1
unit.2.0.port.9.s.15.alias=
unit.2.0.port.9.s.15.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.15.name=TriggerPort9[15]
unit.2.0.port.9.s.15.orderindex=-1
unit.2.0.port.9.s.15.visible=1
unit.2.0.port.9.s.16.alias=
unit.2.0.port.9.s.16.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.16.name=TriggerPort9[16]
unit.2.0.port.9.s.16.orderindex=-1
unit.2.0.port.9.s.16.visible=1
unit.2.0.port.9.s.17.alias=
unit.2.0.port.9.s.17.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.17.name=TriggerPort9[17]
unit.2.0.port.9.s.17.orderindex=-1
unit.2.0.port.9.s.17.visible=1
unit.2.0.port.9.s.18.alias=
unit.2.0.port.9.s.18.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.18.name=TriggerPort9[18]
unit.2.0.port.9.s.18.orderindex=-1
unit.2.0.port.9.s.18.visible=1
unit.2.0.port.9.s.19.alias=
unit.2.0.port.9.s.19.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.19.name=TriggerPort9[19]
unit.2.0.port.9.s.19.orderindex=-1
unit.2.0.port.9.s.19.visible=1
unit.2.0.port.9.s.2.alias=
unit.2.0.port.9.s.2.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.2.name=TriggerPort9[2]
unit.2.0.port.9.s.2.orderindex=-1
unit.2.0.port.9.s.2.visible=1
unit.2.0.port.9.s.20.alias=
unit.2.0.port.9.s.20.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.20.name=TriggerPort9[20]
unit.2.0.port.9.s.20.orderindex=-1
unit.2.0.port.9.s.20.visible=1
unit.2.0.port.9.s.21.alias=
unit.2.0.port.9.s.21.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.21.name=TriggerPort9[21]
unit.2.0.port.9.s.21.orderindex=-1
unit.2.0.port.9.s.21.visible=1
unit.2.0.port.9.s.22.alias=
unit.2.0.port.9.s.22.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.22.name=TriggerPort9[22]
unit.2.0.port.9.s.22.orderindex=-1
unit.2.0.port.9.s.22.visible=1
unit.2.0.port.9.s.23.alias=
unit.2.0.port.9.s.23.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.23.name=TriggerPort9[23]
unit.2.0.port.9.s.23.orderindex=-1
unit.2.0.port.9.s.23.visible=1
unit.2.0.port.9.s.24.alias=
unit.2.0.port.9.s.24.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.24.name=TriggerPort9[24]
unit.2.0.port.9.s.24.orderindex=-1
unit.2.0.port.9.s.24.visible=1
unit.2.0.port.9.s.25.alias=
unit.2.0.port.9.s.25.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.25.name=TriggerPort9[25]
unit.2.0.port.9.s.25.orderindex=-1
unit.2.0.port.9.s.25.visible=1
unit.2.0.port.9.s.26.alias=
unit.2.0.port.9.s.26.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.26.name=TriggerPort9[26]
unit.2.0.port.9.s.26.orderindex=-1
unit.2.0.port.9.s.26.visible=1
unit.2.0.port.9.s.27.alias=
unit.2.0.port.9.s.27.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.27.name=TriggerPort9[27]
unit.2.0.port.9.s.27.orderindex=-1
unit.2.0.port.9.s.27.visible=1
unit.2.0.port.9.s.28.alias=
unit.2.0.port.9.s.28.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.28.name=TriggerPort9[28]
unit.2.0.port.9.s.28.orderindex=-1
unit.2.0.port.9.s.28.visible=1
unit.2.0.port.9.s.29.alias=
unit.2.0.port.9.s.29.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.29.name=TriggerPort9[29]
unit.2.0.port.9.s.29.orderindex=-1
unit.2.0.port.9.s.29.visible=1
unit.2.0.port.9.s.3.alias=
unit.2.0.port.9.s.3.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.3.name=TriggerPort9[3]
unit.2.0.port.9.s.3.orderindex=-1
unit.2.0.port.9.s.3.visible=1
unit.2.0.port.9.s.30.alias=
unit.2.0.port.9.s.30.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.30.name=TriggerPort9[30]
unit.2.0.port.9.s.30.orderindex=-1
unit.2.0.port.9.s.30.visible=1
unit.2.0.port.9.s.31.alias=
unit.2.0.port.9.s.31.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.31.name=TriggerPort9[31]
unit.2.0.port.9.s.31.orderindex=-1
unit.2.0.port.9.s.31.visible=1
unit.2.0.port.9.s.4.alias=
unit.2.0.port.9.s.4.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.4.name=TriggerPort9[4]
unit.2.0.port.9.s.4.orderindex=-1
unit.2.0.port.9.s.4.visible=1
unit.2.0.port.9.s.5.alias=
unit.2.0.port.9.s.5.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.5.name=TriggerPort9[5]
unit.2.0.port.9.s.5.orderindex=-1
unit.2.0.port.9.s.5.visible=1
unit.2.0.port.9.s.6.alias=
unit.2.0.port.9.s.6.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.6.name=TriggerPort9[6]
unit.2.0.port.9.s.6.orderindex=-1
unit.2.0.port.9.s.6.visible=1
unit.2.0.port.9.s.7.alias=
unit.2.0.port.9.s.7.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.7.name=TriggerPort9[7]
unit.2.0.port.9.s.7.orderindex=-1
unit.2.0.port.9.s.7.visible=1
unit.2.0.port.9.s.8.alias=
unit.2.0.port.9.s.8.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.8.name=TriggerPort9[8]
unit.2.0.port.9.s.8.orderindex=-1
unit.2.0.port.9.s.8.visible=1
unit.2.0.port.9.s.9.alias=
unit.2.0.port.9.s.9.color=java.awt.Color[r\=0,g\=0,b\=124]
unit.2.0.port.9.s.9.name=TriggerPort9[9]
unit.2.0.port.9.s.9.orderindex=-1
unit.2.0.port.9.s.9.visible=1
unit.2.0.portcount=16
unit.2.0.samplesPerTrigger=1
unit.2.0.triggerCapture=1
unit.2.0.triggerNSamplesTS=0
unit.2.0.triggerPosition=0
unit.2.0.triggerWindowCount=1
unit.2.0.triggerWindowDepth=1024
unit.2.0.triggerWindowTS=0
unit.2.0.username=MyILA0
unit.2.0.waveform.count=35
unit.2.0.waveform.posn.0.channel=2147483646
unit.2.0.waveform.posn.0.name=aluo
unit.2.0.waveform.posn.0.radix=1
unit.2.0.waveform.posn.0.type=bus
unit.2.0.waveform.posn.1.channel=2147483646
unit.2.0.waveform.posn.1.name=x
unit.2.0.waveform.posn.1.radix=1
unit.2.0.waveform.posn.1.type=bus
unit.2.0.waveform.posn.10.channel=2147483646
unit.2.0.waveform.posn.10.name=dat_o
unit.2.0.waveform.posn.10.radix=1
unit.2.0.waveform.posn.10.type=bus
unit.2.0.waveform.posn.100.channel=2147483646
unit.2.0.waveform.posn.100.name=adr
unit.2.0.waveform.posn.100.radix=1
unit.2.0.waveform.posn.100.type=bus
unit.2.0.waveform.posn.101.channel=2147483646
unit.2.0.waveform.posn.101.name=adr
unit.2.0.waveform.posn.101.radix=1
unit.2.0.waveform.posn.101.type=bus
unit.2.0.waveform.posn.102.channel=2147483646
unit.2.0.waveform.posn.102.name=adr
unit.2.0.waveform.posn.102.radix=1
unit.2.0.waveform.posn.102.type=bus
unit.2.0.waveform.posn.103.channel=2147483646
unit.2.0.waveform.posn.103.name=adr
unit.2.0.waveform.posn.103.radix=1
unit.2.0.waveform.posn.103.type=bus
unit.2.0.waveform.posn.104.channel=2147483646
unit.2.0.waveform.posn.104.name=adr
unit.2.0.waveform.posn.104.radix=1
unit.2.0.waveform.posn.104.type=bus
unit.2.0.waveform.posn.105.channel=2147483646
unit.2.0.waveform.posn.105.name=adr
unit.2.0.waveform.posn.105.radix=1
unit.2.0.waveform.posn.105.type=bus
unit.2.0.waveform.posn.106.channel=2147483646
unit.2.0.waveform.posn.106.name=adr
unit.2.0.waveform.posn.106.radix=1
unit.2.0.waveform.posn.106.type=bus
unit.2.0.waveform.posn.107.channel=2147483646
unit.2.0.waveform.posn.107.name=adr
unit.2.0.waveform.posn.107.radix=1
unit.2.0.waveform.posn.107.type=bus
unit.2.0.waveform.posn.108.channel=2147483646
unit.2.0.waveform.posn.108.name=adr
unit.2.0.waveform.posn.108.radix=1
unit.2.0.waveform.posn.108.type=bus
unit.2.0.waveform.posn.109.channel=2147483646
unit.2.0.waveform.posn.109.name=adr
unit.2.0.waveform.posn.109.radix=1
unit.2.0.waveform.posn.109.type=bus
unit.2.0.waveform.posn.11.channel=2147483646
unit.2.0.waveform.posn.11.name=imm
unit.2.0.waveform.posn.11.radix=1
unit.2.0.waveform.posn.11.type=bus
unit.2.0.waveform.posn.110.channel=2147483646
unit.2.0.waveform.posn.110.name=adr
unit.2.0.waveform.posn.110.radix=1
unit.2.0.waveform.posn.110.type=bus
unit.2.0.waveform.posn.111.channel=2147483646
unit.2.0.waveform.posn.111.name=adr
unit.2.0.waveform.posn.111.radix=1
unit.2.0.waveform.posn.111.type=bus
unit.2.0.waveform.posn.112.channel=2147483646
unit.2.0.waveform.posn.112.name=adr
unit.2.0.waveform.posn.112.radix=1
unit.2.0.waveform.posn.112.type=bus
unit.2.0.waveform.posn.113.channel=2147483646
unit.2.0.waveform.posn.113.name=adr
unit.2.0.waveform.posn.113.radix=1
unit.2.0.waveform.posn.113.type=bus
unit.2.0.waveform.posn.114.channel=2147483646
unit.2.0.waveform.posn.114.name=adr
unit.2.0.waveform.posn.114.radix=1
unit.2.0.waveform.posn.114.type=bus
unit.2.0.waveform.posn.115.channel=2147483646
unit.2.0.waveform.posn.115.name=adr
unit.2.0.waveform.posn.115.radix=1
unit.2.0.waveform.posn.115.type=bus
unit.2.0.waveform.posn.116.channel=2147483646
unit.2.0.waveform.posn.116.name=adr
unit.2.0.waveform.posn.116.radix=1
unit.2.0.waveform.posn.116.type=bus
unit.2.0.waveform.posn.117.channel=2147483646
unit.2.0.waveform.posn.117.name=adr
unit.2.0.waveform.posn.117.radix=1
unit.2.0.waveform.posn.117.type=bus
unit.2.0.waveform.posn.118.channel=2147483646
unit.2.0.waveform.posn.118.name=adr
unit.2.0.waveform.posn.118.radix=1
unit.2.0.waveform.posn.118.type=bus
unit.2.0.waveform.posn.119.channel=2147483646
unit.2.0.waveform.posn.119.name=adr
unit.2.0.waveform.posn.119.radix=1
unit.2.0.waveform.posn.119.type=bus
unit.2.0.waveform.posn.12.channel=2147483646
unit.2.0.waveform.posn.12.name=pc
unit.2.0.waveform.posn.12.radix=1
unit.2.0.waveform.posn.12.type=bus
unit.2.0.waveform.posn.120.channel=2147483646
unit.2.0.waveform.posn.120.name=adr
unit.2.0.waveform.posn.120.radix=1
unit.2.0.waveform.posn.120.type=bus
unit.2.0.waveform.posn.121.channel=2147483646
unit.2.0.waveform.posn.121.name=adr
unit.2.0.waveform.posn.121.radix=1
unit.2.0.waveform.posn.121.type=bus
unit.2.0.waveform.posn.122.channel=2147483646
unit.2.0.waveform.posn.122.name=adr
unit.2.0.waveform.posn.122.radix=1
unit.2.0.waveform.posn.122.type=bus
unit.2.0.waveform.posn.123.channel=2147483646
unit.2.0.waveform.posn.123.name=adr
unit.2.0.waveform.posn.123.radix=1
unit.2.0.waveform.posn.123.type=bus
unit.2.0.waveform.posn.124.channel=2147483646
unit.2.0.waveform.posn.124.name=adr
unit.2.0.waveform.posn.124.radix=1
unit.2.0.waveform.posn.124.type=bus
unit.2.0.waveform.posn.125.channel=2147483646
unit.2.0.waveform.posn.125.name=adr
unit.2.0.waveform.posn.125.radix=1
unit.2.0.waveform.posn.125.type=bus
unit.2.0.waveform.posn.126.channel=2147483646
unit.2.0.waveform.posn.126.name=adr
unit.2.0.waveform.posn.126.radix=1
unit.2.0.waveform.posn.126.type=bus
unit.2.0.waveform.posn.127.channel=2147483646
unit.2.0.waveform.posn.127.name=adr
unit.2.0.waveform.posn.127.radix=1
unit.2.0.waveform.posn.127.type=bus
unit.2.0.waveform.posn.128.channel=2147483646
unit.2.0.waveform.posn.128.name=adr
unit.2.0.waveform.posn.128.radix=1
unit.2.0.waveform.posn.128.type=bus
unit.2.0.waveform.posn.129.channel=2147483646
unit.2.0.waveform.posn.129.name=adr
unit.2.0.waveform.posn.129.radix=1
unit.2.0.waveform.posn.129.type=bus
unit.2.0.waveform.posn.13.channel=72
unit.2.0.waveform.posn.13.name=ack
unit.2.0.waveform.posn.13.radix=1
unit.2.0.waveform.posn.13.type=signal
unit.2.0.waveform.posn.130.channel=2147483646
unit.2.0.waveform.posn.130.name=adr
unit.2.0.waveform.posn.130.radix=1
unit.2.0.waveform.posn.130.type=bus
unit.2.0.waveform.posn.14.channel=73
unit.2.0.waveform.posn.14.name=stb
unit.2.0.waveform.posn.14.radix=1
unit.2.0.waveform.posn.14.type=signal
unit.2.0.waveform.posn.15.channel=74
unit.2.0.waveform.posn.15.name=cyc
unit.2.0.waveform.posn.15.radix=1
unit.2.0.waveform.posn.15.type=signal
unit.2.0.waveform.posn.16.channel=75
unit.2.0.waveform.posn.16.name=tga
unit.2.0.waveform.posn.16.radix=1
unit.2.0.waveform.posn.16.type=signal
unit.2.0.waveform.posn.17.channel=76
unit.2.0.waveform.posn.17.name=we
unit.2.0.waveform.posn.17.radix=1
unit.2.0.waveform.posn.17.type=signal
unit.2.0.waveform.posn.18.channel=77
unit.2.0.waveform.posn.18.name=clk
unit.2.0.waveform.posn.18.radix=1
unit.2.0.waveform.posn.18.type=signal
unit.2.0.waveform.posn.19.channel=207
unit.2.0.waveform.posn.19.name=flash_ce2_
unit.2.0.waveform.posn.19.radix=1
unit.2.0.waveform.posn.19.type=signal
unit.2.0.waveform.posn.2.channel=2147483646
unit.2.0.waveform.posn.2.name=y
unit.2.0.waveform.posn.2.radix=1
unit.2.0.waveform.posn.2.type=bus
unit.2.0.waveform.posn.20.channel=208
unit.2.0.waveform.posn.20.name=sram_adv_
unit.2.0.waveform.posn.20.radix=1
unit.2.0.waveform.posn.20.type=signal
unit.2.0.waveform.posn.21.channel=209
unit.2.0.waveform.posn.21.name=sram_cen_
unit.2.0.waveform.posn.21.radix=1
unit.2.0.waveform.posn.21.type=signal
unit.2.0.waveform.posn.22.channel=214
unit.2.0.waveform.posn.22.name=sf_we_
unit.2.0.waveform.posn.22.radix=1
unit.2.0.waveform.posn.22.type=signal
unit.2.0.waveform.posn.23.channel=215
unit.2.0.waveform.posn.23.name=sf_oe_
unit.2.0.waveform.posn.23.radix=1
unit.2.0.waveform.posn.23.type=signal
unit.2.0.waveform.posn.24.channel=2147483646
unit.2.0.waveform.posn.24.name=s_bw_
unit.2.0.waveform.posn.24.radix=1
unit.2.0.waveform.posn.24.type=bus
unit.2.0.waveform.posn.25.channel=2147483646
unit.2.0.waveform.posn.25.name=s_data_
unit.2.0.waveform.posn.25.radix=1
unit.2.0.waveform.posn.25.type=bus
unit.2.0.waveform.posn.26.channel=2147483646
unit.2.0.waveform.posn.26.name=s_addr_
unit.2.0.waveform.posn.26.radix=1
unit.2.0.waveform.posn.26.type=bus
unit.2.0.waveform.posn.27.channel=2147483646
unit.2.0.waveform.posn.27.name=cnt
unit.2.0.waveform.posn.27.radix=1
unit.2.0.waveform.posn.27.type=bus
unit.2.0.waveform.posn.28.channel=219
unit.2.0.waveform.posn.28.name=op
unit.2.0.waveform.posn.28.radix=1
unit.2.0.waveform.posn.28.type=signal
unit.2.0.waveform.posn.29.channel=220
unit.2.0.waveform.posn.29.name=zbt_stb
unit.2.0.waveform.posn.29.radix=1
unit.2.0.waveform.posn.29.type=signal
unit.2.0.waveform.posn.3.channel=2147483646
unit.2.0.waveform.posn.3.name=io_reg
unit.2.0.waveform.posn.3.radix=1
unit.2.0.waveform.posn.3.type=bus
unit.2.0.waveform.posn.30.channel=221
unit.2.0.waveform.posn.30.name=flash_stb
unit.2.0.waveform.posn.30.radix=1
unit.2.0.waveform.posn.30.type=signal
unit.2.0.waveform.posn.31.channel=222
unit.2.0.waveform.posn.31.name=flash_arena
unit.2.0.waveform.posn.31.radix=1
unit.2.0.waveform.posn.31.type=signal
unit.2.0.waveform.posn.32.channel=223
unit.2.0.waveform.posn.32.name=vdu_arena
unit.2.0.waveform.posn.32.radix=1
unit.2.0.waveform.posn.32.type=signal
unit.2.0.waveform.posn.33.channel=2147483646
unit.2.0.waveform.posn.33.name=cx
unit.2.0.waveform.posn.33.radix=1
unit.2.0.waveform.posn.33.type=bus
unit.2.0.waveform.posn.34.channel=2147483646
unit.2.0.waveform.posn.34.name=di
unit.2.0.waveform.posn.34.radix=1
unit.2.0.waveform.posn.34.type=bus
unit.2.0.waveform.posn.35.channel=2147483646
unit.2.0.waveform.posn.35.name=adr
unit.2.0.waveform.posn.35.radix=1
unit.2.0.waveform.posn.35.type=bus
unit.2.0.waveform.posn.36.channel=2147483646
unit.2.0.waveform.posn.36.name=adr
unit.2.0.waveform.posn.36.radix=1
unit.2.0.waveform.posn.36.type=bus
unit.2.0.waveform.posn.37.channel=2147483646
unit.2.0.waveform.posn.37.name=adr
unit.2.0.waveform.posn.37.radix=1
unit.2.0.waveform.posn.37.type=bus
unit.2.0.waveform.posn.38.channel=2147483646
unit.2.0.waveform.posn.38.name=adr
unit.2.0.waveform.posn.38.radix=1
unit.2.0.waveform.posn.38.type=bus
unit.2.0.waveform.posn.39.channel=2147483646
unit.2.0.waveform.posn.39.name=adr
unit.2.0.waveform.posn.39.radix=1
unit.2.0.waveform.posn.39.type=bus
unit.2.0.waveform.posn.4.channel=2147483646
unit.2.0.waveform.posn.4.name=state
unit.2.0.waveform.posn.4.radix=1
unit.2.0.waveform.posn.4.type=bus
unit.2.0.waveform.posn.40.channel=2147483646
unit.2.0.waveform.posn.40.name=adr
unit.2.0.waveform.posn.40.radix=1
unit.2.0.waveform.posn.40.type=bus
unit.2.0.waveform.posn.41.channel=2147483646
unit.2.0.waveform.posn.41.name=adr
unit.2.0.waveform.posn.41.radix=1
unit.2.0.waveform.posn.41.type=bus
unit.2.0.waveform.posn.42.channel=2147483646
unit.2.0.waveform.posn.42.name=adr
unit.2.0.waveform.posn.42.radix=1
unit.2.0.waveform.posn.42.type=bus
unit.2.0.waveform.posn.43.channel=2147483646
unit.2.0.waveform.posn.43.name=adr
unit.2.0.waveform.posn.43.radix=1
unit.2.0.waveform.posn.43.type=bus
unit.2.0.waveform.posn.44.channel=2147483646
unit.2.0.waveform.posn.44.name=adr
unit.2.0.waveform.posn.44.radix=1
unit.2.0.waveform.posn.44.type=bus
unit.2.0.waveform.posn.45.channel=2147483646
unit.2.0.waveform.posn.45.name=adr
unit.2.0.waveform.posn.45.radix=1
unit.2.0.waveform.posn.45.type=bus
unit.2.0.waveform.posn.46.channel=2147483646
unit.2.0.waveform.posn.46.name=adr
unit.2.0.waveform.posn.46.radix=1
unit.2.0.waveform.posn.46.type=bus
unit.2.0.waveform.posn.47.channel=2147483646
unit.2.0.waveform.posn.47.name=adr
unit.2.0.waveform.posn.47.radix=1
unit.2.0.waveform.posn.47.type=bus
unit.2.0.waveform.posn.48.channel=2147483646
unit.2.0.waveform.posn.48.name=adr
unit.2.0.waveform.posn.48.radix=1
unit.2.0.waveform.posn.48.type=bus
unit.2.0.waveform.posn.49.channel=2147483646
unit.2.0.waveform.posn.49.name=adr
unit.2.0.waveform.posn.49.radix=1
unit.2.0.waveform.posn.49.type=bus
unit.2.0.waveform.posn.5.channel=2147483646
unit.2.0.waveform.posn.5.name=next_state
unit.2.0.waveform.posn.5.radix=1
unit.2.0.waveform.posn.5.type=bus
unit.2.0.waveform.posn.50.channel=2147483646
unit.2.0.waveform.posn.50.name=adr
unit.2.0.waveform.posn.50.radix=1
unit.2.0.waveform.posn.50.type=bus
unit.2.0.waveform.posn.51.channel=2147483646
unit.2.0.waveform.posn.51.name=adr
unit.2.0.waveform.posn.51.radix=1
unit.2.0.waveform.posn.51.type=bus
unit.2.0.waveform.posn.52.channel=2147483646
unit.2.0.waveform.posn.52.name=adr
unit.2.0.waveform.posn.52.radix=1
unit.2.0.waveform.posn.52.type=bus
unit.2.0.waveform.posn.53.channel=2147483646
unit.2.0.waveform.posn.53.name=adr
unit.2.0.waveform.posn.53.radix=1
unit.2.0.waveform.posn.53.type=bus
unit.2.0.waveform.posn.54.channel=2147483646
unit.2.0.waveform.posn.54.name=adr
unit.2.0.waveform.posn.54.radix=1
unit.2.0.waveform.posn.54.type=bus
unit.2.0.waveform.posn.55.channel=2147483646
unit.2.0.waveform.posn.55.name=adr
unit.2.0.waveform.posn.55.radix=1
unit.2.0.waveform.posn.55.type=bus
unit.2.0.waveform.posn.56.channel=2147483646
unit.2.0.waveform.posn.56.name=adr
unit.2.0.waveform.posn.56.radix=1
unit.2.0.waveform.posn.56.type=bus
unit.2.0.waveform.posn.57.channel=2147483646
unit.2.0.waveform.posn.57.name=adr
unit.2.0.waveform.posn.57.radix=1
unit.2.0.waveform.posn.57.type=bus
unit.2.0.waveform.posn.58.channel=2147483646
unit.2.0.waveform.posn.58.name=adr
unit.2.0.waveform.posn.58.radix=1
unit.2.0.waveform.posn.58.type=bus
unit.2.0.waveform.posn.59.channel=2147483646
unit.2.0.waveform.posn.59.name=adr
unit.2.0.waveform.posn.59.radix=1
unit.2.0.waveform.posn.59.type=bus
unit.2.0.waveform.posn.6.channel=2147483646
unit.2.0.waveform.posn.6.name=func
unit.2.0.waveform.posn.6.radix=1
unit.2.0.waveform.posn.6.type=bus
unit.2.0.waveform.posn.60.channel=2147483646
unit.2.0.waveform.posn.60.name=adr
unit.2.0.waveform.posn.60.radix=1
unit.2.0.waveform.posn.60.type=bus
unit.2.0.waveform.posn.61.channel=2147483646
unit.2.0.waveform.posn.61.name=adr
unit.2.0.waveform.posn.61.radix=1
unit.2.0.waveform.posn.61.type=bus
unit.2.0.waveform.posn.62.channel=2147483646
unit.2.0.waveform.posn.62.name=adr
unit.2.0.waveform.posn.62.radix=1
unit.2.0.waveform.posn.62.type=bus
unit.2.0.waveform.posn.63.channel=2147483646
unit.2.0.waveform.posn.63.name=adr
unit.2.0.waveform.posn.63.radix=1
unit.2.0.waveform.posn.63.type=bus
unit.2.0.waveform.posn.64.channel=2147483646
unit.2.0.waveform.posn.64.name=adr
unit.2.0.waveform.posn.64.radix=1
unit.2.0.waveform.posn.64.type=bus
unit.2.0.waveform.posn.65.channel=2147483646
unit.2.0.waveform.posn.65.name=adr
unit.2.0.waveform.posn.65.radix=1
unit.2.0.waveform.posn.65.type=bus
unit.2.0.waveform.posn.66.channel=2147483646
unit.2.0.waveform.posn.66.name=adr
unit.2.0.waveform.posn.66.radix=1
unit.2.0.waveform.posn.66.type=bus
unit.2.0.waveform.posn.67.channel=2147483646
unit.2.0.waveform.posn.67.name=adr
unit.2.0.waveform.posn.67.radix=1
unit.2.0.waveform.posn.67.type=bus
unit.2.0.waveform.posn.68.channel=2147483646
unit.2.0.waveform.posn.68.name=adr
unit.2.0.waveform.posn.68.radix=1
unit.2.0.waveform.posn.68.type=bus
unit.2.0.waveform.posn.69.channel=2147483646
unit.2.0.waveform.posn.69.name=adr
unit.2.0.waveform.posn.69.radix=1
unit.2.0.waveform.posn.69.type=bus
unit.2.0.waveform.posn.7.channel=2147483646
unit.2.0.waveform.posn.7.name=t
unit.2.0.waveform.posn.7.radix=1
unit.2.0.waveform.posn.7.type=bus
unit.2.0.waveform.posn.70.channel=2147483646
unit.2.0.waveform.posn.70.name=adr
unit.2.0.waveform.posn.70.radix=1
unit.2.0.waveform.posn.70.type=bus
unit.2.0.waveform.posn.71.channel=2147483646
unit.2.0.waveform.posn.71.name=adr
unit.2.0.waveform.posn.71.radix=1
unit.2.0.waveform.posn.71.type=bus
unit.2.0.waveform.posn.72.channel=2147483646
unit.2.0.waveform.posn.72.name=adr
unit.2.0.waveform.posn.72.radix=1
unit.2.0.waveform.posn.72.type=bus
unit.2.0.waveform.posn.73.channel=2147483646
unit.2.0.waveform.posn.73.name=adr
unit.2.0.waveform.posn.73.radix=1
unit.2.0.waveform.posn.73.type=bus
unit.2.0.waveform.posn.74.channel=2147483646
unit.2.0.waveform.posn.74.name=adr
unit.2.0.waveform.posn.74.radix=1
unit.2.0.waveform.posn.74.type=bus
unit.2.0.waveform.posn.75.channel=2147483646
unit.2.0.waveform.posn.75.name=adr
unit.2.0.waveform.posn.75.radix=1
unit.2.0.waveform.posn.75.type=bus
unit.2.0.waveform.posn.76.channel=2147483646
unit.2.0.waveform.posn.76.name=adr
unit.2.0.waveform.posn.76.radix=1
unit.2.0.waveform.posn.76.type=bus
unit.2.0.waveform.posn.77.channel=2147483646
unit.2.0.waveform.posn.77.name=adr
unit.2.0.waveform.posn.77.radix=1
unit.2.0.waveform.posn.77.type=bus
unit.2.0.waveform.posn.78.channel=2147483646
unit.2.0.waveform.posn.78.name=adr
unit.2.0.waveform.posn.78.radix=1
unit.2.0.waveform.posn.78.type=bus
unit.2.0.waveform.posn.79.channel=2147483646
unit.2.0.waveform.posn.79.name=adr
unit.2.0.waveform.posn.79.radix=1
unit.2.0.waveform.posn.79.type=bus
unit.2.0.waveform.posn.8.channel=2147483646
unit.2.0.waveform.posn.8.name=adr
unit.2.0.waveform.posn.8.radix=1
unit.2.0.waveform.posn.8.type=bus
unit.2.0.waveform.posn.80.channel=2147483646
unit.2.0.waveform.posn.80.name=adr
unit.2.0.waveform.posn.80.radix=1
unit.2.0.waveform.posn.80.type=bus
unit.2.0.waveform.posn.81.channel=2147483646
unit.2.0.waveform.posn.81.name=adr
unit.2.0.waveform.posn.81.radix=1
unit.2.0.waveform.posn.81.type=bus
unit.2.0.waveform.posn.82.channel=2147483646
unit.2.0.waveform.posn.82.name=adr
unit.2.0.waveform.posn.82.radix=1
unit.2.0.waveform.posn.82.type=bus
unit.2.0.waveform.posn.83.channel=2147483646
unit.2.0.waveform.posn.83.name=adr
unit.2.0.waveform.posn.83.radix=1
unit.2.0.waveform.posn.83.type=bus
unit.2.0.waveform.posn.84.channel=2147483646
unit.2.0.waveform.posn.84.name=adr
unit.2.0.waveform.posn.84.radix=1
unit.2.0.waveform.posn.84.type=bus
unit.2.0.waveform.posn.85.channel=2147483646
unit.2.0.waveform.posn.85.name=adr
unit.2.0.waveform.posn.85.radix=1
unit.2.0.waveform.posn.85.type=bus
unit.2.0.waveform.posn.86.channel=2147483646
unit.2.0.waveform.posn.86.name=adr
unit.2.0.waveform.posn.86.radix=1
unit.2.0.waveform.posn.86.type=bus
unit.2.0.waveform.posn.87.channel=2147483646
unit.2.0.waveform.posn.87.name=adr
unit.2.0.waveform.posn.87.radix=1
unit.2.0.waveform.posn.87.type=bus
unit.2.0.waveform.posn.88.channel=2147483646
unit.2.0.waveform.posn.88.name=adr
unit.2.0.waveform.posn.88.radix=1
unit.2.0.waveform.posn.88.type=bus
unit.2.0.waveform.posn.89.channel=2147483646
unit.2.0.waveform.posn.89.name=adr
unit.2.0.waveform.posn.89.radix=1
unit.2.0.waveform.posn.89.type=bus
unit.2.0.waveform.posn.9.channel=2147483646
unit.2.0.waveform.posn.9.name=dat_i
unit.2.0.waveform.posn.9.radix=1
unit.2.0.waveform.posn.9.type=bus
unit.2.0.waveform.posn.90.channel=2147483646
unit.2.0.waveform.posn.90.name=adr
unit.2.0.waveform.posn.90.radix=1
unit.2.0.waveform.posn.90.type=bus
unit.2.0.waveform.posn.91.channel=2147483646
unit.2.0.waveform.posn.91.name=adr
unit.2.0.waveform.posn.91.radix=1
unit.2.0.waveform.posn.91.type=bus
unit.2.0.waveform.posn.92.channel=2147483646
unit.2.0.waveform.posn.92.name=adr
unit.2.0.waveform.posn.92.radix=1
unit.2.0.waveform.posn.92.type=bus
unit.2.0.waveform.posn.93.channel=2147483646
unit.2.0.waveform.posn.93.name=adr
unit.2.0.waveform.posn.93.radix=1
unit.2.0.waveform.posn.93.type=bus
unit.2.0.waveform.posn.94.channel=2147483646
unit.2.0.waveform.posn.94.name=adr
unit.2.0.waveform.posn.94.radix=1
unit.2.0.waveform.posn.94.type=bus
unit.2.0.waveform.posn.95.channel=2147483646
unit.2.0.waveform.posn.95.name=adr
unit.2.0.waveform.posn.95.radix=1
unit.2.0.waveform.posn.95.type=bus
unit.2.0.waveform.posn.96.channel=2147483646
unit.2.0.waveform.posn.96.name=adr
unit.2.0.waveform.posn.96.radix=1
unit.2.0.waveform.posn.96.type=bus
unit.2.0.waveform.posn.97.channel=2147483646
unit.2.0.waveform.posn.97.name=adr
unit.2.0.waveform.posn.97.radix=1
unit.2.0.waveform.posn.97.type=bus
unit.2.0.waveform.posn.98.channel=2147483646
unit.2.0.waveform.posn.98.name=adr
unit.2.0.waveform.posn.98.radix=1
unit.2.0.waveform.posn.98.type=bus
unit.2.0.waveform.posn.99.channel=2147483646
unit.2.0.waveform.posn.99.name=adr
unit.2.0.waveform.posn.99.radix=1
unit.2.0.waveform.posn.99.type=bus
/trunk/impl/virtex4-ml403ep/test/flash_dump.v
0,0 → 1,150
//`define HIGH_BIOS 13'h0000
`define HIGH_BIOS 13'h00FF
 
module flash_dump (
input sys_clk_in,
output trx,
 
output [20:0] flash_addr,
input [15:0] flash_data,
output flash_we_n,
output flash_oe_n,
output flash_ce2
);
 
reg clk_9600;
reg [11:0] count_uart;
reg [ 6:0] dada_wr;
reg [ 7:0] estat;
reg [ 7:0] addr;
reg [ 2:0] espacios;
reg [ 6:0] char;
reg [ 3:0] nibble;
reg [ 7:0] col;
reg trx_req;
reg [ 7:0] adr0;
 
wire clk_60M;
wire rst, lock;
wire trx_ack;
wire [15:0] rd_data;
 
reg [15:0] ram[0:255];
reg [15:0] dades;
 
reg [ 3:0] count;
 
// Instanciacions de mòduls
clocks c0 (
.CLKIN_IN (sys_clk_in),
.CLKFX_OUT (clk_60M),
.LOCKED_OUT (lock)
);
 
uart_ctrl u0 (dada_wr, trx_req, trx_ack, trx,
rst, clk_9600);
 
// Assignacions contínues
assign rst = ~lock;
 
assign flash_addr = { `HIGH_BIOS, adr0 };
assign rd_data = flash_data;
assign flash_we_n = 1'b1;
assign flash_oe_n = 1'b0;
assign flash_ce2 = 1'b1;
 
// Descripció del comportament
// count_uart
always @(posedge clk_60M)
if (rst) count_uart <= 12'h0;
else count_uart <= (count_uart==12'd3124) ?
12'd0 : count_uart + 12'd1;
 
// clk_9600
always @(posedge clk_60M)
if (rst) clk_9600 <= 1'b0;
else clk_9600 <= (count_uart==12'd0) ?
!clk_9600 : clk_9600;
 
// adr0
always @(posedge clk_60M)
if (rst) adr0 <= 8'h00;
else adr0 <= (adr0==8'hff || count!=4'hf) ? adr0
: (adr0 + 8'h01);
// count
always @(posedge clk_60M)
if (rst) count <= 4'h0;
else count <= count + 4'h1;
 
// ram
always @(posedge clk_60M) ram[adr0] <= rd_data;
 
// dades
always @(posedge clk_60M)
if (rst) dades <= 16'h0;
else dades <= ram[addr];
 
always @(posedge clk_60M)
if (adr0!=8'hff)
begin
dada_wr <= 7'h30;
trx_req <= 0;
estat <= 8'd0;
addr <= 8'h00;
espacios <= 3'd2;
char <= 7'd00;
nibble <= 4'd0;
col <= 8'd79;
end
else
case (estat)
8'd00: if (~trx_ack)
begin estat <= 8'd01;
if (espacios > 3'd0)
begin char <= 7'h20; espacios <= espacios - 3'd1; end
else
begin
char <= ascii(nibble); espacios <= 3'd4;
nibble <= nibble + 4'd1;
end
end
8'd01: begin dada_wr <= char; trx_req <= 1; estat <= 8'd2; end
8'd02: if (trx_ack) begin trx_req <= 0; estat <= 8'd3; end
8'd03: if (col > 8'd0) begin col <= col - 8'd1; estat <= 8'd0; end
else estat <= 8'd04;
 
8'd04: if (~trx_ack) estat <= 8'd05;
8'd05: begin dada_wr <= ascii(addr[7:4]); trx_req <= 1; estat <= 8'd10; end
8'd10: if (trx_ack) begin trx_req <= 0; estat <= 8'd15; end
 
8'd15: if (~trx_ack) estat <= 8'd20;
8'd20: begin dada_wr <= ascii(dades[15:12]); trx_req <= 1; estat <= 8'd25; end
8'd25: if (trx_ack) begin trx_req <= 0; estat <= 8'd30; end
 
8'd30: if (~trx_ack) estat <= 8'd35;
8'd35: begin dada_wr <= ascii(dades[11:8]); trx_req <= 1; estat <= 8'd40; end
8'd40: if (trx_ack) begin trx_req <= 0; estat <= 8'd45; end
 
8'd45: if (~trx_ack) estat <= 8'd50;
8'd50: begin dada_wr <= ascii(dades[7:4]); trx_req <= 1; estat <= 8'd55; end
8'd55: if (trx_ack) begin trx_req <= 0; estat <= 8'd60; end
 
8'd60: if (~trx_ack) estat <= 8'd65;
8'd65: begin dada_wr <= ascii(dades[3:0]); trx_req <= 1; estat <= 8'd70; end
8'd70: if (trx_ack) begin trx_req <= 0; estat <= 8'd75; end
 
8'd75: if (addr[3:0] == 4'hf) estat <= 8'd90;
else if (~trx_ack) estat <= 8'd80;
8'd80: begin dada_wr <= 7'h20; trx_req <= 1; estat <= 8'd85; end
8'd85: if (trx_ack) begin trx_req <= 0; estat <= 8'd90; end
 
8'd90: if (addr < 9'h0ff) begin addr <= addr + 8'd1; estat <= 8'd91; end
else estat <= 8'd95;
8'd91: estat <= (addr[3:0]==4'h0) ? 8'd4 : 8'd15;
endcase
 
function [6:0] ascii(input [3:0] num);
if (num <= 4'd9) ascii = 7'h30 + num;
else ascii = 7'd87 + num;
endfunction
endmodule
/trunk/impl/virtex4-ml403ep/test/ml403-flash.ucf
0,0 → 1,56
NET sys_clk_in TNM_NET = "sys_clk_in";
TIMESPEC "TSSYSCLK" = PERIOD "sys_clk_in" 9.9 ns HIGH 50 %;
 
NET sys_clk_in LOC = AE14;
NET sys_clk_in IOSTANDARD = LVCMOS33;
 
NET trx LOC = W1;
 
#NET flash_addr[24] LOC = T21;
#NET flash_addr[23] LOC = U20;
#NET flash_addr[22] LOC = T19;
NET flash_addr[20] LOC = AC5;
NET flash_addr[19] LOC = AB5;
NET flash_addr[18] LOC = AC4;
NET flash_addr[17] LOC = AB4;
NET flash_addr[16] LOC = AB3;
NET flash_addr[15] LOC = AA4;
NET flash_addr[14] LOC = AA3;
NET flash_addr[13] LOC = W5;
NET flash_addr[12] LOC = W6;
NET flash_addr[11] LOC = W3;
NET flash_addr[10] LOC = AF3;
NET flash_addr[9] LOC = AE3;
NET flash_addr[8] LOC = AD2;
NET flash_addr[7] LOC = AD1;
NET flash_addr[6] LOC = AC2;
NET flash_addr[5] LOC = AC1;
NET flash_addr[4] LOC = AB2;
NET flash_addr[3] LOC = AB1;
NET flash_addr[2] LOC = AA1;
NET flash_addr[1] LOC = Y2;
NET flash_addr[0] LOC = Y1;
#NET flash_addr[0] LOC = T20;
 
NET flash_data[15] LOC = AA14;
NET flash_data[14] LOC = AB14;
NET flash_data[13] LOC = AC12;
NET flash_data[12] LOC = AC11;
NET flash_data[11] LOC = AA16;
NET flash_data[10] LOC = AA15;
NET flash_data[9] LOC = AB13;
NET flash_data[8] LOC = AA13;
NET flash_data[7] LOC = AC14;
NET flash_data[6] LOC = AD14;
NET flash_data[5] LOC = AA12;
NET flash_data[4] LOC = AA11;
NET flash_data[3] LOC = AC16;
NET flash_data[2] LOC = AC15;
NET flash_data[1] LOC = AC13;
NET flash_data[0] LOC = AD13;
 
NET flash_oe_n LOC = AC6;
NET flash_we_n LOC = AB6;
#NET flash_byte_n LOC = N22;
NET flash_ce2 LOC = W7;
#NET flash_audio_reset_n LOC = AD10;
/trunk/impl/virtex4-ml403ep/test/ml403-sram.ucf
0,0 → 1,146
NET sys_clk_in TNM_NET = "sys_clk_in";
TIMESPEC "TSSYSCLK" = PERIOD "sys_clk_in" 9.9 ns HIGH 50 %;
 
NET sys_clk_in LOC = AE14;
NET sys_clk_in IOSTANDARD = LVCMOS33;
#NET sys_rst_in LOC = D6;
#NET sys_rst_in PULLUP;
#NET sys_rst_in TIG;
 
NET trx LOC = W1;
#NET trx IOSTANDARD = LVCMOS33;
#NET trx TIG;
 
# GPLED 0-3
#NET gpio[0] LOC = G5; #GPLED0
#NET gpio[1] LOC = G6; #GPLED1
#NET gpio[2] LOC = A11; #GPLED2
#NET gpio[3] LOC = A12; #GPLED3
# North-East-South-West-Center LEDs
#NET gpio[4] LOC = C6; # C LED
#NET gpio[5] LOC = F9; # W LED
#NET gpio[6] LOC = A5; # S LED
#NET gpio[7] LOC = E10; # E LED
#NET gpio[8] LOC = E2; # N LED
 
#NET "gpio[*]" PULLDOWN;
#NET "gpio[*]" TIG;
#NET "gpio[*]" SLEW = SLOW;
#NET "gpio[*]" DRIVE = 2;
 
NET "sram_clk" LOC = "AF7" ; #| IOSTANDARD = LVCMOS33 | DRIVE = 16 | SLEW = FAST;
NET "flash_ce" LOC = "W7" ; #| IOSTANDARD = LVDCI_33;
 
#NET sram_clk_fb LOC = AD17;
#NET flash_a23 LOC = T21;
#NET sram_flash_addr[22] LOC = U20;
#NET sram_flash_addr[21] LOC = T19;
NET sram_flash_addr[20] LOC = AC5;
NET sram_flash_addr[19] LOC = AB5;
NET sram_flash_addr[18] LOC = AC4;
NET sram_flash_addr[17] LOC = AB4;
 
NET sram_flash_addr[16] LOC = AB3;
NET sram_flash_addr[15] LOC = AA4;
NET sram_flash_addr[14] LOC = AA3;
NET sram_flash_addr[13] LOC = W5;
NET sram_flash_addr[12] LOC = W6;
NET sram_flash_addr[11] LOC = W3;
NET sram_flash_addr[10] LOC = AF3;
NET sram_flash_addr[9] LOC = AE3;
NET sram_flash_addr[8] LOC = AD2;
NET sram_flash_addr[7] LOC = AD1;
NET sram_flash_addr[6] LOC = AC2;
NET sram_flash_addr[5] LOC = AC1;
NET sram_flash_addr[4] LOC = AB2;
NET sram_flash_addr[3] LOC = AB1;
NET sram_flash_addr[2] LOC = AA1;
NET sram_flash_addr[1] LOC = Y2;
NET sram_flash_addr[0] LOC = Y1;
#NET sram_flash_data[31] LOC = F14;
#NET sram_flash_data[30] LOC = F13;
#NET sram_flash_data[29] LOC = F12;
#NET sram_flash_data[28] LOC = F11;
#NET sram_flash_data[27] LOC = F16;
#NET sram_flash_data[26] LOC = F15;
#NET sram_flash_data[25] LOC = D14;
#NET sram_flash_data[24] LOC = D13;
#NET sram_flash_data[23] LOC = D15;
#NET sram_flash_data[22] LOC = E14;
#NET sram_flash_data[21] LOC = C11;
#NET sram_flash_data[20] LOC = D11;
#NET sram_flash_data[19] LOC = D16;
#NET sram_flash_data[18] LOC = C16;
#NET sram_flash_data[17] LOC = E13;
 
#NET sram_flash_data[16] LOC = D12;
#NET sram_flash_data[15] LOC = AA14;
#NET sram_flash_data[14] LOC = AB14;
#NET sram_flash_data[13] LOC = AC12;
#NET sram_flash_data[12] LOC = AC11;
#NET sram_flash_data[11] LOC = AA16;
#NET sram_flash_data[10] LOC = AA15;
#NET sram_flash_data[9] LOC = AB13;
 
NET sram_flash_data[15] LOC = AA14;
NET sram_flash_data[14] LOC = AB14;
NET sram_flash_data[13] LOC = AC12;
NET sram_flash_data[12] LOC = AC11;
NET sram_flash_data[11] LOC = AA16;
NET sram_flash_data[10] LOC = AA15;
NET sram_flash_data[9] LOC = AB13;
 
NET sram_flash_data[8] LOC = AA13;
NET sram_flash_data[7] LOC = AC14;
NET sram_flash_data[6] LOC = AD14;
NET sram_flash_data[5] LOC = AA12;
NET sram_flash_data[4] LOC = AA11;
NET sram_flash_data[3] LOC = AC16;
NET sram_flash_data[2] LOC = AC15;
NET sram_flash_data[1] LOC = AC13;
NET sram_flash_data[0] LOC = AD13;
NET sram_cen LOC = V7;
NET sram_flash_oe_n LOC = AC6;
NET sram_flash_we_n LOC = AB6;
NET sram_bw[3] LOC = Y3; #Y4;
NET sram_bw[2] LOC = Y4; #Y3;
NET sram_bw[1] LOC = Y5; #Y6;
NET sram_bw[0] LOC = Y6; #Y5;
#NET sram_adv_ld_n LOC = W4;
#NET sram_mode LOC = V26;
 
#NET sram_clk_fb IOSTANDARD = LVCMOS33;
 
#NET flash_a23 IOSTANDARD = LVDCI_33;
#NET sram_mode IOSTANDARD = LVDCI_33;
 
#NET sram_flash_addr[*] IOSTANDARD = LVDCI_33;
#NET sram_flash_addr[*] SLEW = FAST;
#NET sram_flash_addr[*] DRIVE = 8;
 
#NET sram_flash_data[*] IOSTANDARD = LVCMOS33;
#NET sram_flash_data[*] DRIVE = 12;
#NET sram_flash_data[*] SLEW = FAST;
#NET sram_flash_data[*] PULLDOWN;
 
#NET sram_flash_oe_n IOSTANDARD = LVDCI_33;
#NET sram_flash_oe_n SLEW = FAST;
#NET sram_flash_oe_n DRIVE = 8;
 
#NET sram_flash_we_n IOSTANDARD = LVDCI_33;
#NET sram_flash_we_n SLEW = FAST;
#NET sram_flash_we_n DRIVE = 8;
 
#NET sram_bw[*] IOSTANDARD = LVDCI_33;
#NET sram_bw[*] SLEW = FAST;
#NET sram_bw[*] DRIVE = 8;
 
#NET flash_ce SLEW = FAST;
#NET flash_ce DRIVE = 8;
 
#NET sram_cen SLEW = FAST;
#NET sram_cen DRIVE = 8;
 
#NET sram_adv_ld_n IOSTANDARD = LVDCI_33;
#NET sram_adv_ld_n SLEW = FAST;
#NET sram_adv_ld_n DRIVE = 8;
/trunk/impl/virtex4-ml403ep/test/sram_dump.v
0,0 → 1,157
`define HIGH_RAM 13'h00fd
 
module sram_dump (
input sys_clk_in,
output trx,
 
output sram_clk,
output [20:0] sram_flash_addr,
inout [15:0] sram_flash_data,
output [ 3:0] sram_bw,
 
output sram_cen,
output sram_flash_oe_n,
output sram_flash_we_n,
output flash_ce
);
 
reg clk_9600;
reg [11:0] count_uart;
reg [ 6:0] dada_wr;
reg [ 7:0] estat;
reg [ 7:0] addr;
reg [ 2:0] espacios;
reg [ 6:0] char;
reg [ 3:0] nibble;
reg [ 7:0] col;
reg trx_req;
reg [ 8:0] adr0;
 
wire clk_60M;
wire rst, lock;
wire trx_ack;
wire [15:0] rd_data;
 
reg [15:0] ram[0:255];
reg [15:0] dades;
 
reg [ 3:0] count;
 
// Instanciacions de mòduls
clocks c0 (
.CLKIN_IN (sys_clk_in),
.CLKFX_OUT (clk_60M),
.LOCKED_OUT (lock)
);
 
uart_ctrl u0 (dada_wr, trx_req, trx_ack, trx,
rst, clk_9600);
 
// Assignacions contínues
assign rst = ~lock;
 
assign sram_clk = clk_60M;
assign sram_flash_addr = { `HIGH_RAM, adr0[7:0] };
assign rd_data = sram_flash_data;
assign sram_bw = 4'b00;
//assign SRAM_ADV_LB = 1'b0;
assign sram_cen = 1'b0;
assign sram_flash_oe_n = 1'b0;
assign sram_flash_we_n = 1'b1;
assign flash_ce = 1'b0;
 
// Descripció del comportament
// count_uart
always @(posedge clk_60M)
if (rst) count_uart <= 12'h0;
else count_uart <= (count_uart==12'd3124) ?
12'd0 : count_uart + 12'd1;
 
// clk_9600
always @(posedge clk_60M)
if (rst) clk_9600 <= 1'b0;
else clk_9600 <= (count_uart==12'd0) ?
!clk_9600 : clk_9600;
 
// adr0
always @(posedge clk_60M)
if (rst) adr0 <= 9'h000;
else adr0 <= (adr0==9'h1ff || count!=4'hf) ? adr0
: (adr0 + 8'h01);
// count
always @(posedge clk_60M)
if (rst) count <= 4'h0;
else count <= count + 4'h1;
 
// ram
always @(posedge clk_60M) ram[adr0] <= rd_data;
 
// dades
always @(posedge clk_60M)
if (rst) dades <= 16'h0;
else dades <= ram[addr];
 
always @(posedge clk_60M)
if (adr0!=9'h1ff)
begin
dada_wr <= 7'h30;
trx_req <= 0;
estat <= 8'd0;
addr <= 8'h00;
espacios <= 3'd2;
char <= 7'd00;
nibble <= 4'd0;
col <= 8'd79;
end
else
case (estat)
8'd00: if (~trx_ack)
begin estat <= 8'd01;
if (espacios > 3'd0)
begin char <= 7'h20; espacios <= espacios - 3'd1; end
else
begin
char <= ascii(nibble); espacios <= 3'd4;
nibble <= nibble + 4'd1;
end
end
8'd01: begin dada_wr <= char; trx_req <= 1; estat <= 8'd2; end
8'd02: if (trx_ack) begin trx_req <= 0; estat <= 8'd3; end
8'd03: if (col > 8'd0) begin col <= col - 8'd1; estat <= 8'd0; end
else estat <= 8'd04;
 
8'd04: if (~trx_ack) estat <= 8'd05;
8'd05: begin dada_wr <= ascii(addr[7:4]); trx_req <= 1; estat <= 8'd10; end
8'd10: if (trx_ack) begin trx_req <= 0; estat <= 8'd15; end
 
8'd15: if (~trx_ack) estat <= 8'd20;
8'd20: begin dada_wr <= ascii(dades[15:12]); trx_req <= 1; estat <= 8'd25; end
8'd25: if (trx_ack) begin trx_req <= 0; estat <= 8'd30; end
 
8'd30: if (~trx_ack) estat <= 8'd35;
8'd35: begin dada_wr <= ascii(dades[11:8]); trx_req <= 1; estat <= 8'd40; end
8'd40: if (trx_ack) begin trx_req <= 0; estat <= 8'd45; end
 
8'd45: if (~trx_ack) estat <= 8'd50;
8'd50: begin dada_wr <= ascii(dades[7:4]); trx_req <= 1; estat <= 8'd55; end
8'd55: if (trx_ack) begin trx_req <= 0; estat <= 8'd60; end
 
8'd60: if (~trx_ack) estat <= 8'd65;
8'd65: begin dada_wr <= ascii(dades[3:0]); trx_req <= 1; estat <= 8'd70; end
8'd70: if (trx_ack) begin trx_req <= 0; estat <= 8'd75; end
 
8'd75: if (addr[3:0] == 4'hf) estat <= 8'd90;
else if (~trx_ack) estat <= 8'd80;
8'd80: begin dada_wr <= 7'h20; trx_req <= 1; estat <= 8'd85; end
8'd85: if (trx_ack) begin trx_req <= 0; estat <= 8'd90; end
 
8'd90: if (addr < 9'h0ff) begin addr <= addr + 8'd1; estat <= 8'd91; end
else estat <= 8'd95;
8'd91: estat <= (addr[3:0]==4'h0) ? 8'd4 : 8'd15;
endcase
 
function [6:0] ascii(input [3:0] num);
if (num <= 4'd9) ascii = 7'h30 + num;
else ascii = 7'd87 + num;
endfunction
endmodule
/trunk/impl/virtex4-ml403ep/lcd/test_lcd_cntrl.v
0,0 → 1,26
module lcd_test (
// Pad signals
input sys_clk_in_,
output rs_,
output rw_,
output e_,
inout [7:4] db_,
input but_
);
 
// Module instantiations
lcd_display lcd0 (
.clk (sys_clk_in_),
.rst (but_),
.f1 (64'h123456f890abcde7),
.f2 (64'h7645321dcbaef987),
.m1 (16'b0101011101011111),
.m2 (16'b1110101110101111),
 
.lcd_rs_ (rs_),
.lcd_rw_ (rw_),
.lcd_e_ (e_),
.lcd_dat_(db_)
);
 
endmodule
/trunk/impl/virtex4-ml403ep/lcd/lcd_display.v
0,0 → 1,136
module lcd_display (
input [63:0] f1, // 1st row
input [63:0] f2, // 2nd row
input [15:0] m1, // 1st row mask
input [15:0] m2, // 2nd row mask
 
input clk, // 100 Mhz clock
input rst,
 
// Pad signals
output reg lcd_rs_,
output reg lcd_rw_,
output reg lcd_e_,
output reg [7:4] lcd_dat_
);
 
// Parameter definitions
parameter n = 8;
parameter k = 16;
 
// Register declarations
reg [k+n+1:0] cnt = 0;
reg [ 5:0] lcd;
 
// Net declarations
wire [127:0] f;
wire [ 31:0] m;
wire [ 4:0] i;
wire [ 3:0] c;
 
// Module instantiations
sel128_4 sel (
.in (f),
.sel (i),
.out (c)
);
 
// Continuous assignments
assign f = { f1, f2 };
assign m = { m1, m2 };
assign i = cnt[k+7:k+3];
 
// Behaviour
always @(posedge clk)
if (rst) cnt <= 26'hfffffff;
else begin
cnt <= cnt - 1;
casex (cnt[k+1+n:k+2])
8'hff: lcd <= 6'b000010; // function set
8'hfe: lcd <= 6'b000010;
8'hfd: lcd <= 6'b001000;
8'hfc: lcd <= 6'b000000; // display on/off control
8'hfb: lcd <= 6'b001100;
8'hfa: lcd <= 6'b000000; // display clear
8'hf9: lcd <= 6'b000001;
8'hf8: lcd <= 6'b000000; // entry mode set
8'hf7: lcd <= 6'b000110;
8'hf6: cnt[k+1+n:k+2] <= 8'b10111111;
 
8'b101xxxx1: lcd <= { 2'b10, m[i] ? itoa1(c) : 4'h2 };
8'b101xxxx0: lcd <= { 2'b10, m[i] ? itoa0(c) : 4'h0 };
8'b10011111: lcd <= 6'h0c;
8'b10011110: lcd <= 6'h00;
8'b10011101: cnt[k+1+n:k+2] <= 8'b01011111;
8'b010xxxx1: lcd <= { 2'b10, m[i] ? itoa1(c) : 4'h2 };
8'b010xxxx0: lcd <= { 2'b10, m[i] ? itoa0(c) : 4'h0 };
8'b00111111: lcd <= 6'h08;
8'b00111110: lcd <= 6'h00;
8'b00111101: cnt[k+1+n:k+2] <= 8'b10111111;
 
default: lcd <= 6'b010000;
endcase
lcd_e_ <= ^cnt[k+1:k+0] & ~lcd_rw_;
{ lcd_rs_, lcd_rw_, lcd_dat_ } <= lcd;
end
 
// Function definitions
function [3:0] itoa1;
input [3:0] i;
begin
if (i < 8'd10) itoa1 = 4'h3;
else itoa1 = 4'h6;
end
endfunction
 
function [3:0] itoa0;
input [3:0] i;
begin
if (i < 8'd10) itoa0 = i + 4'h0;
else itoa0 = i + 4'h7;
end
endfunction
endmodule
 
module sel128_4 (
input [127:0] in,
input [ 4:0] sel,
output reg [ 3:0] out
);
 
always @(in or sel)
case (sel)
5'h00: out <= in[ 3: 0];
5'h01: out <= in[ 7: 4];
5'h02: out <= in[ 11: 8];
5'h03: out <= in[ 15: 12];
5'h04: out <= in[ 19: 16];
5'h05: out <= in[ 23: 20];
5'h06: out <= in[ 27: 24];
5'h07: out <= in[ 31: 28];
5'h08: out <= in[ 35: 32];
5'h09: out <= in[ 39: 36];
5'h0a: out <= in[ 43: 40];
5'h0b: out <= in[ 47: 44];
5'h0c: out <= in[ 51: 48];
5'h0d: out <= in[ 55: 52];
5'h0e: out <= in[ 59: 56];
5'h0f: out <= in[ 63: 60];
5'h10: out <= in[ 67: 64];
5'h11: out <= in[ 71: 68];
5'h12: out <= in[ 75: 72];
5'h13: out <= in[ 79: 76];
5'h14: out <= in[ 83: 80];
5'h15: out <= in[ 87: 84];
5'h16: out <= in[ 91: 88];
5'h17: out <= in[ 95: 92];
5'h18: out <= in[ 99: 96];
5'h19: out <= in[103:100];
5'h1a: out <= in[107:104];
5'h1b: out <= in[111:108];
5'h1c: out <= in[115:112];
5'h1d: out <= in[119:116];
5'h1e: out <= in[123:120];
5'h1f: out <= in[127:124];
endcase
endmodule
/trunk/impl/virtex4-ml403ep/lcd/ml403.ucf
0,0 → 1,16
NET sys_clk_in_ TNM_NET = "sys_clk_in_";
TIMESPEC "TSSYSCLK" = PERIOD "sys_clk_in_" 9.9 ns HIGH 50 %;
 
NET sys_clk_in_ LOC = AE14;
NET sys_clk_in_ IOSTANDARD = LVCMOS33;
 
NET e_ LOC = AE13 | IOSTANDARD = LVCMOS33 | TIG; # LCD_E
NET rs_ LOC = AC17 | IOSTANDARD = LVCMOS33 | TIG; # LCD_RS
NET rw_ LOC = AB17 | IOSTANDARD = LVCMOS33 | TIG; # LCD_RW
 
NET db_[7] LOC = AF12 | IOSTANDARD = LVCMOS33 | TIG; # LCD_DB7
NET db_[6] LOC = AE12 | IOSTANDARD = LVCMOS33 | TIG; # LCD_DB6
NET db_[5] LOC = AC10 | IOSTANDARD = LVCMOS33 | TIG; # LCD_DB5
NET db_[4] LOC = AB10 | IOSTANDARD = LVCMOS33 | TIG; # LCD_DB4
 
NET but_ LOC = B6; # C Button
/trunk/impl/virtex4-ml403ep/ace/ml40x_bit2ace.bat
0,0 → 1,13
echo off
if exist tmp_ml40x____datafile.bit del tmp_ml40x____datafile.bit
if exist tmp_ml40x____datafile.ace del tmp_ml40x____datafile.ace
copy /Y %XILINX%\xcfp\data\xcf32p_vo48.bsd .
copy /Y %XILINX%\xc9500xl\data\xc95144xl_tq100.bsd .
copy /Y %1 tmp_ml40x____datafile.bit
impact -batch ml40x.scr
impact -batch ml40x_svf2ace.scr
if exist tmp_ml40x____datafile.bit del tmp_ml40x____datafile.bit
if exist tmp_ml40x____datafile.svf del tmp_ml40x____datafile.svf
if exist %2 del %2
if exist tmp_ml40x____datafile.ace ren tmp_ml40x____datafile.ace %2
echo on
/trunk/impl/virtex4-ml403ep/ace/ml40x_svf2ace.scr
0,0 → 1,7
setMode -cf
svf2ace -wtck -d -i tmp_ml40x____datafile.svf -o tmp_ml40x____datafile.ace
quit
 
 
 
 
/trunk/impl/virtex4-ml403ep/ace/ml40x.scr
0,0 → 1,11
setmode -bs
setCable -p svf -file tmp_ml40x____datafile.svf
addDevice -p 1 -file xcf32p_vo48.bsd
addDevice -p 2 -file tmp_ml40x____datafile.bit
addDevice -p 3 -file xc95144xl_tq100.bsd
program -p 2
quit
 
 
 
 
/trunk/impl/virtex4-ml403ep/ace/ml40x_bit2ace
0,0 → 1,11
#!/bin/sh
rm -f tmp_ml40x____datafile.ace
cp -f $XILINX/xcfp/data/xcf32p_vo48.bsd .
cp -f $XILINX/xc9500xl/data/xc95144xl_tq100.bsd .
cp -f $1 tmp_ml40x____datafile.bit
$XILINX/bin/lin64/impact -batch $3/ml40x.scr
$XILINX/bin/lin64/impact -batch $3/ml40x_svf2ace.scr
rm -f tmp_ml40x____datafile.bit
rm -f tmp_ml40x____datafile.svf
rm -f $2
mv -f tmp_ml40x____datafile.ace $2
trunk/impl/virtex4-ml403ep/ace/ml40x_bit2ace Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/impl/virtex4-ml403ep/sim/test_kotku.v =================================================================== --- trunk/impl/virtex4-ml403ep/sim/test_kotku.v (nonexistent) +++ trunk/impl/virtex4-ml403ep/sim/test_kotku.v (revision 39) @@ -0,0 +1,75 @@ +`timescale 1ns/10ps + +module testbench; + + // Net and register declarations + wire lcd_clk; + wire [ 1:0] lcd_r, lcd_g, lcd_b; + wire lcd_hsync; + wire lcd_vsync; + reg clk; + wire s_clk; + wire [20:0] sf_addr; + wire [15:0] sf_data; + wire sf_oe; + wire sf_we; + wire [ 3:0] s_bw; + wire s_ce; + wire s_adv; + wire f_ce; + + // Module instances + kotku_ml403 kotku ( + .tft_lcd_clk_ (lcd_clk), + .tft_lcd_r_ (lcd_r), + .tft_lcd_g_ (lcd_g), + .tft_lcd_b_ (lcd_b), + .tft_lcd_hsync_ (lcd_hsync), + .tft_lcd_vsync_ (lcd_vsync), + + .sys_clk_in_ (clk), + + .sram_clk_ (s_clk), + .sram_flash_addr_ (sf_addr), + .sram_flash_data_ (sf_data), + .sram_flash_oe_n_ (sf_oe), + .sram_flash_we_n_ (sf_we), + .sram_bw_ (s_bw), + .sram_cen_ (s_ce), + .sram_adv_ld_n_ (s_adv), + .flash_ce2_ (f_ce) + ); + + flash_stub fs0 ( + .flash_addr_ (sf_addr), + .flash_data_ (sf_data), + .flash_oe_n_ (sf_oe), + .flash_we_n_ (sf_we), + .flash_ce2_ (f_ce) + ); + + cy7c1354 zbt ( + .d (sf_data), + .clk (s_clk), + .a (sf_addr[17:0]), + .bws (s_bw), + .we_b (sf_we), + .adv_lb (s_adv), + .ce1b (s_ce), + .ce2 (1'b1), + .ce3b (1'b0), + .oeb (sf_oe), + .cenb (1'b0), + .mode (1'b0) + ); + + // Behaviour + // Clock generation + always #5 clk = ~clk; + + initial + begin + clk <= 1'b1; + end + +endmodule Index: trunk/impl/virtex4-ml403ep/sim/s.do =================================================================== --- trunk/impl/virtex4-ml403ep/sim/s.do (nonexistent) +++ trunk/impl/virtex4-ml403ep/sim/s.do (revision 39) @@ -0,0 +1,48 @@ +vsim -L /opt/Xilinx/10.1/modelsim/verilog/unisims -novopt -t ps work.testbench work.glbl +add wave -label clk100 /testbench/clk +add wave -label clk /testbench/kotku/clk +add wave -label rst /testbench/kotku/rst +add wave -label pc -radix hexadecimal /testbench/kotku/zet_proc/fetch0/pc +add wave -divider fetch +add wave -label state -radix hexadecimal /testbench/kotku/zet_proc/fetch0/state +add wave -label next_state -radix hexadecimal /testbench/kotku/zet_proc/fetch0/next_state +add wave -label opcode -radix hexadecimal /testbench/kotku/zet_proc/fetch0/opcode +add wave -label modrm -radix hexadecimal /testbench/kotku/zet_proc/fetch0/modrm +add wave -label seq_addr /testbench/kotku/zet_proc/fetch0/decode0/seq_addr +add wave -label end_seq /testbench/kotku/zet_proc/fetch0/end_seq +add wave -label need_modrm /testbench/kotku/zet_proc/fetch0/need_modrm +add wave -label need_off /testbench/kotku/zet_proc/fetch0/need_off +add wave -label need_imm /testbench/kotku/zet_proc/fetch0/need_imm +add wave -label ir /testbench/kotku/zet_proc/fetch0/ir +add wave -label imm -radix hexadecimal /testbench/kotku/zet_proc/fetch0/imm +add wave -label off -radix hexadecimal /testbench/kotku/zet_proc/fetch0/off +add wave -divider mem +add wave -label cs -radix hexadecimal /testbench/kotku/zet_proc/wm0/cs +add wave -label op -radix hexadecimal /testbench/kotku/zet_proc/wm0/op +add wave -label block /testbench/kotku/zet_proc/wm0/cpu_block +add wave -label dat_o -radix hexadecimal sim:/testbench/kotku/dat_o +add wave -label dat_i -radix hexadecimal sim:/testbench/kotku/dat_i +add wave -label adr -radix hexadecimal /testbench/kotku/adr +add wave -label byte_o -radix hexadecimal /testbench/kotku/zet_proc/wm0/cpu_byte_o +add wave -label sel_o -radix hexadecimal /testbench/kotku/zet_proc/wm0/wb_sel_o +add wave -label stb_o -radix hexadecimal /testbench/kotku/zet_proc/wm0/wb_stb_o +add wave -label cyc_o -radix hexadecimal /testbench/kotku/zet_proc/wm0/wb_cyc_o +add wave -label ack_i -radix hexadecimal /testbench/kotku/zet_proc/wm0/wb_ack_i +add wave -label we_o -radix hexadecimal /testbench/kotku/zet_proc/wm0/wb_we_o +add wave -label tga_o -radix hexadecimal /testbench/kotku/zet_proc/wm0/wb_tga_o +add wave -label cpu_dat_i -radix hexadecimal /testbench/kotku/zet_proc/wm0/cpu_dat_i +add wave -divider alu +add wave -label x -radix hexadecimal /testbench/kotku/zet_proc/exec0/a +add wave -label y -radix hexadecimal /testbench/kotku/zet_proc/exec0/bus_b +add wave -label t -radix hexadecimal /testbench/kotku/zet_proc/exec0/alu0/t +add wave -label func -radix hexadecimal /testbench/kotku/zet_proc/exec0/alu0/func +add wave -label r\[1\] -radix hexadecimal /testbench/kotku/zet_proc/exec0/reg0/r\[1\] +add wave -label d -radix hexadecimal /testbench/kotku/zet_proc/exec0/reg0/d +add wave -label addr_a /testbench/kotku/zet_proc/exec0/reg0/addr_a +add wave -label addr_d /testbench/kotku/zet_proc/exec0/reg0/addr_d +add wave -label wr /testbench/kotku/zet_proc/exec0/reg0/wr +add wave -label we /testbench/kotku/we +add wave -label ack /testbench/kotku/ack +add wave -label fetch_or_exec /testbench/kotku/zet_proc/fetch_or_exec +add memory /testbench/zbt/mem +run 3ms Index: trunk/impl/virtex4-ml403ep/sim/t.do =================================================================== --- trunk/impl/virtex4-ml403ep/sim/t.do (nonexistent) +++ trunk/impl/virtex4-ml403ep/sim/t.do (revision 39) @@ -0,0 +1,54 @@ +vdel -all -lib work +vmap unisims /opt/Xilinx/10.1/modelsim/verilog/unisims +vlib work +vlog -work work -lint +incdir+../../../rtl-model +incdir+../../../sim ../kotku.v ../clock.v ../../../rtl-model/regfile.v ../../../rtl-model/alu.v ../../../rtl-model/cpu.v ../../../rtl-model/exec.v ../../../rtl-model/fetch.v ../../../rtl-model/jmp_cond.v ../../../rtl-model/util/primitives.v ../../../rtl-model/util/div_su.v ../../../rtl-model/util/div_uu.v ../../../rtl-model/rotate.v test_kotku.v flash_stub.v ../../../sim/mult.v ../../../soc/vga/vdu.v ../../../soc/vga/char_rom_b16.v ../../../soc/vga/ram2k_b16_attr.v ../../../soc/vga/ram2k_b16.v ../memory/flash_cntrl.v ../memory/zbt_cntrl.v CY7C1354BV25.v +vlog -work unisims /opt/Xilinx/10.1/ISE/verilog/src/glbl.v +vsim -L /opt/Xilinx/10.1/modelsim/verilog/unisims -novopt -t ps work.testbench work.glbl +add wave -label clk100 /testbench/clk +add wave -label clk /testbench/kotku/clk +add wave -label rst /testbench/kotku/rst +add wave -label pc -radix hexadecimal /testbench/kotku/zet_proc/fetch0/pc +add wave -divider fetch +add wave -label state -radix hexadecimal /testbench/kotku/zet_proc/fetch0/state +add wave -label next_state -radix hexadecimal /testbench/kotku/zet_proc/fetch0/next_state +add wave -label opcode -radix hexadecimal /testbench/kotku/zet_proc/fetch0/opcode +add wave -label modrm -radix hexadecimal /testbench/kotku/zet_proc/fetch0/modrm +add wave -label seq_addr /testbench/kotku/zet_proc/fetch0/decode0/seq_addr +add wave -label end_seq /testbench/kotku/zet_proc/fetch0/end_seq +add wave -label need_modrm /testbench/kotku/zet_proc/fetch0/need_modrm +add wave -label need_off /testbench/kotku/zet_proc/fetch0/need_off +add wave -label need_imm /testbench/kotku/zet_proc/fetch0/need_imm +add wave -label ir /testbench/kotku/zet_proc/fetch0/ir +add wave -label imm -radix hexadecimal /testbench/kotku/zet_proc/fetch0/imm +add wave -label off -radix hexadecimal /testbench/kotku/zet_proc/fetch0/off +add wave -divider mem +add wave -label cs -radix hexadecimal /testbench/kotku/zet_proc/wm0/cs +add wave -label op -radix hexadecimal /testbench/kotku/zet_proc/wm0/op +add wave -label block /testbench/kotku/zet_proc/wm0/cpu_block +add wave -label dat_o -radix hexadecimal sim:/testbench/kotku/dat_o +add wave -label dat_i -radix hexadecimal sim:/testbench/kotku/dat_i +add wave -label adr -radix hexadecimal /testbench/kotku/adr +add wave -label byte_o -radix hexadecimal /testbench/kotku/zet_proc/wm0/cpu_byte_o +add wave -label sel_o -radix hexadecimal /testbench/kotku/zet_proc/wm0/wb_sel_o +add wave -label stb_o -radix hexadecimal /testbench/kotku/zet_proc/wm0/wb_stb_o +add wave -label cyc_o -radix hexadecimal /testbench/kotku/zet_proc/wm0/wb_cyc_o +add wave -label ack_i -radix hexadecimal /testbench/kotku/zet_proc/wm0/wb_ack_i +add wave -label we_o -radix hexadecimal /testbench/kotku/zet_proc/wm0/wb_we_o +add wave -label tga_o -radix hexadecimal /testbench/kotku/zet_proc/wm0/wb_tga_o +add wave -label cpu_dat_i -radix hexadecimal /testbench/kotku/zet_proc/wm0/cpu_dat_i +add wave -divider alu +add wave -label x -radix hexadecimal /testbench/kotku/zet_proc/exec0/a +add wave -label y -radix hexadecimal /testbench/kotku/zet_proc/exec0/bus_b +add wave -label t -radix hexadecimal /testbench/kotku/zet_proc/exec0/alu0/t +add wave -label func -radix hexadecimal /testbench/kotku/zet_proc/exec0/alu0/func +add wave -label r\[1\] -radix hexadecimal /testbench/kotku/zet_proc/exec0/reg0/r\[1\] +add wave -label d -radix hexadecimal /testbench/kotku/zet_proc/exec0/reg0/d +add wave -label addr_a /testbench/kotku/zet_proc/exec0/reg0/addr_a +add wave -label addr_d /testbench/kotku/zet_proc/exec0/reg0/addr_d +add wave -label wr /testbench/kotku/zet_proc/exec0/reg0/wr +add wave -label we /testbench/kotku/we +add wave -label ack /testbench/kotku/ack +add wave -label fetch_or_exec /testbench/kotku/zet_proc/fetch_or_exec +add wave -divider zbt +add wave -radix hexadecimal /testbench/kotku/vdu0/* +run 50us Index: trunk/impl/virtex4-ml403ep/sim/CY7C1354BV25.v =================================================================== --- trunk/impl/virtex4-ml403ep/sim/CY7C1354BV25.v (nonexistent) +++ trunk/impl/virtex4-ml403ep/sim/CY7C1354BV25.v (revision 39) @@ -0,0 +1,487 @@ +//************************************************************************ +//************************************************************************ +//** This model is the property of Cypress Semiconductor Corp and is ** +//** protected by the US copyright laws, any unauthorized copying and ** +//** distribution is prohibited. Cypress reserves the right to change ** +//** any of the functional specifications without any prior notice. ** +//** Cypress is not liable for any damages which may result from the ** +//** use of this functional model. ** +//** ** +//** File Name : CY7C1354BV25 ** +//** ** +//** Revision : 1.1 - 01/30/2004 ** +//** ** +//** The timings are to be selected by the user depending upon the ** +//** frequency of operation from the datasheet. ** +//** ** +//** Model : CY7C1354BV25 - 256K x 36 NoBL Pipelined SRAM ** +//** Queries : MPD Applications ** +//** e-mail: mpd_apps@cypress.com ** +//************************************************************************ +//************************************************************************ + +`timescale 1ns / 10ps + +// NOTE : Any setup/hold errors will force input signal to x state +// or if results indeterminant (write addr) core is reset x + +// define fixed values + +`define wordsize (36 -1) // +`define no_words (262144 -1) // 256K x 36 RAM + +module cy7c1354 ( d, clk, a, bws, we_b, adv_lb, ce1b, ce2, ce3b, oeb, cenb, mode); + +inout [31:0] d; +input clk, // clock input (R) + we_b, // byte write enable(L) + adv_lb, // burst(H)/load(L) address + ce1b, // chip enable(L) + ce2, // chip enable(H) + ce3b, // chip enable(L) + oeb, // async output enable(L)(read) + cenb, // clock enable(L) + mode; // interleave(H)/linear(L) burst +input [3:0] bws; // byte write select(L) +input [18:0] a; // address bus + +// *** NOTE DEVICE OPERATES #0.01 AFTER CLOCK *** +// *** THEREFORE DELAYS HAVE TO TAKE THIS INTO ACCOUNT *** + +//********************************************************************** +// This model is configured for 166 MHz Operation (CY7C1354-166). +//********************************************************************** + `define teohz #3.5 + `define teolz #0 + `define tchz #3.5 + `define tclz #1.5 + + `define tco #3.5 + `define tdoh #1.5 + + `define tas 1.5 + `define tah 0.5 + +/********************************************************************** +// Timings for 225MHz +//********************************************************************** + `define teohz #2.8 + `define teolz #0 + `define tchz #2.8 + `define tclz #1.25 + + `define tco #2.8 + `define tdoh #1.25 + + `define tas 1.4 + `define tah 0.4 + +//*********************************************************************** +// Timings for 200MHz +//********************************************************************** + `define teohz #3.2 + `define teolz #0 + `define tchz #3.2 + `define tclz #1.5 + + `define tco #3.2 + `define tdoh #1.5 + + `define tas 1.5 + `define tah 0.5 +***********************************************************************/ + +reg notifier; // error support reg's +reg noti1_0; +reg noti1_1; +reg noti1_2; +reg noti1_3; +reg noti1_4; +reg noti1_5; +reg noti1_6; +reg noti2; + + +wire chipen; // combined chip enable (high for an active chip) + +reg chipen_d; // _d = delayed +reg chipen_o; // _o = operational = delayed sig or _d sig + +wire writestate; // holds 1 if any of writebus is low +reg writestate_d; +reg writestate_o; + +wire loadcyc; // holds 1 for load cycles (setup and hold checks) +wire writecyc; // holds 1 for write cycles (setup and hold checks) +wire [3:0] bws; // holds the bws values + +wire [3:0] writebusb; // holds the "internal" bws bus based on we_b +reg [3:0] writebusb_d; +reg [3:0] writebusb_o; + +wire [2:0] operation; // holds chipen, adv_ld and writestate +reg [2:0] operation_d; +reg [2:0] operation_o; + +wire [17:0] a; // address input bus +reg [17:0] a_d; +reg [17:0] a_o; + +reg [`wordsize:0] do; // data output reg +reg [`wordsize:0] di; // data input bus +reg [`wordsize:0] dd; // data delayed bus + +wire tristate; // tristate output (on a bytewise basis) when asserted +reg cetri; // register set by chip disable which sets the tristate +reg oetri; // register set by oe which sets the tristate +reg enable; // register to make the ram enabled when equal to 1 +reg [17:0] addreg; // register to hold the input address +reg [`wordsize:0] pipereg; // register for the output data + +reg [`wordsize:0] mem [0:`no_words]; // RAM array + +reg [`wordsize:0] writeword; // temporary holding register for the write data +reg burstinit; // register to hold a[0] for burst type +reg [18:0] i; // temporary register used to write to all mem locs. +reg writetri; // tristate +reg lw, bw; // pipelined write functions +reg we_bl; + + +wire [31:0] d = !tristate ? + {do[34:27],do[25:18],do[16:9],do[7:0]} + : 32'bz ; // data bus + +assign chipen = (adv_lb == 1 ) ? chipen_d : + ~ce1b & ce2 & ~ce3b ; + +assign writestate = ~& writebusb; + +assign operation = {chipen, adv_lb, writestate}; + +assign writebusb[3:0] = ( we_b ==0 & adv_lb ==0) ? bws[3:0]: + ( we_b ==1 & adv_lb ==0) ? 4'b1111 : + ( we_bl ==0 & adv_lb ==1) ? bws[3:0]: + ( we_bl ==1 & adv_lb ==1) ? 4'b1111 : + 4'bxxxx ; + +assign loadcyc = chipen & !cenb; + +assign writecyc = writestate_d & enable & ~cenb & chipen; // check + +assign tristate = cetri | writetri | oetri; + +pullup (mode); + +// formers for notices/errors etc +// +//$display("NOTICE : xxx :"); +//$display("WARNING : xxx :"); +//$display("ERROR *** : xxx :"); + + +// initialize the output to be tri-state, ram to be disabled + +initial + begin +// signals + + writetri = 0; + cetri = 1; + enable = 0; + lw = 0; + bw = 0; + +// error signals + + notifier = 0; + noti1_0 = 0; + noti1_1 = 0; + noti1_2 = 0; + noti1_3 = 0; + noti1_4 = 0; + noti1_5 = 0; + noti1_6 = 0; + noti2 = 0; + +end + + + +// asynchronous OE + +always @(oeb) +begin + if (oeb == 1) + oetri <= `teohz 1; + else + oetri <= `teolz 0; +end + +// *** SETUP / HOLD VIOLATIONS *** + +always @(noti2) +begin +$display("NOTICE : 020 : Data bus corruption"); + force d =36'bx; + #1; + release d; +end + +always @(noti1_0) +begin +$display("NOTICE : 010 : Byte write corruption"); + force bws = 4'bx; + #1; + release bws; +end + +always @(noti1_1) +begin +$display("NOTICE : 011 : Byte enable corruption"); + force we_b = 1'bx; + #1; + release we_b; +end + +always @(noti1_2) +begin +$display("NOTICE : 012 : CE1B corruption"); + force ce1b =1'bx; + #1; + release ce1b; +end + +always @(noti1_3) +begin +$display("NOTICE : 013 : CE2 corruption"); + force ce2 =1'bx; + #1; + release ce2; +end + +always @(noti1_4) +begin +$display("NOTICE : 014 : CE3B corruption"); + force ce3b =1'bx; + #1; + release ce3b; +end + +always @(noti1_5) +begin +$display("NOTICE : 015 : CENB corruption"); + force cenb =1'bx; + #1; + release cenb; +end + +always @(noti1_6) +begin +$display("NOTICE : 016 : ADV_LB corruption"); + force adv_lb = 1'bx; + #1; + release adv_lb; +end + +// synchronous functions from clk edge + +always @(posedge clk) +if (!cenb) +begin +#0.01; + // latch conditions on adv_lb + + if (adv_lb) + we_bl <= we_bl; + else + we_bl <= we_b; + + chipen_d <= chipen; + + + chipen_o <= chipen; + writestate_o <= writestate; + writestate_d <= writestate_o; + writebusb_o <= writebusb; + writebusb_d <= writebusb_o; + operation_o <= operation; + a_o <= a; + a_d <= a_o; + di = {1'b0,d[31:24], + 1'b0,d[23:16], + 1'b0,d[15:8], + 1'b0,d[7:0]}; + + // execute previously pipelined fns + + if (lw) begin + loadwrite; + lw =0; + end + + if (bw) begin + burstwrite; + bw =0; + end + + // decode input/piplined state + + casex (operation_o) + 3'b0?? : turnoff; + 3'b101 : setlw; + 3'b111 : setbw; + 3'b100 : loadread; + 3'b110 : burstread; + default : unknown; // output unknown values and display an error message + endcase + + do <= `tco pipereg; + +end + +// *** task section *** + +task read; +begin + if (enable) cetri <= `tclz 0; + do <= `tdoh 36'hx; + writetri <= `tchz 0; + pipereg = mem[addreg]; +end +endtask + +task write; +begin + if (enable) cetri <= `tclz 0; + writeword = mem[addreg]; // set up a word to hold the data for the current location + /* overwrite the current word for the bytes being written to */ + if (!writebusb_d[3]) writeword[35:27] = di[35:27]; + if (!writebusb_d[2]) writeword[26:18] = di[26:18]; + if (!writebusb_d[1]) writeword[17:9] = di[17:9]; + if (!writebusb_d[0]) writeword[8:0] = di[8:0]; + writeword = writeword & writeword; //convert z to x states + mem[addreg] = writeword; // store the new word into the memory location + //writetri <= `tchz 1; // tristate the outputs +end +endtask + +task setlw; +begin + lw =1; + writetri <= `tchz 1; // tristate the outputs +end +endtask + +task setbw; +begin + bw =1; + writetri <= `tchz 1; // tristate the outputs +end +endtask + +task loadread; +begin + burstinit = a_o[0]; + addreg = a_o; + enable = 1; + read; +end +endtask + +task loadwrite; +begin + burstinit = a_d[0]; + addreg = a_d; + enable = 1; + write; +end +endtask + +task burstread; +begin + burst; + read; +end +endtask + +task burstwrite; +begin + burst; + write; +end +endtask + +task unknown; +begin + do = 36'bx; + // $display ("Unknown function: Operation = %b\n", operation); +end +endtask + +task turnoff; +begin + enable = 0; + cetri <= `tchz 1; + pipereg = 36'h0; +end +endtask + +task burst; +begin + if (burstinit == 0 || mode == 0) + begin + case (addreg[1:0]) + 2'b00: addreg[1:0] = 2'b01; + 2'b01: addreg[1:0] = 2'b10; + 2'b10: addreg[1:0] = 2'b11; + 2'b11: addreg[1:0] = 2'b00; + default: addreg[1:0] = 2'bxx; + endcase + end + else + begin + case (addreg[1:0]) + 2'b00: addreg[1:0] = 2'b11; + 2'b01: addreg[1:0] = 2'b00; + 2'b10: addreg[1:0] = 2'b01; + 2'b11: addreg[1:0] = 2'b10; + default: addreg[1:0] = 2'bxx; + endcase + end +end +endtask + +// IO checks +/* +specify +// specify the setup and hold checks + +// notifier will wipe memory as result is indeterminent + +$setuphold(posedge clk &&& loadcyc, a, `tas, `tah, notifier); + +// noti1 should make ip = 'bx; + +$setuphold(posedge clk, bws, `tas, `tah, noti1_0); + +$setuphold(posedge clk, we_b, `tas, `tah, noti1_1); +$setuphold(posedge clk, ce1b, `tas, `tah, noti1_2); +$setuphold(posedge clk, ce2, `tas, `tah, noti1_3); +$setuphold(posedge clk, ce3b, `tas, `tah, noti1_4); + +// noti2 should make d = 36'hxxxxxxxxx; + +$setuphold(posedge clk &&& writecyc, d, `tas, `tah, noti2); +//$setuphold(posedge clk &&& WriteTimingCheck , d, `tas, `tah, noti2); + +// add extra tests here. + +$setuphold(posedge clk, cenb, `tas, `tah, noti1_5); +$setuphold(posedge clk, adv_lb, `tas, `tah, noti1_6); + +endspecify +*/ +endmodule + + Index: trunk/impl/virtex4-ml403ep/sim/flash_stub.v =================================================================== --- trunk/impl/virtex4-ml403ep/sim/flash_stub.v (nonexistent) +++ trunk/impl/virtex4-ml403ep/sim/flash_stub.v (revision 39) @@ -0,0 +1,26 @@ +`timescale 1ns/10ps + +module flash_stub ( + input [20:0] flash_addr_, + output [31:0] flash_data_, + input flash_oe_n_, + input flash_we_n_, + input flash_ce2_ + ); + + // Registers and nets + reg [31:0] rom[2**21-1:0]; + reg [31:0] dat_o; + + // Continous assignments + assign flash_data_ = flash_ce2_ ? dat_o : 31'hzzzzzzzz; + + // Behaviour + initial $readmemh("data.ml403", rom, 21'h0); + initial $readmemh("hd.ml403", rom, 21'h100000); + + always @(*) dat_o <= #110 + (!flash_oe_n_ & flash_we_n_ & flash_ce2_) ? + rom[flash_addr_] : 32'hzzzzzzzz; + +endmodule Index: trunk/impl/virtex4-ml403ep/syn/clock.v =================================================================== --- trunk/impl/virtex4-ml403ep/syn/clock.v (nonexistent) +++ trunk/impl/virtex4-ml403ep/syn/clock.v (revision 39) @@ -0,0 +1,85 @@ +module clock ( + input sys_clk_in_, + output clk, + output clk_100M, + output vdu_clk, + output rst + ); + + // Register declarations + reg [6:0] count; + + // Net declarations + wire ref_clk; + wire ref_clk0; + wire lock; + wire vdu_lock; + wire fpga_lock; + wire vdu_clk0; + wire fpga_fb; + wire fpga_fb0; + wire fpga_clk0; + + // Module instantiations + IBUFG ref_buf ( + .O (ref_clk), + .I (sys_clk_in_) + ); + + // DCM for the VGA - 25 Mhz + DCM_ADV vdu_dcm ( + .CLKIN (ref_clk), + .CLKFB (clk_100M), + .CLK0 (ref_clk0), + .CLKDV (vdu_clk0), + .RST (1'b0), + .LOCKED (vdu_lock) + ); + defparam vdu_dcm.CLKIN_PERIOD = 10.000; + defparam vdu_dcm.CLKDV_DIVIDE = 4; + defparam vdu_dcm.DCM_AUTOCALIBRATION = "FALSE"; + + BUFG b_clk_100M ( + .O (clk_100M), + .I (ref_clk0) + ); + + BUFG b_vdu_clk ( + .O (vdu_clk), + .I (vdu_clk0) + ); + + // fpga DCM + DCM_ADV fpga_dcm ( + .CLKIN (ref_clk), + .CLKFB (fpga_fb), + .CLK0 (fpga_fb0), + .CLKDV (fpga_clk0), + .RST (1'b0), + .LOCKED (fpga_lock) + ); + defparam fpga_dcm.CLKIN_PERIOD = 10.000; + defparam fpga_dcm.CLKDV_DIVIDE = 16; + defparam fpga_dcm.DCM_AUTOCALIBRATION = "FALSE"; + + BUFG b_fpga_fb ( + .O (fpga_fb), + .I (fpga_fb0) + ); + + BUFG b_fpga_clk ( + .O (clk), + .I (fpga_clk0) + ); + + // Continuous assignments + assign rst = (count!=7'h7f); + assign lock = vdu_lock & fpga_lock; + + // Behavioral description + // count + always @(posedge clk) + if (!lock) count <= 7'b0; + else count <= (count==7'h7f) ? count : (count + 7'h1); + +endmodule Index: trunk/impl/virtex4-ml403ep/syn/icon.xco =================================================================== --- trunk/impl/virtex4-ml403ep/syn/icon.xco (nonexistent) +++ trunk/impl/virtex4-ml403ep/syn/icon.xco (revision 39) @@ -0,0 +1,47 @@ +############################################################## +# +# Xilinx Core Generator version K.39 +# Date: Tue Nov 11 20:50:43 2008 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# BEGIN Project Options +SET addpads = False +SET asysymbol = True +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = False +SET designentry = VHDL +SET device = xc4vfx12 +SET devicefamily = virtex4 +SET flowvendor = Foundation_iSE +SET formalverification = False +SET foundationsym = False +SET implementationfiletype = Ngc +SET package = ff668 +SET removerpms = False +SET simulationfiles = Structural +SET speedgrade = -10 +SET verilogsim = True +SET vhdlsim = True +# END Project Options +# BEGIN Select +SELECT ICON_(ChipScope_Pro_-_Integrated_Controller) family Xilinx,_Inc. 1.03.a +# END Select +# BEGIN Parameters +CSET component_name=icon +CSET enable_jtag_bufg=true +CSET number_control_ports=1 +CSET use_ext_bscan=false +CSET use_unused_bscan=false +CSET user_scan_chain=USER1 +# END Parameters +GENERATE +# CRC: 7feea034 + Index: trunk/impl/virtex4-ml403ep/syn/kotku.v =================================================================== --- trunk/impl/virtex4-ml403ep/syn/kotku.v (nonexistent) +++ trunk/impl/virtex4-ml403ep/syn/kotku.v (revision 39) @@ -0,0 +1,307 @@ +`timescale 1ns/10ps +`include "defines.v" + +module kotku_ml403 ( +`ifdef DEBUG + output rs_, + output rw_, + output e_, + output [7:4] db_, + input but_, +`endif + + output tft_lcd_clk_, + output [ 1:0] tft_lcd_r_, + output [ 1:0] tft_lcd_g_, + output [ 1:0] tft_lcd_b_, + output tft_lcd_hsync_, + output tft_lcd_vsync_, + + input sys_clk_in_, + + output sram_clk_, + output [20:0] sram_flash_addr_, + inout [31:0] sram_flash_data_, + output sram_flash_oe_n_, + output sram_flash_we_n_, + output [ 3:0] sram_bw_, + output sram_cen_, + output sram_adv_ld_n_, + output flash_ce2_ + ); + + // Net declarations + wire clk; + wire rst_lck; + wire [15:0] dat_i; + wire [15:0] dat_o; + wire [19:1] adr; + wire we; + wire tga; + wire stb; + wire ack; + wire [15:0] io_dat_i; + wire [ 1:0] sel; + wire cyc; + wire [15:0] vdu_dat_o; + wire vdu_ack_o; + wire vdu_mem_arena; + wire vdu_io_arena; + wire vdu_arena; + wire [15:0] flash_dat_o; + wire flash_stb; + wire flash_ack; + wire flash_mem_arena; + wire flash_io_arena; + wire flash_arena; + wire [15:0] zbt_dat_o; + wire zbt_stb; + wire zbt_ack; + wire [20:0] flash_addr_; + wire [20:0] sram_addr_; + wire flash_we_n_; + wire sram_we_n_; + +`ifdef DEBUG + wire [35:0] control0; + wire [ 5:0] funct; + wire [ 2:0] state, next_state; + wire [15:0] x, y; + wire [15:0] imm; + wire clk_100M; + wire [63:0] f1, f2; + wire [15:0] m1, m2; + wire [19:0] pc; + wire [15:0] cs, ip; + wire [15:0] aluo; + wire [ 2:0] cnt; + wire op; + wire [15:0] r1, r2; + reg rst; +`else + wire rst; +`endif + + // Register declarations + reg [15:0] io_reg; + reg [ 1:0] vdu_stb_sync; + reg [ 1:0] vdu_ack_sync; + + // Module instantiations + clock c0 ( +`ifdef DEBUG + .clk_100M (clk_100M), +`endif + .sys_clk_in_ (sys_clk_in_), + .clk (clk), + .vdu_clk (tft_lcd_clk_), + .rst (rst_lck) + ); + + vdu vdu0 ( + // Wishbone signals + .wb_clk_i (tft_lcd_clk_), // 25 Mhz VDU clock + .wb_rst_i (rst), + .wb_dat_i (dat_o), + .wb_dat_o (vdu_dat_o), + .wb_adr_i (adr[11:1]), + .wb_we_i (we), + .wb_tga_i (tga), + .wb_sel_i (sel), + .wb_stb_i (vdu_stb_sync[1]), + .wb_cyc_i (vdu_stb_sync[1]), + .wb_ack_o (vdu_ack_o), + + // VGA pad signals + .vga_red_o (tft_lcd_r_), + .vga_green_o (tft_lcd_g_), + .vga_blue_o (tft_lcd_b_), + .horiz_sync (tft_lcd_hsync_), + .vert_sync (tft_lcd_vsync_) + ); + + flash_cntrl fc0 ( + // Wishbone slave interface + .wb_clk_i (clk), + .wb_rst_i (rst), + .wb_dat_i (dat_o), + .wb_dat_o (flash_dat_o), + .wb_adr_i (adr[17:1]), + .wb_we_i (we), + .wb_tga_i (tga), + .wb_stb_i (flash_stb), + .wb_cyc_i (flash_stb), + .wb_ack_o (flash_ack), + + // Pad signals + .flash_addr_ (flash_addr_), + .flash_data_ (sram_flash_data_[15:0]), + .flash_we_n_ (flash_we_n_), + .flash_ce2_ (flash_ce2_) + ); + + zbt_cntrl zbt0 ( +`ifdef DEBUG + .cnt (cnt), + .op (op), +`endif + .wb_clk_i (clk), + .wb_rst_i (rst), + .wb_dat_i (dat_o), + .wb_dat_o (zbt_dat_o), + .wb_adr_i (adr), + .wb_we_i (we), + .wb_sel_i (sel), + .wb_stb_i (zbt_stb), + .wb_cyc_i (zbt_stb), + .wb_ack_o (zbt_ack), + + // Pad signals + .sram_clk_ (sram_clk_), + .sram_addr_ (sram_addr_), + .sram_data_ (sram_flash_data_), + .sram_we_n_ (sram_we_n_), + .sram_bw_ (sram_bw_), + .sram_cen_ (sram_cen_), + .sram_adv_ld_n_ (sram_adv_ld_n_) + ); + + cpu zet_proc ( +`ifdef DEBUG + .cs (cs), + .ip (ip), + .state (state), + .next_state (next_state), + .iralu (funct), + .x (x), + .y (y), + .imm (imm), + .aluo (aluo), + .r1 (r1), + .r2 (r2), +`endif + + // Wishbone master interface + .wb_clk_i (clk), + .wb_rst_i (rst), + .wb_dat_i (dat_i), + .wb_dat_o (dat_o), + .wb_adr_o (adr), + .wb_we_o (we), + .wb_tga_o (tga), + .wb_sel_o (sel), + .wb_stb_o (stb), + .wb_cyc_o (cyc), + .wb_ack_i (ack) + ); + +`ifdef DEBUG + // Module instantiations + icon icon0 ( + .CONTROL0 (control0) + ); + + ila ila0 ( + .CONTROL (control0), + .CLK (clk_100M), + .TRIG0 (adr), + .TRIG1 ({dat_o,dat_i}), + .TRIG2 (pc), + .TRIG3 ({clk,we,tga,cyc,stb,ack}), + .TRIG4 (funct), + .TRIG5 ({state,next_state}), + .TRIG6 (io_reg), + .TRIG7 (imm), + .TRIG8 ({x,y}), + .TRIG9 (aluo), + .TRIG10 (sram_flash_addr_), + .TRIG11 (sram_flash_data_), + .TRIG12 ({sram_flash_oe_n_, sram_flash_we_n_, sram_bw_, + sram_cen_, sram_adv_ld_n_, flash_ce2_}), + .TRIG13 (cnt), + .TRIG14 ({vdu_mem_arena,flash_mem_arena,flash_stb,zbt_stb,op}), + .TRIG15 ({r1,r2}) + ); + + lcd_display lcd0 ( + .f1 (f1), // 1st row + .f2 (f2), // 2nd row + .m1 (m1), // 1st row mask + .m2 (m2), // 2nd row mask + + .clk (clk_100M), // 100 Mhz clock + .rst (rst_lck), + + // Pad signals + .lcd_rs_ (rs_), + .lcd_rw_ (rw_), + .lcd_e_ (e_), + .lcd_dat_ (db_) + ); + + // Continuous assignments + assign f1 = { 3'b0, rst, 4'h0, io_reg, 4'h0, dat_o, 7'h0, tga, 7'h0, ack, 4'h0 }; + assign f2 = { adr, 7'h0, we, 3'h0, stb, 3'h0, cyc, 8'h0, pc }; + assign m1 = 16'b1011110111101010; + assign m2 = 16'b1111101110011111; + + assign pc = (cs << 4) + ip; +`endif + + assign io_dat_i = flash_io_arena ? flash_dat_o : 16'h0; + assign dat_i = tga ? io_dat_i + : (vdu_mem_arena ? vdu_dat_o + : (flash_mem_arena ? flash_dat_o : zbt_dat_o)); + + assign flash_mem_arena = (adr[19:16]==4'hc || adr[19:16]==4'hf); + assign flash_io_arena = (adr[15:9]==7'b1110_000); + assign flash_arena = (!tga & flash_mem_arena) + | (tga & flash_io_arena); + assign vdu_mem_arena = (adr[19:12]==8'hb8); + assign vdu_io_arena = (adr[15:8]==8'hb8); + assign vdu_arena = (!tga & vdu_mem_arena) + | (tga & vdu_io_arena); + assign flash_stb = flash_arena & stb & cyc; + assign zbt_stb = !vdu_mem_arena & !flash_mem_arena + & !tga & stb & cyc; + + assign ack = tga ? (flash_io_arena ? flash_ack + : (vdu_io_arena ? vdu_ack_sync[1] : (stb & cyc))) + : (vdu_mem_arena ? vdu_ack_sync[1] + : (flash_mem_arena ? flash_ack : zbt_ack)); + + assign sram_flash_oe_n_ = 1'b0; + assign sram_flash_addr_ = flash_arena ? flash_addr_ + : sram_addr_; + assign sram_flash_we_n_ = flash_arena ? flash_we_n_ + : sram_we_n_; + + // Behaviour + // vdu_stb_sync[0] + always @(posedge tft_lcd_clk_) + vdu_stb_sync[0] <= stb & cyc & vdu_arena; + + // vdu_stb_sync[1] + always @(posedge clk) + vdu_stb_sync[1] <= vdu_stb_sync[0]; + + // vdu_ack_sync[0] + always @(posedge clk) vdu_ack_sync[0] <= vdu_ack_o; + + // vdu_ack_sync[1] + always @(posedge clk) vdu_ack_sync[1] <= vdu_ack_sync[0]; + + // io_reg + always @(posedge clk) + io_reg <= rst ? 16'h0 + : ((tga && stb && cyc && we && adr[15:8]==8'hf1) ? + dat_o : io_reg ); + +`ifdef DEBUG + // rst + always @(posedge clk) + rst <= rst_lck ? 1'b1 : (but_ ? 1'b0 : rst ); +`else + assign rst = rst_lck; +`endif +endmodule Index: trunk/impl/virtex4-ml403ep/syn/kotku.prj =================================================================== --- trunk/impl/virtex4-ml403ep/syn/kotku.prj (nonexistent) +++ trunk/impl/virtex4-ml403ep/syn/kotku.prj (revision 39) @@ -0,0 +1,19 @@ +verilog work "../../../../rtl-model/util/div_uu.v" +verilog work "../../../../rtl-model/util/primitives.v" +verilog work "../../../../rtl-model/util/div_su.v" +verilog work "../../../../rtl-model/rotate.v" +verilog work "mult.v" +verilog work "../../../../rtl-model/regfile.v" +verilog work "../../../../rtl-model/jmp_cond.v" +verilog work "../../../../rtl-model/alu.v" +verilog work "../../../../soc/vga/rtl/ram2k_b16_attr.v" +verilog work "../../../../soc/vga/rtl/ram2k_b16.v" +verilog work "../../../../soc/vga/rtl/char_rom_b16.v" +verilog work "../../../../rtl-model/fetch.v" +verilog work "../../../../rtl-model/exec.v" +verilog work "../../../../soc/vga/rtl/vdu.v" +verilog work "../../../../rtl-model/cpu.v" +verilog work "../../mem/zbt_cntrl.v" +verilog work "../../mem/flash_cntrl.v" +verilog work "../clock.v" +verilog work "../kotku.v" Index: trunk/impl/virtex4-ml403ep/syn/mult.xco =================================================================== --- trunk/impl/virtex4-ml403ep/syn/mult.xco (nonexistent) +++ trunk/impl/virtex4-ml403ep/syn/mult.xco (revision 39) @@ -0,0 +1,62 @@ +############################################################## +# +# Xilinx Core Generator version K.39 +# Date: Wed Nov 12 21:43:31 2008 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# BEGIN Project Options +SET addpads = False +SET asysymbol = True +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = False +SET designentry = VHDL +SET device = xc4vfx12 +SET devicefamily = virtex4 +SET flowvendor = Foundation_iSE +SET formalverification = False +SET foundationsym = False +SET implementationfiletype = Ngc +SET package = ff668 +SET removerpms = False +SET simulationfiles = Behavioral +SET speedgrade = -12 +SET verilogsim = True +SET vhdlsim = True +# END Project Options +# BEGIN Select +SELECT Multiplier family Xilinx,_Inc. 10.1 +# END Select +# BEGIN Parameters +CSET ccmimp=Distributed_Memory +CSET clockenable=false +CSET component_name=mult +CSET constvalue=129 +CSET internaluser=0 +CSET multiplier_construction=Use_Mults +CSET multtype=Parallel_Multiplier +CSET optgoal=Speed +CSET outputwidthhigh=33 +CSET outputwidthlow=0 +CSET pipestages=1 +CSET portatype=Signed +CSET portawidth=17 +CSET portbtype=Signed +CSET portbwidth=17 +CSET roundpoint=0 +CSET sclrcepriority=SCLR_Overrides_CE +CSET syncclear=false +CSET use_custom_output_width=false +CSET userounding=false +CSET zerodetect=false +# END Parameters +GENERATE +# CRC: 39b5f86a + Index: trunk/impl/virtex4-ml403ep/syn/kotku.xst =================================================================== --- trunk/impl/virtex4-ml403ep/syn/kotku.xst (nonexistent) +++ trunk/impl/virtex4-ml403ep/syn/kotku.xst (revision 39) @@ -0,0 +1,57 @@ +run +-ifn ../kotku.prj +-ifmt mixed +-ofn kotku_ml403 +-ofmt NGC +-p xc4vfx12-10-ff668 +-top kotku_ml403 +-opt_mode Speed +-opt_level 1 +-power NO +-iuc NO +-keep_hierarchy NO +-netlist_hierarchy as_optimized +-rtlview Yes +-glob_opt AllClockNets +-read_cores YES +-write_timing_constraints NO +-cross_clock_analysis NO +-hierarchy_separator / +-bus_delimiter <> +-case maintain +-slice_utilization_ratio 100 +-bram_utilization_ratio 100 +-dsp_utilization_ratio 100 +-verilog2001 YES +-fsm_extract YES -fsm_encoding Auto +-safe_implementation No +-fsm_style lut +-ram_extract Yes +-ram_style Auto +-rom_extract Yes +-mux_style Auto +-decoder_extract YES +-priority_extract YES +-shreg_extract YES +-shift_extract YES +-xor_collapse YES +-rom_style Auto +-auto_bram_packing NO +-mux_extract YES +-resource_sharing YES +-async_to_sync NO +-use_dsp48 auto +-iobuf YES +-max_fanout 500 +-bufg 32 +-bufr 16 +-register_duplication YES +-register_balancing No +-slice_packing YES +-optimize_primitives NO +-use_clock_enable Auto +-use_sync_set Auto +-use_sync_reset Auto +-iob auto +-equivalent_register_removal YES +-slice_utilization_ratio_maxmargin 5 Index: trunk/impl/virtex4-ml403ep/syn/ml403.ucf =================================================================== --- trunk/impl/virtex4-ml403ep/syn/ml403.ucf (nonexistent) +++ trunk/impl/virtex4-ml403ep/syn/ml403.ucf (revision 39) @@ -0,0 +1,124 @@ +#NET sys_clk_in_ TNM_NET = "sys_clk_in_"; +#TIMESPEC "TSSYSCLK" = PERIOD "sys_clk_in_" 9.9 ns HIGH 50 %; + +NET sys_clk_in_ LOC = AE14; +NET sys_clk_in_ IOSTANDARD = LVCMOS33; + +#NET trx LOC = W1; +NET sram_clk_ LOC = AF7 ; + +#NET sram_flash_addr_[24] LOC = T21; +#NET sram_flash_addr_[23] LOC = U20; +#NET sram_flash_addr_[22] LOC = T19; +NET sram_flash_addr_[20] LOC = AC5; +NET sram_flash_addr_[19] LOC = AB5; +NET sram_flash_addr_[18] LOC = AC4; +NET sram_flash_addr_[17] LOC = AB4; +NET sram_flash_addr_[16] LOC = AB3; +NET sram_flash_addr_[15] LOC = AA4; +NET sram_flash_addr_[14] LOC = AA3; +NET sram_flash_addr_[13] LOC = W5; +NET sram_flash_addr_[12] LOC = W6; +NET sram_flash_addr_[11] LOC = W3; +NET sram_flash_addr_[10] LOC = AF3; +NET sram_flash_addr_[9] LOC = AE3; +NET sram_flash_addr_[8] LOC = AD2; +NET sram_flash_addr_[7] LOC = AD1; +NET sram_flash_addr_[6] LOC = AC2; +NET sram_flash_addr_[5] LOC = AC1; +NET sram_flash_addr_[4] LOC = AB2; +NET sram_flash_addr_[3] LOC = AB1; +NET sram_flash_addr_[2] LOC = AA1; +NET sram_flash_addr_[1] LOC = Y2; +NET sram_flash_addr_[0] LOC = Y1; +#NET sram_flash_addr_[0] LOC = T20; + +NET sram_flash_data_[31] LOC = F14; +NET sram_flash_data_[30] LOC = F13; +NET sram_flash_data_[29] LOC = F12; +NET sram_flash_data_[28] LOC = F11; +NET sram_flash_data_[27] LOC = F16; +NET sram_flash_data_[26] LOC = F15; +NET sram_flash_data_[25] LOC = D14; +NET sram_flash_data_[24] LOC = D13; +NET sram_flash_data_[23] LOC = D15; +NET sram_flash_data_[22] LOC = E14; +NET sram_flash_data_[21] LOC = C11; +NET sram_flash_data_[20] LOC = D11; +NET sram_flash_data_[19] LOC = D16; +NET sram_flash_data_[18] LOC = C16; +NET sram_flash_data_[17] LOC = E13; +NET sram_flash_data_[16] LOC = D12; +NET sram_flash_data_[15] LOC = AA14; +NET sram_flash_data_[14] LOC = AB14; +NET sram_flash_data_[13] LOC = AC12; +NET sram_flash_data_[12] LOC = AC11; +NET sram_flash_data_[11] LOC = AA16; +NET sram_flash_data_[10] LOC = AA15; +NET sram_flash_data_[9] LOC = AB13; +NET sram_flash_data_[8] LOC = AA13; +NET sram_flash_data_[7] LOC = AC14; +NET sram_flash_data_[6] LOC = AD14; +NET sram_flash_data_[5] LOC = AA12; +NET sram_flash_data_[4] LOC = AA11; +NET sram_flash_data_[3] LOC = AC16; +NET sram_flash_data_[2] LOC = AC15; +NET sram_flash_data_[1] LOC = AC13; +NET sram_flash_data_[0] LOC = AD13; + +NET sram_flash_oe_n_ LOC = AC6; +NET sram_flash_we_n_ LOC = AB6; + +NET sram_bw_[3] LOC = Y3; #Y4; +NET sram_bw_[2] LOC = Y4; #Y3; +NET sram_bw_[1] LOC = Y5; #Y6; +NET sram_bw_[0] LOC = Y6; #Y5; + +NET sram_cen_ LOC = V7; +NET sram_adv_ld_n_ LOC = W4; +NET flash_ce2_ LOC = W7; + +#NET flash_byte_n LOC = N22; +#NET flash_audio_reset_n LOC = AD10; + +NET tft_lcd_clk_ LOC = AF8; +NET tft_lcd_r_[0] LOC = E5 | SLEW = FAST | DRIVE = 8; # VGA_R6 +NET tft_lcd_r_[1] LOC = E6 | SLEW = FAST | DRIVE = 8; # VGA_R7 +NET tft_lcd_g_[0] LOC = H8 | SLEW = FAST | DRIVE = 8; # VGA_G6 +NET tft_lcd_g_[1] LOC = C1 | SLEW = FAST | DRIVE = 8; # VGA_G7 +NET tft_lcd_b_[0] LOC = G8 | SLEW = FAST | DRIVE = 8; # VGA_B6 +NET tft_lcd_b_[1] LOC = F8 | SLEW = FAST | DRIVE = 8; # VGA_B7 +NET tft_lcd_hsync_ LOC = C10; +NET tft_lcd_vsync_ LOC = A8; + +NET tft_lcd_clk_ SLEW = FAST; +NET tft_lcd_clk_ DRIVE = 8; + +NET tft_lcd_hsync_ SLEW = FAST; +NET tft_lcd_hsync_ DRIVE = 8; + +NET tft_lcd_vsync_ SLEW = FAST; +NET tft_lcd_vsync_ DRIVE = 8; + +#NET e_ LOC = AE13 | IOSTANDARD = LVCMOS33 | TIG; # LCD_E +#NET rs_ LOC = AC17 | IOSTANDARD = LVCMOS33 | TIG; # LCD_RS +#NET rw_ LOC = AB17 | IOSTANDARD = LVCMOS33 | TIG; # LCD_RW + +#NET db_[7] LOC = AF12 | IOSTANDARD = LVCMOS33 | TIG; # LCD_DB7 +#NET db_[6] LOC = AE12 | IOSTANDARD = LVCMOS33 | TIG; # LCD_DB6 +#NET db_[5] LOC = AC10 | IOSTANDARD = LVCMOS33 | TIG; # LCD_DB5 +#NET db_[4] LOC = AB10 | IOSTANDARD = LVCMOS33 | TIG; # LCD_DB4 + +#NET but_ LOC = B6; # C Button + +#NET leds_[0] LOC = G5; #GPLED0 +#NET leds_[1] LOC = G6; #GPLED1 +#NET leds_[2] LOC = A11; #GPLED2 +#NET leds_[3] LOC = A12; #GPLED3 + +# North-East-South-West-Center LEDs +#NET leds_[4] LOC = C6; # C LED +#NET leds_[5] LOC = F9; # W LED +#NET leds_[6] LOC = A5; # S LED +#NET leds_[7] LOC = E10; # E LED +#NET leds_[8] LOC = E2; # N LED \ No newline at end of file Index: trunk/impl/virtex4-ml403ep/syn/Makefile =================================================================== --- trunk/impl/virtex4-ml403ep/syn/Makefile (nonexistent) +++ trunk/impl/virtex4-ml403ep/syn/Makefile (revision 39) @@ -0,0 +1,32 @@ +all: Zet.ace + +Zet.ace: tmp/kotku_ml403.bit + (cd tmp/ && ../../ace/ml40x_bit2ace kotku_ml403.bit ../Zet.ace ../../ace/) + +tmp/mult.v: mult.xco + mkdir -p tmp + (cd tmp/ && coregen -b ../mult.xco) + +tmp/kotku_ml403.ngc: tmp/mult.v kotku.prj kotku.xst + (cd tmp/ && xst -ifn ../kotku.xst) + +tmp/kotku_ml403.ngd: tmp/kotku_ml403.ngc ml403.ucf tmp/mult.ngc + (cd tmp/ && ngdbuild -uc ../ml403.ucf kotku_ml403.ngc) + +tmp/kotku_ml403.ncd: tmp/kotku_ml403.ngd + (cd tmp/ && map kotku_ml403.ngd) + +tmp/kotku_ml403-par.ncd: tmp/kotku_ml403.ncd + (cd tmp/ && par -w kotku_ml403.ncd kotku_ml403-par.ncd) + +tmp/kotku_ml403.bit: tmp/kotku_ml403-par.ncd + (cd tmp/ && bitgen -w kotku_ml403-par.ncd kotku_ml403.bit) + +kotku.bit: tmp/kotku_ml403.bit + cp tmp/kotku_ml403.bit ./kotku.bit + +clean: + rm -fR tmp/ + +dist-clean: + rm -fR Zet.ace kotku.bit tmp/ Index: trunk/impl/virtex4-ml403ep/syn/ila.xco =================================================================== --- trunk/impl/virtex4-ml403ep/syn/ila.xco (nonexistent) +++ trunk/impl/virtex4-ml403ep/syn/ila.xco (revision 39) @@ -0,0 +1,131 @@ +############################################################## +# +# Xilinx Core Generator version K.39 +# Date: Fri Nov 7 05:42:19 2008 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# BEGIN Project Options +SET addpads = False +SET asysymbol = True +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = False +SET designentry = VHDL +SET device = xc4vfx12 +SET devicefamily = virtex4 +SET flowvendor = Foundation_iSE +SET formalverification = False +SET foundationsym = False +SET implementationfiletype = Ngc +SET package = ff668 +SET removerpms = False +SET simulationfiles = Structural +SET speedgrade = -10 +SET verilogsim = True +SET vhdlsim = True +# END Project Options +# BEGIN Select +SELECT ILA_(ChipScope_Pro_-_Integrated_Logic_Analyzer) family Xilinx,_Inc. 1.02.a +# END Select +# BEGIN Parameters +CSET component_name=ila +CSET counter_width_1=Disabled +CSET counter_width_10=Disabled +CSET counter_width_11=16 +CSET counter_width_12=Disabled +CSET counter_width_13=Disabled +CSET counter_width_14=Disabled +CSET counter_width_15=Disabled +CSET counter_width_16=Disabled +CSET counter_width_2=Disabled +CSET counter_width_3=32 +CSET counter_width_4=Disabled +CSET counter_width_5=Disabled +CSET counter_width_6=Disabled +CSET counter_width_7=Disabled +CSET counter_width_8=Disabled +CSET counter_width_9=Disabled +CSET data_port_width=0 +CSET data_same_as_trigger=true +CSET enable_storage_qualification=true +CSET enable_trigger_output_port=false +CSET exclude_from_data_storage_1=false +CSET exclude_from_data_storage_10=false +CSET exclude_from_data_storage_11=false +CSET exclude_from_data_storage_12=false +CSET exclude_from_data_storage_13=false +CSET exclude_from_data_storage_14=false +CSET exclude_from_data_storage_15=false +CSET exclude_from_data_storage_16=false +CSET exclude_from_data_storage_2=false +CSET exclude_from_data_storage_3=false +CSET exclude_from_data_storage_4=false +CSET exclude_from_data_storage_5=false +CSET exclude_from_data_storage_6=false +CSET exclude_from_data_storage_7=false +CSET exclude_from_data_storage_8=false +CSET exclude_from_data_storage_9=false +CSET match_type_1=basic +CSET match_type_10=basic +CSET match_type_11=basic +CSET match_type_12=basic +CSET match_type_13=basic +CSET match_type_14=basic +CSET match_type_15=basic +CSET match_type_16=basic +CSET match_type_2=basic +CSET match_type_3=basic +CSET match_type_4=basic +CSET match_type_5=basic +CSET match_type_6=basic +CSET match_type_7=basic +CSET match_type_8=basic +CSET match_type_9=basic +CSET match_units_1=1 +CSET match_units_10=1 +CSET match_units_11=1 +CSET match_units_12=1 +CSET match_units_13=1 +CSET match_units_14=1 +CSET match_units_15=1 +CSET match_units_16=1 +CSET match_units_2=1 +CSET match_units_3=1 +CSET match_units_4=1 +CSET match_units_5=1 +CSET match_units_6=1 +CSET match_units_7=1 +CSET match_units_8=1 +CSET match_units_9=1 +CSET max_sequence_levels=16 +CSET number_of_trigger_ports=16 +CSET sample_data_depth=1024 +CSET sample_on=Rising +CSET trigger_port_width_1=20 +CSET trigger_port_width_10=16 +CSET trigger_port_width_11=21 +CSET trigger_port_width_12=16 +CSET trigger_port_width_13=9 +CSET trigger_port_width_14=3 +CSET trigger_port_width_15=5 +CSET trigger_port_width_16=32 +CSET trigger_port_width_2=32 +CSET trigger_port_width_3=20 +CSET trigger_port_width_4=6 +CSET trigger_port_width_5=6 +CSET trigger_port_width_6=6 +CSET trigger_port_width_7=16 +CSET trigger_port_width_8=16 +CSET trigger_port_width_9=32 +CSET use_rpms=true +# END Parameters +GENERATE +# CRC: 1d7360fb + Index: trunk/impl/virtex4-ml403ep/mem/flash_cntrl.v =================================================================== --- trunk/impl/virtex4-ml403ep/mem/flash_cntrl.v (nonexistent) +++ trunk/impl/virtex4-ml403ep/mem/flash_cntrl.v (revision 39) @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2008 Zeus Gomez Marmolejo + * + * This file is part of the Zet processor. This processor is free + * hardware; you can redistribute it and/or modify it under the terms of + * the GNU General Public License as published by the Free Software + * Foundation; either version 3, or (at your option) any later version. + * + * Zet is distrubuted in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + * License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Zet; see the file COPYING. If not, see + * . + */ + +module flash_cntrl ( + // Wishbone slave interface + input wb_clk_i, + input wb_rst_i, + input [15:0] wb_dat_i, + output [15:0] wb_dat_o, + input [17:1] wb_adr_i, + input wb_we_i, + input wb_tga_i, + input wb_stb_i, + input wb_cyc_i, + output reg wb_ack_o, + + // Pad signals + output reg [20:0] flash_addr_, + input [15:0] flash_data_, + output flash_we_n_, + output reg flash_ce2_ + ); + + // Registers and nets + reg [11:0] base; + wire op; + wire opbase; + + // Continuous assignments + assign wb_dat_o = flash_data_; + assign flash_we_n_ = 1'b1; + assign op = wb_cyc_i & wb_stb_i; + assign opbase = op & wb_tga_i & wb_we_i; + + // Behaviour + // flash_addr, 21 bits + always @(posedge wb_clk_i) + flash_addr_ <= wb_tga_i ? { 1'b1, base, wb_adr_i[8:1] } + : { 5'h0, wb_adr_i[17], + wb_adr_i[15:1] }; + + always @(posedge wb_clk_i) flash_ce2_ <= op; + always @(posedge wb_clk_i) wb_ack_o <= op; + + // base + always @(posedge wb_clk_i) + base <= wb_rst_i ? 12'h0: ((opbase) ? wb_dat_i[11:0] : base); +endmodule Index: trunk/impl/virtex4-ml403ep/mem/zbt_cntrl.v =================================================================== --- trunk/impl/virtex4-ml403ep/mem/zbt_cntrl.v (nonexistent) +++ trunk/impl/virtex4-ml403ep/mem/zbt_cntrl.v (revision 39) @@ -0,0 +1,87 @@ +`timescale 1ns/10ps + +`include "defines.v" + +module zbt_cntrl ( +`ifdef DEBUG + output reg [4:0] cnt, + output op, +`endif + + // Wishbone slave interface + input wb_clk_i, + input wb_rst_i, + input [15:0] wb_dat_i, + output reg [15:0] wb_dat_o, + input [19:1] wb_adr_i, + input wb_we_i, + input [ 1:0] wb_sel_i, + input wb_stb_i, + input wb_cyc_i, + output reg wb_ack_o, + + // Pad signals + output sram_clk_, + output reg [20:0] sram_addr_, + inout [31:0] sram_data_, + output reg sram_we_n_, + output reg [ 3:0] sram_bw_, + output reg sram_cen_, + output sram_adv_ld_n_ + ); + + // Registers and nets + reg [31:0] wr; + wire nload; + +`ifndef DEBUG + reg [ 4:0] cnt; + wire op; +`endif + + // Continuous assignments + assign op = wb_stb_i & wb_cyc_i; + assign nload = (|cnt || wb_ack_o); + + assign sram_clk_ = !wb_clk_i; + assign sram_adv_ld_n_ = 1'b0; + assign sram_data_ = (op && wb_we_i) ? wr : 32'hzzzzzzzz; + + // Behaviour + // cnt + always @(posedge wb_clk_i) + cnt <= wb_rst_i ? 3'b0 + : { cnt[3:0], nload ? 1'b0 : op }; + + // wb_ack_o + always @(posedge wb_clk_i) + wb_ack_o <= wb_rst_i ? 1'b0 : (wb_ack_o ? op : cnt[3]); + + // wb_dat_o + always @(posedge wb_clk_i) + wb_dat_o <= cnt[3] ? (wb_adr_i[1] ? sram_data_[31:16] + : sram_data_[15:0]) : wb_dat_o; + + // sram_addr_ + always @(posedge wb_clk_i) + sram_addr_ <= op ? { 3'b0, wb_adr_i[19:2] } : sram_addr_; + + // sram_we_n_ + always @(posedge wb_clk_i) + sram_we_n_ <= wb_we_i ? (cnt[1] ? !op : 1'b1) : 1'b1; + + // sram_bw_ + always @(posedge wb_clk_i) + sram_bw_ <= wb_adr_i[1] ? { ~wb_sel_i, 2'b11 } + : { 2'b11, ~wb_sel_i }; + + // sram_cen_ + always @(posedge wb_clk_i) + sram_cen_ <= wb_rst_i ? 1'b1 + : (cnt[0] ? 1'b0 : (cnt[4] ? 1'b1 : sram_cen_)); + + // wr + always @(posedge wb_clk_i) + wr <= op ? (wb_adr_i[1] ? { wb_dat_i, 16'h0 } + : { 16'h0, wb_dat_i }) : wr; +endmodule Index: trunk/tests/i86/Makefile =================================================================== --- trunk/tests/i86/Makefile (revision 38) +++ trunk/tests/i86/Makefile (nonexistent) @@ -1,49 +0,0 @@ -#s3roms := $(patsubst %.s,%.s3rom,$(wildcard *.s)) -ml403roms := $(patsubst %.s,%.bin,$(wildcard *.s)) -rtlroms := $(patsubst %.s,%.rtlrom,$(wildcard *s)) - -all: $(ml403roms) - -# altera: ../../altera/zet/simulation/modelsim/bios0.dat ../../altera/zet/simulation/modelsim/bios1.dat - -# ../../altera/zet/simulation/modelsim/bios0.dat: bios0.out -# hexdump -v -e '1/1 "%02X"' -e '"\n"' bios0.out > ../../altera/zet/simulation/modelsim/bios0.dat - -#../../altera/zet/simulation/modelsim/bios1.dat: bios1.out -# hexdump -v -e '1/1 "%02X"' -e '"\n"' bios1.out > ../../altera/zet/simulation/modelsim/bios1.dat - -#../../sim/bios.dat: bios.out -# hexdump -v -e '1/1 "%02X"' -e '"\n"' bios.out > ../../sim/bios.dat -# hexdump -v -e '1/2 "0x1%04_ax/%04x"' -e '"\n"' bios.out | awk -F/ '{printf "00%x/%s\n", rshift(strtonum($$1),1), $$2}' > ../../impl/spartan3an-sk/sim/flash-prom/memory_file - -#$(BIOS): bios.out -# splitlh bios.out $(BIOS) - -%.s3rom: %.out - hexdump -v -e '1/2 "0x1%04_ax/%04x"' -e '"\n"' $< | awk -F/ '{printf "00%x/%s\n", rshift(strtonum($$1),1), $$2}' > ../../impl/spartan3an-sk/sim/flash-prom/$@ - -%.mcs: %.out - echo :020000040001F9 > $@ - hexdump -v -e '":20%04_ax00"' -e '32/1 "%02x"' -e '"00"' -e '"\n"' $< | tr a-z A-Z >> $@ - echo :00000001FF >> $@ - -%.rtlrom: %.out - hexdump -v -e '1/2 "%04X"' -e '"\n"' $< > ../../sim/$@ - -%.rtlold: %.out - hexdump -v -e '1/1 "%02X"' -e '"\n"' $< > ../../sim/$@ - -%.rom: %.out - out2rom-ml403 < $< > $@ - -%.bin: %.rom - cat count.rom $< > $@ - -%.out: %.o - objcopy -O binary -S $< $@ - -%.o: %.c - as $< -o $@ - -clean: - rm -f *.o *.out *.bin *.mcs ../../impl/spartan3an-sk/sim/flash-prom/*.s3rom ../../sim/*.rtlrom Index: trunk/tests/i86/16_cmpneg.s =================================================================== --- trunk/tests/i86/16_cmpneg.s (revision 38) +++ trunk/tests/i86/16_cmpneg.s (nonexistent) @@ -1,126 +0,0 @@ -.code16 -start: - -movw $96, %sp - -# cmp word tests -movw $0x0001, %ax -movw $0x0002, %bx -cmpw %bx, %ax -movw %ax, (0) -movw %bx, (2) -pushf - -movw $0xffff, %dx -movw $0xffff, (4) -cmpw %dx, (4) -movw %dx, (6) -pushf - -movw $0xffff, %cx -movw $0x0001, (8) -cmpw (8), %cx -movw %cx, (10) -pushf - -movw $0x8000, %ax -cmpw $0x0001, %ax -movw %ax, (12) -pushf - -movw $0x8000, %bp -.byte 0x83,0xfd,0xff -movw %bp, (14) -pushf - -movw $0x7f81, %si -cmpw $0x903c, %si -movw %si, (16) -pushf - -movw $0xefc3, (18) -cmpw $0xc664, (18) -pushf - -movw $0xe933, (20) -.word 0x3e83, 0x0014 -.byte 0x64 -pushf - -# cmp byte tests -movb $0x01, (22) -cmpb $0x02, (22) -pushf - -movb $0xff, %dh -cmpb $0xff, %dh -movw %dx, (23) -pushf - -movb $0xff, %al -cmpb $0x01, %al -movw %ax, (25) -pushf - -movb $0x80, (27) -movb $0x01, %ch -cmpb (27), %ch -movw %cx, (28) -pushf - -movb $0x80, %bl -movb $0x7f, (30) -cmpb %bl, (30) -movw %bx, (31) -pushf - -movb $0xbc, %al -movb $0x8e, %ah -cmpb %al, %ah -movw %ax, (33) -pushf - -# neg word tests -movw $0x0, %cx -negw %cx -movw %cx, (34) -pushf - -movw $0x7fff, (36) -negw (36) -pushf - -movw $0x8000, %bp -negw %bp -movw %bp, (38) -pushf - -movw $0xace9, (40) -negw (40) -pushf - -# neg byte tests -movb $0x0, %ah -negb %ah -movw %ax, (42) -pushf - -movb $0x7f, (44) -negb (44) -pushf - -movb $0xc9, %cl -negb %cl -movw %cx, (45) -pushf - -movb $0x80, (47) -negb (47) -pushf -hlt - -.org 65520 -jmp start -.org 65535 -.byte 0xff - Index: trunk/tests/i86/03_control.s =================================================================== --- trunk/tests/i86/03_control.s (revision 38) +++ trunk/tests/i86/03_control.s (nonexistent) @@ -1,43 +0,0 @@ -.code16 -start: -movw $0x1000, %ax -movw %ax, %ss -movw $0x1000, %sp - -movw $0xfeff, %cx -push %cx -popf - -clc # (1) -cld # (2) -cli # (3) - -nop # (6) - -pushf -pop %ax # %ax = 0x08d6 - -movw $0x1, %dx -push %dx -popf - -cmc # (4) -stc # (7) -std # (8) -sti # (9) - -pushf -pop %bx # %bx = 0x0603 - -movw $0x0, %cx -movw %cx, %ds -movw %ax, (0) -movw %bx, (2) - -hlt # (5) - -.org 65520 -jmp start - -.org 65535 -.byte 0xff Index: trunk/tests/i86/19_segpr.s =================================================================== --- trunk/tests/i86/19_segpr.s (revision 38) +++ trunk/tests/i86/19_segpr.s (nonexistent) @@ -1,98 +0,0 @@ -.code16 -start: -movw $0xf100, %bx -movw %bx, %es - -es movw (0), %bx -es movw (2), %ax -movw %ax, (2) -movw $0x2, %sp -es push %bx - -es les (0), %dx -movw %dx, (4) -movw %es, %dx -movw %dx, (6) - -movw $5, %di -cs lea 23(%bp,%di), %si -movw %si, (8) - -movw $0x0005, %bx -movw $0x0005, %ax -movw $0x2345, (10) -movw $0xf100, %dx -movw %dx, %es -es xlat -movw %ax, (12) - -# inc with segment -movw $0x1, %ax -movw %ax, %ss -movw $0x6, (16) -ss incw (0) - -# div with interrupt -movw $32, %sp -movw $0x0, (18) -ss -.byte 0xf3 -divw (2) -subw $6, %sp - -movw $0x1200, (20) -movw $5, %bx -movw $3, %si -# repz prefix (do not affect) -.byte 0xf3 -ss call *-4(%bx,%si) - -hlt - -.org 0x1000 -.word 0x1100 -.word 0xf000 - -.org 0x100a -.word 0x5678 - -.org 0x1100 -movw %sp, %si -ss movw (%si), %si -movw %si, (14) -addw $6, %si -movw %sp, %di -ss movw %si, (%di) -iret - -.org 0x1200 -movw $0xf120, %cx -movw %cx, %es -movw $0x0200, %si -movw $0x0e01, %di - -es cmpsb -pushf - -movw $0x1, %ax -movw %ax, %es -movw $6, %di -movw $0x1400, %si -movw $0x6, %cx -# Two prefixes -rep cs movsb -hlt - -.org 0x1400 -.byte 0x01,0xff,0xff,0x80 -.word 0x0002 -.byte 0xc2 - -.org 0x2001 -.byte 0x02,0xff,0x01,0x01 -.word 0x8001 - -.org 65520 -jmp start -.org 65535 -.byte 0xff Index: trunk/tests/i86/18_div.s =================================================================== --- trunk/tests/i86/18_div.s (revision 38) +++ trunk/tests/i86/18_div.s (nonexistent) @@ -1,384 +0,0 @@ -.code16 -start: -movw $208, %sp - -# Exception 0 handler -movw $0x1000, (0) -movw $0xf000, (2) - -movw $208, %bp - -# div word tests -# easy test -movw $0x0, %dx -movw $0x14, %ax -movw $0x5, %bx - -movw $0x2, (%bp) -divw %bx -addw $0x2, %bp - -movw %ax, (128) -movw %bx, (130) -movw %dx, (4) -pushf - - -movw $0xa320, %dx -movw $0xc3da, %ax -movw $0xffff, (6) - -movw $0x4, (%bp) -divw (6) -addw $0x2, %bp - -movw %ax, (8) -movw %dx, (10) -pushf - - -movw $0xffff, %dx -movw $0xffff, %ax -movw $0x1, %cx - -movw $0x2, (%bp) -divw %cx -addw $0x2, %bp - -movw %ax, (12) -movw %cx, (14) -movw %dx, (16) -pushf - - -movw $0xffff, %dx -movw $0xffff, %ax -movw $0xffff, (18) - -movw $0x4, (%bp) -divw (18) -addw $0x2, %bp - -movw %ax, (20) -movw %dx, (22) -pushf - - -movw $0xfbb4, %dx -movw $0xc3da, %ax -movw $0xae8e, %cx - -movw $0x2, (%bp) -divw %cx -addw $0x2, %bp - -movw %ax, (24) -movw %cx, (26) -movw %dx, (28) -pushf - - -movw $0x25c9, %dx -movw $0xf110, %ax - -movw $0x2, (%bp) -divw %ax -addw $0x2, %bp - -movw %ax, (30) -movw %dx, (32) -pushf - - -# div byte tests -# easy test -movw $0x14, %ax -movw $0x5, %bx - -movw $0x2, (%bp) -divb %bl -addw $0x2, %bp - -movw %ax, (34) -movw %bx, (36) -movw %dx, (38) -pushf - -movw $0xa320, %dx -movw $0xc3da, %ax -movw $0xff, (40) - -movw $0x4, (%bp) -divb (40) -addw $0x2, %bp - -movw %ax, (42) -movw %dx, (44) -pushf - -movw $0xffff, %ax -movb $0x1, %dh - -movw $0x2, (%bp) -divb %dh -addw $0x2, %bp - -movw %ax, (46) -movw %dx, (48) -pushf - -movw $0xffff, %ax -movw $0xffff, (50) - -movw $0x4, (%bp) -divb (51) -addw $0x2, %bp - -movw %ax, (52) -movw %dx, (54) -pushf - -movw $0x008a, %ax -movw $0xae8e, %cx - -movw $0x2, (%bp) -divb %cl -addw $0x2, %bp - -movw %ax, (56) -movw %cx, (58) -pushf - -movw $0x0669, %dx -movw $0x89f3, %ax - -movw $0x2, (%bp) -divb %al -addw $0x2, %bp - -movw %ax, (60) -movw %dx, (62) -pushf - -# idiv word tests -# easy test -movw $0x0, %dx -movw $0x14, %ax -movw $0xfa, %bx - -movw $0x2, (%bp) -idivw %bx -addw $0x2, %bp - -movw %ax, (64) -movw %bx, (66) -movw %dx, (68) -pushf - - -movw $0xa320, %dx -movw $0xc3da, %ax -movw $0xffff, (70) - -movw $0x4, (%bp) -idivw (70) -addw $0x2, %bp - -movw %ax, (72) -movw %dx, (74) -pushf - - -movw $0xffff, %dx -movw $0xffff, %ax -movw $0x1, %cx - -movw $0x2, (%bp) -idivw %cx -addw $0x2, %bp - -movw %ax, (76) -movw %cx, (78) -movw %dx, (80) -pushf - - -movw $0xffff, %dx -movw $0xffff, %ax -movw $0xffff, (82) - -movw $0x4, (%bp) -idivw (82) -addw $0x2, %bp - -movw %ax, (84) -movw %dx, (86) -pushf - - -movw $0xfbb4, %dx -movw $0xc3da, %ax -movw $0xae8e, %cx - -movw $0x2, (%bp) -idivw %cx -addw $0x2, %bp - -movw %ax, (88) -movw %cx, (90) -movw %dx, (92) -pushf - - -movw $0x25c9, %dx -movw $0xf110, %ax - -movw $0x2, (%bp) -idivw %ax -addw $0x2, %bp - -movw %ax, (94) -movw %dx, (96) -pushf - -# idiv byte tests -# easy test -movw $0x14, %ax -movw $0x5, %bx - -movw $0x2, (%bp) -idivb %bl -addw $0x2, %bp - -movw %ax, (98) -movw %bx, (100) -movw %dx, (102) -pushf - - -movw $0xa320, %dx -movw $0xc3da, %ax -movw $0xff, (104) - -movw $0x4, (%bp) -idivb (104) -addw $0x2, %bp - -movw %ax, (106) -movw %dx, (108) -pushf - - -movw $0xffff, %ax -movb $0x1, %dh - -movw $0x2, (%bp) -idivb %dh -addw $0x2, %bp - -movw %ax, (110) -movw %dx, (112) -pushf - - -movw $0xffff, %ax -movw $0xffff, (114) - -movw $0x4, (%bp) -idivb (115) -addw $0x2, %bp - -movw %ax, (116) -movw %dx, (118) -pushf - - -movw $0x008a, %ax -movw $0xae8e, %cx - -movw $0x2, (%bp) -idivb %cl -addw $0x2, %bp - -movw %ax, (120) -movw %cx, (122) -pushf - - -movw $0x0669, %dx -movw $0x89f3, %ax - -movw $0x2, (%bp) -idivb %al -addw $0x2, %bp - -movw %ax, (124) -movw %dx, (126) -pushf - - -# AAM tests -movw $0xffff, %ax - -movw $0x2, (%bp) -aam $0 -addw $0x2, %bp -movw %ax, (132) -pushf - -movw $0x2, (%bp) -aam $1 -addw $0x2, %bp -movw %ax, (134) -pushf - -movw $0xffff, %ax -movw $0x2, (%bp) -aam -addw $0x2, %bp -movw %ax, (136) -pushf - -movw $0xff00, %ax -movw $0x2, (%bp) -aam $0 -addw $0x2, %bp -movw %ax, (138) -pushf - -movw $0x2, (%bp) -aam $1 -addw $0x2, %bp -movw %ax, (140) -pushf - -movw $0x3ffb, %ax -movw $0x2, (%bp) -aam -addw $0x2, %bp -movw %ax, (142) -pushf - -hlt - -# Exception handler (int 0) -.org 0x1000 -push %ax -push %di -movw (%bp), %ax -movw %sp, %si -addw $4, %si -movw (%si), %si -movw %si, (%bp) -addw %ax, %si -movw %sp, %di -addw $4, %di -movw %si, (%di) -pop %di -pop %ax -iret - -.org 65520 -jmp start -.org 65535 -.byte 0xff Index: trunk/tests/i86/README =================================================================== --- trunk/tests/i86/README (revision 38) +++ trunk/tests/i86/README (nonexistent) @@ -1,2 +0,0 @@ -Documentation for the test benches are located at the project page: - http://zet.aluzina.org/index.php/Category:Test_benches Index: trunk/tests/i86/14_add.s =================================================================== --- trunk/tests/i86/14_add.s (revision 38) +++ trunk/tests/i86/14_add.s (nonexistent) @@ -1,193 +0,0 @@ -.code16 -start: - -movw $160, %sp - -# add word tests -movw $0xffff, %ax -movw $0x0001, %bx -addw %ax, %bx # (1) addw reg16, reg16 -movw %ax, (0) -movw %bx, (2) -pushf - -movw $0xffff, %dx -movw $0xffff, (4) -addw %dx, (4) # (2) addw reg16, mem16 -movw %dx, (6) -pushf - -movw $0x0001, %cx -movw $0x0002, (8) -addw (8), %cx # (3) addw mem16, reg16 -movw %cx, (10) -pushf - -movw $0x0001, %ax -addw $0x7fff, %ax # (4) addw imm16, ac16 -movw %ax, (12) -pushf - -movw $0x8000, %bp -.byte 0x83,0xc5,0xff # (5) addw imm8, reg16 -movw %bp, (14) -pushf - -movw $0xc783, %si -addw $0xeb2a, %si # (6) addw imm16, reg16 -movw %si, (16) -pushf - -movw $0x8960, (18) -addw $0x0a95, (18) # (7) addw imm16, mem16 -pushf - -movw $0xf1e1, (20) -.word 0x0683, 0x0014 # (8) addw imm8, mem16 -.byte 0x64 -pushf - -# add byte tests -movb $0x01, (22) -addb $0xff, (22) # (9) addb imm8, mem8 -pushf - -movb $0xff, %dh -addb $0xff, %dh # (10) addb imm8, reg8 -movw %dx, (23) -pushf - -movb $0x01, %al -addb $0x02, %al # (11) addb imm8, acum8 -movw %ax, (25) -pushf - -movb $0x7f, (27) -movb $0x01, %ch -addb (27), %ch # (12) addb mem8, reg8 -movw %cx, (28) -pushf - -movb $0x80, %bl -movb $0xff, (30) -addb %bl, (30) # (13) addb reg8, mem8 -movw %bx, (31) -pushf - -movb $0xa6, %al -movb $0x86, %ah -addb %al, %ah # (14) addb reg8, reg8 -movw %ax, (33) -pushf - -# adc word tests -movw $0xffff, %ax -movw $0x0001, %bx -adcw %ax, %bx # (15) adcw reg16, reg16 -movw %ax, (35) -movw %bx, (37) -pushf - -movw $0xffff, %dx -movw $0xffff, (39) -adcw %dx, (39) # (16) adcw reg16, mem16 -movw %dx, (41) -pushf - -movw $0x0001, %cx -movw $0x0002, (43) -adcw (43), %cx # (17) adcw mem16, reg16 -movw %cx, (45) -pushf - -movw $0x0001, %ax -adcw $0x7fff, %ax # (18) adcw imm16, ac16 -movw %ax, (47) -pushf - -movw $0x8000, %bp -.byte 0x83,0xd5,0xff # (19) adcw imm8, reg16 -movw %bp, (49) -pushf - -movw $0x77d3, %si -adcw $0x8425, %si # (20) adcw imm16, reg16 -movw %si, (51) -pushf - -movw $0xeba0, (53) -adcw $0xd3c1, (53) # (21) adcw imm16, mem16 -pushf - -movw $0x7f50, (55) -.word 0x1683, 0x0037 -.byte 0xf5 -pushf - -# adc byte tests -movb $0x01, (57) -adcb $0xff, (57) -pushf - -movb $0xff, %dh -adcb $0xff, %dh -movw %dx, (58) -pushf - -movb $0x01, %al -adcb $0x02, %al -movw %ax, (60) -pushf - -movb $0x7f, (62) -movb $0x01, %ch -adcb (62), %ch -movw %cx, (63) -pushf - -movb $0x80, %bl -movb $0xff, (65) -adcb %bl, (65) -movw %bx, (66) -pushf - -movb $0xb9, %al -movb $0xd3, %ah -adcb %al, %ah -movw %ax, (68) -pushf - -# inc word tests -movw $0xffff, %di -incw %di -movw %di, (70) -pushf - -movw $0x7fff, %bp -.byte 0xff, 0xc5 -movw %bp, (72) -pushf - -movw $0x7412, (74) -incw (74) -pushf - -# inc byte tests -movb $0x7f, %dl -incb %dl -movw %dx, (76) -pushf - -movb $0xff, (77) -incb (77) -pushf - -movb $0xb5, (78) -incb (78) -pushf -hlt - -.org 65520 -jmp start -.org 65535 -.byte 0xff Index: trunk/tests/i86/08_rep.s =================================================================== --- trunk/tests/i86/08_rep.s (revision 38) +++ trunk/tests/i86/08_rep.s (nonexistent) @@ -1,278 +0,0 @@ -.code16 -start: - -# Trivial cases. With %cx 0, nothing is executed -rep movsb -repz movsb -repnz movsb -rep cmpsb -repz cmpsb -repnz cmpsb -rep scasb -repz scasb -repnz scasb -rep lodsb -repz lodsb -repnz lodsb -rep stosb -repz stosb -repnz stosb - - -movw $0x40, %bx -push %bx -popf - -# Now we have the zero flag set, nothing is executed because of %cx - -rep movsb -repnz movsb -repz cmpsb -repnz cmpsb -repz scasb -repnz scasb -rep lodsb -repnz lodsb -rep stosb -repnz stosb - -movw %di, %ax -movb $0x10, %ah -jmp *%ax # jump to 0xf1000 -hlt - -.org 0x102 -jmp rep_stos_z - -.org 0x607 -jmp rep_lods_nz - -.org 0x809 -jmp rep_movs_nz - -.org 0x0ffc -jmp cont_n5 -.org 0x0ffe -jmp cont_n10 -# Prefixes do not affect normal instructions -.org 0x1000 -movw $0, %cx -.byte 0xf3 -push %cx -jmp *%sp - -cont_n10: -movw $0x110a, %cx -.byte 0xf3 -push %cx -jmp *%sp - -cont_n5: -jmp *%cx - -.org 0x110a -movw $0x5, %cx - -movw $0, %dx -push %dx -popf -.byte 0xf2 -pop %cx - -movw %cx, %ax -movb $0x20, %ah -jmp *%ax # jump to 0xf200a - -.org 0x122c -jmp repz_cmps_nz - -.org 0x122f -jmp repz_scas - -# rep movs ZF=1 -.org 0x200a -push %bx -popf -movw $2, %cx -movw $0x3000, %si -movw $0xf000, %ax -movw %ax, %ds -movw $0x1000, %ax -movw %ax, %es -movw $0x0000, %di - -rep movsb - -movw %ax, %ds -movw (0x0000), %ax -movw %di, %bp -movw %ax, (%bp,%si) -jcxz comp_disi -hlt -comp_disi: -jmp *(0x3004) - -.org 0x3000 -.byte 0x09,0x08,0x07,0x06,0x5,0x4,0x3,0x2,0x1,0xa,0xb,0xc,0xd - - -# rep movs ZF=0 -rep_movs_nz: -movw $0xf000, %ax -movw %ax, %ds -movw $0x1, %cx -movw $0, %ax -pushw %ax -popf - -rep movsw - -movw $0x1000, %ax -movw %ax, %ds -movw (0x0002), %ax -movw %di, %bp -movw %ax, (%bp,%si) -jcxz movs_nz -hlt -movs_nz: -jmp *(0x3008) - -# rep lods ZF=0 -rep_lods_nz: -movw $0xf000, %ax -movw %ax, %ds -movw $0x3, %cx -rep lodsb - -jmp *%ax -hlt -rep_lods_z: -# rep lods ZF=1 -movw $0x40, %bx -push %bx -popf -movw $0xf000, %ax -movw %ax, %ds -movw $0x1, %cx -rep lodsw -jmp *%ax - -# rep stos ZF=1 -rep_stos_z: -movw $0x2, %cx -movw $0x4000, %ax -rep stosw -movw $0x1000, %ax -movw %ax, %ds -jmp *(0x0006) -hlt - -.org 0x4000 -# rep stos ZF=0 -movw $0x0, %bx -push %bx -popf -movw $0x4, %cx -rep stosw -jcxz repz_cmps_z -hlt - -# repz cmps ZF=1, but ZF=0 before %cx=0 -repz_cmps_z: -movw $0x40, %bx -push %bx -popf -movw $0x1234, %cx -movw $0x3000, %si -movw $0, %di -movw $0xf000, %ax -movw %ax, %ds -repz cmpsb - -jmp *%cx - -# repz scas ZF=1, but ZF=0 before %cx=0 -repz_scas: -movw $0x40, %bx -push %bx -popf -movw $0x0040, %ax -repz scasw -jmp *%cx - -# repz cmps scas ZF=0, they do only one iteration -repz_cmps_nz: -movw $0x0607, %ax -movw $0x5004, %cx -repz cmpsw -repz scasw -movw $0x40, %bx -push %bx -popf -movw $0x3000, %si -movw $0x0, %di -# repnz cmps scas ZF=1, they do only one iteration -repnz cmpsw -repnz scasw -jmp *%cx -hlt - -.org 0x5000 -# repnz movs ZF=1 all iterations -repnz_movs: -movw $0x2, %cx -repnz movsb -jcxz repnz_lods -hlt - -# repnz lods ZF=1 all iterations -repnz_lods: -movw $0x2, %cx -repnz lodsb -jcxz repnz_stos -hlt - -# repnz stos ZF=1 all iterations -repnz_stos: -movw $0x2, %cx -repnz stosb -jcxz repnz_cmps -hlt - -# repnz cmps ZF=0, but ZF=1 before %cx=0 -repnz_cmps: -movw $0, %bx -push %bx -popf -movw $0x6023, %cx -std -movw $0x6, %di -movw $0x3006, %si -repnz cmpsw - -# repnz scas ZF=0, but ZF=1 before %cx=0 -movw $0x1000, %ax -movw $0, %bx -push %bx -popf -cld -repnz scasw -jmp *%cx -hlt - -.org 0x601b -movw $0, %dx -movw %dx, %ds -movw $0x1234, (4) -hlt - -.org 0xf003 -jmp rep_lods_z - -.org 65520 -movw $0x1000, %sp -movw %sp, %ss -jmp start - -.org 65535 -.byte 0xff Index: trunk/tests/i86/15_sub.s =================================================================== --- trunk/tests/i86/15_sub.s (revision 38) +++ trunk/tests/i86/15_sub.s (nonexistent) @@ -1,194 +0,0 @@ -.code16 -start: - -movw $160, %sp - -# sub word tests -movw $0x0001, %ax -movw $0x0002, %bx -subw %bx, %ax -movw %ax, (0) -movw %bx, (2) -pushf - -movw $0xffff, %dx -movw $0xffff, (4) -subw %dx, (4) -movw %dx, (6) -pushf - -movw $0xffff, %cx -movw $0x0001, (8) -subw (8), %cx -movw %cx, (10) -pushf - -movw $0x8000, %ax -subw $0x0001, %ax -movw %ax, (12) -pushf - -movw $0x8000, %bp -.byte 0x83,0xed,0xff -movw %bp, (14) -pushf - -movw $0x7f81, %si -subw $0x903c, %si -movw %si, (16) -pushf - -movw $0xefc3, (18) -subw $0xc664, (18) -pushf - -movw $0xe933, (20) -.word 0x2e83, 0x0014 -.byte 0x64 -pushf - -# sub byte tests -movb $0x01, (22) -subb $0x02, (22) -pushf - -movb $0xff, %dh -subb $0xff, %dh -movw %dx, (23) -pushf - -movb $0xff, %al -subb $0x01, %al -movw %ax, (25) -pushf - -movb $0x80, (27) -movb $0x01, %ch -subb (27), %ch -movw %cx, (28) -pushf - -movb $0x80, %bl -movb $0x7f, (30) -subb %bl, (30) -movw %bx, (31) -pushf - -movb $0xbc, %al -movb $0x8e, %ah -subb %al, %ah -movw %ax, (33) -pushf - -# sbb word tests -movw $0x0001, %ax -movw $0x0002, %bx -sbbw %ax, %bx -movw %ax, (35) -movw %bx, (37) -pushf - -movw $0xffff, %dx -movw $0xffff, (39) -sbbw %dx, (39) -movw %dx, (41) -pushf - -movw $0xffff, %cx -movw $0x0001, (43) -sbbw (43), %cx -movw %cx, (45) -pushf - -movw $0x8000, %ax -sbbw $0x0001, %ax -movw %ax, (47) -pushf - -movw $0x8000, %bp -.byte 0x83,0xdd,0xff -movw %bp, (49) -pushf - -movw $0x52c3, %si -sbbw $0xe248, %si -movw %si, (51) -pushf - -movw $0xe74c, (53) -sbbw $0x22c0, (53) -pushf - -movw $0xfd85, (55) -.word 0x1e83, 0x0037 -.byte 0xf5 -pushf - -# sbb byte tests -movb $0x01, (57) -sbbb $0x02, (57) -pushf - -movb $0xff, %dh -sbbb $0xff, %dh -movw %dx, (58) -pushf - -movb $0xff, %al -sbbb $0x01, %al -movw %ax, (60) -pushf - -movb $0x80, (62) -movb $0x01, %ch -sbbb (62), %ch -movw %cx, (63) -pushf - -movb $0x80, %bl -movb $0xff, (65) -sbbb %bl, (65) -movw %bx, (66) -pushf - -movb $0xb9, %al -movb $0xd3, %ah -sbbb %al, %ah -movw %ax, (68) -pushf - -# dec word tests -movw $0x0000, %di -decw %di -movw %di, (70) -pushf - -movw $0x8000, %bp -.byte 0xff, 0xcd -movw %bp, (72) -pushf - -movw $0x7412, (74) -decw (74) -pushf - -# dec byte tests -movb $0x00, %dl -decb %dl -movw %dx, (76) -pushf - -movb $0x80, (77) -decb (77) -pushf - -movb $0xb5, (78) -decb (78) -pushf -hlt - -.org 65520 -jmp start -.org 65535 -.byte 0xff - Index: trunk/tests/i86/04_jump1.s =================================================================== --- trunk/tests/i86/04_jump1.s (revision 38) +++ trunk/tests/i86/04_jump1.s (nonexistent) @@ -1,192 +0,0 @@ -.code16 -start: -movw $0, %cx -movw $64, %bx -movw $0x1000, %sp -movw %sp, %ss -push %bx -jmp j00 - -# ja/jnbe -j00err: -jmp jerr -j00: -stc -ja j00err # (1) -clc -ja j01 - -# jae/jnb/jnc -j01err: -jmp jerr -j01: -stc -jae j01err # (2) -clc -jae j02 - -# jb/jnae/jc -j02err: -jmp jerr -j02: -jb j02err # (3) -stc -jb j03 - -# jbe/jna -j03err: -jmp jerr -j03: -clc -jbe j03err # (4) -popf -jbe j04 - -# je/jz -j04err: -jmp jerr -j04: -push %cx -popf -je j04err # (5) -push %bx -popf -je j05 - -# jg/jnle -j05err: -jmp jerr -j05: -movw $0x08c0, %dx -push %dx -popf -jg j05err # (6) -movw $0x0880, %dx -push %dx -popf -jg j06 - -# jge/jnl -j06err: -jmp jerr -j06: -movw $0x80, %dx -push %dx -popf -jge j06err # (7) -push %cx -popf -jge j07 - -# jl/jnge -j07err: -jmp jerr -j07: -jl j07err # (8) -movw $0x0800, %dx -push %dx -popf -jl j08 - -# jle/jng -j08err: -jmp jerr -j08: -push %cx -popf -jle j08err # (9) -push %bx -popf -jle j09 - -# jne/jnz -j09err: -jmp jerr -j09: -jne j09err # (10) -movw $0xcbf, %dx -push %dx -popf -jne j10 - -# jno -j10err: -jmp jerr -j10: -movw $0x0800, %dx -push %dx -popf -jno j10err # (11) -movw $0x6ff, %dx -push %dx -popf -jno j11 - -# jnp/jpo -j11err: -jmp jerr -j11: -movw $0x4, %dx -push %dx -popf -jnp j11err # (12) -push %cx -popf -jnp j12 - -# jns -j12err: -jmp jerr -j12: -movw $0xeff, %dx -push %dx -popf -jns j12err # (13) -push %cx -popf -jns j13 - -# jo -j13err: -jmp jerr -j13: -jo j13err # (14) -movw $0x800, %dx -push %dx -popf -jo j14 - -# jp/jpe -j14err: -jmp jerr -j14: -jp j14err # (15) -movw $0x804, %dx -push %dx -popf -jp j15 - -# js -j15err: -jmp jerr -j15: -js j15err # (16) -movw $0x884, %dx -push %dx -popf -js j16 -jmp jerr - -# All correct -j16: -movw $0x1234, (0) -hlt - -.org 65520 -jmp start - -jerr: -hlt - -.org 65535 -.byte 0xff Index: trunk/tests/i86/07_strings.s =================================================================== --- trunk/tests/i86/07_strings.s (revision 38) +++ trunk/tests/i86/07_strings.s (nonexistent) @@ -1,104 +0,0 @@ -.code16 -start: -movw $0xf000, %cx -movw %cx, %ds -movw %cx, %es -movw $0x1000, %si -movw $0x2001, %di - -cmpsb # (1) flags=0x97 (SAPC) -pushf -ret - -.org 0x46 -cmpsb # (1) flags=0x82 (S) -pushf -ret - -.org 0x82 -cmpsb # (1) flags=0x812 (OA) -pushf -ret - -.org 0x97 -cmpsb # (1) flags=0x46 (ZP) -pushf -ret - -.org 0x812 -cmpsw # (2) -pushf -ret # jump to f000:0883 - -.org 0x883 -movb $0x10, %ah -std -lodsb # (3) -jmp *%ax # jump to f000:10c2 - -.org 0x1000 -.byte 0x01,0xff,0xff,0x80 -.word 0x0002 -.byte 0xc2 - -.org 0x10c2 -lodsw # (4) -jmp *%ax - -.org 0x1300 -movw %ax, (%di) -movw %dx, %es -scasw # (8) -jz stor - -.org 0x1350 -stor: -movb $0x80, %al -std -stosb # (9) -jmp *(%di) - -.org 0x2001 -.byte 0x02,0xff,0x01,0x01 -.word 0x8001 - -.org 0x8013 -movw $0xd000, %ax -stosw # (10) -jmp *2(%di) - -.org 0x80c2 -movw %cx, %ds -movsw # (6) -movw %dx, %ds -jmp *2(%di) - -.org 0x80ff -movw $0x2002, %di -movw %cx, %es -cld -scasb # (7) -lahf -jmp *%ax - -.org 0xc200 -movw $0x1000, %dx -movw %dx, %es -movw $0xffff, %di -movsb # (5) -movw %dx, %ds -movb $0xc2, (%di) -jmp *(%di) - -.org 0xd000 -movw $0, %dx -movw %dx, %ds -movw $0x1234, (2) - -hlt - -.org 65520 -jmp start - -.org 65535 -.byte 0xff Index: trunk/tests/i86/.bochsrc =================================================================== --- trunk/tests/i86/.bochsrc (revision 38) +++ trunk/tests/i86/.bochsrc (nonexistent) @@ -1,19 +0,0 @@ -romimage: file=15_sub.out -cpu: count=1, ips=10000000, reset_on_triple_fault=1 -megs: 2 -vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest -#vgaromimage: file=/usr/share/vgabios/vgabios.bin -vga: extension=none -floppy_bootsig_check: disabled=0 -log: bochsout.txt -panic: action=ask -error: action=report -info: action=report -debug: action=ignore -debugger_log: - -vga_update_interval: 300000 -keyboard_serial_delay: 250 -keyboard_paste_delay: 100000 -mouse: enabled=1, type=imps2 -private_colormap: enabled=0 -keyboard_mapping: enabled=1, map=$BXSHARE/keymaps/x11-pc-es.map Index: trunk/tests/i86/12_rotate.s =================================================================== --- trunk/tests/i86/12_rotate.s (revision 38) +++ trunk/tests/i86/12_rotate.s (nonexistent) @@ -1,229 +0,0 @@ -.code16 -start: - -# rcl word operations -movw $0x3b5e, %ax -movw $0xc8a7, %bx -movw $0x2072, (0) -movw $0x3e79, (2) - -movw $160, %sp - -rcl %ax # (1) -pushf -mov %ax, (32) - -rclw (0) # (2) -pushf - -movw $0x100, %cx -rcl %cl, %bx # (3), zero bit shift -pushf -movw %bx, (34) - -movw $0xffff, %cx -movw %bx, %dx -rcl %cl, %dx # (3), -1, result 0 -pushf -movw %dx, (36) - -movb $0x8, %cl -rcl %cl, %bx # (3) normal -pushf -movw %bx, (38) - -movb $0x4, %cl -rclw %cl, (2) # (4) -pushf - -# rcl byte operations -movw $0x5904, %dx -movw $0xbe7c, %ax -movw $0xd62f, (4) -movw $0x6fd8, (6) - -rcl %ah # (5) -pushf -mov %ax, (40) - -rclb (5) # (6) -pushf - -movb $0x7, %cl -rcl %cl, %dl # (7) -pushf -movw %dx, (42) - -rclb %cl, (6) # (8) -pushf - -# rcr word operations -movw $0x15d6, %ax -movw $0x8307, %bx -movw $0x9ab7, (8) -movw $0x28b6, (10) - -rcr %ax # (9) -pushf -mov %ax, (44) - -rcrw (8) # (10) -pushf - -movw $0x100, %cx -rcr %cl, %bx # (11), zero bit shift -pushf -movw %bx, (46) - -movw $0xffff, %cx -movw %bx, %dx -rcr %cl, %dx # (11), -1, result 0 -pushf -movw %dx, (48) - -movb $0x5, %cl -rcr %cl, %bx # (11) normal -pushf -movw %bx, (50) - -movb $0x4, %cl -rcrw %cl, (10) # (12) -pushf - -# rcr byte operations -movw $0x7eaa, %dx -movw $0x3a8d, %ax -movw $0xa414, (12) -movw $0x2838, (14) - -rcr %ah # (13) -pushf -mov %ax, (52) - -rcrb (13) # (14) -pushf - -movb $0x7, %cl -rcr %cl, %dl # (15) -pushf -movw %dx, (54) - -rcrb %cl, (14) # (16) -pushf - -# rol word operations -movw $0x020d, %ax -movw $0x8d5a, %bx -movw $0x28dd, (16) -movw $0xd74a, (18) - -rol %ax # (17) -pushf -mov %ax, (56) - -rolw (16) # (18) -pushf - -movw $0x100, %cx -rol %cl, %bx # (19), zero bit shift -pushf -movw %bx, (58) - -movw $0xffff, %cx -movw %bx, %dx -rol %cl, %dx # (19), -1, result 0 -pushf -movw %dx, (60) - -movb $0x4, %cl -rol %cl, %bx # (19) normal -pushf -movw %bx, (62) - -movb $0x4, %cl -rolw %cl, (18) # (20) -pushf - -# rol byte operations -movw $0x9d09, %dx -movw $0xc948, %ax -movw $0x0b80, (20) -movw $0x48e8, (22) - -rol %ah # (21) -pushf -mov %ax, (64) - -rolb (21) # (22) -pushf - -movb $0x7, %cl -rol %cl, %dl # (23) -pushf -movw %dx, (66) - -rolb %cl, (22) # (24) -pushf - - -# ror word operations -movw $0xf25e, %ax -movw $0x2eb5, %bx -movw $0x0151, (24) -movw $0x7237, (26) - -ror %ax # (25) -pushf -mov %ax, (68) - -rorw (24) # (26) -pushf - -movw $0x100, %cx -ror %cl, %bx # (27), zero bit shift -pushf -movw %bx, (70) - -movw $0xffff, %cx -movw %bx, %dx -ror %cl, %dx # (27), -1, result 0 -pushf -movw %dx, (72) - -movb $0x4, %cl -ror %cl, %bx # (27) normal -pushf -movw %bx, (74) - -movb $0x4, %cl -rorw %cl, (26) # (28) -pushf - -# ror byte operations -movw $0x4288, %dx -movw $0x8bab, %ax -movw $0x5dd9, (28) -movw $0xc7f7, (30) - -ror %ah # (29) -pushf -mov %ax, (76) - -rorb (29) # (30) -pushf - -movb $0x7, %cl -ror %cl, %dl # (31) -pushf -movw %dx, (78) - -rorb %cl, (30) # (32) -pushf - - -hlt - -.org 65520 -jmp start -.org 65535 -.byte 0xff Index: trunk/tests/i86/11_shifts.s =================================================================== --- trunk/tests/i86/11_shifts.s (revision 38) +++ trunk/tests/i86/11_shifts.s (nonexistent) @@ -1,176 +0,0 @@ -.code16 -start: - -# sal/shl word operations -movw $0x6ec5, %ax -movw $0xb1a8, %bx -movw $0x5338, (0) -movw $0x31fe, (2) - -movw $128, %sp - -sal %ax # (1) -pushf -mov %ax, (32) - -shlw (0) # (2) -pushf - -movw $0x100, %cx -shl %cl, %bx # (3), zero bit shift -pushf -movw %bx, (34) - -movw $0xffff, %cx -movw %bx, %dx -sal %cl, %dx # (3), -1, result 0 -pushf -movw %dx, (36) - -movb $0x8, %cl -sal %cl, %bx # (3) normal -pushf -movw %bx, (38) - -movb $0x4, %cl -sal %cl, (2) # (4) -pushf - -# sal/shl byte operations -movw $0x956f, %dx -movw $0x4293, %ax -movw $0x33c0, (4) -movw $0x64ff, (6) - -shl %ah # (5) -pushf -mov %ax, (40) - -salb (5) # (6) -pushf - -movb $0x7, %cl -shl %cl, %dl # (7) -pushf -movw %dx, (42) - -salb %cl, (6) # (8) -pushf - -# sar word operations -movw $0xfb72, %ax -movw $0xdfb9, %bx -movw $0x1ebb, (8) -movw $0x742f, (10) - -sar %ax # (9) -pushf -mov %ax, (44) - -sarw (8) # (10) -pushf - -movw $0x100, %cx -sar %cl, %bx # (11), zero bit shift -pushf -movw %bx, (46) - -movw $0xffff, %cx -movw %bx, %dx -sar %cl, %dx # (11), -1, result 0 -pushf -movw %dx, (48) - -movb $0x5, %cl -sar %cl, %bx # (11) normal -pushf -movw %bx, (50) - -movb $0x4, %cl -sar %cl, (10) # (12) -pushf - -# sar byte operations -movw $0x93b8, %dx -movw $0x6688, %ax -movw $0xcad4, (12) -movw $0x6ec9, (14) - -sar %ah # (13) -pushf -mov %ax, (52) - -sarb (13) # (14) -pushf - -movb $0x7, %cl -sar %cl, %dl # (15) -pushf -movw %dx, (54) - -sarb %cl, (14) # (16) -pushf - -# shr word operations -movw $0x7ba1, %ax -movw $0x54e8, %bx -movw $0xbaaa, (16) -movw $0x3431, (18) - -shr %ax # (17) -pushf -mov %ax, (56) - -shrw (16) # (18) -pushf - -movw $0x100, %cx -shr %cl, %bx # (19), zero bit shift -pushf -movw %bx, (58) - -movw $0xffff, %cx -movw %bx, %dx -shr %cl, %dx # (19), -1, result 0 -pushf -movw %dx, (60) - -movb $0x4, %cl -shr %cl, %bx # (19) normal -pushf -movw %bx, (62) - -movb $0x4, %cl -shr %cl, (18) # (20) -pushf - -# shr byte operations -movw $0x0410, %dx -movw $0x1628, %ax -movw $0x3b26, (20) -movw $0x8d0d, (22) - -shr %ah # (21) -pushf -mov %ax, (64) - -shrb (21) # (22) -pushf - -movb $0x7, %cl -shr %cl, %dl # (23) -pushf -movw %dx, (66) - -shrb %cl, (22) # (24) -pushf - - - - -hlt - -.org 65520 -jmp start -.org 65535 -.byte 0xff Index: trunk/tests/i86/05_jump2.s =================================================================== --- trunk/tests/i86/05_jump2.s (revision 38) +++ trunk/tests/i86/05_jump2.s (nonexistent) @@ -1,68 +0,0 @@ -.code16 -start: -movw $0xf000, %bx -movw %bx, %ds -movw $0x1290, %ax - -movw $0x5, %cx -again: -push %cx -loop again # (6) - -call *%ax # (2) -ret # (9) - -.org 0x1290 -ag2: -movw $0xffff, %cx -loope ag2 # (7) branch not taken -movw $64, %dx -push %dx -popf -loope cont # (7) branch taken -hlt -cont: -lcall $0xe342, $0xebe0 # (4) -jcxz cont # (13) branch not taken -movw $0, %cx -jcxz exit # (13) branch taken -hlt -exit: -ret $10 # (10) - -.org 0x2000 -call *(0x3000) # (3) -movw $0, %dx -push %dx -popf -hang: -movw $1, %cx -loopnz hang # (8) branch not taken -loopne cont1 # (8) branch taken -hlt -cont1: -lret # (11) -.org 0x3000 -.word 0xfde0 -.word 0x4000 -.word 0xf000 - -.org 0x3200 -movw $0x2ff0, %bx -movw $0x10, %si -push %dx -lcall *2(%bx,%si) # (5) -ret - -.org 0x4000 -lret $2 # (12) - -.org 65520 -movw $0x1000, %sp -movw %sp, %ss -call start # (1) -movw %cx, %ds -movw %bx, (0) -hlt -.org 65535 -.byte 0xff Index: trunk/tests/i86/06_interrupt.s =================================================================== --- trunk/tests/i86/06_interrupt.s (revision 38) +++ trunk/tests/i86/06_interrupt.s (nonexistent) @@ -1,68 +0,0 @@ -.code16 -start: -movw $0, %dx -movw %dx, %ds -movw $0x1000, %sp -movw %sp, %ss -movw $0xebe0, (52) -movw $0xe342, (54) - -movw $0x0eff, %ax -push %ax -popf -movb $0, (0) -int $13 # (1) -movb $2, (2) -jmp *%ax - -.org 0x0cd7 -movb $3, (3) -pushf -pop %bx -movw $0xebe0, (12) -movw $0xe342, (14) - -int $3 # (2) -movb $4, (4) -movw $0x3001, (16) -movw $0xf000, (18) - -into # (3) branch taken -hlt - -.org 0x2000 -movb $1, (1) -pushf -pop %ax -clc -iret # (4) - -.org 0x3001 -movb $5, (5) -pop %cx -movw $0x4002, %cx -push %cx -iret - -.org 0x4002 -movb $6, (6) -movw $0x4ff, %dx -push %dx -popf -movw $0x5000, (16) - -into # (3) branch not taken -movw %ax, (8) -movw %bx, (10) -movw %cx, (12) -movw %dx, (14) -movw %sp, (16) -hlt - -.org 0x5000 -hlt - -.org 65520 -jmp start -.org 65535 -.byte 0xff Index: trunk/tests/i86/13_bcdcnv.s =================================================================== --- trunk/tests/i86/13_bcdcnv.s (revision 38) +++ trunk/tests/i86/13_bcdcnv.s (nonexistent) @@ -1,192 +0,0 @@ -.code16 -start: - -movw $1, %bx -movw $0, %cx -movw $144, %sp - -# aaa -movw $0x000a, %ax -aaa # (1) adjusted -movw %ax, (0) -pushf - -movw $0xfff9, %ax -aaa # (2) adjusted by AF -movw %ax, (2) -pushf - -push %bx -popf -movw $0xfff9, %ax -aaa # (3) not adjusted -movw %ax, (4) -pushf - -movw $0x5d50, %ax -aaa # (4) aaa random -movw %ax, (6) -pushf - -movw $0x4726, %ax -aaa # (5) aaa random -movw %ax, (8) -pushf - -# aas -movw $0x000a, %ax -aas # (6) adjusted -movw %ax, (10) -pushf - -movw $0xfff9, %ax -aas # (7) adjusted by AF -movw %ax, (12) -pushf - -push %bx -popf -movw $0xfff9, %ax -aas # (8) not adjusted -movw %ax, (14) -pushf - -movw $0xdcc0, %ax -aas # (9) aas random -movw %ax, (16) -pushf - -movw $0x5ffb, %ax -aas # (10) aas random -movw %ax, (18) -pushf - -# daa -movw $0x00ac, %ax -daa # (11) daa, adj 1st & 3rd cond -movw %ax, (20) -pushf - -movw $0xfff9, %ax -daa -movw %ax, (22) # (12) daa, adj 2nd & 3rd cond -pushf - -push %bx -popf # carry set -movw $0xfff8, %ax -daa # (13) daa, adj 4th cond -movw %ax, (24) -pushf - -push %cx -popf # zero flags -movw $0xff8b, %ax -daa # (14) daa, adj 1st cond -movw %ax, (26) -pushf - -push %cx -popf -movw $0x0082, %ax -daa # (15) daa, not adjusted -movw %ax, (28) -pushf - -movw $cd3c, %ax -daa # (16) daa, random -movw %ax, (30) -pushf - -movw $0x3f00, %ax -daa # (17) daa, random -movw %ax, (32) -pushf - -# das -movw $0x00ac, %ax -das # (18) das, adj 1st & 3rd cond -movw %ax, (34) -pushf - -movw $0xfff9, %ax -das -movw %ax, (36) # (19) das, adj 2nd & 3rd cond -pushf - -push %bx -popf # carry set -movw $0xfff8, %ax -das # (20) das, adj 4th cond -movw %ax, (38) -pushf - -push %cx -popf # zero flags -movw $0xff8b, %ax -das # (21) das, adj 1st cond -movw %ax, (40) -pushf - -push %cx -popf -movw $0x0082, %ax -das # (22) das, not adjusted -movw %ax, (42) -pushf - -movw $0x059a, %ax -das # (23) das, random -movw %ax, (44) -pushf - -movw $0x54f6, %ax -das # (24) das, random -movw %ax, (46) -pushf - -# cbw -movw $0xff7f, %ax -cbw # (25) cbw, positive -movw %ax, (48) -movw %dx, (50) -pushf - -movw $0x0080, %ax -cbw # (26) cbw, negative -movw %ax, (52) -movw %dx, (54) -pushf - -movw $0xf1ed, %ax -cbw # (27) cbw, random -movw %ax, (56) -movw %dx, (58) -pushf - -# cwd -movw $0x8000, %ax -cwd # (28) cwd, negative -movw %ax, (60) -movw %dx, (62) -pushf - -movw $0x7fff, %ax -cwd # (29) cwd, positive -movw %ax, (64) -movw %dx, (66) -pushf - -movw $0x43f1, %ax -cwd # (30) cwd, random -movw %ax, (68) -movw %dx, (70) -pushf - -hlt - -.org 65520 -jmp start - -.org 65535 -.byte 0xff Index: trunk/tests/i86/addsub.s =================================================================== --- trunk/tests/i86/addsub.s (revision 38) +++ trunk/tests/i86/addsub.s (nonexistent) @@ -1,207 +0,0 @@ -.code16 -a: - -# -# ADC -# -# 1: A negativo, B positivo: A: ffff B: 0001, A+B=0, ZAPC -movw $0xffff,%ax -movw $1,%bx -adcw %bx,%ax - -# 2: A negativo, B positivo, A+B < 16 bits: A: ffff B: ffff, C A+B=ffff SAPC -movw $0xffff,%ax -movw $0xffff,%bx -adcw %bx,%ax - -# 3: A positivo, B positivo, A+B < 16 bits: A: 0001 B: 0002, A+B=3, P -movw $0x0001,%ax -movw $0x0002, %bx -adcw %bx,%ax - -# 4: A pos, B pos, A+B = 16 bits: A: 7fff B: 0001, A+B=8000, OSAP -movw $0x7fff,%ax -movw $0x0001,%bx -adcw %bx,%ax - -# 5: A neg, B neg, A+B = 16 bits: A: 8000 B: ffff, A+B=0fff OPC -movw $0x8000,%ax -movw $0xffff,%bx -adcw %bx,%ax - -# 6: A aleat, B aleat: A: 1a62 B: ed8a, A+B= -movw $0x1a62,%ax -movw $0xed8a,%bx -adcw %bx,%ax - -# -# ADD -# -# 7: A negativo, B positivo: A: ffff B: 0001, A+B=0, ZAPC -movw $0xffff,%ax -movw $1,%bx -addw %bx,%ax - -# 8: A negativo, B positivo, A+B < 16 bits: A: ffff B: ffff, C A+B=ffff SAPC -movw $0xffff,%ax -movw $0xffff,%bx -addw %bx,%ax - -# 9: A positivo, B positivo, A+B < 16 bits: A: 0001 B: 0002, A+B=3, P -movw $0x0001,%ax -movw $0x0002, %bx -addw %bx,%ax - -# 10: A pos, B pos, A+B = 16 bits: A: 7fff B: 0001, A+B=8000, OSAP -movw $0x7fff,%ax -movw $0x0001,%bx -addw %bx,%ax - -# 11: A neg, B neg, A+B = 16 bits: A: 8000 B: ffff, A+B=0fff OPC -movw $0x8000,%ax -movw $0xffff,%bx -addw %bx,%ax - -# 12: A aleat, B aleat: A: 027f B: 846c, A+B= -movw $0x027f,%ax -movw $0x846c,%bx -addw %bx,%ax - -# -# INC -# -# 13: A-, -1: A: ffff. Da carry, no debería cambiar el flag de C -movw $0xffff,%ax -incw %ax - -# 14: A+: 7fff. Overflow -movw $0x7fff,%ax -incw %ax - -# 15: A aleat. 4513 -movw $0x4513,%ax -incw %ax - -# -# DEC -# -# 16: A: 0000. -movw $0x0000,%ax -decw %ax - -# 17: B: 8000. Underflow -movw $0x8000,%ax -decw %ax - -# 18: A aleat. c7db -movw $0xc7db,%ax -decw %ax - -# -# NEG -# -# 19: A: 0 -movw $0x0000,%ax -negw %ax - -# 20: A: 8000. Overflow -movw $0x8000,%ax -negw %ax - -# 21: A aleat. fac4 -movw $0xfac4,%ax -negw %ax - -# -# SBB -# -# 22: A+, B+, A-B siempre será menor de 16 bits: A: 0001 B: 0002 A-B=ffff SAPC -movw $0x0001,%ax -movw $0x0002,%bx -sbbw %bx,%ax - -# 23: A-, B-, A-B siempre será menor de 16 bits: A: ffff B: ffff A-B=0 ZP -movw $0xffff,%ax -movw $0xffff,%bx -sbbw %bx,%ax - -# 24: A-, B+, A-B < 16 bits: A: ffff B:1 A-B=fffe S -movw $0xffff,%ax -movw $0x0001,%bx -sbbw %bx,%ax - -# 25: A-, B+, A-B = 16 bits: A: 8000 B:1 A-B=7fff OAP -movw $0x8000,%ax -movw $0x0001,%bx -sbbw %bx,%ax - -# 26: A aleat, B aleat, con carry: A: a627 B: 03c5, C A-B= -movw $0xa627,%ax -movw $0x03c5,%bx -stc -sbbw %bx,%ax - -# -# SUB -# -# 27: A+, B+, A-B siempre será menor de 16 bits: A: 0001 B: 0002 A-B=ffff SAPC -movw $0x0001,%ax -movw $0x0002,%bx -subw %bx,%ax - -# 28: A-, B-, A-B siempre será menor de 16 bits: A: ffff B: ffff A-B=0 ZP -movw $0xffff,%ax -movw $0xffff,%bx -subw %bx,%ax - -# 29: A-, B+, A-B < 16 bits: A: ffff B:1 A-B=fffe S -movw $0xffff,%ax -movw $0x0001,%bx -subw %bx,%ax - -# 30: A-, B+, A-B = 16 bits: A: 8000 B:1 A-B=7fff OAP -movw $0x8000,%ax -movw $0x0001,%bx -subw %bx,%ax - -# 31: A aleat, B aleat, con carry: A: a627 B: 03c5, C A-B= -movw $0xa627,%ax -movw $0x03c5,%bx -stc -subw %bx,%ax - -# -# CMP -# -# 32: A+, B+, A-B siempre será menor de 16 bits: A: 0001 B: 0002 A-B=ffff SAPC -movw $0x0001,%ax -movw $0x0002,%bx -cmpw %bx,%ax - -# 33: A-, B-, A-B siempre será menor de 16 bits: A: ffff B: ffff A-B=0 ZP -movw $0xffff,%ax -movw $0xffff,%bx -cmpw %bx,%ax - -# 34: A-, B+, A-B < 16 bits: A: ffff B:1 A-B=fffe S -movw $0xffff,%ax -movw $0x0001,%bx -cmpw %bx,%ax - -# 35: A-, B+, A-B = 16 bits: A: 8000 B:1 A-B=7fff OAP -movw $0x8000,%ax -movw $0x0001,%bx -cmpw %bx,%ax - -# 36: A aleat, B aleat, con carry: A: aa97 B: 3b46, C A-B= -movw $0xaa97,%ax -movw $0x3b46,%bx -stc -cmpw %bx,%ax - - -.org 65520 -jmp a - -.org 65535 -.byte 0xff Index: trunk/tests/i86/17_mul.s =================================================================== --- trunk/tests/i86/17_mul.s (revision 38) +++ trunk/tests/i86/17_mul.s (nonexistent) @@ -1,219 +0,0 @@ -.code16 -start: - -movw $192, %sp - -# mul word -movw $0x0003, %bx -movw $0x0007, %ax -movw $0xffff, %dx -mulw %bx - -movw %ax, (0) -movw %dx, (2) -pushf - -movw $0xa320, %dx -movw $0xffff, %ax -mulw %dx -movw %ax, (4) -movw %dx, (6) -pushf - -movw $0xffff, %ax -movw $0x1, (8) -mulw (8) -movw %ax, (10) -movw %dx, (12) -pushf - -movw $0xffff, %ax -movw $0xffff, (14) -mulw (14) -movw %ax, (16) -movw %dx, (18) -pushf - -movw $0x46db, %ax -movw $0x0000, %bp -mulw %bp -movw %bp, (20) -movw %ax, (22) -movw %dx, (24) -pushf - -movw $0x46db, %ax -movw $0xeeeb, %si -mulw %si -movw %si, (26) -movw %ax, (28) -movw %dx, (30) -pushf - -# mul byte -movb $0x14, %bl -movw $0xff07, %ax -movw $0xffff, %dx -mulb %bl - -movw %ax, (32) -movw %dx, (34) -pushf - -movb $0x24, %ch -movw $0x00ff, %ax -mulb %ch -movw %ax, (36) -movw %dx, (38) -pushf - -movw $0xff, %ax -movb $0x1, (40) -mulb (40) -movw %ax, (41) -movw %dx, (43) -pushf - -movw $0xffff, %ax -movb $0xff, (45) -mulb (45) -movw %ax, (46) -movw %dx, (46) -pushf - -movw $0xc5, %ax -movw $0x00, %dx -mulb %dl -movw %dx, (48) -movw %ax, (50) -pushf - -movb $0xb5, %al -movb $0xf9, %dh -mulb %dh -movw %si, (52) -movw %ax, (54) -movw %dx, (56) -pushf - -# imul word -movw $0x0003, %bx -movw $0x0007, %ax -movw $0xffff, %dx -imulw %bx - -movw %ax, (60) -movw %dx, (62) -pushf - -movw $0xa320, %dx -movw $0xffff, %ax -imulw %dx -movw %ax, (64) -movw %dx, (66) -pushf - -movw $0xffff, %ax -movw $0x1, (68) -imulw (68) -movw %ax, (70) -movw %dx, (72) -pushf - -movw $0xffff, %ax -movw $0xffff, (74) -imulw (74) -movw %ax, (76) -movw %dx, (78) -pushf - -movw $0x46db, %ax -movw $0x0000, %bp -imulw %bp -movw %bp, (80) -movw %ax, (82) -movw %dx, (84) -pushf - -movw $0x46db, %ax -movw $0xeeeb, %si -imulw %si -movw %si, (86) -movw %ax, (88) -movw %dx, (90) -pushf - -# imul byte -movb $0x14, %bl -movw $0xff07, %ax -movw $0xffff, %dx -imulb %bl - -movw %ax, (92) -movw %dx, (94) -pushf - -movb $0x24, %ch -movw $0x00ff, %ax -imulb %ch -movw %ax, (96) -movw %dx, (98) -pushf - -movw $0xff, %ax -movb $0x1, (100) -imulb (100) -movw %ax, (101) -movw %dx, (103) -pushf - -movw $0xffff, %ax -movb $0xff, (105) -imulb (105) -movw %ax, (106) -movw %dx, (106) -pushf - -movw $0xc5, %ax -movw $0x00, %dx -imulb %dl -movw %dx, (108) -movw %ax, (110) -pushf - -movb $0xb5, %al -movb $0xf9, %dh -imulb %dh -movw %si, (112) -movw %ax, (114) -movw %dx, (116) -pushf - -# aad tests -movw $0xff00, %ax -aad -movw %ax, (118) -pushf - -movw $0xffff, %ax -aad $0x12 -movw %ax, (120) -pushf - -movw $0x00ff, %ax -aad $0xff -movw %ax, (122) -pushf - -movw $0x532d, %ax -aad $0x39 -movw %ax, (124) -pushf - -hlt - -.org 65520 -jmp start - -.org 65535 -.byte 0xff Index: trunk/tests/i86/02_datatrnf.s =================================================================== --- trunk/tests/i86/02_datatrnf.s (revision 38) +++ trunk/tests/i86/02_datatrnf.s (nonexistent) @@ -1,105 +0,0 @@ -.code16 -start: -movb $0xed, %ah -sahf # (1) -lahf # (2) Now %ah must have 0xc7 -movb %ah, (0) -movb %ah, %al -outb %al, $0xb7 # (19) -movw $0xb7, %ax -movw %ax, %dx -movb $0xa5, %ah -inb %dx, %al # (24) -movw %ax, (2) -sahf -lahf # Now %ax must have 0x87c7 -movw %ax, (32) - -outw %ax, %dx # (22) -movw $0xf752, %ax -movw %ax, %bx -inw %dx, %ax # (26) -xchg %bx, %ax # (16) -movw %ax, %ds -lds 781(%bx), %si # (3) %ds=0x5678 and %si=0x1234 -movw $0, %ax -movw %ds, %bx -movw %ax, %ds -movw %bx, (4) -movw %si, (6) -movw %bx, %ds - -movw $-1, %bx - -movw $0x1000, %ax -outw %ax, $0xb7 # (21) - -movw $0x5798, %ax -movw %ax, %ss -movw $9, %sp -movw $0xabcd, %cx -push %cx # (10) -movw $0x8cf1, %cx -movw %cx, %es -push %es # (11) -popf # (9) -les -46(%bx,%si), %di # (5) %di=0x8cf1, %es=%0xabcd -lea -452(%bp,%di), %si # (4) %si=0x8b2d -pushf # (13) -movw $0, %ax -movw %ax, %ds -movw %di, (8) -movw %es, %ax -movw %ax, (10) -movw %si, (12) -inw $0xb7, %ax # (25) -movw %ax, %ds -pop 1(%si) # (8) -xchg 2(%bx,%si), %di # (15) %di=0x0cd3 -push 2(%bx,%si) # (12) -pop %es # (7) %es=0x8cf1 -movw %es, %dx - - -movw %ds, %ax -movw $0, %cx -movw %cx, %ds -movw %di, (14) -movw %dx, (16) -movw %ax, %ds -pop %dx # (6) -push %dx -.byte 0x8f,0xc1 # (6) pop %cx (non-standard) -xchg %bx, %cx # (14) %bx=0xabcd, %cx=0xffff - -movw %ds, %ax -movw $0, %dx -movw %dx, %ds -movw %bx, (18) -movw %cx, (20) -movw %ax, %ds -movw %es, (%bx,%di) -movw $0xb800, %bx -movw $0xa0a1, %ax -xlat # (18) %al=0x8c -xchg %al, %ah # (17) -xlat # %ax=0x8cf1 -movw $0, %dx -movw %dx, %ds -movw %ax, (22) -movw $0xb7, %dx -outb %al, %dx # (20) -movb $0xff, %al -inb $0xb7, %al # (23) %ax=0x8cf1 -movw %ax, (24) -hlt - -.org 65520 -jmp start - -.org 65524 -.word 0x1234 -.word 0x5678 - -.org 65535 -.byte 0xff Index: trunk/tests/i86/10_bitwise.s =================================================================== --- trunk/tests/i86/10_bitwise.s (revision 38) +++ trunk/tests/i86/10_bitwise.s (nonexistent) @@ -1,209 +0,0 @@ -.code16 -start: - -# Some random stuff to start with -movw $0x7659, %ax -movw $0x4bb8, %bx -movw $0x3c84, %cx -movw $0x1b76, (0) -movw $0x240b, (2) - -movw $256, %sp - -# Word AND -andw %ax, %bx # (1) -pushf -movw %bx, (32) -andw (2), %cx # (2) -pushf -movw %cx, (34) -andw %cx, (0) # (3) -pushf -andw $0x4571, %ax # (4) -pushf -movw %ax, (36) -andw $0x27e9, %bx # (5) -pushf -movw %bx, (38) -andw $0x3549, (2) # (6) -pushf - -# Byte AND -andb %al, %ah # (7) -pushf -movb %ah, (40) -andb (1), %cl # (8) -pushf -movb %cl, (41) -andb %ch, (3) # (9) -pushf -andb $0x46, %al # (10) -pushf -movb %al, (42) -andb $0x2d, %bl # (11) -pushf -movb %bl, (43) -andb $0xc6, (2) # (12) -pushf - -movw $0x05e3, %ax -movw $0xf877, %bx -movw $0x4ae8, %cx -movw $0x3b69, %dx -movw $0x30c0, (4) -movw $0x5775, (6) -movw $0xfe66, (8) - -# Word OR -orw %ax, %bx # (13) -pushf -movw %bx, (44) -orw (4), %cx # (14) -pushf -movw %cx, (46) -orw %ax, (6) # (15) -pushf -orw $0x41c3, %ax # (16) -pushf -movw %ax, (48) -orw $0xb05d, %dx # (17) -pushf -movw %dx, (50) -orw $0x8d4c, (8) # (18) -pushf - -# Byte OR -orb %al, %ah # (19) -pushf -movb %ah, (52) -orb (5), %cl # (20) -pushf -movb %cl, (53) -orb %ch, (6) # (21) -pushf -orb $0x43, %al # (22) -pushf -movb %al, (54) -orb $0x57, %bl # (23) -pushf -movb %bl, (55) -orb $0x54, (7) # (24) -pushf - -movw $0xd0b4, %ax -movw $0x1bb8, %bx -movw $0x2b03, %cx -movw $0xc3e6, %dx -movw $0x3939, (10) -movw $0x864b, (12) -movw $0x8587, (14) - -# Word XOR -xorw %ax, %bx # (25) -pushf -movw %bx, (56) -xorw (10), %cx # (26) -pushf -movw %cx, (58) -xorw %ax, (12) # (27) -pushf -xorw $0x3d03, %ax # (28) -pushf -movw %ax, (60) -xorw $0x632d, %dx # (29) -pushf -movw %dx, (62) -xorw $0xcf07, (14) # (30) -pushf - -# Byte XOR -xorb %al, %ah # (31) -pushf -movb %ah, (64) -xorb (11), %cl # (32) -pushf -movb %cl, (65) -xorb %ch, (12) # (33) -pushf -xorb $0xb6, %al # (34) -pushf -movb %al, (66) -xorb $0xae, %bl # (35) -pushf -movb %bl, (67) -xorb $0xdf, (13) # (36) -pushf - -movw $0x4d37, %ax -movw $0xdbe1, %bx -movw $0x6549, %cx -movw $0x5cc4, %dx -movw $0xa8a8, (16) -movw $0x35f6, (18) -movw $0x4f00, (20) - -# Word TEST -testw %ax, %bx # (37) -pushf -movw %bx, (68) -testw (16), %cx # (38) -pushf -movw %cx, (70) -testw %ax, (18) # (39) -pushf -testw $0xdc6f, %ax # (40) -pushf -movw %ax, (72) -testw $0x3046, %dx # (41) -pushf -movw %dx, (74) -testw $0x96e4, (20) # (42) -pushf - -# Byte TEST -testb %al, %ah # (43) -pushf -movb %ah, (76) -testb (15), %cl # (44) -pushf -movb %cl, (77) -testb %ch, (16) # (45) -pushf -testb $0xc0, %al # (46) -pushf -movb %al, (78) -testb $0xe0, %bl # (47) -pushf -movb %bl, (79) -testb $0xbb, (17) # (48) -pushf - -movw $0xbfa5, %dx -movw $0x4be6, (22) -movw $0xe9d2, (24) - -movw $0x12b1, %ax -pushw %ax -popf - -# Word NOT -notw %dx # (49) -pushf -movw %dx, (80) -notw (22) # (50) -pushf - -# Byte NOT -notb %dl # (51) -pushf -movb %dl, (82) -notb (24) # (52) -pushf - -hlt - - -.org 65520 -jmp start -.org 65535 -.byte 0xff Index: trunk/tests/i86/09_vdu.s =================================================================== --- trunk/tests/i86/09_vdu.s (revision 38) +++ trunk/tests/i86/09_vdu.s (nonexistent) @@ -1,33 +0,0 @@ -.code16 -start: -movw $0xb800, %dx -movw %dx, %ds -movw $0x20, %cx -movw $11, %bx - -b: -movw $0x4d03, (%bx) -addw $2, %bx -loop b - -movb $0x36, %al -outb %al, $0xb7 - -movw $0x0, %dx -movw %dx, %ds - -movw $0x1234, (2) -movb $0x56, (5) -movb $0x26, (6) -movw $0x4567, (9) - -movw (5), %ax -movw %ax, (0) - -hlt - -.org 65520 -jmp start - -.org 65535 -.byte 0xff Index: trunk/tests/i86/01_jmpmov.s =================================================================== --- trunk/tests/i86/01_jmpmov.s (revision 38) +++ trunk/tests/i86/01_jmpmov.s (nonexistent) @@ -1,72 +0,0 @@ -# mov: 1 (word), 2 (word), 3 (off, base+index+off), 4, 5 (off), -# 7 (byte,word), 8 (byte off), 9 (word base), 10 (byte,word), -# 11 (word off, byte base+index), 12 (imm,special) -# jmp: 1, 2, 3 (reg), 3 (mem base+index+off), 4, 5 (mem base+index+off) -.code16 -start: -jmp b # (2) jmp -hlt - -.org 14 -b: -movw $0xf000, %bx # (10) mov word -movw %bx, %ds # (4) mov -movw (0xfff3), %ax # (2) mov word -jmp *%ax # (3) jmp reg -hlt - -.org 0x1290 -ljmp $0xe342, $0xebe0 # (4) jmp -hlt - -.org 0x2000 -movw $0x1000, %bx # (10) mov word -movw %bx, %ds # (4) mov - -movb $0xfb, %ah # (10) mov byte -movb $0xe1, %al # (10) mov byte -movw %ax, (0x2501) # (1) mov word - -movw $0x1001, (0x2600) # (11) mov word -movw (0x2600), %ss # (3) mov - -movw %ss, (0x2601) # (5) mov -movb (0x2601), %dl # (8) mov byte -movb $0x00, %dh # (10) mov byte -movw %dx, %di # (7) mov word - -movw $0x2506, %bp # (10) mov word - -jmp *-22(%bp,%di) # (3) jmp mem -hlt # m[0x12501] = 0xfbe1 - -.org 0x3001 -.byte 0xc7,0xc0 # (12) movw $0x4001, %ax -.word 0x4001 # [not in a default codification] -movw $0x2501, %bx -movw %ax, (%bx) # (9) mov word -movw $2, %di -movb $0x00, (%bx,%di) # (11) mov byte -movb $4, %ch -movb %ch, %cl # (7) mov byte -movb $0, %ch -movw %cx, %si -movb $0xf0, -1(%bx,%si) -movw $0x3, %si -ljmp *-24(%bp,%si) # (5) jmp mem -hlt - -.org 0x4001 -movw -3(%bx,%si), %ax -movw $0x0, %dx -movw %dx, %ds -movw %ax, (0) -hlt - -.org 65520 -jmp start # (1) jmp -.word 0x1290 - -.org 65534 -.word 0xffff - Index: trunk/tests/16_cmpneg.s =================================================================== --- trunk/tests/16_cmpneg.s (nonexistent) +++ trunk/tests/16_cmpneg.s (revision 39) @@ -0,0 +1,126 @@ +.code16 +start: + +movw $96, %sp + +# cmp word tests +movw $0x0001, %ax +movw $0x0002, %bx +cmpw %bx, %ax +movw %ax, (0) +movw %bx, (2) +pushf + +movw $0xffff, %dx +movw $0xffff, (4) +cmpw %dx, (4) +movw %dx, (6) +pushf + +movw $0xffff, %cx +movw $0x0001, (8) +cmpw (8), %cx +movw %cx, (10) +pushf + +movw $0x8000, %ax +cmpw $0x0001, %ax +movw %ax, (12) +pushf + +movw $0x8000, %bp +.byte 0x83,0xfd,0xff +movw %bp, (14) +pushf + +movw $0x7f81, %si +cmpw $0x903c, %si +movw %si, (16) +pushf + +movw $0xefc3, (18) +cmpw $0xc664, (18) +pushf + +movw $0xe933, (20) +.word 0x3e83, 0x0014 +.byte 0x64 +pushf + +# cmp byte tests +movb $0x01, (22) +cmpb $0x02, (22) +pushf + +movb $0xff, %dh +cmpb $0xff, %dh +movw %dx, (23) +pushf + +movb $0xff, %al +cmpb $0x01, %al +movw %ax, (25) +pushf + +movb $0x80, (27) +movb $0x01, %ch +cmpb (27), %ch +movw %cx, (28) +pushf + +movb $0x80, %bl +movb $0x7f, (30) +cmpb %bl, (30) +movw %bx, (31) +pushf + +movb $0xbc, %al +movb $0x8e, %ah +cmpb %al, %ah +movw %ax, (33) +pushf + +# neg word tests +movw $0x0, %cx +negw %cx +movw %cx, (34) +pushf + +movw $0x7fff, (36) +negw (36) +pushf + +movw $0x8000, %bp +negw %bp +movw %bp, (38) +pushf + +movw $0xace9, (40) +negw (40) +pushf + +# neg byte tests +movb $0x0, %ah +negb %ah +movw %ax, (42) +pushf + +movb $0x7f, (44) +negb (44) +pushf + +movb $0xc9, %cl +negb %cl +movw %cx, (45) +pushf + +movb $0x80, (47) +negb (47) +pushf +hlt + +.org 65520 +jmp start +.org 65535 +.byte 0xff + Index: trunk/tests/03_control.s =================================================================== --- trunk/tests/03_control.s (nonexistent) +++ trunk/tests/03_control.s (revision 39) @@ -0,0 +1,43 @@ +.code16 +start: +movw $0x1000, %ax +movw %ax, %ss +movw $0x1000, %sp + +movw $0xfeff, %cx +push %cx +popf + +clc # (1) +cld # (2) +cli # (3) + +nop # (6) + +pushf +pop %ax # %ax = 0x08d6 + +movw $0x1, %dx +push %dx +popf + +cmc # (4) +stc # (7) +std # (8) +sti # (9) + +pushf +pop %bx # %bx = 0x0603 + +movw $0x0, %cx +movw %cx, %ds +movw %ax, (0) +movw %bx, (2) + +hlt # (5) + +.org 65520 +jmp start + +.org 65535 +.byte 0xff Index: trunk/tests/19_segpr.s =================================================================== --- trunk/tests/19_segpr.s (nonexistent) +++ trunk/tests/19_segpr.s (revision 39) @@ -0,0 +1,98 @@ +.code16 +start: +movw $0xf100, %bx +movw %bx, %es + +es movw (0), %bx +es movw (2), %ax +movw %ax, (2) +movw $0x2, %sp +es push %bx + +es les (0), %dx +movw %dx, (4) +movw %es, %dx +movw %dx, (6) + +movw $5, %di +cs lea 23(%bp,%di), %si +movw %si, (8) + +movw $0x0005, %bx +movw $0x0005, %ax +movw $0x2345, (10) +movw $0xf100, %dx +movw %dx, %es +es xlat +movw %ax, (12) + +# inc with segment +movw $0x1, %ax +movw %ax, %ss +movw $0x6, (16) +ss incw (0) + +# div with interrupt +movw $32, %sp +movw $0x0, (18) +ss +.byte 0xf3 +divw (2) +subw $6, %sp + +movw $0x1200, (20) +movw $5, %bx +movw $3, %si +# repz prefix (do not affect) +.byte 0xf3 +ss call *-4(%bx,%si) + +hlt + +.org 0x1000 +.word 0x1100 +.word 0xf000 + +.org 0x100a +.word 0x5678 + +.org 0x1100 +movw %sp, %si +ss movw (%si), %si +movw %si, (14) +addw $6, %si +movw %sp, %di +ss movw %si, (%di) +iret + +.org 0x1200 +movw $0xf120, %cx +movw %cx, %es +movw $0x0200, %si +movw $0x0e01, %di + +es cmpsb +pushf + +movw $0x1, %ax +movw %ax, %es +movw $6, %di +movw $0x1400, %si +movw $0x6, %cx +# Two prefixes +rep cs movsb +hlt + +.org 0x1400 +.byte 0x01,0xff,0xff,0x80 +.word 0x0002 +.byte 0xc2 + +.org 0x2001 +.byte 0x02,0xff,0x01,0x01 +.word 0x8001 + +.org 65520 +jmp start +.org 65535 +.byte 0xff Index: trunk/tests/18_div.s =================================================================== --- trunk/tests/18_div.s (nonexistent) +++ trunk/tests/18_div.s (revision 39) @@ -0,0 +1,384 @@ +.code16 +start: +movw $208, %sp + +# Exception 0 handler +movw $0x1000, (0) +movw $0xf000, (2) + +movw $208, %bp + +# div word tests +# easy test +movw $0x0, %dx +movw $0x14, %ax +movw $0x5, %bx + +movw $0x2, (%bp) +divw %bx +addw $0x2, %bp + +movw %ax, (128) +movw %bx, (130) +movw %dx, (4) +pushf + + +movw $0xa320, %dx +movw $0xc3da, %ax +movw $0xffff, (6) + +movw $0x4, (%bp) +divw (6) +addw $0x2, %bp + +movw %ax, (8) +movw %dx, (10) +pushf + + +movw $0xffff, %dx +movw $0xffff, %ax +movw $0x1, %cx + +movw $0x2, (%bp) +divw %cx +addw $0x2, %bp + +movw %ax, (12) +movw %cx, (14) +movw %dx, (16) +pushf + + +movw $0xffff, %dx +movw $0xffff, %ax +movw $0xffff, (18) + +movw $0x4, (%bp) +divw (18) +addw $0x2, %bp + +movw %ax, (20) +movw %dx, (22) +pushf + + +movw $0xfbb4, %dx +movw $0xc3da, %ax +movw $0xae8e, %cx + +movw $0x2, (%bp) +divw %cx +addw $0x2, %bp + +movw %ax, (24) +movw %cx, (26) +movw %dx, (28) +pushf + + +movw $0x25c9, %dx +movw $0xf110, %ax + +movw $0x2, (%bp) +divw %ax +addw $0x2, %bp + +movw %ax, (30) +movw %dx, (32) +pushf + + +# div byte tests +# easy test +movw $0x14, %ax +movw $0x5, %bx + +movw $0x2, (%bp) +divb %bl +addw $0x2, %bp + +movw %ax, (34) +movw %bx, (36) +movw %dx, (38) +pushf + +movw $0xa320, %dx +movw $0xc3da, %ax +movw $0xff, (40) + +movw $0x4, (%bp) +divb (40) +addw $0x2, %bp + +movw %ax, (42) +movw %dx, (44) +pushf + +movw $0xffff, %ax +movb $0x1, %dh + +movw $0x2, (%bp) +divb %dh +addw $0x2, %bp + +movw %ax, (46) +movw %dx, (48) +pushf + +movw $0xffff, %ax +movw $0xffff, (50) + +movw $0x4, (%bp) +divb (51) +addw $0x2, %bp + +movw %ax, (52) +movw %dx, (54) +pushf + +movw $0x008a, %ax +movw $0xae8e, %cx + +movw $0x2, (%bp) +divb %cl +addw $0x2, %bp + +movw %ax, (56) +movw %cx, (58) +pushf + +movw $0x0669, %dx +movw $0x89f3, %ax + +movw $0x2, (%bp) +divb %al +addw $0x2, %bp + +movw %ax, (60) +movw %dx, (62) +pushf + +# idiv word tests +# easy test +movw $0x0, %dx +movw $0x14, %ax +movw $0xfa, %bx + +movw $0x2, (%bp) +idivw %bx +addw $0x2, %bp + +movw %ax, (64) +movw %bx, (66) +movw %dx, (68) +pushf + + +movw $0xa320, %dx +movw $0xc3da, %ax +movw $0xffff, (70) + +movw $0x4, (%bp) +idivw (70) +addw $0x2, %bp + +movw %ax, (72) +movw %dx, (74) +pushf + + +movw $0xffff, %dx +movw $0xffff, %ax +movw $0x1, %cx + +movw $0x2, (%bp) +idivw %cx +addw $0x2, %bp + +movw %ax, (76) +movw %cx, (78) +movw %dx, (80) +pushf + + +movw $0xffff, %dx +movw $0xffff, %ax +movw $0xffff, (82) + +movw $0x4, (%bp) +idivw (82) +addw $0x2, %bp + +movw %ax, (84) +movw %dx, (86) +pushf + + +movw $0xfbb4, %dx +movw $0xc3da, %ax +movw $0xae8e, %cx + +movw $0x2, (%bp) +idivw %cx +addw $0x2, %bp + +movw %ax, (88) +movw %cx, (90) +movw %dx, (92) +pushf + + +movw $0x25c9, %dx +movw $0xf110, %ax + +movw $0x2, (%bp) +idivw %ax +addw $0x2, %bp + +movw %ax, (94) +movw %dx, (96) +pushf + +# idiv byte tests +# easy test +movw $0x14, %ax +movw $0x5, %bx + +movw $0x2, (%bp) +idivb %bl +addw $0x2, %bp + +movw %ax, (98) +movw %bx, (100) +movw %dx, (102) +pushf + + +movw $0xa320, %dx +movw $0xc3da, %ax +movw $0xff, (104) + +movw $0x4, (%bp) +idivb (104) +addw $0x2, %bp + +movw %ax, (106) +movw %dx, (108) +pushf + + +movw $0xffff, %ax +movb $0x1, %dh + +movw $0x2, (%bp) +idivb %dh +addw $0x2, %bp + +movw %ax, (110) +movw %dx, (112) +pushf + + +movw $0xffff, %ax +movw $0xffff, (114) + +movw $0x4, (%bp) +idivb (115) +addw $0x2, %bp + +movw %ax, (116) +movw %dx, (118) +pushf + + +movw $0x008a, %ax +movw $0xae8e, %cx + +movw $0x2, (%bp) +idivb %cl +addw $0x2, %bp + +movw %ax, (120) +movw %cx, (122) +pushf + + +movw $0x0669, %dx +movw $0x89f3, %ax + +movw $0x2, (%bp) +idivb %al +addw $0x2, %bp + +movw %ax, (124) +movw %dx, (126) +pushf + + +# AAM tests +movw $0xffff, %ax + +movw $0x2, (%bp) +aam $0 +addw $0x2, %bp +movw %ax, (132) +pushf + +movw $0x2, (%bp) +aam $1 +addw $0x2, %bp +movw %ax, (134) +pushf + +movw $0xffff, %ax +movw $0x2, (%bp) +aam +addw $0x2, %bp +movw %ax, (136) +pushf + +movw $0xff00, %ax +movw $0x2, (%bp) +aam $0 +addw $0x2, %bp +movw %ax, (138) +pushf + +movw $0x2, (%bp) +aam $1 +addw $0x2, %bp +movw %ax, (140) +pushf + +movw $0x3ffb, %ax +movw $0x2, (%bp) +aam +addw $0x2, %bp +movw %ax, (142) +pushf + +hlt + +# Exception handler (int 0) +.org 0x1000 +push %ax +push %di +movw (%bp), %ax +movw %sp, %si +addw $4, %si +movw (%si), %si +movw %si, (%bp) +addw %ax, %si +movw %sp, %di +addw $4, %di +movw %si, (%di) +pop %di +pop %ax +iret + +.org 65520 +jmp start +.org 65535 +.byte 0xff Index: trunk/tests/README =================================================================== --- trunk/tests/README (nonexistent) +++ trunk/tests/README (revision 39) @@ -0,0 +1,2 @@ +Documentation for the test benches are located at the project page: + http://zet.aluzina.org/index.php/Category:Test_benches Index: trunk/tests/14_add.s =================================================================== --- trunk/tests/14_add.s (nonexistent) +++ trunk/tests/14_add.s (revision 39) @@ -0,0 +1,193 @@ +.code16 +start: + +movw $160, %sp + +# add word tests +movw $0xffff, %ax +movw $0x0001, %bx +addw %ax, %bx # (1) addw reg16, reg16 +movw %ax, (0) +movw %bx, (2) +pushf + +movw $0xffff, %dx +movw $0xffff, (4) +addw %dx, (4) # (2) addw reg16, mem16 +movw %dx, (6) +pushf + +movw $0x0001, %cx +movw $0x0002, (8) +addw (8), %cx # (3) addw mem16, reg16 +movw %cx, (10) +pushf + +movw $0x0001, %ax +addw $0x7fff, %ax # (4) addw imm16, ac16 +movw %ax, (12) +pushf + +movw $0x8000, %bp +.byte 0x83,0xc5,0xff # (5) addw imm8, reg16 +movw %bp, (14) +pushf + +movw $0xc783, %si +addw $0xeb2a, %si # (6) addw imm16, reg16 +movw %si, (16) +pushf + +movw $0x8960, (18) +addw $0x0a95, (18) # (7) addw imm16, mem16 +pushf + +movw $0xf1e1, (20) +.word 0x0683, 0x0014 # (8) addw imm8, mem16 +.byte 0x64 +pushf + +# add byte tests +movb $0x01, (22) +addb $0xff, (22) # (9) addb imm8, mem8 +pushf + +movb $0xff, %dh +addb $0xff, %dh # (10) addb imm8, reg8 +movw %dx, (23) +pushf + +movb $0x01, %al +addb $0x02, %al # (11) addb imm8, acum8 +movw %ax, (25) +pushf + +movb $0x7f, (27) +movb $0x01, %ch +addb (27), %ch # (12) addb mem8, reg8 +movw %cx, (28) +pushf + +movb $0x80, %bl +movb $0xff, (30) +addb %bl, (30) # (13) addb reg8, mem8 +movw %bx, (31) +pushf + +movb $0xa6, %al +movb $0x86, %ah +addb %al, %ah # (14) addb reg8, reg8 +movw %ax, (33) +pushf + +# adc word tests +movw $0xffff, %ax +movw $0x0001, %bx +adcw %ax, %bx # (15) adcw reg16, reg16 +movw %ax, (35) +movw %bx, (37) +pushf + +movw $0xffff, %dx +movw $0xffff, (39) +adcw %dx, (39) # (16) adcw reg16, mem16 +movw %dx, (41) +pushf + +movw $0x0001, %cx +movw $0x0002, (43) +adcw (43), %cx # (17) adcw mem16, reg16 +movw %cx, (45) +pushf + +movw $0x0001, %ax +adcw $0x7fff, %ax # (18) adcw imm16, ac16 +movw %ax, (47) +pushf + +movw $0x8000, %bp +.byte 0x83,0xd5,0xff # (19) adcw imm8, reg16 +movw %bp, (49) +pushf + +movw $0x77d3, %si +adcw $0x8425, %si # (20) adcw imm16, reg16 +movw %si, (51) +pushf + +movw $0xeba0, (53) +adcw $0xd3c1, (53) # (21) adcw imm16, mem16 +pushf + +movw $0x7f50, (55) +.word 0x1683, 0x0037 +.byte 0xf5 +pushf + +# adc byte tests +movb $0x01, (57) +adcb $0xff, (57) +pushf + +movb $0xff, %dh +adcb $0xff, %dh +movw %dx, (58) +pushf + +movb $0x01, %al +adcb $0x02, %al +movw %ax, (60) +pushf + +movb $0x7f, (62) +movb $0x01, %ch +adcb (62), %ch +movw %cx, (63) +pushf + +movb $0x80, %bl +movb $0xff, (65) +adcb %bl, (65) +movw %bx, (66) +pushf + +movb $0xb9, %al +movb $0xd3, %ah +adcb %al, %ah +movw %ax, (68) +pushf + +# inc word tests +movw $0xffff, %di +incw %di +movw %di, (70) +pushf + +movw $0x7fff, %bp +.byte 0xff, 0xc5 +movw %bp, (72) +pushf + +movw $0x7412, (74) +incw (74) +pushf + +# inc byte tests +movb $0x7f, %dl +incb %dl +movw %dx, (76) +pushf + +movb $0xff, (77) +incb (77) +pushf + +movb $0xb5, (78) +incb (78) +pushf +hlt + +.org 65520 +jmp start +.org 65535 +.byte 0xff Index: trunk/tests/08_rep.s =================================================================== --- trunk/tests/08_rep.s (nonexistent) +++ trunk/tests/08_rep.s (revision 39) @@ -0,0 +1,278 @@ +.code16 +start: + +# Trivial cases. With %cx 0, nothing is executed +rep movsb +repz movsb +repnz movsb +rep cmpsb +repz cmpsb +repnz cmpsb +rep scasb +repz scasb +repnz scasb +rep lodsb +repz lodsb +repnz lodsb +rep stosb +repz stosb +repnz stosb + + +movw $0x40, %bx +push %bx +popf + +# Now we have the zero flag set, nothing is executed because of %cx + +rep movsb +repnz movsb +repz cmpsb +repnz cmpsb +repz scasb +repnz scasb +rep lodsb +repnz lodsb +rep stosb +repnz stosb + +movw %di, %ax +movb $0x10, %ah +jmp *%ax # jump to 0xf1000 +hlt + +.org 0x102 +jmp rep_stos_z + +.org 0x607 +jmp rep_lods_nz + +.org 0x809 +jmp rep_movs_nz + +.org 0x0ffc +jmp cont_n5 +.org 0x0ffe +jmp cont_n10 +# Prefixes do not affect normal instructions +.org 0x1000 +movw $0, %cx +.byte 0xf3 +push %cx +jmp *%sp + +cont_n10: +movw $0x110a, %cx +.byte 0xf3 +push %cx +jmp *%sp + +cont_n5: +jmp *%cx + +.org 0x110a +movw $0x5, %cx + +movw $0, %dx +push %dx +popf +.byte 0xf2 +pop %cx + +movw %cx, %ax +movb $0x20, %ah +jmp *%ax # jump to 0xf200a + +.org 0x122c +jmp repz_cmps_nz + +.org 0x122f +jmp repz_scas + +# rep movs ZF=1 +.org 0x200a +push %bx +popf +movw $2, %cx +movw $0x3000, %si +movw $0xf000, %ax +movw %ax, %ds +movw $0x1000, %ax +movw %ax, %es +movw $0x0000, %di + +rep movsb + +movw %ax, %ds +movw (0x0000), %ax +movw %di, %bp +movw %ax, (%bp,%si) +jcxz comp_disi +hlt +comp_disi: +jmp *(0x3004) + +.org 0x3000 +.byte 0x09,0x08,0x07,0x06,0x5,0x4,0x3,0x2,0x1,0xa,0xb,0xc,0xd + + +# rep movs ZF=0 +rep_movs_nz: +movw $0xf000, %ax +movw %ax, %ds +movw $0x1, %cx +movw $0, %ax +pushw %ax +popf + +rep movsw + +movw $0x1000, %ax +movw %ax, %ds +movw (0x0002), %ax +movw %di, %bp +movw %ax, (%bp,%si) +jcxz movs_nz +hlt +movs_nz: +jmp *(0x3008) + +# rep lods ZF=0 +rep_lods_nz: +movw $0xf000, %ax +movw %ax, %ds +movw $0x3, %cx +rep lodsb + +jmp *%ax +hlt +rep_lods_z: +# rep lods ZF=1 +movw $0x40, %bx +push %bx +popf +movw $0xf000, %ax +movw %ax, %ds +movw $0x1, %cx +rep lodsw +jmp *%ax + +# rep stos ZF=1 +rep_stos_z: +movw $0x2, %cx +movw $0x4000, %ax +rep stosw +movw $0x1000, %ax +movw %ax, %ds +jmp *(0x0006) +hlt + +.org 0x4000 +# rep stos ZF=0 +movw $0x0, %bx +push %bx +popf +movw $0x4, %cx +rep stosw +jcxz repz_cmps_z +hlt + +# repz cmps ZF=1, but ZF=0 before %cx=0 +repz_cmps_z: +movw $0x40, %bx +push %bx +popf +movw $0x1234, %cx +movw $0x3000, %si +movw $0, %di +movw $0xf000, %ax +movw %ax, %ds +repz cmpsb + +jmp *%cx + +# repz scas ZF=1, but ZF=0 before %cx=0 +repz_scas: +movw $0x40, %bx +push %bx +popf +movw $0x0040, %ax +repz scasw +jmp *%cx + +# repz cmps scas ZF=0, they do only one iteration +repz_cmps_nz: +movw $0x0607, %ax +movw $0x5004, %cx +repz cmpsw +repz scasw +movw $0x40, %bx +push %bx +popf +movw $0x3000, %si +movw $0x0, %di +# repnz cmps scas ZF=1, they do only one iteration +repnz cmpsw +repnz scasw +jmp *%cx +hlt + +.org 0x5000 +# repnz movs ZF=1 all iterations +repnz_movs: +movw $0x2, %cx +repnz movsb +jcxz repnz_lods +hlt + +# repnz lods ZF=1 all iterations +repnz_lods: +movw $0x2, %cx +repnz lodsb +jcxz repnz_stos +hlt + +# repnz stos ZF=1 all iterations +repnz_stos: +movw $0x2, %cx +repnz stosb +jcxz repnz_cmps +hlt + +# repnz cmps ZF=0, but ZF=1 before %cx=0 +repnz_cmps: +movw $0, %bx +push %bx +popf +movw $0x6023, %cx +std +movw $0x6, %di +movw $0x3006, %si +repnz cmpsw + +# repnz scas ZF=0, but ZF=1 before %cx=0 +movw $0x1000, %ax +movw $0, %bx +push %bx +popf +cld +repnz scasw +jmp *%cx +hlt + +.org 0x601b +movw $0, %dx +movw %dx, %ds +movw $0x1234, (4) +hlt + +.org 0xf003 +jmp rep_lods_z + +.org 65520 +movw $0x1000, %sp +movw %sp, %ss +jmp start + +.org 65535 +.byte 0xff Index: trunk/tests/15_sub.s =================================================================== --- trunk/tests/15_sub.s (nonexistent) +++ trunk/tests/15_sub.s (revision 39) @@ -0,0 +1,194 @@ +.code16 +start: + +movw $160, %sp + +# sub word tests +movw $0x0001, %ax +movw $0x0002, %bx +subw %bx, %ax +movw %ax, (0) +movw %bx, (2) +pushf + +movw $0xffff, %dx +movw $0xffff, (4) +subw %dx, (4) +movw %dx, (6) +pushf + +movw $0xffff, %cx +movw $0x0001, (8) +subw (8), %cx +movw %cx, (10) +pushf + +movw $0x8000, %ax +subw $0x0001, %ax +movw %ax, (12) +pushf + +movw $0x8000, %bp +.byte 0x83,0xed,0xff +movw %bp, (14) +pushf + +movw $0x7f81, %si +subw $0x903c, %si +movw %si, (16) +pushf + +movw $0xefc3, (18) +subw $0xc664, (18) +pushf + +movw $0xe933, (20) +.word 0x2e83, 0x0014 +.byte 0x64 +pushf + +# sub byte tests +movb $0x01, (22) +subb $0x02, (22) +pushf + +movb $0xff, %dh +subb $0xff, %dh +movw %dx, (23) +pushf + +movb $0xff, %al +subb $0x01, %al +movw %ax, (25) +pushf + +movb $0x80, (27) +movb $0x01, %ch +subb (27), %ch +movw %cx, (28) +pushf + +movb $0x80, %bl +movb $0x7f, (30) +subb %bl, (30) +movw %bx, (31) +pushf + +movb $0xbc, %al +movb $0x8e, %ah +subb %al, %ah +movw %ax, (33) +pushf + +# sbb word tests +movw $0x0001, %ax +movw $0x0002, %bx +sbbw %ax, %bx +movw %ax, (35) +movw %bx, (37) +pushf + +movw $0xffff, %dx +movw $0xffff, (39) +sbbw %dx, (39) +movw %dx, (41) +pushf + +movw $0xffff, %cx +movw $0x0001, (43) +sbbw (43), %cx +movw %cx, (45) +pushf + +movw $0x8000, %ax +sbbw $0x0001, %ax +movw %ax, (47) +pushf + +movw $0x8000, %bp +.byte 0x83,0xdd,0xff +movw %bp, (49) +pushf + +movw $0x52c3, %si +sbbw $0xe248, %si +movw %si, (51) +pushf + +movw $0xe74c, (53) +sbbw $0x22c0, (53) +pushf + +movw $0xfd85, (55) +.word 0x1e83, 0x0037 +.byte 0xf5 +pushf + +# sbb byte tests +movb $0x01, (57) +sbbb $0x02, (57) +pushf + +movb $0xff, %dh +sbbb $0xff, %dh +movw %dx, (58) +pushf + +movb $0xff, %al +sbbb $0x01, %al +movw %ax, (60) +pushf + +movb $0x80, (62) +movb $0x01, %ch +sbbb (62), %ch +movw %cx, (63) +pushf + +movb $0x80, %bl +movb $0xff, (65) +sbbb %bl, (65) +movw %bx, (66) +pushf + +movb $0xb9, %al +movb $0xd3, %ah +sbbb %al, %ah +movw %ax, (68) +pushf + +# dec word tests +movw $0x0000, %di +decw %di +movw %di, (70) +pushf + +movw $0x8000, %bp +.byte 0xff, 0xcd +movw %bp, (72) +pushf + +movw $0x7412, (74) +decw (74) +pushf + +# dec byte tests +movb $0x00, %dl +decb %dl +movw %dx, (76) +pushf + +movb $0x80, (77) +decb (77) +pushf + +movb $0xb5, (78) +decb (78) +pushf +hlt + +.org 65520 +jmp start +.org 65535 +.byte 0xff + Index: trunk/tests/04_jump1.s =================================================================== --- trunk/tests/04_jump1.s (nonexistent) +++ trunk/tests/04_jump1.s (revision 39) @@ -0,0 +1,192 @@ +.code16 +start: +movw $0, %cx +movw $64, %bx +movw $0x1000, %sp +movw %sp, %ss +push %bx +jmp j00 + +# ja/jnbe +j00err: +jmp jerr +j00: +stc +ja j00err # (1) +clc +ja j01 + +# jae/jnb/jnc +j01err: +jmp jerr +j01: +stc +jae j01err # (2) +clc +jae j02 + +# jb/jnae/jc +j02err: +jmp jerr +j02: +jb j02err # (3) +stc +jb j03 + +# jbe/jna +j03err: +jmp jerr +j03: +clc +jbe j03err # (4) +popf +jbe j04 + +# je/jz +j04err: +jmp jerr +j04: +push %cx +popf +je j04err # (5) +push %bx +popf +je j05 + +# jg/jnle +j05err: +jmp jerr +j05: +movw $0x08c0, %dx +push %dx +popf +jg j05err # (6) +movw $0x0880, %dx +push %dx +popf +jg j06 + +# jge/jnl +j06err: +jmp jerr +j06: +movw $0x80, %dx +push %dx +popf +jge j06err # (7) +push %cx +popf +jge j07 + +# jl/jnge +j07err: +jmp jerr +j07: +jl j07err # (8) +movw $0x0800, %dx +push %dx +popf +jl j08 + +# jle/jng +j08err: +jmp jerr +j08: +push %cx +popf +jle j08err # (9) +push %bx +popf +jle j09 + +# jne/jnz +j09err: +jmp jerr +j09: +jne j09err # (10) +movw $0xcbf, %dx +push %dx +popf +jne j10 + +# jno +j10err: +jmp jerr +j10: +movw $0x0800, %dx +push %dx +popf +jno j10err # (11) +movw $0x6ff, %dx +push %dx +popf +jno j11 + +# jnp/jpo +j11err: +jmp jerr +j11: +movw $0x4, %dx +push %dx +popf +jnp j11err # (12) +push %cx +popf +jnp j12 + +# jns +j12err: +jmp jerr +j12: +movw $0xeff, %dx +push %dx +popf +jns j12err # (13) +push %cx +popf +jns j13 + +# jo +j13err: +jmp jerr +j13: +jo j13err # (14) +movw $0x800, %dx +push %dx +popf +jo j14 + +# jp/jpe +j14err: +jmp jerr +j14: +jp j14err # (15) +movw $0x804, %dx +push %dx +popf +jp j15 + +# js +j15err: +jmp jerr +j15: +js j15err # (16) +movw $0x884, %dx +push %dx +popf +js j16 +jmp jerr + +# All correct +j16: +movw $0x1234, (0) +hlt + +.org 65520 +jmp start + +jerr: +hlt + +.org 65535 +.byte 0xff Index: trunk/tests/07_strings.s =================================================================== --- trunk/tests/07_strings.s (nonexistent) +++ trunk/tests/07_strings.s (revision 39) @@ -0,0 +1,104 @@ +.code16 +start: +movw $0xf000, %cx +movw %cx, %ds +movw %cx, %es +movw $0x1000, %si +movw $0x2001, %di + +cmpsb # (1) flags=0x97 (SAPC) +pushf +ret + +.org 0x46 +cmpsb # (1) flags=0x82 (S) +pushf +ret + +.org 0x82 +cmpsb # (1) flags=0x812 (OA) +pushf +ret + +.org 0x97 +cmpsb # (1) flags=0x46 (ZP) +pushf +ret + +.org 0x812 +cmpsw # (2) +pushf +ret # jump to f000:0883 + +.org 0x883 +movb $0x10, %ah +std +lodsb # (3) +jmp *%ax # jump to f000:10c2 + +.org 0x1000 +.byte 0x01,0xff,0xff,0x80 +.word 0x0002 +.byte 0xc2 + +.org 0x10c2 +lodsw # (4) +jmp *%ax + +.org 0x1300 +movw %ax, (%di) +movw %dx, %es +scasw # (8) +jz stor + +.org 0x1350 +stor: +movb $0x80, %al +std +stosb # (9) +jmp *(%di) + +.org 0x2001 +.byte 0x02,0xff,0x01,0x01 +.word 0x8001 + +.org 0x8013 +movw $0xd000, %ax +stosw # (10) +jmp *2(%di) + +.org 0x80c2 +movw %cx, %ds +movsw # (6) +movw %dx, %ds +jmp *2(%di) + +.org 0x80ff +movw $0x2002, %di +movw %cx, %es +cld +scasb # (7) +lahf +jmp *%ax + +.org 0xc200 +movw $0x1000, %dx +movw %dx, %es +movw $0xffff, %di +movsb # (5) +movw %dx, %ds +movb $0xc2, (%di) +jmp *(%di) + +.org 0xd000 +movw $0, %dx +movw %dx, %ds +movw $0x1234, (2) + +hlt + +.org 65520 +jmp start + +.org 65535 +.byte 0xff Index: trunk/tests/12_rotate.s =================================================================== --- trunk/tests/12_rotate.s (nonexistent) +++ trunk/tests/12_rotate.s (revision 39) @@ -0,0 +1,229 @@ +.code16 +start: + +# rcl word operations +movw $0x3b5e, %ax +movw $0xc8a7, %bx +movw $0x2072, (0) +movw $0x3e79, (2) + +movw $160, %sp + +rcl %ax # (1) +pushf +mov %ax, (32) + +rclw (0) # (2) +pushf + +movw $0x100, %cx +rcl %cl, %bx # (3), zero bit shift +pushf +movw %bx, (34) + +movw $0xffff, %cx +movw %bx, %dx +rcl %cl, %dx # (3), -1, result 0 +pushf +movw %dx, (36) + +movb $0x8, %cl +rcl %cl, %bx # (3) normal +pushf +movw %bx, (38) + +movb $0x4, %cl +rclw %cl, (2) # (4) +pushf + +# rcl byte operations +movw $0x5904, %dx +movw $0xbe7c, %ax +movw $0xd62f, (4) +movw $0x6fd8, (6) + +rcl %ah # (5) +pushf +mov %ax, (40) + +rclb (5) # (6) +pushf + +movb $0x7, %cl +rcl %cl, %dl # (7) +pushf +movw %dx, (42) + +rclb %cl, (6) # (8) +pushf + +# rcr word operations +movw $0x15d6, %ax +movw $0x8307, %bx +movw $0x9ab7, (8) +movw $0x28b6, (10) + +rcr %ax # (9) +pushf +mov %ax, (44) + +rcrw (8) # (10) +pushf + +movw $0x100, %cx +rcr %cl, %bx # (11), zero bit shift +pushf +movw %bx, (46) + +movw $0xffff, %cx +movw %bx, %dx +rcr %cl, %dx # (11), -1, result 0 +pushf +movw %dx, (48) + +movb $0x5, %cl +rcr %cl, %bx # (11) normal +pushf +movw %bx, (50) + +movb $0x4, %cl +rcrw %cl, (10) # (12) +pushf + +# rcr byte operations +movw $0x7eaa, %dx +movw $0x3a8d, %ax +movw $0xa414, (12) +movw $0x2838, (14) + +rcr %ah # (13) +pushf +mov %ax, (52) + +rcrb (13) # (14) +pushf + +movb $0x7, %cl +rcr %cl, %dl # (15) +pushf +movw %dx, (54) + +rcrb %cl, (14) # (16) +pushf + +# rol word operations +movw $0x020d, %ax +movw $0x8d5a, %bx +movw $0x28dd, (16) +movw $0xd74a, (18) + +rol %ax # (17) +pushf +mov %ax, (56) + +rolw (16) # (18) +pushf + +movw $0x100, %cx +rol %cl, %bx # (19), zero bit shift +pushf +movw %bx, (58) + +movw $0xffff, %cx +movw %bx, %dx +rol %cl, %dx # (19), -1, result 0 +pushf +movw %dx, (60) + +movb $0x4, %cl +rol %cl, %bx # (19) normal +pushf +movw %bx, (62) + +movb $0x4, %cl +rolw %cl, (18) # (20) +pushf + +# rol byte operations +movw $0x9d09, %dx +movw $0xc948, %ax +movw $0x0b80, (20) +movw $0x48e8, (22) + +rol %ah # (21) +pushf +mov %ax, (64) + +rolb (21) # (22) +pushf + +movb $0x7, %cl +rol %cl, %dl # (23) +pushf +movw %dx, (66) + +rolb %cl, (22) # (24) +pushf + + +# ror word operations +movw $0xf25e, %ax +movw $0x2eb5, %bx +movw $0x0151, (24) +movw $0x7237, (26) + +ror %ax # (25) +pushf +mov %ax, (68) + +rorw (24) # (26) +pushf + +movw $0x100, %cx +ror %cl, %bx # (27), zero bit shift +pushf +movw %bx, (70) + +movw $0xffff, %cx +movw %bx, %dx +ror %cl, %dx # (27), -1, result 0 +pushf +movw %dx, (72) + +movb $0x4, %cl +ror %cl, %bx # (27) normal +pushf +movw %bx, (74) + +movb $0x4, %cl +rorw %cl, (26) # (28) +pushf + +# ror byte operations +movw $0x4288, %dx +movw $0x8bab, %ax +movw $0x5dd9, (28) +movw $0xc7f7, (30) + +ror %ah # (29) +pushf +mov %ax, (76) + +rorb (29) # (30) +pushf + +movb $0x7, %cl +ror %cl, %dl # (31) +pushf +movw %dx, (78) + +rorb %cl, (30) # (32) +pushf + + +hlt + +.org 65520 +jmp start +.org 65535 +.byte 0xff Index: trunk/tests/05_jump2.s =================================================================== --- trunk/tests/05_jump2.s (nonexistent) +++ trunk/tests/05_jump2.s (revision 39) @@ -0,0 +1,68 @@ +.code16 +start: +movw $0xf000, %bx +movw %bx, %ds +movw $0x1290, %ax + +movw $0x5, %cx +again: +push %cx +loop again # (6) + +call *%ax # (2) +ret # (9) + +.org 0x1290 +ag2: +movw $0xffff, %cx +loope ag2 # (7) branch not taken +movw $64, %dx +push %dx +popf +loope cont # (7) branch taken +hlt +cont: +lcall $0xe342, $0xebe0 # (4) +jcxz cont # (13) branch not taken +movw $0, %cx +jcxz exit # (13) branch taken +hlt +exit: +ret $10 # (10) + +.org 0x2000 +call *(0x3000) # (3) +movw $0, %dx +push %dx +popf +hang: +movw $1, %cx +loopnz hang # (8) branch not taken +loopne cont1 # (8) branch taken +hlt +cont1: +lret # (11) +.org 0x3000 +.word 0xfde0 +.word 0x4000 +.word 0xf000 + +.org 0x3200 +movw $0x2ff0, %bx +movw $0x10, %si +push %dx +lcall *2(%bx,%si) # (5) +ret + +.org 0x4000 +lret $2 # (12) + +.org 65520 +movw $0x1000, %sp +movw %sp, %ss +call start # (1) +movw %cx, %ds +movw %bx, (0) +hlt +.org 65535 +.byte 0xff Index: trunk/tests/06_interrupt.s =================================================================== --- trunk/tests/06_interrupt.s (nonexistent) +++ trunk/tests/06_interrupt.s (revision 39) @@ -0,0 +1,68 @@ +.code16 +start: +movw $0, %dx +movw %dx, %ds +movw $0x1000, %sp +movw %sp, %ss +movw $0xebe0, (52) +movw $0xe342, (54) + +movw $0x0eff, %ax +push %ax +popf +movb $0, (0) +int $13 # (1) +movb $2, (2) +jmp *%ax + +.org 0x0cd7 +movb $3, (3) +pushf +pop %bx +movw $0xebe0, (12) +movw $0xe342, (14) + +int $3 # (2) +movb $4, (4) +movw $0x3001, (16) +movw $0xf000, (18) + +into # (3) branch taken +hlt + +.org 0x2000 +movb $1, (1) +pushf +pop %ax +clc +iret # (4) + +.org 0x3001 +movb $5, (5) +pop %cx +movw $0x4002, %cx +push %cx +iret + +.org 0x4002 +movb $6, (6) +movw $0x4ff, %dx +push %dx +popf +movw $0x5000, (16) + +into # (3) branch not taken +movw %ax, (8) +movw %bx, (10) +movw %cx, (12) +movw %dx, (14) +movw %sp, (16) +hlt + +.org 0x5000 +hlt + +.org 65520 +jmp start +.org 65535 +.byte 0xff Index: trunk/tests/11_shifts.s =================================================================== --- trunk/tests/11_shifts.s (nonexistent) +++ trunk/tests/11_shifts.s (revision 39) @@ -0,0 +1,176 @@ +.code16 +start: + +# sal/shl word operations +movw $0x6ec5, %ax +movw $0xb1a8, %bx +movw $0x5338, (0) +movw $0x31fe, (2) + +movw $128, %sp + +sal %ax # (1) +pushf +mov %ax, (32) + +shlw (0) # (2) +pushf + +movw $0x100, %cx +shl %cl, %bx # (3), zero bit shift +pushf +movw %bx, (34) + +movw $0xffff, %cx +movw %bx, %dx +sal %cl, %dx # (3), -1, result 0 +pushf +movw %dx, (36) + +movb $0x8, %cl +sal %cl, %bx # (3) normal +pushf +movw %bx, (38) + +movb $0x4, %cl +sal %cl, (2) # (4) +pushf + +# sal/shl byte operations +movw $0x956f, %dx +movw $0x4293, %ax +movw $0x33c0, (4) +movw $0x64ff, (6) + +shl %ah # (5) +pushf +mov %ax, (40) + +salb (5) # (6) +pushf + +movb $0x7, %cl +shl %cl, %dl # (7) +pushf +movw %dx, (42) + +salb %cl, (6) # (8) +pushf + +# sar word operations +movw $0xfb72, %ax +movw $0xdfb9, %bx +movw $0x1ebb, (8) +movw $0x742f, (10) + +sar %ax # (9) +pushf +mov %ax, (44) + +sarw (8) # (10) +pushf + +movw $0x100, %cx +sar %cl, %bx # (11), zero bit shift +pushf +movw %bx, (46) + +movw $0xffff, %cx +movw %bx, %dx +sar %cl, %dx # (11), -1, result 0 +pushf +movw %dx, (48) + +movb $0x5, %cl +sar %cl, %bx # (11) normal +pushf +movw %bx, (50) + +movb $0x4, %cl +sar %cl, (10) # (12) +pushf + +# sar byte operations +movw $0x93b8, %dx +movw $0x6688, %ax +movw $0xcad4, (12) +movw $0x6ec9, (14) + +sar %ah # (13) +pushf +mov %ax, (52) + +sarb (13) # (14) +pushf + +movb $0x7, %cl +sar %cl, %dl # (15) +pushf +movw %dx, (54) + +sarb %cl, (14) # (16) +pushf + +# shr word operations +movw $0x7ba1, %ax +movw $0x54e8, %bx +movw $0xbaaa, (16) +movw $0x3431, (18) + +shr %ax # (17) +pushf +mov %ax, (56) + +shrw (16) # (18) +pushf + +movw $0x100, %cx +shr %cl, %bx # (19), zero bit shift +pushf +movw %bx, (58) + +movw $0xffff, %cx +movw %bx, %dx +shr %cl, %dx # (19), -1, result 0 +pushf +movw %dx, (60) + +movb $0x4, %cl +shr %cl, %bx # (19) normal +pushf +movw %bx, (62) + +movb $0x4, %cl +shr %cl, (18) # (20) +pushf + +# shr byte operations +movw $0x0410, %dx +movw $0x1628, %ax +movw $0x3b26, (20) +movw $0x8d0d, (22) + +shr %ah # (21) +pushf +mov %ax, (64) + +shrb (21) # (22) +pushf + +movb $0x7, %cl +shr %cl, %dl # (23) +pushf +movw %dx, (66) + +shrb %cl, (22) # (24) +pushf + + + + +hlt + +.org 65520 +jmp start +.org 65535 +.byte 0xff Index: trunk/tests/13_bcdcnv.s =================================================================== --- trunk/tests/13_bcdcnv.s (nonexistent) +++ trunk/tests/13_bcdcnv.s (revision 39) @@ -0,0 +1,192 @@ +.code16 +start: + +movw $1, %bx +movw $0, %cx +movw $144, %sp + +# aaa +movw $0x000a, %ax +aaa # (1) adjusted +movw %ax, (0) +pushf + +movw $0xfff9, %ax +aaa # (2) adjusted by AF +movw %ax, (2) +pushf + +push %bx +popf +movw $0xfff9, %ax +aaa # (3) not adjusted +movw %ax, (4) +pushf + +movw $0x5d50, %ax +aaa # (4) aaa random +movw %ax, (6) +pushf + +movw $0x4726, %ax +aaa # (5) aaa random +movw %ax, (8) +pushf + +# aas +movw $0x000a, %ax +aas # (6) adjusted +movw %ax, (10) +pushf + +movw $0xfff9, %ax +aas # (7) adjusted by AF +movw %ax, (12) +pushf + +push %bx +popf +movw $0xfff9, %ax +aas # (8) not adjusted +movw %ax, (14) +pushf + +movw $0xdcc0, %ax +aas # (9) aas random +movw %ax, (16) +pushf + +movw $0x5ffb, %ax +aas # (10) aas random +movw %ax, (18) +pushf + +# daa +movw $0x00ac, %ax +daa # (11) daa, adj 1st & 3rd cond +movw %ax, (20) +pushf + +movw $0xfff9, %ax +daa +movw %ax, (22) # (12) daa, adj 2nd & 3rd cond +pushf + +push %bx +popf # carry set +movw $0xfff8, %ax +daa # (13) daa, adj 4th cond +movw %ax, (24) +pushf + +push %cx +popf # zero flags +movw $0xff8b, %ax +daa # (14) daa, adj 1st cond +movw %ax, (26) +pushf + +push %cx +popf +movw $0x0082, %ax +daa # (15) daa, not adjusted +movw %ax, (28) +pushf + +movw $cd3c, %ax +daa # (16) daa, random +movw %ax, (30) +pushf + +movw $0x3f00, %ax +daa # (17) daa, random +movw %ax, (32) +pushf + +# das +movw $0x00ac, %ax +das # (18) das, adj 1st & 3rd cond +movw %ax, (34) +pushf + +movw $0xfff9, %ax +das +movw %ax, (36) # (19) das, adj 2nd & 3rd cond +pushf + +push %bx +popf # carry set +movw $0xfff8, %ax +das # (20) das, adj 4th cond +movw %ax, (38) +pushf + +push %cx +popf # zero flags +movw $0xff8b, %ax +das # (21) das, adj 1st cond +movw %ax, (40) +pushf + +push %cx +popf +movw $0x0082, %ax +das # (22) das, not adjusted +movw %ax, (42) +pushf + +movw $0x059a, %ax +das # (23) das, random +movw %ax, (44) +pushf + +movw $0x54f6, %ax +das # (24) das, random +movw %ax, (46) +pushf + +# cbw +movw $0xff7f, %ax +cbw # (25) cbw, positive +movw %ax, (48) +movw %dx, (50) +pushf + +movw $0x0080, %ax +cbw # (26) cbw, negative +movw %ax, (52) +movw %dx, (54) +pushf + +movw $0xf1ed, %ax +cbw # (27) cbw, random +movw %ax, (56) +movw %dx, (58) +pushf + +# cwd +movw $0x8000, %ax +cwd # (28) cwd, negative +movw %ax, (60) +movw %dx, (62) +pushf + +movw $0x7fff, %ax +cwd # (29) cwd, positive +movw %ax, (64) +movw %dx, (66) +pushf + +movw $0x43f1, %ax +cwd # (30) cwd, random +movw %ax, (68) +movw %dx, (70) +pushf + +hlt + +.org 65520 +jmp start + +.org 65535 +.byte 0xff Index: trunk/tests/20_hdemu.s =================================================================== --- trunk/tests/20_hdemu.s (nonexistent) +++ trunk/tests/20_hdemu.s (revision 39) @@ -0,0 +1,46 @@ +.code16 +start: +# First sector +movw $0x100, %cx +movw $0xe000, %dx +movw $0x1000, %ax +movw $0x0, %bx +movw %ax, %ds + +a: +inw %dx, %ax +movw %ax, (%bx) +addw $2, %dx +addw $2, %bx +loop a + +movw $2844, %ax +movw $0xe000, %dx +outw %ax, %dx + +# Fifth sector +movw $0x100, %cx +movw $0xe000, %dx +movw $0x2000, %ax +movw $0x0, %bx +movw %ax, %ds + +b: +inw %dx, %ax +movw %ax, (%bx) +addw $2, %dx +addw $2, %bx +loop b + + + +hlt + + + + +.org 65520 +jmp start + +.org 65535 +.byte 0xff Index: trunk/tests/02_datatrnf.s =================================================================== --- trunk/tests/02_datatrnf.s (nonexistent) +++ trunk/tests/02_datatrnf.s (revision 39) @@ -0,0 +1,105 @@ +.code16 +start: +movb $0xed, %ah +sahf # (1) +lahf # (2) Now %ah must have 0xc7 +movb %ah, (0) +movb %ah, %al +outb %al, $0xb7 # (19) +movw $0xb7, %ax +movw %ax, %dx +movb $0xa5, %ah +inb %dx, %al # (24) +movw %ax, (2) +sahf +lahf # Now %ax must have 0x87c7 +movw %ax, (32) + +outw %ax, %dx # (22) +movw $0xf752, %ax +movw %ax, %bx +inw %dx, %ax # (26) +xchg %bx, %ax # (16) +movw %ax, %ds +lds 781(%bx), %si # (3) %ds=0x5678 and %si=0x1234 +movw $0, %ax +movw %ds, %bx +movw %ax, %ds +movw %bx, (4) +movw %si, (6) +movw %bx, %ds + +movw $-1, %bx + +movw $0x1000, %ax +outw %ax, $0xb7 # (21) + +movw $0x5798, %ax +movw %ax, %ss +movw $9, %sp +movw $0xabcd, %cx +push %cx # (10) +movw $0x8cf1, %cx +movw %cx, %es +push %es # (11) +popf # (9) +les -46(%bx,%si), %di # (5) %di=0x8cf1, %es=%0xabcd +lea -452(%bp,%di), %si # (4) %si=0x8b2d +pushf # (13) +movw $0, %ax +movw %ax, %ds +movw %di, (8) +movw %es, %ax +movw %ax, (10) +movw %si, (12) +inw $0xb7, %ax # (25) +movw %ax, %ds +pop 1(%si) # (8) +xchg 2(%bx,%si), %di # (15) %di=0x0cd3 +push 2(%bx,%si) # (12) +pop %es # (7) %es=0x8cf1 +movw %es, %dx + + +movw %ds, %ax +movw $0, %cx +movw %cx, %ds +movw %di, (14) +movw %dx, (16) +movw %ax, %ds +pop %dx # (6) +push %dx +.byte 0x8f,0xc1 # (6) pop %cx (non-standard) +xchg %bx, %cx # (14) %bx=0xabcd, %cx=0xffff + +movw %ds, %ax +movw $0, %dx +movw %dx, %ds +movw %bx, (18) +movw %cx, (20) +movw %ax, %ds +movw %es, (%bx,%di) +movw $0xb800, %bx +movw $0xa0a1, %ax +xlat # (18) %al=0x8c +xchg %al, %ah # (17) +xlat # %ax=0x8cf1 +movw $0, %dx +movw %dx, %ds +movw %ax, (22) +movw $0xb7, %dx +outb %al, %dx # (20) +movb $0xff, %al +inb $0xb7, %al # (23) %ax=0x8cf1 +movw %ax, (24) +hlt + +.org 65520 +jmp start + +.org 65524 +.word 0x1234 +.word 0x5678 + +.org 65535 +.byte 0xff Index: trunk/tests/17_mul.s =================================================================== --- trunk/tests/17_mul.s (nonexistent) +++ trunk/tests/17_mul.s (revision 39) @@ -0,0 +1,219 @@ +.code16 +start: + +movw $192, %sp + +# mul word +movw $0x0003, %bx +movw $0x0007, %ax +movw $0xffff, %dx +mulw %bx + +movw %ax, (0) +movw %dx, (2) +pushf + +movw $0xa320, %dx +movw $0xffff, %ax +mulw %dx +movw %ax, (4) +movw %dx, (6) +pushf + +movw $0xffff, %ax +movw $0x1, (8) +mulw (8) +movw %ax, (10) +movw %dx, (12) +pushf + +movw $0xffff, %ax +movw $0xffff, (14) +mulw (14) +movw %ax, (16) +movw %dx, (18) +pushf + +movw $0x46db, %ax +movw $0x0000, %bp +mulw %bp +movw %bp, (20) +movw %ax, (22) +movw %dx, (24) +pushf + +movw $0x46db, %ax +movw $0xeeeb, %si +mulw %si +movw %si, (26) +movw %ax, (28) +movw %dx, (30) +pushf + +# mul byte +movb $0x14, %bl +movw $0xff07, %ax +movw $0xffff, %dx +mulb %bl + +movw %ax, (32) +movw %dx, (34) +pushf + +movb $0x24, %ch +movw $0x00ff, %ax +mulb %ch +movw %ax, (36) +movw %dx, (38) +pushf + +movw $0xff, %ax +movb $0x1, (40) +mulb (40) +movw %ax, (41) +movw %dx, (43) +pushf + +movw $0xffff, %ax +movb $0xff, (45) +mulb (45) +movw %ax, (46) +movw %dx, (46) +pushf + +movw $0xc5, %ax +movw $0x00, %dx +mulb %dl +movw %dx, (48) +movw %ax, (50) +pushf + +movb $0xb5, %al +movb $0xf9, %dh +mulb %dh +movw %si, (52) +movw %ax, (54) +movw %dx, (56) +pushf + +# imul word +movw $0x0003, %bx +movw $0x0007, %ax +movw $0xffff, %dx +imulw %bx + +movw %ax, (60) +movw %dx, (62) +pushf + +movw $0xa320, %dx +movw $0xffff, %ax +imulw %dx +movw %ax, (64) +movw %dx, (66) +pushf + +movw $0xffff, %ax +movw $0x1, (68) +imulw (68) +movw %ax, (70) +movw %dx, (72) +pushf + +movw $0xffff, %ax +movw $0xffff, (74) +imulw (74) +movw %ax, (76) +movw %dx, (78) +pushf + +movw $0x46db, %ax +movw $0x0000, %bp +imulw %bp +movw %bp, (80) +movw %ax, (82) +movw %dx, (84) +pushf + +movw $0x46db, %ax +movw $0xeeeb, %si +imulw %si +movw %si, (86) +movw %ax, (88) +movw %dx, (90) +pushf + +# imul byte +movb $0x14, %bl +movw $0xff07, %ax +movw $0xffff, %dx +imulb %bl + +movw %ax, (92) +movw %dx, (94) +pushf + +movb $0x24, %ch +movw $0x00ff, %ax +imulb %ch +movw %ax, (96) +movw %dx, (98) +pushf + +movw $0xff, %ax +movb $0x1, (100) +imulb (100) +movw %ax, (101) +movw %dx, (103) +pushf + +movw $0xffff, %ax +movb $0xff, (105) +imulb (105) +movw %ax, (106) +movw %dx, (106) +pushf + +movw $0xc5, %ax +movw $0x00, %dx +imulb %dl +movw %dx, (108) +movw %ax, (110) +pushf + +movb $0xb5, %al +movb $0xf9, %dh +imulb %dh +movw %si, (112) +movw %ax, (114) +movw %dx, (116) +pushf + +# aad tests +movw $0xff00, %ax +aad +movw %ax, (118) +pushf + +movw $0xffff, %ax +aad $0x12 +movw %ax, (120) +pushf + +movw $0x00ff, %ax +aad $0xff +movw %ax, (122) +pushf + +movw $0x532d, %ax +aad $0x39 +movw %ax, (124) +pushf + +hlt + +.org 65520 +jmp start + +.org 65535 +.byte 0xff Index: trunk/tests/10_bitwise.s =================================================================== --- trunk/tests/10_bitwise.s (nonexistent) +++ trunk/tests/10_bitwise.s (revision 39) @@ -0,0 +1,209 @@ +.code16 +start: + +# Some random stuff to start with +movw $0x7659, %ax +movw $0x4bb8, %bx +movw $0x3c84, %cx +movw $0x1b76, (0) +movw $0x240b, (2) + +movw $256, %sp + +# Word AND +andw %ax, %bx # (1) +pushf +movw %bx, (32) +andw (2), %cx # (2) +pushf +movw %cx, (34) +andw %cx, (0) # (3) +pushf +andw $0x4571, %ax # (4) +pushf +movw %ax, (36) +andw $0x27e9, %bx # (5) +pushf +movw %bx, (38) +andw $0x3549, (2) # (6) +pushf + +# Byte AND +andb %al, %ah # (7) +pushf +movb %ah, (40) +andb (1), %cl # (8) +pushf +movb %cl, (41) +andb %ch, (3) # (9) +pushf +andb $0x46, %al # (10) +pushf +movb %al, (42) +andb $0x2d, %bl # (11) +pushf +movb %bl, (43) +andb $0xc6, (2) # (12) +pushf + +movw $0x05e3, %ax +movw $0xf877, %bx +movw $0x4ae8, %cx +movw $0x3b69, %dx +movw $0x30c0, (4) +movw $0x5775, (6) +movw $0xfe66, (8) + +# Word OR +orw %ax, %bx # (13) +pushf +movw %bx, (44) +orw (4), %cx # (14) +pushf +movw %cx, (46) +orw %ax, (6) # (15) +pushf +orw $0x41c3, %ax # (16) +pushf +movw %ax, (48) +orw $0xb05d, %dx # (17) +pushf +movw %dx, (50) +orw $0x8d4c, (8) # (18) +pushf + +# Byte OR +orb %al, %ah # (19) +pushf +movb %ah, (52) +orb (5), %cl # (20) +pushf +movb %cl, (53) +orb %ch, (6) # (21) +pushf +orb $0x43, %al # (22) +pushf +movb %al, (54) +orb $0x57, %bl # (23) +pushf +movb %bl, (55) +orb $0x54, (7) # (24) +pushf + +movw $0xd0b4, %ax +movw $0x1bb8, %bx +movw $0x2b03, %cx +movw $0xc3e6, %dx +movw $0x3939, (10) +movw $0x864b, (12) +movw $0x8587, (14) + +# Word XOR +xorw %ax, %bx # (25) +pushf +movw %bx, (56) +xorw (10), %cx # (26) +pushf +movw %cx, (58) +xorw %ax, (12) # (27) +pushf +xorw $0x3d03, %ax # (28) +pushf +movw %ax, (60) +xorw $0x632d, %dx # (29) +pushf +movw %dx, (62) +xorw $0xcf07, (14) # (30) +pushf + +# Byte XOR +xorb %al, %ah # (31) +pushf +movb %ah, (64) +xorb (11), %cl # (32) +pushf +movb %cl, (65) +xorb %ch, (12) # (33) +pushf +xorb $0xb6, %al # (34) +pushf +movb %al, (66) +xorb $0xae, %bl # (35) +pushf +movb %bl, (67) +xorb $0xdf, (13) # (36) +pushf + +movw $0x4d37, %ax +movw $0xdbe1, %bx +movw $0x6549, %cx +movw $0x5cc4, %dx +movw $0xa8a8, (16) +movw $0x35f6, (18) +movw $0x4f00, (20) + +# Word TEST +testw %ax, %bx # (37) +pushf +movw %bx, (68) +testw (16), %cx # (38) +pushf +movw %cx, (70) +testw %ax, (18) # (39) +pushf +testw $0xdc6f, %ax # (40) +pushf +movw %ax, (72) +testw $0x3046, %dx # (41) +pushf +movw %dx, (74) +testw $0x96e4, (20) # (42) +pushf + +# Byte TEST +testb %al, %ah # (43) +pushf +movb %ah, (76) +testb (15), %cl # (44) +pushf +movb %cl, (77) +testb %ch, (16) # (45) +pushf +testb $0xc0, %al # (46) +pushf +movb %al, (78) +testb $0xe0, %bl # (47) +pushf +movb %bl, (79) +testb $0xbb, (17) # (48) +pushf + +movw $0xbfa5, %dx +movw $0x4be6, (22) +movw $0xe9d2, (24) + +movw $0x12b1, %ax +pushw %ax +popf + +# Word NOT +notw %dx # (49) +pushf +movw %dx, (80) +notw (22) # (50) +pushf + +# Byte NOT +notb %dl # (51) +pushf +movb %dl, (82) +notb (24) # (52) +pushf + +hlt + + +.org 65520 +jmp start +.org 65535 +.byte 0xff Index: trunk/tests/09_vdu.s =================================================================== --- trunk/tests/09_vdu.s (nonexistent) +++ trunk/tests/09_vdu.s (revision 39) @@ -0,0 +1,33 @@ +.code16 +start: +movw $0xb800, %dx +movw %dx, %ds +movw $0x20, %cx +movw $11, %bx + +b: +movw $0x4d03, (%bx) +addw $2, %bx +loop b + +movb $0x36, %al +outb %al, $0xb7 + +movw $0x0, %dx +movw %dx, %ds + +movw $0x1234, (2) +movb $0x56, (5) +movb $0x26, (6) +movw $0x4567, (9) + +movw (5), %ax +movw %ax, (0) + +hlt + +.org 65520 +jmp start + +.org 65535 +.byte 0xff Index: trunk/tests/01_jmpmov.s =================================================================== --- trunk/tests/01_jmpmov.s (nonexistent) +++ trunk/tests/01_jmpmov.s (revision 39) @@ -0,0 +1,72 @@ +# mov: 1 (word), 2 (word), 3 (off, base+index+off), 4, 5 (off), +# 7 (byte,word), 8 (byte off), 9 (word base), 10 (byte,word), +# 11 (word off, byte base+index), 12 (imm,special) +# jmp: 1, 2, 3 (reg), 3 (mem base+index+off), 4, 5 (mem base+index+off) +.code16 +start: +jmp b # (2) jmp +hlt + +.org 14 +b: +movw $0xf000, %bx # (10) mov word +movw %bx, %ds # (4) mov +movw (0xfff3), %ax # (2) mov word +jmp *%ax # (3) jmp reg +hlt + +.org 0x1290 +ljmp $0xe342, $0xebe0 # (4) jmp +hlt + +.org 0x2000 +movw $0x1000, %bx # (10) mov word +movw %bx, %ds # (4) mov + +movb $0xfb, %ah # (10) mov byte +movb $0xe1, %al # (10) mov byte +movw %ax, (0x2501) # (1) mov word + +movw $0x1001, (0x2600) # (11) mov word +movw (0x2600), %ss # (3) mov + +movw %ss, (0x2601) # (5) mov +movb (0x2601), %dl # (8) mov byte +movb $0x00, %dh # (10) mov byte +movw %dx, %di # (7) mov word + +movw $0x2506, %bp # (10) mov word + +jmp *-22(%bp,%di) # (3) jmp mem +hlt # m[0x12501] = 0xfbe1 + +.org 0x3001 +.byte 0xc7,0xc0 # (12) movw $0x4001, %ax +.word 0x4001 # [not in a default codification] +movw $0x2501, %bx +movw %ax, (%bx) # (9) mov word +movw $2, %di +movb $0x00, (%bx,%di) # (11) mov byte +movb $4, %ch +movb %ch, %cl # (7) mov byte +movb $0, %ch +movw %cx, %si +movb $0xf0, -1(%bx,%si) +movw $0x3, %si +ljmp *-24(%bp,%si) # (5) jmp mem +hlt + +.org 0x4001 +movw -3(%bx,%si), %ax +movw $0x0, %dx +movw %dx, %ds +movw %ax, (0) +hlt + +.org 65520 +jmp start # (1) jmp +.word 0x1290 + +.org 65534 +.word 0xffff + Index: trunk/tests/18_div1.s =================================================================== --- trunk/tests/18_div1.s (nonexistent) +++ trunk/tests/18_div1.s (revision 39) @@ -0,0 +1,13 @@ +.code16 +start: +movw $0xfffc, %ax +movw $0xffff, %dx +movw $0xfffd, %cx +idiv %cx +hlt + + +.org 65520 +jmp start +.org 65535 +.byte 0xff Index: trunk/tests/00_stub.s =================================================================== --- trunk/tests/00_stub.s (nonexistent) +++ trunk/tests/00_stub.s (revision 39) @@ -0,0 +1,13 @@ +.code16 +start: +movw $0xb800, %dx +movw $0x0105, %ax +outw %ax, %dx +hlt + + +.org 65520 +jmp start + +.org 65535 +.byte 0xff Index: trunk/tests/Makefile =================================================================== --- trunk/tests/Makefile (nonexistent) +++ trunk/tests/Makefile (revision 39) @@ -0,0 +1,65 @@ +#s3roms := $(patsubst %.s,%.s3rom,$(wildcard *.s)) +ml403roms := $(patsubst %.s,%.bin,$(wildcard *.s)) +rtlroms := $(patsubst %.s,%.rtlrom,$(wildcard *s)) + +all: $(ml403roms) + +# altera: ../../altera/zet/simulation/modelsim/bios0.dat ../../altera/zet/simulation/modelsim/bios1.dat + +# ../../altera/zet/simulation/modelsim/bios0.dat: bios0.out +# hexdump -v -e '1/1 "%02X"' -e '"\n"' bios0.out > ../../altera/zet/simulation/modelsim/bios0.dat + +#../../altera/zet/simulation/modelsim/bios1.dat: bios1.out +# hexdump -v -e '1/1 "%02X"' -e '"\n"' bios1.out > ../../altera/zet/simulation/modelsim/bios1.dat + +#../../sim/bios.dat: bios.out +# hexdump -v -e '1/1 "%02X"' -e '"\n"' bios.out > ../../sim/bios.dat +# hexdump -v -e '1/2 "0x1%04_ax/%04x"' -e '"\n"' bios.out | awk -F/ '{printf "00%x/%s\n", rshift(strtonum($$1),1), $$2}' > ../../impl/spartan3an-sk/sim/flash-prom/memory_file + +#$(BIOS): bios.out +# splitlh bios.out $(BIOS) + +%.s3rom: %.out + hexdump -v -e '1/2 "0x1%04_ax/%04x"' -e '"\n"' $< | awk -F/ '{printf "00%x/%s\n", rshift(strtonum($$1),1), $$2}' > ../../impl/spartan3an-sk/sim/flash-prom/$@ + +%.mcs: %.out + echo :020000040001F9 > $@ + hexdump -v -e '":20%04_ax00"' -e '32/1 "%02x"' -e '"00"' -e '"\n"' $< | tr a-z A-Z >> $@ + echo :00000001FF >> $@ + +#%.ml403: %.fout hd.img.rtl +# paste -d\\ hd.img.rtl $< >../../impl/virtex4-ml403ep/sim/$@ + +%.ml403: %.rom + hexdump -v -e '4/1 "%02X"' -e '"\n"' $< > ../../impl/virtex4-ml403ep/sim/$@ + +%.fout: %.out hd.img.rtl + for i in $$(seq 32768); do echo FFFF; done >$@ + hexdump -v -e '1/2 "%04X"' -e '"\n"' $< >>$@ + for i in $$(seq $$(( $$(wc -l hd.img.rtl | cut -f1 -d\ )-65536))); do echo FFFF; done >$@ +%.rtlrom: %.out + hexdump -v -e '1/2 "%04X"' -e '"\n"' $< > ../../sim/$@ + +%.rtlold: %.out + hexdump -v -e '1/1 "%02X"' -e '"\n"' $< > ../../sim/$@ + +%.rom: %.rom16 + out2rom-ml403 ff.out $< > $@ + +%.rom16: %.out ff.out + cat ff.out $< > $@ + +%.bin: %.rom + cat count.rom $< > $@ + +%.out: %.o + objcopy -O binary -S $< $@ + +%.o: %.s + as $< -o $@ + +hd.img.rtl: hd.img + hexdump -v -e '1/2 "%04X"' -e '"\n"' $< >$@ + +clean: + rm -f *.o *.out *.bin *.mcs ../../impl/spartan3an-sk/sim/flash-prom/*.s3rom ../../sim/*.rtlrom Index: trunk/soc/bios/biossums.c =================================================================== --- trunk/soc/bios/biossums.c (revision 38) +++ trunk/soc/bios/biossums.c (revision 39) @@ -1,5 +1,5 @@ /* - * $Id: biossums.c,v 1.2 2008-10-13 00:24:30 zeus Exp $ + * $Id: biossums.c,v 1.3 2008-11-14 03:31:19 zeus Exp $ * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public Index: trunk/soc/bios/makesym.perl =================================================================== --- trunk/soc/bios/makesym.perl (revision 38) +++ trunk/soc/bios/makesym.perl (revision 39) @@ -1,6 +1,6 @@ #!/usr/bin/perl # -# $Id: makesym.perl,v 1.2 2008-10-13 00:24:30 zeus Exp $ +# $Id: makesym.perl,v 1.3 2008-11-14 03:31:19 zeus Exp $ # # Read output file from as86 (e.g. rombios.txt) and write out a symbol # table suitable for the Bochs debugger. Index: trunk/soc/bios/rombios.c =================================================================== --- trunk/soc/bios/rombios.c (revision 38) +++ trunk/soc/bios/rombios.c (revision 39) @@ -429,10 +429,9 @@ Bit32u reserved; } ipl_entry_t; +static Bit16u inw(); +static void outw(); - -static Bit8u inb_cmos(); - static Bit8u read_byte(); static Bit16u read_word(); static void write_byte(); @@ -439,29 +438,85 @@ static void write_word(); static void bios_printf(); +static void int13_harddisk(); +static void int13_diskette_function(); static void int19_function(); static Bit16u get_CS(); static Bit16u get_SS(); +static void set_diskette_ret_status(); +static void set_diskette_current_cyl(); static void print_bios_banner(); static void print_boot_device(); +static void print_boot_failure(); - Bit8u -inb_cmos(cmos_reg) - Bit8u cmos_reg; +#define SET_AL(val8) AX = ((AX & 0xff00) | (val8)) +#define SET_BL(val8) BX = ((BX & 0xff00) | (val8)) +#define SET_CL(val8) CX = ((CX & 0xff00) | (val8)) +#define SET_DL(val8) DX = ((DX & 0xff00) | (val8)) +#define SET_AH(val8) AX = ((AX & 0x00ff) | ((val8) << 8)) +#define SET_BH(val8) BX = ((BX & 0x00ff) | ((val8) << 8)) +#define SET_CH(val8) CX = ((CX & 0x00ff) | ((val8) << 8)) +#define SET_DH(val8) DX = ((DX & 0x00ff) | ((val8) << 8)) + +#define GET_AL() ( AX & 0x00ff ) +#define GET_BL() ( BX & 0x00ff ) +#define GET_CL() ( CX & 0x00ff ) +#define GET_DL() ( DX & 0x00ff ) +#define GET_AH() ( AX >> 8 ) +#define GET_BH() ( BX >> 8 ) +#define GET_CH() ( CX >> 8 ) +#define GET_DH() ( DX >> 8 ) + +#define GET_ELDL() ( ELDX & 0x00ff ) +#define GET_ELDH() ( ELDX >> 8 ) + +#define SET_CF() FLAGS |= 0x0001 +#define CLEAR_CF() FLAGS &= 0xfffe +#define GET_CF() (FLAGS & 0x0001) + +#define SET_ZF() FLAGS |= 0x0040 +#define CLEAR_ZF() FLAGS &= 0xffbf +#define GET_ZF() (FLAGS & 0x0040) + + Bit16u +inw(port) + Bit16u port; { ASM_START push bp mov bp, sp - mov al, 4[bp] ;; cmos_reg - out 0x70, al - in al, 0x71 + push dx + mov dx, 4[bp] + in ax, dx + pop dx pop bp ASM_END } + void +outw(port, val) + Bit16u port; + Bit16u val; +{ +ASM_START + push bp + mov bp, sp + + push ax + push dx + mov dx, 4[bp] + mov ax, 6[bp] + out dx, ax + pop dx + pop ax + + pop bp +ASM_END +} + Bit8u read_byte(seg, offset) Bit16u seg; @@ -792,7 +847,7 @@ } } -static char bios_svn_version_string[] = "$Revision: 1.4 $ $Date: 2008-10-20 00:48:29 $"; +static char bios_svn_version_string[] = "$Revision: 1.5 $ $Date: 2008-11-14 03:31:19 $"; //-------------------------------------------------------------------------- // print_bios_banner @@ -820,7 +875,7 @@ // http://www.phoenix.com/en/Customer+Services/White+Papers-Specs/pc+industry+specifications.htm //-------------------------------------------------------------------------- -static char drivetypes[][10]={"", "Floppy","Hard Disk","CD-Rom", "Network"}; +static char drivetypes[][20]={"", "Floppy flash image" }; static void init_boot_vectors() @@ -835,9 +890,10 @@ /* User selected device not set */ write_word(IPL_SEG, IPL_BOOTFIRST_OFFSET, 0xFFFF); - /* - * Zet: We don't have support for floppy, hdd or cdrom - */ + /* Floppy drive */ + e.type = IPL_TYPE_FLOPPY; e.flags = 0; e.vector = 0; e.description = 0; e.reserved = 0; + memcpyb(IPL_SEG, IPL_TABLE_OFFSET + count * sizeof (e), ss, &e, sizeof (e)); + count++; /* Remember how many devices we have */ write_word(IPL_SEG, IPL_COUNT_OFFSET, count); @@ -884,9 +940,185 @@ description[32] = 0; printf(" [%S]", ss, description); } - printf("...\n"); + printf("...\n\n"); } +//-------------------------------------------------------------------------- +// print_boot_failure +// displays the reason why boot failed +//-------------------------------------------------------------------------- + void +print_boot_failure(type, reason) + Bit16u type; Bit8u reason; +{ + if (type == 0 || type > 0x3) BX_PANIC("Bad drive type\n"); + + printf("Boot failed"); + if (type < 4) { + /* Report the reason too */ + if (reason==0) + printf(": not a bootable disk"); + else + printf(": could not read the boot disk"); + } + printf("\n\n"); +} + + +#define SET_DISK_RET_STATUS(status) write_byte(0x0040, 0x0074, status) + + void +int13_harddisk(DS, ES, DI, SI, BP, ELDX, BX, DX, CX, AX, IP, CS, FLAGS) + Bit16u DS, ES, DI, SI, BP, ELDX, BX, DX, CX, AX, IP, CS, FLAGS; +{ + write_byte(0x0040, 0x008e, 0); // clear completion flag + + switch (GET_AH()) { + case 0x08: + SET_AL(0); + SET_CH(0); + SET_CL(0); + SET_DH(0); + SET_DL(0); /* FIXME returns 0, 1, or n hard drives */ + + // FIXME should set ES & DI + + goto int13_fail; + break; + + default: + BX_INFO("int13_harddisk: function %02xh unsupported, returns fail\n", GET_AH()); + goto int13_fail; + break; + } + +int13_fail: + SET_AH(0x01); // defaults to invalid function in AH or invalid parameter +int13_fail_noah: + SET_DISK_RET_STATUS(GET_AH()); +int13_fail_nostatus: + SET_CF(); // error occurred + return; + +int13_success: + SET_AH(0x00); // no error +int13_success_noah: + SET_DISK_RET_STATUS(0x00); + CLEAR_CF(); // no error + return; +} + + void +int13_diskette_function(DS, ES, DI, SI, BP, ELDX, BX, DX, CX, AX, IP, CS, FLAGS) + Bit16u DS, ES, DI, SI, BP, ELDX, BX, DX, CX, AX, IP, CS, FLAGS; +{ + Bit8u drive, num_sectors, track, sector, head, status; + Bit16u base_address, base_count, base_es; + Bit8u page, mode_register, val8, dor; + Bit8u return_status[7]; + Bit8u drive_type, num_floppies, ah; + Bit16u es, last_addr; + Bit16u log_sector, tmp, i, j; + + ah = GET_AH(); + + switch ( ah ) { + case 0x00: // diskette controller reset + SET_AH(0); + set_diskette_ret_status(0); + CLEAR_CF(); // successful + set_diskette_current_cyl(drive, 0); // current cylinder + return; + + case 0x02: // Read Diskette Sectors + num_sectors = GET_AL(); + track = GET_CH(); + sector = GET_CL(); + head = GET_DH(); + drive = GET_ELDL(); + + if ((drive > 1) || (head > 1) || (sector == 0) || + (num_sectors == 0) || (num_sectors > 72)) { + BX_INFO("int13_diskette: read/write/verify: parameter out of range\n"); + SET_AH(1); + set_diskette_ret_status(1); + SET_AL(0); // no sectors read + SET_CF(); // error occurred + return; + } + + page = (ES >> 12); // upper 4 bits + base_es = (ES << 4); // lower 16bits contributed by ES + base_address = base_es + BX; // lower 16 bits of address + // contributed by ES:BX + if ( base_address < base_es ) { + // in case of carry, adjust page by 1 + page++; + } + base_count = (num_sectors * 512) - 1; + + // check for 64K boundary overrun + last_addr = base_address + base_count; + if (last_addr < base_address) { + SET_AH(0x09); + set_diskette_ret_status(0x09); + SET_AL(0); // no sectors read + SET_CF(); // error occurred + return; + } + + log_sector = track * 36 + head * 18 + sector - 1; + last_addr = page << 12; + + // Configure the sector address + for (j=0; j=0x41) && (ah<=0x49)) || (ah==0x4e) ) { + SET_AH(0x01); // ??? + set_diskette_ret_status(1); + SET_CF(); + return; + // } + } +} + + void +set_diskette_ret_status(value) + Bit8u value; +{ + write_byte(0x0040, 0x0041, value); +} + + void +set_diskette_current_cyl(drive, cyl) + Bit8u drive; + Bit8u cyl; +{ +/* TEMP HACK: FOR MSDOS */ + if (drive > 1) + drive = 1; + /* BX_PANIC("set_diskette_current_cyl(): drive > 1\n"); */ + write_byte(0x0040, 0x0094+drive, cyl); +} + void int19_function(seq_nr) Bit16u seq_nr; @@ -916,10 +1148,15 @@ // else : boot failure // Get the boot sequence +/* + * Zet: we don't have a CMOS device + * bootdev = inb_cmos(0x3d); bootdev |= ((inb_cmos(0x38) & 0xf0) << 4); bootdev >>= 4 * seq_nr; bootdev &= 0xf; +*/ + bootdev = 0x1; /* Read user selected device */ bootfirst = read_word(IPL_SEG, IPL_BOOTFIRST_OFFSET); @@ -945,11 +1182,53 @@ print_boot_device(&e); switch(e.type) { - case IPL_TYPE_BEV: /* Expansion ROM with a Bootstrap Entry Vector (a far pointer) */ - bootseg = e.vector >> 16; - bootip = e.vector & 0xffff; - break; + case IPL_TYPE_FLOPPY: /* FDD */ + case IPL_TYPE_HARDDISK: /* HDD */ + bootdrv = (e.type == IPL_TYPE_HARDDISK) ? 0x80 : 0x00; + bootseg = 0x07c0; + status = 0; + +ASM_START + push bp + mov bp, sp + push ax + push bx + push cx + push dx + + mov dl, _int19_function.bootdrv + 2[bp] + mov ax, _int19_function.bootseg + 2[bp] + mov es, ax ;; segment + xor bx, bx ;; offset + mov ah, #0x02 ;; function 2, read diskette sector + mov al, #0x01 ;; read 1 sector + mov ch, #0x00 ;; track 0 + mov cl, #0x01 ;; sector 1 + mov dh, #0x00 ;; head 0 + int #0x13 ;; read sector + jnc int19_load_done + mov ax, #0x0001 + mov _int19_function.status + 2[bp], ax + +int19_load_done: + pop dx + pop cx + pop bx + pop ax + pop bp +ASM_END + + if (status != 0) { + print_boot_failure(e.type, 1); + return; + } + + /* Canonicalize bootseg:bootip */ + bootip = (bootseg & 0x0fff) << 4; + bootseg &= 0xf000; + break; + default: return; } @@ -980,6 +1259,71 @@ } ASM_START +;---------------------- +;- INT13h (relocated) - +;---------------------- +; +; int13_relocated is a little bit messed up since I played with it +; I have to rewrite it: +; - call a function that detect which function to call +; - make all called C function get the same parameters list +; +int13_relocated: + push ax + push cx + push dx + push bx + +int13_legacy: + + push dx ;; push eltorito value of dx instead of sp + + push bp + push si + push di + + push es + push ds + push ss + pop ds + + ;; now the 16-bit registers can be restored with: + ;; pop ds; pop es; popa; iret + ;; arguments passed to functions should be + ;; DS, ES, DI, SI, BP, ELDX, BX, DX, CX, AX, IP, CS, FLAGS + + test dl, #0x80 + jnz int13_notfloppy + + mov ax, #int13_out + push ax + jmp _int13_diskette_function + +int13_notfloppy: + +int13_disk: + ;; int13_harddisk modifies high word of EAX +; shr eax, #16 +; push ax + call _int13_harddisk +; pop ax +; shl eax, #16 + +int13_out: + pop ds + pop es + ; popa ; we do this instead: + pop di + pop si + pop bp + add sp, #2 + pop bx + pop dx + pop cx + pop ax + + iret + ;---------- ;- INT18h - ;---------- @@ -1037,6 +1381,13 @@ ;; Boot failed: invoke the boot recovery function int #0x18 +;---------- +;- INT1Ch - +;---------- +int1c_handler: ;; User Timer Tick + iret + + ;-------------------- ;- POST: EBDA segment ;-------------------- @@ -1260,9 +1611,21 @@ ;; Bootstrap Loader vector SET_INT_VECTOR(0x19, #0xF000, #int19_handler) + ;; User Timer Tick vector + SET_INT_VECTOR(0x1c, #0xF000, #int1c_handler) + + ;; Memory Size Check vector + SET_INT_VECTOR(0x12, #0xF000, #int12_handler) + + ;; Equipment Configuration Check vector + SET_INT_VECTOR(0x11, #0xF000, #int11_handler) + ;; EBDA setup call ebda_post + ;; Keyboard + SET_INT_VECTOR(0x16, #0xF000, #int16_handler) + ;; Video setup SET_INT_VECTOR(0x10, #0xF000, #int10_handler) @@ -1273,6 +1636,9 @@ call _print_bios_banner + ;; Floppy setup + SET_INT_VECTOR(0x13, #0xF000, #int13_handler) + call _init_boot_vectors mov cx, #0xc800 ;; init option roms @@ -1282,6 +1648,16 @@ sti ;; enable interrupts int #0x19 +;------------------------------------------- +;- INT 13h Fixed Disk Services Entry Point - +;------------------------------------------- +.org 0xe3fe ; INT 13h Fixed Disk Services Entry Point +int13_handler: + //JMPL(int13_relocated) + jmp int13_relocated + +.org 0xe401 ; Fixed Disk Parameter Table + ;---------- ;- INT19h - ;---------- @@ -1290,6 +1666,27 @@ jmp int19_relocated +;---------------------------------------- +;- INT 16h Keyboard Service Entry Point - +;---------------------------------------- +.org 0xe82e +int16_handler: + cmp ah, #0x01 + je int16_01 + cmp ah, #0x02 + je int16_02 + iret +int16_02: + mov al, #0x0 + iret +int16_01: + push bp + mov bp, sp + //SEG SS + or BYTE [bp + 0x06], #0x40 + pop bp + iret + .org 0xf045 ; INT 10 Functions 0-Fh Entry Point ;; HALT(__LINE__) iret @@ -1304,6 +1701,31 @@ .org 0xf0a4 ; MDA/CGA Video Parameter Table (INT 1Dh) +;---------- +;- INT12h - +;---------- +.org 0xf841 ; INT 12h Memory Size Service Entry Point +; ??? different for Pentium (machine check)? +int12_handler: + push ds + mov ax, #0x0040 + mov ds, ax + mov ax, 0x0013 + pop ds + iret + +;---------- +;- INT11h - +;---------- +.org 0xf84d ; INT 11h Equipment List Service Entry Point +int11_handler: + push ds + mov ax, #0x0040 + mov ds, ax + mov ax, 0x0010 + pop ds + iret + ;------------------------------------------------ ;- IRET Instruction for Dummy Interrupt Handler - ;------------------------------------------------ @@ -1312,6 +1734,7 @@ iret .org 0xfff0 ; Power-up Entry Point +; hlt jmp 0xf000:post .org 0xfff5 ; ASCII Date ROM was built - 8 characters in MM/DD/YY
/trunk/soc/bios/vgabios.c
12,6 → 12,9
 
static Bit16u get_SS();
 
// Output
static void printf();
 
static Bit8u find_vga_entry();
 
static void memsetb();
24,6 → 27,7
static void biosfn_get_cursor_pos();
static void biosfn_scroll();
static void biosfn_write_teletype();
static void biosfn_load_text_8_16_pat();
static void biosfn_write_string();
extern Bit8u video_save_pointer_table[];
 
60,7 → 64,7
 
 
vgabios_entry_point:
 
jmp vgabios_init_func
 
vgabios_name:
110,8 → 114,8
.byte 0x0a,0x0d
.byte 0x0a,0x0d
.byte 0x00
 
 
;; ========================================================
;;
;; Init Entry point
119,6 → 123,9
;; ========================================================
vgabios_init_func:
 
;; init vga card
call init_vga_card
 
;; init basic bios vars
call init_bios_area
 
144,6 → 151,11
ASM_START
vgabios_int10_handler:
pushf
int10_test_1103:
cmp ax, #0x1103
jne int10_normal
call biosfn_set_text_block_specifier
jmp int10_end
 
int10_normal:
push es
186,12 → 198,47
ASM_END
 
#include "vgatables.h"
#include "vgafonts.h"
 
// --------------------------------------------------------
/*
* Boot time bios area inits
* Boot time harware inits
*/
ASM_START
init_vga_card:
;; switch to color mode and enable CPU access 480 lines
mov dx, #0x3C2
mov al, #0xC3
outb dx,al
 
;; more than 64k 3C4/04
mov dx, #0x3C4
mov al, #0x04
outb dx,al
mov dx, #0x3C5
mov al, #0x02
outb dx,al
 
#if defined(USE_BX_INFO) || defined(DEBUG)
mov bx, #msg_vga_init
push bx
call _printf
#endif
; inc sp
; inc sp
ret
 
#if defined(USE_BX_INFO) || defined(DEBUG)
msg_vga_init:
.ascii "VGABios $Id: vgabios.c,v 1.3 2008-11-14 03:31:19 zeus Exp $"
.byte 0x0d,0x0a,0x00
#endif
ASM_END
 
// --------------------------------------------------------------------------------------------
/*
* Boot time bios area inits
*/
ASM_START
init_bios_area:
push ds
mov ax, # BIOSMEM_SEG
212,7 → 259,7
mov al, #0x10
mov [bx], al
 
;; Clear the screen
;; Clear the screen
mov bx, # BIOSMEM_VIDEO_CTL
mov al, #0x60
mov [bx], al
259,14 → 306,12
 
ASM_END
 
// --------------------------------------------------------
// --------------------------------------------------------------------------------------------
/*
* Boot time Splash screen
*/
static void display_splash_screen()
{
write_byte (0xb800, 0x0, 'H');
// write_byte (0xb800, 0x2, 'o');
}
 
// --------------------------------------------------------------------------------------------
307,7 → 352,7
not cx
xor al,al
cld
repne
repne
scasb
not cx
dec cx
365,6 → 410,15
// We do output only on the current page !
biosfn_write_teletype(GET_AL(),0xff,GET_BL(),NO_ATTR);
break;
case 0x11:
switch(GET_AL())
{
case 0x04:
case 0x14:
biosfn_load_text_8_16_pat(GET_AL(),GET_BL());
break;
}
break;
case 0x13:
biosfn_write_string(GET_AL(),GET_BH(),GET_BL(),CX,GET_DH(),GET_DL(),ES,BP);
break;
372,12 → 426,12
}
 
// ============================================================================================
//
//
// BIOS functions
//
//
// ============================================================================================
 
static void biosfn_set_video_mode(mode) Bit8u mode;
static void biosfn_set_video_mode(mode) Bit8u mode;
{// mode: Bit 7 is 1 if no clear screen
 
// Should we clear the screen ?
400,7 → 454,7
twidth=video_param_table[vpti].twidth;
theightm1=video_param_table[vpti].theightm1;
cheight=video_param_table[vpti].cheight;
 
// Read the bios vga control
video_ctl=read_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL);
 
410,9 → 464,113
// Read the bios mode set control
modeset_ctl=read_byte(BIOSMEM_SEG,BIOSMEM_MODESET_CTL);
 
// Set CRTC address VGA or MDA
// Then we know the number of lines
// FIXME
 
// if palette loading (bit 3 of modeset ctl = 0)
if((modeset_ctl&0x08)==0)
{// Set the PEL mask
outb(VGAREG_PEL_MASK,vga_modes[line].pelmask);
 
// Set the whole dac always, from 0
outb(VGAREG_DAC_WRITE_ADDRESS,0x00);
 
// From which palette
switch(vga_modes[line].dacmodel)
{case 0:
palette=&palette0;
break;
case 1:
palette=&palette1;
break;
case 2:
palette=&palette2;
break;
case 3:
palette=&palette3;
break;
}
// Always 256*3 values
for(i=0;i<0x0100;i++)
{if(i<=dac_regs[vga_modes[line].dacmodel])
{outb(VGAREG_DAC_DATA,palette[(i*3)+0]);
outb(VGAREG_DAC_DATA,palette[(i*3)+1]);
outb(VGAREG_DAC_DATA,palette[(i*3)+2]);
}
else
{outb(VGAREG_DAC_DATA,0);
outb(VGAREG_DAC_DATA,0);
outb(VGAREG_DAC_DATA,0);
}
}
}
 
// Reset Attribute Ctl flip-flop
inb(VGAREG_ACTL_RESET);
 
// Set Attribute Ctl
for(i=0;i<=0x13;i++)
{outb(VGAREG_ACTL_ADDRESS,i);
outb(VGAREG_ACTL_WRITE_DATA,video_param_table[vpti].actl_regs[i]);
}
outb(VGAREG_ACTL_ADDRESS,0x14);
outb(VGAREG_ACTL_WRITE_DATA,0x00);
 
// Set Sequencer Ctl
outb(VGAREG_SEQU_ADDRESS,0);
outb(VGAREG_SEQU_DATA,0x03);
for(i=1;i<=4;i++)
{outb(VGAREG_SEQU_ADDRESS,i);
outb(VGAREG_SEQU_DATA,video_param_table[vpti].sequ_regs[i - 1]);
}
 
// Set Grafx Ctl
for(i=0;i<=8;i++)
{outb(VGAREG_GRDC_ADDRESS,i);
outb(VGAREG_GRDC_DATA,video_param_table[vpti].grdc_regs[i]);
}
 
// Set CRTC address VGA or MDA
crtc_addr=vga_modes[line].memmodel==MTEXT?VGAREG_MDA_CRTC_ADDRESS:VGAREG_VGA_CRTC_ADDRESS;
 
// Disable CRTC write protection
outw(crtc_addr,0x0011);
// Set CRTC regs
for(i=0;i<=0x18;i++)
{outb(crtc_addr,i);
outb(crtc_addr+1,video_param_table[vpti].crtc_regs[i]);
}
 
// Set the misc register
outb(VGAREG_WRITE_MISC_OUTPUT,video_param_table[vpti].miscreg);
 
// Enable video
outb(VGAREG_ACTL_ADDRESS,0x20);
inb(VGAREG_ACTL_RESET);
 
if(noclearmem==0x00)
{
if(vga_modes[line].class==TEXT)
{
memsetw(vga_modes[line].sstart,0,0x0720,0x4000); // 32k
}
else
{
if(mode<0x0d)
{
memsetw(vga_modes[line].sstart,0,0x0000,0x4000); // 32k
}
else
{
outb( VGAREG_SEQU_ADDRESS, 0x02 );
mmask = inb( VGAREG_SEQU_DATA );
outb( VGAREG_SEQU_DATA, 0x0f ); // all planes
memsetw(vga_modes[line].sstart,0,0x0000,0x8000); // 64k
outb( VGAREG_SEQU_DATA, mmask );
}
}
}
 
// Set the BIOS mem
write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE,mode);
write_word(BIOSMEM_SEG,BIOSMEM_NB_COLS,twidth);
432,11 → 590,24
// FIXME
write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MSR,0x00); // Unavailable on vanilla vga, but...
write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_PAL,0x00); // Unavailable on vanilla vga, but...
 
// Write the fonts in memory
if(vga_modes[line].class==TEXT)
{
ASM_START
;; copy and activate 8x16 font
mov ax, #0x1104
mov bl, #0x00
int #0x10
mov ax, #0x1103
mov bl, #0x00
int #0x10
ASM_END
}
}
 
// --------------------------------------------------------------------------------------------
static void biosfn_set_cursor_pos (page, cursor)
static void biosfn_set_cursor_pos (page, cursor)
Bit8u page;Bit16u cursor;
{
Bit8u xcurs,ycurs,current;
457,10 → 628,10
nbrows=read_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS)+1;
 
xcurs=cursor&0x00ff;ycurs=(cursor&0xff00)>>8;
 
// Calculate the address knowing nbcols nbrows and page num
address=SCREEN_IO_START(nbcols,nbrows,page)+xcurs+ycurs*nbcols;
 
// CRTC regs 0x0e and 0x0f
crtc_addr=read_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS);
outb(crtc_addr,0x0e);
467,11 → 638,12
outb(crtc_addr+1,(address&0xff00)>>8);
outb(crtc_addr,0x0f);
outb(crtc_addr+1,address&0x00ff);
outw(0xb800,cursor);
}
}
 
// --------------------------------------------------------------------------------------------
static void biosfn_get_cursor_pos (page,shape, pos)
static void biosfn_get_cursor_pos (page,shape, pos)
Bit8u page;Bit16u *shape;Bit16u *pos;
{
Bit16u ss=get_SS();
555,7 → 727,7
}
 
// --------------------------------------------------------------------------------------------
static void biosfn_write_teletype (car, page, attr, flag)
static void biosfn_write_teletype (car, page, attr, flag)
Bit8u car;Bit8u page;Bit8u attr;Bit8u flag;
{// flag = WITH_ATTR / NO_ATTR
 
611,10 → 783,10
 
if(vga_modes[line].class==TEXT)
{
// Compute the address
// Compute the address
address=SCREEN_MEM_START(nbcols,nbrows,page)+(xcurs+ycurs*nbcols)*2;
 
// Write the char
// Write the char
write_byte(vga_modes[line].sstart,address,car);
 
if(flag==WITH_ATTR)
638,7 → 810,7
}
ycurs-=1;
}
 
// Set the cursor for the page
cursor=ycurs; cursor<<=8; cursor+=xcurs;
biosfn_set_cursor_pos(page,cursor);
645,7 → 817,134
}
 
// --------------------------------------------------------------------------------------------
static void biosfn_write_string (flag,page,attr,count,row,col,seg,offset)
static void get_font_access()
{
ASM_START
mov dx, # VGAREG_SEQU_ADDRESS
mov ax, #0x0100
out dx, ax
mov ax, #0x0402
out dx, ax
mov ax, #0x0704
out dx, ax
mov ax, #0x0300
out dx, ax
mov dx, # VGAREG_GRDC_ADDRESS
mov ax, #0x0204
out dx, ax
mov ax, #0x0005
out dx, ax
mov ax, #0x0406
out dx, ax
ASM_END
}
 
static void release_font_access()
{
ASM_START
mov dx, # VGAREG_SEQU_ADDRESS
mov ax, #0x0100
out dx, ax
mov ax, #0x0302
out dx, ax
mov ax, #0x0304
out dx, ax
mov ax, #0x0300
out dx, ax
mov dx, # VGAREG_READ_MISC_OUTPUT
in al, dx
and al, #0x01
push cx
mov cl,*2
shl al,cl
pop cx
or al, #0x0a
mov ah, al
mov al, #0x06
mov dx, # VGAREG_GRDC_ADDRESS
out dx, ax
mov ax, #0x0004
out dx, ax
mov ax, #0x1005
out dx, ax
ASM_END
}
 
ASM_START
idiv_u:
xor dx,dx
div bx
ret
ASM_END
 
static void set_scan_lines(lines) Bit8u lines;
{
Bit16u crtc_addr,cols,page,vde;
Bit8u crtc_r9,ovl,rows;
 
crtc_addr = read_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS);
outb(crtc_addr, 0x09);
crtc_r9 = inb(crtc_addr+1);
crtc_r9 = (crtc_r9 & 0xe0) | (lines - 1);
outb(crtc_addr+1, crtc_r9);
/*
if(lines==8)
{
biosfn_set_cursor_shape(0x06,0x07);
}
else
{
biosfn_set_cursor_shape(lines-4,lines-3);
}
*/
write_word(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT, lines);
outb(crtc_addr, 0x12);
vde = inb(crtc_addr+1);
outb(crtc_addr, 0x07);
ovl = inb(crtc_addr+1);
vde += (((ovl & 0x02) << 7) + ((ovl & 0x40) << 3) + 1);
rows = vde / lines;
write_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS, rows-1);
cols = read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS);
write_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE, rows * cols * 2);
}
 
// --------------------------------------------------------------------------------------------
ASM_START
biosfn_set_text_block_specifier:
push ax
push dx
mov dx, # VGAREG_SEQU_ADDRESS
mov ah, bl
mov al, #0x03
out dx, ax
pop dx
pop ax
ret
ASM_END
 
// --------------------------------------------------------------------------------------------
static void biosfn_load_text_8_16_pat (AL,BL) Bit8u AL;Bit8u BL;
{
Bit16u blockaddr,dest,i,src;
 
get_font_access();
blockaddr = ((BL & 0x03) << 14) + ((BL & 0x04) << 11);
for(i=0;i<0x100;i++)
{
src = i * 16;
dest = blockaddr + i * 32;
memcpyb(0xA000, dest, 0xC000, vgafont16+src, 16);
}
release_font_access();
if(AL>=0x10)
{
set_scan_lines(16);
}
}
 
// --------------------------------------------------------------------------------------------
static void biosfn_write_string (flag,page,attr,count,row,col,seg,offset)
Bit8u flag;Bit8u page;Bit8u attr;Bit16u count;Bit8u row;Bit8u col;Bit16u seg;Bit16u offset;
{
Bit16u newcurs,oldcurs,dummy;
662,7 → 961,7
 
newcurs=row; newcurs<<=8; newcurs+=col;
biosfn_set_cursor_pos(page,newcurs);
 
while(count--!=0)
{
car=read_byte(seg,offset++);
671,8 → 970,8
 
biosfn_write_teletype(car,page,attr,WITH_ATTR);
}
// Set back curs pos
 
// Set back curs pos
if((flag&0x01)==0)
biosfn_set_cursor_pos(page,oldcurs);
}
682,9 → 981,9
// Video Utils
//
// ============================================================================================
 
// --------------------------------------------------------------------------------------------
static Bit8u find_vga_entry(mode)
static Bit8u find_vga_entry(mode)
Bit8u mode;
{
Bit8u i,line=0xFF;
735,6 → 1034,52
}
 
// --------------------------------------------------------------------------------------------
static void memcpyb(dseg,doffset,sseg,soffset,count)
Bit16u dseg;
Bit16u doffset;
Bit16u sseg;
Bit16u soffset;
Bit16u count;
{
ASM_START
push bp
mov bp, sp
 
push ax
push cx
push es
push di
push ds
push si
 
mov cx, 12[bp] ; count
cmp cx, #0x0000
je memcpyb_end
mov ax, 4[bp] ; dsegment
mov es, ax
mov ax, 6[bp] ; doffset
mov di, ax
mov ax, 8[bp] ; ssegment
mov ds, ax
mov ax, 10[bp] ; soffset
mov si, ax
cld
rep
movsb
 
memcpyb_end:
pop si
pop ds
pop di
pop es
pop cx
pop ax
 
pop bp
ASM_END
}
 
// --------------------------------------------------------------------------------------------
static void memcpyw(dseg,doffset,sseg,soffset,count)
Bit16u dseg;
Bit16u doffset;
968,9 → 1313,61
ASM_END
}
 
void printf(s)
Bit8u *s;
{
Bit8u c, format_char;
Boolean in_format;
unsigned format_width, i;
Bit16u *arg_ptr;
Bit16u arg_seg, arg, digit, nibble, shift_count;
 
arg_ptr = &s;
arg_seg = get_SS();
 
in_format = 0;
format_width = 0;
 
while (c = read_byte(0xc000, s)) {
if ( c == '%' ) {
in_format = 1;
format_width = 0;
}
else if (in_format) {
if ( (c>='0') && (c<='9') ) {
format_width = (format_width * 10) + (c - '0');
}
else if (c == 'x') {
arg_ptr++; // increment to next arg
arg = read_word(arg_seg, arg_ptr);
if (format_width == 0)
format_width = 4;
i = 0;
digit = format_width - 1;
for (i=0; i<format_width; i++) {
nibble = (arg >> (4 * digit)) & 0x000f;
if (nibble <= 9)
outb(0x0500, nibble + '0');
else
outb(0x0500, (nibble - 10) + 'A');
digit--;
}
in_format = 0;
}
//else if (c == 'd') {
// in_format = 0;
// }
}
else {
outb(0x0500, c);
}
s ++;
}
}
 
// --------------------------------------------------------------------------------------------
 
ASM_START
ASM_START
;; DATA_SEG_DEFS_HERE
ASM_END
 
/trunk/soc/bios/Makefile
37,19 → 37,31
VGABIOS_DATE = "-DVGABIOS_DATE=\"$(RELDATE)\""
 
 
all: run
all: bios.rom
 
bios.bin: vgabios.rom ff.rom zet-bios.rom
cat vgabios.rom ff.rom zet-bios.rom > $@
ff.out: ../../bin/ff
../../bin/ff 8192 >$@
 
run: bios.bin
prf
%.ml403: %.rom
hexdump -v -e '4/1 "%02X"' -e '"\n"' $< > ../../impl/virtex4-ml403ep/sim/$@
 
%.rom: %.out
out2rom-ml403 < $< > $@
../../bin/out2rom-ml403 ff.out $< >$@
 
#vgabios.rom: vgabios.out
# out2rom-ml403 ff.out $< >$@
 
#hd.rom: hd.out
# out2rom-ml403 ff.out $< >$@
 
bios.out: vgabios.out ff.out zet-bios.out
cat vgabios.out ff.out zet-bios.out > $@
 
run: flash.rom
prf
 
clean:
rm -f *.o *.a *.s _rombios*_.c rombios*.txt rombios*.sym
rm -f *.o *.a *.s _rombios*_.c rombios*.txt rombios*.sym *.out *.rom
rm -f usage biossums vgasums
rm -f *.ld86 \
temp.awk.* vgabios*.orig _vgabios_* vgabios*.bin vgabios*.txt $(RELEASE).bin *.bak
79,12 → 91,6
mv vgabios.bin $@
./vgasums $@
 
%.rom: %.out
out2rom-ml403 < $< > $@
 
%.bin: %.rom
cat count.rom $< > $@
 
%.rtlrom: %.out
hexdump -v -e '1/1 "%02X"' -e '"\n"' $< > ../../sim/$@
 
/trunk/soc/bios/vgafonts.h
0,0 → 1,784
/*
* These fonts come from ftp://ftp.simtel.net/pub/simtelnet/msdos/screen/fntcol16.zip
* The package is (c) by Joseph Gil
* The individual fonts are public domain
*/
static Bit8u vgafont8[256*8]=
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e,
0x7e, 0xff, 0xdb, 0xff, 0xc3, 0xe7, 0xff, 0x7e,
0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00,
0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00,
0x38, 0x7c, 0x38, 0xfe, 0xfe, 0x7c, 0x38, 0x7c,
0x10, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x7c,
0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00,
0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff,
0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00,
0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff,
0x0f, 0x07, 0x0f, 0x7d, 0xcc, 0xcc, 0xcc, 0x78,
0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18,
0x3f, 0x33, 0x3f, 0x30, 0x30, 0x70, 0xf0, 0xe0,
0x7f, 0x63, 0x7f, 0x63, 0x63, 0x67, 0xe6, 0xc0,
0x99, 0x5a, 0x3c, 0xe7, 0xe7, 0x3c, 0x5a, 0x99,
0x80, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0x80, 0x00,
0x02, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x02, 0x00,
0x18, 0x3c, 0x7e, 0x18, 0x18, 0x7e, 0x3c, 0x18,
0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00,
0x7f, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x00,
0x3e, 0x63, 0x38, 0x6c, 0x6c, 0x38, 0xcc, 0x78,
0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x00,
0x18, 0x3c, 0x7e, 0x18, 0x7e, 0x3c, 0x18, 0xff,
0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x00,
0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00,
0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00,
0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00,
0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00,
0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00,
0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x00, 0x00,
0x00, 0xff, 0xff, 0x7e, 0x3c, 0x18, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x30, 0x78, 0x78, 0x30, 0x30, 0x00, 0x30, 0x00,
0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00,
0x6c, 0x6c, 0xfe, 0x6c, 0xfe, 0x6c, 0x6c, 0x00,
0x30, 0x7c, 0xc0, 0x78, 0x0c, 0xf8, 0x30, 0x00,
0x00, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xc6, 0x00,
0x38, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0x76, 0x00,
0x60, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x18, 0x30, 0x60, 0x60, 0x60, 0x30, 0x18, 0x00,
0x60, 0x30, 0x18, 0x18, 0x18, 0x30, 0x60, 0x00,
0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00,
0x00, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x60,
0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00,
0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00,
0x7c, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0x7c, 0x00,
0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0xfc, 0x00,
0x78, 0xcc, 0x0c, 0x38, 0x60, 0xcc, 0xfc, 0x00,
0x78, 0xcc, 0x0c, 0x38, 0x0c, 0xcc, 0x78, 0x00,
0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x1e, 0x00,
0xfc, 0xc0, 0xf8, 0x0c, 0x0c, 0xcc, 0x78, 0x00,
0x38, 0x60, 0xc0, 0xf8, 0xcc, 0xcc, 0x78, 0x00,
0xfc, 0xcc, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x00,
0x78, 0xcc, 0xcc, 0x78, 0xcc, 0xcc, 0x78, 0x00,
0x78, 0xcc, 0xcc, 0x7c, 0x0c, 0x18, 0x70, 0x00,
0x00, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, 0x00,
0x00, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, 0x60,
0x18, 0x30, 0x60, 0xc0, 0x60, 0x30, 0x18, 0x00,
0x00, 0x00, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00,
0x60, 0x30, 0x18, 0x0c, 0x18, 0x30, 0x60, 0x00,
0x78, 0xcc, 0x0c, 0x18, 0x30, 0x00, 0x30, 0x00,
0x7c, 0xc6, 0xde, 0xde, 0xde, 0xc0, 0x78, 0x00,
0x30, 0x78, 0xcc, 0xcc, 0xfc, 0xcc, 0xcc, 0x00,
0xfc, 0x66, 0x66, 0x7c, 0x66, 0x66, 0xfc, 0x00,
0x3c, 0x66, 0xc0, 0xc0, 0xc0, 0x66, 0x3c, 0x00,
0xf8, 0x6c, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00,
0xfe, 0x62, 0x68, 0x78, 0x68, 0x62, 0xfe, 0x00,
0xfe, 0x62, 0x68, 0x78, 0x68, 0x60, 0xf0, 0x00,
0x3c, 0x66, 0xc0, 0xc0, 0xce, 0x66, 0x3e, 0x00,
0xcc, 0xcc, 0xcc, 0xfc, 0xcc, 0xcc, 0xcc, 0x00,
0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00,
0x1e, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00,
0xe6, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00,
0xf0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00,
0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0x00,
0xc6, 0xe6, 0xf6, 0xde, 0xce, 0xc6, 0xc6, 0x00,
0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00,
0xfc, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00,
0x78, 0xcc, 0xcc, 0xcc, 0xdc, 0x78, 0x1c, 0x00,
0xfc, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0xe6, 0x00,
0x78, 0xcc, 0xe0, 0x70, 0x1c, 0xcc, 0x78, 0x00,
0xfc, 0xb4, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00,
0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xfc, 0x00,
0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x00,
0xc6, 0xc6, 0xc6, 0xd6, 0xfe, 0xee, 0xc6, 0x00,
0xc6, 0xc6, 0x6c, 0x38, 0x38, 0x6c, 0xc6, 0x00,
0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x30, 0x78, 0x00,
0xfe, 0xc6, 0x8c, 0x18, 0x32, 0x66, 0xfe, 0x00,
0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x78, 0x00,
0xc0, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x02, 0x00,
0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00,
0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x76, 0x00,
0xe0, 0x60, 0x60, 0x7c, 0x66, 0x66, 0xdc, 0x00,
0x00, 0x00, 0x78, 0xcc, 0xc0, 0xcc, 0x78, 0x00,
0x1c, 0x0c, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00,
0x00, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00,
0x38, 0x6c, 0x60, 0xf0, 0x60, 0x60, 0xf0, 0x00,
0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8,
0xe0, 0x60, 0x6c, 0x76, 0x66, 0x66, 0xe6, 0x00,
0x30, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00,
0x0c, 0x00, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78,
0xe0, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0xe6, 0x00,
0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00,
0x00, 0x00, 0xcc, 0xfe, 0xfe, 0xd6, 0xc6, 0x00,
0x00, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0xcc, 0x00,
0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0x78, 0x00,
0x00, 0x00, 0xdc, 0x66, 0x66, 0x7c, 0x60, 0xf0,
0x00, 0x00, 0x76, 0xcc, 0xcc, 0x7c, 0x0c, 0x1e,
0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0xf0, 0x00,
0x00, 0x00, 0x7c, 0xc0, 0x78, 0x0c, 0xf8, 0x00,
0x10, 0x30, 0x7c, 0x30, 0x30, 0x34, 0x18, 0x00,
0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00,
0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x78, 0x30, 0x00,
0x00, 0x00, 0xc6, 0xd6, 0xfe, 0xfe, 0x6c, 0x00,
0x00, 0x00, 0xc6, 0x6c, 0x38, 0x6c, 0xc6, 0x00,
0x00, 0x00, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8,
0x00, 0x00, 0xfc, 0x98, 0x30, 0x64, 0xfc, 0x00,
0x1c, 0x30, 0x30, 0xe0, 0x30, 0x30, 0x1c, 0x00,
0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00,
0xe0, 0x30, 0x30, 0x1c, 0x30, 0x30, 0xe0, 0x00,
0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00,
0x78, 0xcc, 0xc0, 0xcc, 0x78, 0x18, 0x0c, 0x78,
0x00, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00,
0x1c, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00,
0x7e, 0xc3, 0x3c, 0x06, 0x3e, 0x66, 0x3f, 0x00,
0xcc, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00,
0xe0, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00,
0x30, 0x30, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00,
0x00, 0x00, 0x78, 0xc0, 0xc0, 0x78, 0x0c, 0x38,
0x7e, 0xc3, 0x3c, 0x66, 0x7e, 0x60, 0x3c, 0x00,
0xcc, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00,
0xe0, 0x00, 0x78, 0xcc, 0xfc, 0xc0, 0x78, 0x00,
0xcc, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00,
0x7c, 0xc6, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x00,
0xe0, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00,
0xc6, 0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0xc6, 0x00,
0x30, 0x30, 0x00, 0x78, 0xcc, 0xfc, 0xcc, 0x00,
0x1c, 0x00, 0xfc, 0x60, 0x78, 0x60, 0xfc, 0x00,
0x00, 0x00, 0x7f, 0x0c, 0x7f, 0xcc, 0x7f, 0x00,
0x3e, 0x6c, 0xcc, 0xfe, 0xcc, 0xcc, 0xce, 0x00,
0x78, 0xcc, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00,
0x00, 0xcc, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00,
0x00, 0xe0, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00,
0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00,
0x00, 0xe0, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00,
0x00, 0xcc, 0x00, 0xcc, 0xcc, 0x7c, 0x0c, 0xf8,
0xc3, 0x18, 0x3c, 0x66, 0x66, 0x3c, 0x18, 0x00,
0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00,
0x18, 0x18, 0x7e, 0xc0, 0xc0, 0x7e, 0x18, 0x18,
0x38, 0x6c, 0x64, 0xf0, 0x60, 0xe6, 0xfc, 0x00,
0xcc, 0xcc, 0x78, 0xfc, 0x30, 0xfc, 0x30, 0x30,
0xf8, 0xcc, 0xcc, 0xfa, 0xc6, 0xcf, 0xc6, 0xc7,
0x0e, 0x1b, 0x18, 0x3c, 0x18, 0x18, 0xd8, 0x70,
0x1c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0x7e, 0x00,
0x38, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00,
0x00, 0x1c, 0x00, 0x78, 0xcc, 0xcc, 0x78, 0x00,
0x00, 0x1c, 0x00, 0xcc, 0xcc, 0xcc, 0x7e, 0x00,
0x00, 0xf8, 0x00, 0xf8, 0xcc, 0xcc, 0xcc, 0x00,
0xfc, 0x00, 0xcc, 0xec, 0xfc, 0xdc, 0xcc, 0x00,
0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00,
0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00,
0x30, 0x00, 0x30, 0x60, 0xc0, 0xcc, 0x78, 0x00,
0x00, 0x00, 0x00, 0xfc, 0xc0, 0xc0, 0x00, 0x00,
0x00, 0x00, 0x00, 0xfc, 0x0c, 0x0c, 0x00, 0x00,
0xc3, 0xc6, 0xcc, 0xde, 0x33, 0x66, 0xcc, 0x0f,
0xc3, 0xc6, 0xcc, 0xdb, 0x37, 0x6f, 0xcf, 0x03,
0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00,
0x00, 0x33, 0x66, 0xcc, 0x66, 0x33, 0x00, 0x00,
0x00, 0xcc, 0x66, 0x33, 0x66, 0xcc, 0x00, 0x00,
0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88,
0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa,
0xdb, 0x77, 0xdb, 0xee, 0xdb, 0x77, 0xdb, 0xee,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18,
0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18,
0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36,
0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36,
0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18,
0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36,
0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00,
0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00,
0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00,
0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18,
0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18,
0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18,
0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36,
0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36,
0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36,
0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36,
0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36,
0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18,
0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36,
0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00,
0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18,
0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36,
0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36,
0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x76, 0xdc, 0xc8, 0xdc, 0x76, 0x00,
0x00, 0x78, 0xcc, 0xf8, 0xcc, 0xf8, 0xc0, 0xc0,
0x00, 0xfc, 0xcc, 0xc0, 0xc0, 0xc0, 0xc0, 0x00,
0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00,
0xfc, 0xcc, 0x60, 0x30, 0x60, 0xcc, 0xfc, 0x00,
0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0x70, 0x00,
0x00, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0xc0,
0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x00,
0xfc, 0x30, 0x78, 0xcc, 0xcc, 0x78, 0x30, 0xfc,
0x38, 0x6c, 0xc6, 0xfe, 0xc6, 0x6c, 0x38, 0x00,
0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x6c, 0xee, 0x00,
0x1c, 0x30, 0x18, 0x7c, 0xcc, 0xcc, 0x78, 0x00,
0x00, 0x00, 0x7e, 0xdb, 0xdb, 0x7e, 0x00, 0x00,
0x06, 0x0c, 0x7e, 0xdb, 0xdb, 0x7e, 0x60, 0xc0,
0x38, 0x60, 0xc0, 0xf8, 0xc0, 0x60, 0x38, 0x00,
0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x00,
0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0x00,
0x30, 0x30, 0xfc, 0x30, 0x30, 0x00, 0xfc, 0x00,
0x60, 0x30, 0x18, 0x30, 0x60, 0x00, 0xfc, 0x00,
0x18, 0x30, 0x60, 0x30, 0x18, 0x00, 0xfc, 0x00,
0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x70,
0x30, 0x30, 0x00, 0xfc, 0x00, 0x30, 0x30, 0x00,
0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00,
0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
0x0f, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x3c, 0x1c,
0x78, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00,
0x70, 0x18, 0x30, 0x60, 0x78, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
static Bit8u vgafont14[256*14]=
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, 0x99, 0x81, 0x7e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0x7e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00,
0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0xc0, 0xe0, 0xf8, 0xfe, 0xf8, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x02, 0x06, 0x0e, 0x3e, 0xfe, 0x3e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00,
0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00,
0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x28, 0x6c, 0xfe, 0x6c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00,
0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x66, 0xc6, 0x00, 0x00, 0x00,
0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7c, 0xc6, 0xce, 0xde, 0xf6, 0xe6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfe, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00,
0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00,
0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00,
0x00, 0x00, 0xe6, 0x66, 0x6c, 0x6c, 0x78, 0x6c, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00,
0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc6, 0xee, 0xfe, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00,
0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00,
0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0x7c, 0x6c, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc6, 0xc6, 0x6c, 0x38, 0x38, 0x38, 0x6c, 0xc6, 0xc6, 0x00, 0x00, 0x00,
0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfe, 0xc6, 0x8c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00,
0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00,
0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00,
0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00,
0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00,
0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00,
0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xc6, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x70, 0x1c, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x66, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00,
0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x0c, 0x06, 0x7c, 0x00,
0x00, 0x00, 0xcc, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
0x00, 0x00, 0xcc, 0xcc, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60, 0x66, 0x3c, 0x0c, 0x06, 0x3c, 0x00, 0x00,
0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x00, 0xcc, 0xcc, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x66, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
0x00, 0xc6, 0xc6, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00,
0x38, 0x6c, 0x38, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x00, 0x00, 0x00,
0x18, 0x30, 0x60, 0x00, 0xfe, 0x66, 0x60, 0x7c, 0x60, 0x66, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xcc, 0x76, 0x36, 0x7e, 0xd8, 0xd8, 0x6e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00,
0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc6, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc6, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00,
0x00, 0xc6, 0xc6, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00,
0x00, 0xc6, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x18, 0x18, 0x3c, 0x66, 0x60, 0x60, 0x66, 0x3c, 0x18, 0x18, 0x00, 0x00, 0x00,
0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00,
0x00, 0x00, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00,
0x00, 0xf8, 0xcc, 0xcc, 0xf8, 0xc4, 0xcc, 0xde, 0xcc, 0xcc, 0xc6, 0x00, 0x00, 0x00,
0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0xd8, 0x70, 0x00,
0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00,
0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00,
0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00,
0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0x00, 0x00, 0x00,
0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xc0, 0xc6, 0xcc, 0xd8, 0x30, 0x60, 0xdc, 0x86, 0x0c, 0x18, 0x3e, 0x00,
0x00, 0xc0, 0xc0, 0xc6, 0xcc, 0xd8, 0x30, 0x66, 0xce, 0x9e, 0x3e, 0x06, 0x06, 0x00,
0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44,
0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa,
0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfc, 0xc6, 0xc6, 0xfc, 0xc0, 0xc0, 0x40, 0x00,
0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00,
0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00,
0x00, 0xd8, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x70, 0xd8, 0x30, 0x60, 0xc8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
static Bit8u vgafont16[256*16]=
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd, 0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3, 0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7, 0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00,
0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30, 0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63, 0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7, 0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x02, 0x06, 0x0e, 0x1e, 0x3e, 0xfe, 0x3e, 0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b, 0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00,
0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6, 0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe, 0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x66, 0xff, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c, 0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3c, 0x66, 0xc3, 0xc3, 0xdb, 0xdb, 0xc3, 0xc3, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc3, 0xe7, 0xff, 0xff, 0xdb, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00,
0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xdb, 0x99, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18, 0x3c, 0x66, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xc3, 0x86, 0x0c, 0x18, 0x30, 0x60, 0xc1, 0xc3, 0xff, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00,
0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00,
0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xff, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xdb, 0xdb, 0xff, 0x66, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0x3c, 0x66, 0xc3, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x0c, 0x06, 0x7c, 0x00, 0x00,
0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60, 0x60, 0x66, 0x3c, 0x0c, 0x06, 0x3c, 0x00, 0x00, 0x00,
0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
0x38, 0x6c, 0x38, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
0x18, 0x30, 0x60, 0x00, 0xfe, 0x66, 0x60, 0x7c, 0x60, 0x60, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x3b, 0x1b, 0x7e, 0xd8, 0xdc, 0x77, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc, 0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00,
0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc6, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00,
0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x18, 0x18, 0x7e, 0xc3, 0xc0, 0xc0, 0xc0, 0xc3, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60, 0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0xfc, 0x66, 0x66, 0x7c, 0x62, 0x66, 0x6f, 0x66, 0x66, 0x66, 0xf3, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0x70, 0x00, 0x00,
0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x60, 0xce, 0x9b, 0x06, 0x0c, 0x1f, 0x00, 0x00,
0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30, 0x66, 0xce, 0x96, 0x3e, 0x06, 0x06, 0x00, 0x00,
0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8, 0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36, 0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44,
0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa,
0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8, 0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c, 0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb, 0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb, 0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60, 0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec, 0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00,
0x00, 0xd8, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x70, 0xd8, 0x30, 0x60, 0xc8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
static Bit8u vgafont14alt[1]={0x00};
static Bit8u vgafont16alt[1]={0x00};
/trunk/soc/vga/ram2k_b16_attr.v File deleted \ No newline at end of file
/trunk/soc/vga/vdu.v File deleted
/trunk/soc/vga/ram2k_b16.v File deleted \ No newline at end of file
/trunk/soc/vga/test/test_vdu.v
0,0 → 1,56
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 02:05:46 08/01/2008
// Design Name:
// Module Name: test_vdu
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module test_vdu (
input sys_clk_in,
output tft_lcd_clk,
output [1:0] tft_lcd_r,
output [1:0] tft_lcd_g,
output [1:0] tft_lcd_b,
output tft_lcd_hsync,
output tft_lcd_vsync,
 
output led
);
 
// Net declarations
wire lock, rst;
 
// Module instantiations
clock clk0 (
.CLKIN_IN (sys_clk_in),
.CLKDV_OUT (tft_lcd_clk),
.LOCKED_OUT (lock)
);
vdu vdu0 (
.wb_rst_i (rst),
.wb_clk_i (tft_lcd_clk), // 25MHz VDU clock
.vga_red_o (tft_lcd_r),
.vga_green_o (tft_lcd_g),
.vga_blue_o (tft_lcd_b),
.horiz_sync (tft_lcd_hsync),
.vert_sync (tft_lcd_vsync)
);
 
// Continuous assignments
assign rst = !lock;
assign led = 1'b1;
endmodule
/trunk/soc/vga/test/clock.xaw
0,0 → 1,3
XILINX-XDB 0.1 STUB 0.1 ASCII
XILINX-XDM V1.4e
$83x4>513&bdah!uetq,~`r(adzg#{g}tdz7)hj38:o{#{jz_ugpp*ekgja%tly>;13853=68':;<95>0/30?46702;=+eH?F1085]7<<>1J^NFXI[34?DTPRVEE@TQLARAB@LH@WJF@=55NRVX\KKJ^WJF@ECQJXUGQJDJ6=2KY[WQ@NM[\GIMNFV\J@XK>b:CQS_YHFESTHNCPSVKWGMOIOVIGG<>4ASUY[JHKQVNO^RM?119BVR\XGGFRSIJ]_B325>GU_SUDBAWPDEP\GIM6>2KY[WQ@NM[\@ATXMMMNABJJ179BVR\XGGFRSIJ]_GNJTCJHX880M_YU_NLO]ZBCZVCEEY?8;@PT^ZIIDPUOH_Q]ERGWP\VB9<1J^ZTPOONZ[CDXMQ^N^COC139BVR\XGGFRSD@\T^LVI41<I[]QSB@CY^PFGJHAANU[EC]>5:CQS_YHFEST^H]JT^NLCLE6:2KY[WQ@NM[\V@RFZNO_=55NRVX\KKJ^W_KGEIQKFR]NKACf3HYXCNQXIUJe?DQ]WJF@NXH[YQG253=F_SUH@FLZFU[SA4YIGLNBX<=4AVX\GIMXG\^[YYQ[YQG`?DQ]WOFD[YW_E99BS_YWI[^o7LYU_R[MPMRHGE>0NBZG4:@VBB2<KEA;46MCK1]AQCc<KEA;SO[IG^KMWQ><KEA;SB[[6:AOO4>7>2IGG?9?5:AOO7^?3JF@>U?7049@HN?7=2IGGIX6;BNH@SYE]Ol0OAEKV^@VBBYNFZ^h7NBDDW]GMSOCM01H@FJY_NWW1>EKCOH37NBDFC]JJ0=DDBLS46MCKGZ2<5e<KEAMTRJFVHFFa>EKCORTAXB[IQNZ1>EKC@D:=6MCKHL\@LPNLLUIUR<m;BNHMKYNJ\LL==5LLJKM[LDRNNUBB^Zi;BNHMKYNJ\LLSB[[8:AOOLHXAGi0OAEFN^RFVLICm2IGGD@PSSA\P\VB9;1H@FAZT^RKEVCX[ACMXn5LLJ]EA@BEIJA27NABMHVWAA1<K[OJXHJ:;ECG@W2<LJF@;6JLM^CGRf=CKDUJH[QFNRV27>BDEVK^XBMNLH@QEQOHF8>0HNCPPDPEKWKFFJOTABJJ3:FFJa=CMZAN[ROKJTQW57=CNZUM^H_ZEOAZ[HICM;1OE>5KLM31?AJKWOXN]XKACX]NKAC53ME?7I\KY078@PR^WJSH@HQLOSPFGQOHF:1O[H94D^TBHPC?3LR_I_@NL`9EEFRHZPUAJ85IAMQF=>@EWZE^^NKl;GGF@GGDCVH^J45IIO]VJLRT02LDYYQ\TSc8BJSSW\DBX^o4FNWW[SGK]L;0E85FBTDD<>OI\LXEMA?>;KKWP@TXAGZ^XRZVPD48HJELMMk0@BMDEE]LQQ5<DF]27@OW_RRFAA5<EAP<7@QYAMWF3>HB\^EYG95AOOG2?J2<GMNY46A_PNQJP@d<XAKXIR]GIGV:?UOI@HYIY^o4PHLJWBHCMM20\D@XIEVK<>VUAD^R\H??;QPLTZVNF@YJOYGYE49SWFJL>2ZXHB@J4:RPAK><XZCEOIKL3:PPPg=TANOSXH\AAM48WLH@DLi0_YO]TTR\SDOSj2YRBNF]OOMVW44<[PY_I@Q\YOAKVJHH]Z90XB^;;UPVA==R[LUIYKI6;TQF[GSAOZ?0ZDKX1c9[ERYQM[YBCC?k;YKOMK^*PMH+<#?/SUWA$5(6(HYHED=4XRV5?]beW@n:<6Vkm^ObnjtQm{ybcc??;Yfn[Hoig{\n~~g`n49X4?6Z>2Q;6<;R5:Y3>3[33hx|v>5kcl`8r`ttafd+=#>;;wjgh46<pj>}ju?=-02eb30?uIJ{?n5O@y39B?4=9rY?876l:9g956410h;1onua8682?k>?2=1/4;474:P06<?k32n6<==69c2>4g43m2h6=4>:0yP01<?k32n6<==69c2>fe<~]296=4>:08:V2321i14h4>334;e4<dk2h<i7>50;69=~"f21n0(?>58g9'64<>82.9>76:;%:0>0=e<10;6<650;2x 24=<>1/n7<j;%a93d=#m38>7)?9:6c8 41=;2.:?78l;%d960=#990956*>1;06?!752?n0(<:52:&21?1d3-;36864$0;91==#9h0>46*;2;:8 67=12.8;7=4$2:9=>"4i3?37)=i:59'05<2>2.?=78n;%6:>2`<,=k1:;5+4b84`>"3l3<>7);?:778 05=?o1/984<;%74>2=#=00==6*:b;44?!3c2?=0(8k50:&56?3d3-<3645+6d81?!1e2<20(5>5809'`?0<,8l18k5+1c817>o413:1(:?5889'36<0n21b?>4?:%52>=?<,>91;k54i5794?"0932i7)9?:6d8 3`=?o10e9k50;&45?>f3-=;6:h4$7d93c=<a<>1<7*81;::?!172>l07d:m:18'34<?12.<<79i;:k72?6=,>;1445+7184b>=n?10;6)9>:9;8 26=?o10e:850;&45?>>3-=;6:h4;h54>5<#?80356*80;5e?>o0<3:1(:?5889'35<0n21d>84?:%52>=?<,>91;k5+1e810>"6m3?j76a=d;29 27=0010c?750;&45?>>32e9m7>5$639<<=<g;o1<7*81;::?!142>l0(<j52598k7d=83.<=766;:m1g?6=,>;14454o2794?"0932276a<6;29 27=0010c8<50;&45?>>32e>=7>5$639<d=#>o0<j65`6283>!162130(:=57g98k23=83.<=766;:a7f<72;0;6=u+73854>o2n3:1(:?5889'36<0n21d:o4?:%52>=?<,>91;k54}c04>5<5290;w)9=:368m0`=83.<=766;%50>2`<3f<i6=4+708;=>"0;3=m76sm3183>7<729q/;?4=4:k6b?6=,>;1445+7284b>=h>k0;6)9>:9;8 25=?o10q~=m:18182?2:301>m56c9'5f<4l2wx?94?:3y>0=<4;279;78m;%3`>7><uz8=6=4={<6;>73<5;=19k5rs3d94?4|5=21>h523186b>{t>=0;6<u249857>"013<i7p}<e;295~;4k3?m7)96:4d8yv55290:w0=?:7`8 2?=>k1v>j50;2x 2?=>k1v?650;2x 2?=>k1vqc<n:182xh5j3:1=vsa2b83>4}zf;n1<7?t}o0f>5<6std9j7>51zm75<728qvb>?50;3xyk55290:wpsr}AB@6e=m::3o>=8}ABA5{GHYqvLM
/trunk/soc/vga/test/ml403.ucf
0,0 → 1,74
# Bus clock nets
#NET "sys_clk_in" TNM_NET = "sys_clk_in";
#NET "tft_clk" TNM_NET = "tft_clk";
NET sys_clk_in TNM_NET = "sys_clk_in";
TIMESPEC "TSSYSCLK" = PERIOD "sys_clk_in" 9.9 ns HIGH 50 %;
 
NET sys_clk_in LOC = AE14;
NET sys_clk_in IOSTANDARD = LVCMOS33;
 
NET led LOC = G5;
 
#------------------------------------------------------------------------------
# IO Pad Location Constraints / Properties for TFT VGA LCD Controller
#------------------------------------------------------------------------------
 
#NET tft_lcd_b<0> LOC = L26; # VGA_B2
#NET tft_lcd_b<0> IOSTANDARD = LVCMOS33;
#NET tft_lcd_b<1> LOC = C5; # VGA_B3
#NET tft_lcd_b<2> LOC = C7; # VGA_B4
#NET tft_lcd_b<3> LOC = B7; # VGA_B5
#NET tft_lcd_b<4> LOC = G8; # VGA_B6
#NET tft_lcd_b<5> LOC = F8; # VGA_B7
#NET tft_lcd_b<*> SLEW = FAST;
#NET tft_lcd_b<*> DRIVE = 8;
NET tft_lcd_b[0] LOC = G8; # VGA_B6
NET tft_lcd_b[1] LOC = F8; # VGA_B7
#NET tft_lcd_b SLEW = FAST;
#NET tft_lcd_b DRIVE = 8;
 
 
NET tft_lcd_clk LOC = AF8;
#NET tft_lcd_clk IOSTANDARD = LVDCI_33;
#NET tft_lcd_clk SLEW = FAST;
#NET tft_lcd_clk DRIVE = 8;
 
#NET tft_lcd_g<0> LOC = M20; # VGA_G2
#NET tft_lcd_g<0> IOSTANDARD = LVCMOS33;
#NET tft_lcd_g<1> LOC = E4; # VGA_G3
#NET tft_lcd_g<2> LOC = D3; # VGA_G4
#NET tft_lcd_g<3> LOC = H7; # VGA_G5
#NET tft_lcd_g<4> LOC = H8; # VGA_G6
#NET tft_lcd_g<5> LOC = C1; # VGA_G7
#NET tft_lcd_g<*> SLEW = FAST;
#NET tft_lcd_g<*> DRIVE = 8;
NET tft_lcd_g[0] LOC = H8; # VGA_G6
NET tft_lcd_g[1] LOC = C1; # VGA_G7
#NET tft_lcd_g SLEW = FAST;
#NET tft_lcd_g DRIVE = 8;
 
NET tft_lcd_hsync LOC = C10;
#NET tft_lcd_hsync SLEW = FAST;
#NET tft_lcd_hsync DRIVE = 8;
 
#NET tft_lcd_r<0> LOC = N25; #VGA_R2
#NET tft_lcd_r<0> IOSTANDARD = LVCMOS33;
#NET tft_lcd_r<1> LOC = C2; #VGA_R3
#NET tft_lcd_r<2> LOC = G7; #VGA_R4
#NET tft_lcd_r<3> LOC = F7; #VGA_R5
#NET tft_lcd_r<4> LOC = E5; #VGA_R6
#NET tft_lcd_r<5> LOC = E6; #VGA_R7
#NET tft_lcd_r<*> SLEW = FAST;
#NET tft_lcd_r<*> DRIVE = 8;
NET tft_lcd_r[0] LOC = E5; #VGA_R6
NET tft_lcd_r[1] LOC = E6; #VGA_R7
#NET tft_lcd_r SLEW = FAST;
#NET tft_lcd_r DRIVE = 8;
 
NET tft_lcd_vsync LOC = A8;
#NET tft_lcd_vsync SLEW = FAST;
#NET tft_lcd_vsync DRIVE = 8;
 
#TIMESPEC "TSPLB_TFT" = FROM "sys_clk" TO "tft_clk" TIG;
#TIMESPEC "TSTFT_PLB" = FROM "tft_clk" TO "sys_clk" TIG;
 
/trunk/soc/vga/rtl/ram2k_b16_attr.v
0,0 → 1,92
`timescale 1ns/10ps
 
module ram_2k_attr (clk, rst, cs, we, addr, rdata, wdata);
// IO Ports
input clk;
input rst;
input cs;
input we;
input [10:0] addr;
output [7:0] rdata;
input [7:0] wdata;
 
// Net declarations
wire dp;
 
// Module instantiations
RAMB16_S9 ram (.DO(rdata),
.DOP (dp),
.ADDR (addr),
.CLK (clk),
.DI (wdata),
.DIP (dp),
.EN (cs),
.SSR (rst),
.WE (we));
 
defparam ram.INIT_00 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_01 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_02 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_03 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_04 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_05 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_06 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_07 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_08 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_09 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_0A = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_0B = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_0C = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_0D = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_0E = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_0F = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_10 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_11 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_12 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_13 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_14 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_15 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_16 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_17 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_18 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_19 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_1A = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_1B = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_1C = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_1D = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_1E = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_1F = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_20 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_21 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_22 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_23 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_24 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_25 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_26 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_27 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_28 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_29 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_2A = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_2B = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_2C = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_2D = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_2E = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_2F = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_30 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_31 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_32 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_33 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_34 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_35 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_36 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_37 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_38 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_39 = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_3A = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_3B = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_3C = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_3D = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_3E = 256'h0707070707070707070707070707070707070707070707070707070707070707;
defparam ram.INIT_3F = 256'h0707070707070707070707070707070707070707070707070707070707070707;
 
endmodule
/trunk/soc/vga/rtl/vdu.v
0,0 → 1,356
// Video Display terminal
// John Kent
// 3th September 2004
// Assumes a pixel clock input of 50 MHz
// Generates a 12.5MHz CPU Clock output
//
// Display Format is:
// 80 characters across by 25 characters down.
// 8 horizonal pixels / character
// 16 vertical scan lines / character (2 scan lines/row)
`timescale 1ns/10ps
 
module vdu (
// Wishbone signals
input wb_clk_i, // 25 Mhz VDU clock
input wb_rst_i,
input [15:0] wb_dat_i,
output reg [15:0] wb_dat_o,
input [11:1] wb_adr_i,
input wb_we_i,
input wb_tga_i,
input [ 1:0] wb_sel_i,
input wb_stb_i,
input wb_cyc_i,
output reg wb_ack_o,
 
// VGA pad signals
output reg [ 1:0] vga_red_o,
output reg [ 1:0] vga_green_o,
output reg [ 1:0] vga_blue_o,
output reg horiz_sync,
output reg vert_sync
);
 
// Net, registers and parameters
 
// Synchronization constants
parameter HOR_DISP_END = 10'd640; // Last horizontal pixel displayed
parameter HOR_SYNC_BEG = 10'd679; // Start of horizontal synch pulse
parameter HOR_SYNC_END = 10'd775; // End of Horizontal Synch pulse
parameter HOR_SCAN_END = 10'd799; // Last pixel in scan line
parameter HOR_DISP_CHR = 80; // Number of characters displayed per row
 
parameter VER_DISP_END = 9'd399; // last row displayed
parameter VER_SYNC_BEG = 9'd413; // start of vertical synch pulse
parameter VER_SYNC_END = 9'd414; // end of vertical synch pulse
parameter VER_SCAN_END = 9'd450; // Last scan row in the frame
parameter VER_DISP_CHR = 6'd25; // Number of character rows displayed
 
reg cursor_on_v;
reg cursor_on_h;
reg video_on_v;
reg video_on_h;
reg [9:0] h_count;
reg [8:0] v_count; // 0 to VER_SCAN_END
reg [22:0] blink_count;
 
// Character generator ROM
wire char_cs;
wire char_we;
wire [11:0] char_addr;
wire [7:0] char_data_in;
wire [7:0] char_data_out;
 
// Control registers
reg [6:0] reg_hcursor; // 80 columns
reg [4:0] reg_vcursor; // 25 rows
 
wire wr_pos;
 
// Video shift register
reg [7:0] vga_shift;
reg [2:0] vga_fg_colour;
reg [2:0] vga_bg_colour;
reg cursor_on;
wire cursor_on1;
reg video_on;
wire video_on1;
 
// vga character ram access bus
reg [6:0] col_addr; // 0 to 79
reg [4:0] row_addr; // 0 to 49 (25 * 2 -1)
reg [6:0] col1_addr; // 0 to 79
reg [4:0] row1_addr; // 0 to 49 (25 * 2 - 1)
reg [6:0] hor_addr; // 0 to 79
reg [6:0] ver_addr; // 0 to 124
reg vga0_we;
reg vga0_rw, vga1_rw, vga2_rw, vga3_rw, vga4_rw;
reg vga1_we;
reg vga2_we;
reg buff_we;
reg [7:0] buff_data_in;
reg attr_we;
reg [7:0] attr_data_in;
reg [10:0] buff_addr;
reg [10:0] attr0_addr;
reg attr0_we;
reg [10:0] buff0_addr;
reg buff0_we;
reg [10:0] attr_addr;
reg intense;
wire vga_cs;
wire [7:0] vga_data_out;
wire [7:0] attr_data_out;
wire [10:0] vga_addr; // 2K byte character buffer
wire [15:0] out_data;
wire fg_or_bg;
wire stb;
wire brown_bg;
wire brown_fg;
 
// Module instantiation
char_rom vdu_char_rom (
.clk (wb_clk_i),
.rst (wb_rst_i),
.cs (char_cs),
.we (char_we),
.addr (char_addr),
.wdata (char_data_in),
.rdata (char_data_out)
);
 
ram_2k char_buff_ram (
.clk (wb_clk_i),
.rst (wb_rst_i),
.cs (vga_cs),
.we (buff_we),
.addr (buff_addr),
.wdata (buff_data_in),
.rdata (vga_data_out)
);
 
ram_2k_attr attr_buff_ram (
.clk (wb_clk_i),
.rst (wb_rst_i),
.cs (vga_cs),
.we (attr_we),
.addr (attr_addr),
.wdata (attr_data_in),
.rdata (attr_data_out)
);
 
// Assignments
assign video_on1 = video_on_h && video_on_v;
assign cursor_on1 = cursor_on_h && cursor_on_v;
assign char_cs = 1'b1;
assign char_we = 1'b0;
assign char_data_in = 8'b0;
assign char_addr = { vga_data_out, v_count[3:0] };
assign vga_addr = { 4'b0, hor_addr} + { ver_addr, 4'b0 };
assign out_data = {attr_data_out, vga_data_out};
 
assign vga_cs = 1'b1;
assign stb = wb_stb_i && wb_cyc_i;
 
assign fg_or_bg = vga_shift[7] ^ cursor_on;
assign brown_fg = (vga_fg_colour==3'd6) && !intense;
assign brown_bg = (vga_bg_colour==3'd6);
 
assign wr_pos = wb_tga_i & wb_stb_i & wb_cyc_i & wb_we_i;
 
// Behaviour
 
// CPU write interface
always @(posedge wb_clk_i)
if (wb_rst_i)
begin
attr0_addr <= 11'b0;
attr0_we <= 1'b0;
attr_data_in <= 8'h0;
buff0_addr <= 11'b0;
buff0_we <= 1'b0;
buff_data_in <= 8'h0;
end
else
begin
if (stb && !wb_tga_i)
begin
attr0_addr <= wb_adr_i;
attr0_we <= wb_we_i & wb_sel_i[1];
attr_data_in <= wb_dat_i[15:8];
buff0_addr <= wb_adr_i;
buff0_we <= wb_we_i & wb_sel_i[0];
buff_data_in <= wb_dat_i[7:0];
end
end
 
// CPU read interface
always @(posedge wb_clk_i)
if (wb_rst_i)
begin
wb_dat_o <= 16'h0;
wb_ack_o <= 16'h0;
end
else
begin
wb_dat_o <= vga4_rw ? out_data : wb_dat_o;
wb_ack_o <= vga4_rw ? 1'b1 : (wb_ack_o && stb);
end
 
// Cursor pos register
always @(posedge wb_clk_i)
{reg_vcursor, reg_hcursor} <= wb_rst_i ? 12'h0
: (wr_pos ? {wb_dat_i[12:8], wb_dat_i[6:0]}
: {reg_vcursor, reg_hcursor});
 
// Sync generation & timing process
// Generate horizontal and vertical timing signals for video signal
always @(posedge wb_clk_i)
if (wb_rst_i)
begin
h_count <= 10'b0;
horiz_sync <= 1'b1;
v_count <= 9'b0;
vert_sync <= 1'b1;
video_on_h <= 1'b1;
video_on_v <= 1'b1;
cursor_on_h <= 1'b0;
cursor_on_v <= 1'b0;
blink_count <= 22'b0;
end
else
begin
h_count <= (h_count==HOR_SCAN_END) ? 10'b0 : h_count + 10'b1;
horiz_sync <= (h_count==HOR_SYNC_BEG) ? 1'b0
: ((h_count==HOR_SYNC_END) ? 1'b1 : horiz_sync);
v_count <= (v_count==VER_SCAN_END && h_count==HOR_SCAN_END) ? 9'b0
: ((h_count==HOR_SYNC_END) ? v_count + 9'b1 : v_count);
vert_sync <= (v_count==VER_SYNC_BEG) ? 1'b0
: ((v_count==VER_SYNC_END) ? 1'b1 : vert_sync);
video_on_h <= (h_count==HOR_SCAN_END) ? 1'b1
: ((h_count==HOR_DISP_END) ? 1'b0 : video_on_h);
video_on_v <= (v_count==VER_SYNC_BEG) ? 1'b1
: ((v_count==VER_DISP_END) ? 1'b0 : video_on_v);
cursor_on_h <= (h_count[9:3] == reg_hcursor[6:0]);
cursor_on_v <= (v_count[8:2] == { reg_vcursor[4:0], 2'b11 })
&& (v_count[1] ^ v_count[0]);
blink_count <= blink_count + 22'd1;
end
 
// Video memory access
always @(posedge wb_clk_i)
if (wb_rst_i)
begin
vga0_we <= 1'b0;
vga0_rw <= 1'b1;
row_addr <= 5'b0;
col_addr <= 7'b0;
 
vga1_we <= 1'b0;
vga1_rw <= 1'b1;
row1_addr <= 5'b0;
col1_addr <= 7'b0;
 
vga2_we <= 1'b0;
vga2_rw <= 1'b0;
vga3_rw <= 1'b0;
vga4_rw <= 1'b0;
ver_addr <= 7'b0;
hor_addr <= 7'b0;
 
buff_addr <= 10'b0;
attr_addr <= 10'b0;
buff_we <= 1'b0;
attr_we <= 1'b0;
end
else
begin
// on h_count = 0 initiate character write
// all other cycles are reads
case (h_count[2:0])
3'b000: // pipeline character write
begin
vga0_we <= wb_we_i;
vga0_rw <= stb;
end
default: // other 6 cycles free
begin
vga0_we <= 1'b0;
vga0_rw <= 1'b0;
col_addr <= h_count[9:3];
row_addr <= v_count[8:4];
end
endcase
 
// on vdu_clk + 1 round off row address
// row1_addr = (row_addr % 80)
vga1_we <= vga0_we;
vga1_rw <= vga0_rw;
row1_addr <= (row_addr < VER_DISP_CHR) ? row_addr
: row_addr - VER_DISP_CHR;
col1_addr <= col_addr;
 
// on vdu_clk + 2 calculate vertical address
// ver_addr = (row_addr % 80) x 5
vga2_we <= vga1_we;
vga2_rw <= vga1_rw;
ver_addr <= { 2'b00, row1_addr } + { row1_addr, 2'b00 }; // x5
hor_addr <= col1_addr;
 
// on vdu_clk + 3 calculate memory address
// vga_addr = (row_addr % 80) * 80 + hor_addr
buff_addr <= vga2_rw ? buff0_addr : vga_addr;
attr_addr <= vga2_rw ? attr0_addr : vga_addr;
buff_we <= vga2_rw ? (buff0_we & vga2_we) : 1'b0;
attr_we <= vga2_rw ? (attr0_we & vga2_we) : 1'b0;
vga3_rw <= vga2_rw;
vga4_rw <= vga3_rw;
end
 
// Video shift register
always @(posedge wb_clk_i)
if (wb_rst_i)
begin
video_on <= 1'b0;
cursor_on <= 1'b0;
vga_bg_colour <= 3'b000;
vga_fg_colour <= 3'b111;
vga_shift <= 8'b00000000;
vga_red_o <= 1'b0;
vga_green_o <= 1'b0;
vga_blue_o <= 1'b0;
end
else
begin
if (h_count[2:0] == 3'b000)
begin
video_on <= video_on1;
cursor_on <= (cursor_on1 | attr_data_out[7]) & blink_count[22];
vga_fg_colour <= attr_data_out[2:0];
vga_bg_colour <= attr_data_out[6:4];
intense <= attr_data_out[3];
vga_shift <= char_data_out;
end
else vga_shift <= { vga_shift[6:0], 1'b0 };
 
//
// Colour mask is
// 7 6 5 4 3 2 1 0
// X BR BG BB X FR FG FB
//
vga_blue_o <= video_on ? (fg_or_bg ? { vga_fg_colour[0], intense }
: { vga_bg_colour[0], 1'b0 })
: 2'b0;
 
// Green color exception with color brown
// http://en.wikipedia.org/wiki/Color_Graphics_Adapter#With_an_RGBI_monitor
vga_green_o <= video_on ?
(fg_or_bg ? (brown_fg ? 2'b01 : { vga_fg_colour[1], intense })
: (brown_bg ? 2'b01 : { vga_bg_colour[1], 1'b0 }))
: 2'b0;
vga_red_o <= video_on ? (fg_or_bg ? { vga_fg_colour[2], intense }
: { vga_bg_colour[2], 1'b0 })
: 2'b0;
end
endmodule
/trunk/soc/vga/rtl/char_rom_b16.v
0,0 → 1,181
////////////////////////////////////////////////////////////////
//
// Character generator ROM
//
// 7 pixels x 11 rows x 128 characters.
//
// Last Updated
// 18th Oct 2004
// J. E. Kent.
////////////////////////////////////////////////////////////////
 
`timescale 1ns/10ps
 
module char_rom (clk, rst, cs, we, addr, rdata, wdata);
// IO Ports
input clk;
input rst;
input cs;
input we;
input [11:0] addr;
output [7:0] rdata;
input [7:0] wdata;
 
// Net declarations
wire dp0, dp1;
wire [7:0] rdata1, rdata0;
 
// Module instantiations
RAMB16_S9 rom0 (.DO(rdata0),
.DOP (dp0),
.ADDR (addr[10:0]),
.CLK (clk),
.DI (wdata),
.DIP (dp0),
.EN (cs),
.SSR (rst),
.WE (we));
 
RAMB16_S9 rom1 (.DO(rdata1),
.DOP (dp1),
.ADDR (addr[10:0]),
.CLK (clk),
.DI (wdata),
.DIP (dp1),
.EN (cs),
.SSR (rst),
.WE (we));
 
defparam rom0.INIT_00 = 256'h000000007E818199A58181A5817E0000_00000000000000000000000000000000; // 01() 00( )
defparam rom0.INIT_01 = 256'h0000000010387CFEFEFEFE6C00000000_000000007EFFFFE7DBFFFFDBFF7E0000; // 03() 02()
defparam rom0.INIT_02 = 256'h000000003C1818E7E7E73C3C18000000_000000000010387CFE7C381000000000; // 05() 04()
defparam rom0.INIT_03 = 256'h000000000000183C3C18000000000000_000000003C18187EFFFF7E3C18000000; // 07() 06()
defparam rom0.INIT_04 = 256'h00000000003C664242663C0000000000_FFFFFFFFFFFFE7C3C3E7FFFFFFFFFFFF; // 09( ) 08()
defparam rom0.INIT_05 = 256'h0000000078CCCCCCCC781A0E061E0000_FFFFFFFFFFC399BDBD99C3FFFFFFFFFF; // 0b( ) 0a()
defparam rom0.INIT_06 = 256'h00000000E0F070303030303F333F0000_0000000018187E183C666666663C0000; // 0d() 0c( )
defparam rom0.INIT_07 = 256'h000000001818DB3CE73CDB1818000000_000000C0E6E767636363637F637F0000; // 0f() 0e()
defparam rom0.INIT_08 = 256'h0000000002060E1E3EFE3E1E0E060200_0000000080C0E0F0F8FEF8F0E0C08000; // 11() 10()
defparam rom0.INIT_09 = 256'h00000000666600666666666666660000_0000000000183C7E1818187E3C180000; // 13() 12()
defparam rom0.INIT_0A = 256'h0000007CC60C386CC6C66C3860C67C00_000000001B1B1B1B1B7BDBDBDB7F0000; // 15() 14()
defparam rom0.INIT_0B = 256'h000000007E183C7E1818187E3C180000_00000000FEFEFEFE0000000000000000; // 17() 16()
defparam rom0.INIT_0C = 256'h00000000183C7E181818181818180000_00000000181818181818187E3C180000; // 19() 18()
defparam rom0.INIT_0D = 256'h0000000000003060FE60300000000000_000000000000180CFE0C180000000000; // 1b() 1a()
defparam rom0.INIT_0E = 256'h000000000000286CFE6C280000000000_000000000000FEC0C0C0000000000000; // 1d() 1c()
defparam rom0.INIT_0F = 256'h00000000001038387C7CFEFE00000000_0000000000FEFE7C7C38381000000000; // 1f() 1e()
defparam rom0.INIT_10 = 256'h000000001818001818183C3C3C180000_00000000000000000000000000000000; // 21(!) 20( )
defparam rom0.INIT_11 = 256'h000000006C6CFE6C6C6CFE6C6C000000_00000000000000000000002466666600; // 23(#) 22(")
defparam rom0.INIT_12 = 256'h0000000086C66030180CC6C200000000_000018187CC68606067CC0C2C67C1818; // 25(%) 24($)
defparam rom0.INIT_13 = 256'h00000000000000000000006030303000_0000000076CCCCCCDC76386C6C380000; // 27(') 26(&)
defparam rom0.INIT_14 = 256'h0000000030180C0C0C0C0C0C18300000_000000000C18303030303030180C0000; // 29()) 28(()
defparam rom0.INIT_15 = 256'h00000000000018187E18180000000000_000000000000663CFF3C660000000000; // 2b(+) 2a(*)
defparam rom0.INIT_16 = 256'h0000000000000000FE00000000000000_00000030181818000000000000000000; // 2d(-) 2c(,)
defparam rom0.INIT_17 = 256'h0000000080C06030180C060200000000_00000000181800000000000000000000; // 2f(/) 2e(.)
defparam rom0.INIT_18 = 256'h000000007E1818181818187838180000_00000000386CC6C6D6D6C6C66C380000; // 31(1) 30(0)
defparam rom0.INIT_19 = 256'h000000007CC60606063C0606C67C0000_00000000FEC6C06030180C06C67C0000; // 33(3) 32(2)
defparam rom0.INIT_1A = 256'h000000007CC6060606FCC0C0C0FE0000_000000001E0C0C0CFECC6C3C1C0C0000; // 35(5) 34(4)
defparam rom0.INIT_1B = 256'h0000000030303030180C0606C6FE0000_000000007CC6C6C6C6FCC0C060380000; // 37(7) 36(6)
defparam rom0.INIT_1C = 256'h00000000780C0606067EC6C6C67C0000_000000007CC6C6C6C67CC6C6C67C0000; // 39(9) 38(8)
defparam rom0.INIT_1D = 256'h00000000301818000000181800000000_00000000001818000000181800000000; // 3b(;) 3a(:)
defparam rom0.INIT_1E = 256'h000000000000007E00007E0000000000_00000000060C18306030180C06000000; // 3d(=) 3c(<)
defparam rom0.INIT_1F = 256'h000000001818001818180CC6C67C0000_000000006030180C060C183060000000; // 3f(?) 3e(>)
defparam rom0.INIT_20 = 256'h00000000C6C6C6C6FEC6C66C38100000_000000007CC0DCDEDEDEC6C67C000000; // 41(A) 40(@)
defparam rom0.INIT_21 = 256'h000000003C66C2C0C0C0C0C2663C0000_00000000FC666666667C666666FC0000; // 43(C) 42(B)
defparam rom0.INIT_22 = 256'h00000000FE6662606878686266FE0000_00000000F86C6666666666666CF80000; // 45(E) 44(D)
defparam rom0.INIT_23 = 256'h000000003A66C6C6DEC0C0C2663C0000_00000000F06060606878686266FE0000; // 47(G) 46(F)
defparam rom0.INIT_24 = 256'h000000003C18181818181818183C0000_00000000C6C6C6C6C6FEC6C6C6C60000; // 49(I) 48(H)
defparam rom0.INIT_25 = 256'h00000000E666666C78786C6666E60000_0000000078CCCCCC0C0C0C0C0C1E0000; // 4b(K) 4a(J)
defparam rom0.INIT_26 = 256'h00000000C6C6C6C6C6D6FEFEEEC60000_00000000FE6662606060606060F00000; // 4d(M) 4c(L)
defparam rom0.INIT_27 = 256'h000000007CC6C6C6C6C6C6C6C67C0000_00000000C6C6C6C6CEDEFEF6E6C60000; // 4f(O) 4e(N)
defparam rom0.INIT_28 = 256'h00000E0C7CDED6C6C6C6C6C6C67C0000_00000000F0606060607C666666FC0000; // 51(Q) 50(P)
defparam rom0.INIT_29 = 256'h000000007CC6C6060C3860C6C67C0000_00000000E66666666C7C666666FC0000; // 53(S) 52(R)
defparam rom0.INIT_2A = 256'h000000007CC6C6C6C6C6C6C6C6C60000_000000003C1818181818185A7E7E0000; // 55(U) 54(T)
defparam rom0.INIT_2B = 256'h000000006CEEFED6D6D6C6C6C6C60000_0000000010386CC6C6C6C6C6C6C60000; // 57(W) 56(V)
defparam rom0.INIT_2C = 256'h000000003C181818183C666666660000_00000000C6C66C7C38387C6CC6C60000; // 59(Y) 58(X)
defparam rom0.INIT_2D = 256'h000000003C30303030303030303C0000_00000000FEC6C26030180C86C6FE0000; // 5b([) 5a(Z)
defparam rom0.INIT_2E = 256'h000000003C0C0C0C0C0C0C0C0C3C0000_0000000002060E1C3870E0C080000000; // 5d(]) 5c(\)
defparam rom0.INIT_2F = 256'h0000FF00000000000000000000000000_000000000000000000000000C66C3810; // 5f(_) 5e(^)
defparam rom0.INIT_30 = 256'h0000000076CCCCCC7C0C780000000000_00000000000000000000000000183030; // 61(a) 60(`)
defparam rom0.INIT_31 = 256'h000000007CC6C0C0C0C67C0000000000_000000007C666666666C786060E00000; // 63(c) 62(b)
defparam rom0.INIT_32 = 256'h000000007CC6C0C0FEC67C0000000000_0000000076CCCCCCCC6C3C0C0C1C0000; // 65(e) 64(d)
defparam rom0.INIT_33 = 256'h0078CC0C7CCCCCCCCCCC760000000000_00000000F060606060F060646C380000; // 67(g) 66(f)
defparam rom0.INIT_34 = 256'h000000003C1818181818380018180000_00000000E666666666766C6060E00000; // 69(i) 68(h)
defparam rom0.INIT_35 = 256'h00000000E6666C78786C666060E00000_003C66660606060606060E0006060000; // 6b(k) 6a(j)
defparam rom0.INIT_36 = 256'h00000000C6D6D6D6D6FEEC0000000000_000000003C1818181818181818380000; // 6d(m) 6c(l)
defparam rom0.INIT_37 = 256'h000000007CC6C6C6C6C67C0000000000_00000000666666666666DC0000000000; // 6f(o) 6e(n)
defparam rom0.INIT_38 = 256'h001E0C0C7CCCCCCCCCCC760000000000_00F060607C6666666666DC0000000000; // 71(q) 70(p)
defparam rom0.INIT_39 = 256'h000000007CC60C3860C67C0000000000_00000000F06060606676DC0000000000; // 73(s) 72(r)
defparam rom0.INIT_3A = 256'h0000000076CCCCCCCCCCCC0000000000_000000001C3630303030FC3030100000; // 75(u) 74(t)
defparam rom0.INIT_3B = 256'h000000006CFED6D6D6C6C60000000000_00000000183C66666666660000000000; // 77(w) 76(v)
defparam rom0.INIT_3C = 256'h00F80C067EC6C6C6C6C6C60000000000_00000000C66C3838386CC60000000000; // 79(y) 78(x)
defparam rom0.INIT_3D = 256'h000000000E18181818701818180E0000_00000000FEC6603018CCFE0000000000; // 7b({) 7a(z)
defparam rom0.INIT_3E = 256'h0000000070181818180E181818700000_00000000181818181800181818180000; // 7d(}) 7c(|)
defparam rom0.INIT_3F = 256'h0000000000FEC6C6C66C381000000000_000000000000000000000000DC760000; // 7f() 7e(~)
 
defparam rom1.INIT_00 = 256'h0000000076CCCCCCCCCCCC0000CC0000_00007C060C3C66C2C0C0C0C2663C0000; // 81(�) 80(�)
defparam rom1.INIT_01 = 256'h0000000076CCCCCC7C0C78006C381000_000000007CC6C0C0FEC67C0030180C00; // 83(�) 82(�)
defparam rom1.INIT_02 = 256'h0000000076CCCCCC7C0C780018306000_0000000076CCCCCC7C0C780000CC0000; // 85(�) 84(�)
defparam rom1.INIT_03 = 256'h0000003C060C3C666060663C00000000_0000000076CCCCCC7C0C7800386C3800; // 87(�) 86(�)
defparam rom1.INIT_04 = 256'h000000007CC6C0C0FEC67C0000C60000_000000007CC6C0C0FEC67C006C381000; // 89(�) 88(�)
defparam rom1.INIT_05 = 256'h000000003C1818181818380000660000_000000007CC6C0C0FEC67C0018306000; // 8b(�) 8a(�)
defparam rom1.INIT_06 = 256'h000000003C1818181818380018306000_000000003C18181818183800663C1800; // 8d(�) 8c(�)
defparam rom1.INIT_07 = 256'h00000000C6C6C6FEC6C66C3800386C38_00000000C6C6C6FEC6C66C381000C600; // 8f(�) 8e(�)
defparam rom1.INIT_08 = 256'h000000006ED8D87E3676CC0000000000_00000000FE6660607C6066FE00603018; // 91(�) 90(�)
defparam rom1.INIT_09 = 256'h000000007CC6C6C6C6C67C006C381000_00000000CECCCCCCCCFECCCC6C3E0000; // 93(�) 92(�)
defparam rom1.INIT_0A = 256'h000000007CC6C6C6C6C67C0018306000_000000007CC6C6C6C6C67C0000C60000; // 95(�) 94(�)
defparam rom1.INIT_0B = 256'h0000000076CCCCCCCCCCCC0018306000_0000000076CCCCCCCCCCCC00CC783000; // 97(�) 96(�)
defparam rom1.INIT_0C = 256'h000000007CC6C6C6C6C6C6C67C00C600_00780C067EC6C6C6C6C6C60000C60000; // 99(�) 98(�)
defparam rom1.INIT_0D = 256'h0000000018183C66606060663C181800_000000007CC6C6C6C6C6C6C6C600C600; // 9b(�) 9a(�)
defparam rom1.INIT_0E = 256'h000000001818187E187E183C66660000_00000000FCE660606060F060646C3800; // 9d(�) 9c(�)
defparam rom1.INIT_0F = 256'h000070D818181818187E1818181B0E00_00000000C6CCCCCCDECCC4F8CCCCF800; // 9f(�) 9e(�)
defparam rom1.INIT_10 = 256'h000000003C1818181818380030180C00_0000000076CCCCCC7C0C780060301800; // a1(�) a0(�)
defparam rom1.INIT_11 = 256'h0000000076CCCCCCCCCCCC0060301800_000000007CC6C6C6C6C67C0060301800; // a3(�) a2(�)
defparam rom1.INIT_12 = 256'h00000000C6C6C6CEDEFEF6E6C600DC76_00000000666666666666DC00DC760000; // a5(�) a4(�)
defparam rom1.INIT_13 = 256'h0000000000000000007C00386C6C3800_0000000000000000007E003E6C6C3C00; // a7(�) a6(�)
defparam rom1.INIT_14 = 256'h0000000000C0C0C0C0FE000000000000_000000007CC6C6C06030300030300000; // a9(�) a8(�)
defparam rom1.INIT_15 = 256'h00003E180C86DC603018CCC6C2C0C000_000000000006060606FE000000000000; // ab(�) aa(�)
defparam rom1.INIT_16 = 256'h00000000183C3C3C1818180018180000_000006063E9ECE663018CCC6C2C0C000; // ad(�) ac(�)
defparam rom1.INIT_17 = 256'h000000000000D86C366CD80000000000_000000000000366CD86C360000000000; // af(�) ae(�)
defparam rom1.INIT_18 = 256'hAA55AA55AA55AA55AA55AA55AA55AA55_44114411441144114411441144114411; // b1(�) b0(�)
defparam rom1.INIT_19 = 256'h18181818181818181818181818181818_77DD77DD77DD77DD77DD77DD77DD77DD; // b3(�) b2(�)
defparam rom1.INIT_1A = 256'h1818181818181818F818F81818181818_1818181818181818F818181818181818; // b5(�) b4(�)
defparam rom1.INIT_1B = 256'h3636363636363636FE00000000000000_3636363636363636F636363636363636; // b7(�) b6(�)
defparam rom1.INIT_1C = 256'h3636363636363636F606F63636363636_1818181818181818F818F80000000000; // b9(�) b8(�)
defparam rom1.INIT_1D = 256'h3636363636363636F606FE0000000000_36363636363636363636363636363636; // bb(�) ba(�)
defparam rom1.INIT_1E = 256'h0000000000000000FE36363636363636_0000000000000000FE06F63636363636; // bd(�) bc(�)
defparam rom1.INIT_1F = 256'h1818181818181818F800000000000000_0000000000000000F818F81818181818; // bf(�) be(�)
defparam rom1.INIT_20 = 256'h0000000000000000FF18181818181818_00000000000000001F18181818181818; // c1(�) c0(�)
defparam rom1.INIT_21 = 256'h18181818181818181F18181818181818_1818181818181818FF00000000000000; // c3(�) c2(�)
defparam rom1.INIT_22 = 256'h1818181818181818FF18181818181818_0000000000000000FF00000000000000; // c5(�) c4(�)
defparam rom1.INIT_23 = 256'h36363636363636363736363636363636_18181818181818181F181F1818181818; // c7(�) c6(�)
defparam rom1.INIT_24 = 256'h363636363636363637303F0000000000_00000000000000003F30373636363636; // c9(�) c8(�)
defparam rom1.INIT_25 = 256'h3636363636363636F700FF0000000000_0000000000000000FF00F73636363636; // cb(�) ca(�)
defparam rom1.INIT_26 = 256'h0000000000000000FF00FF0000000000_36363636363636363730373636363636; // cd(�) cc(�)
defparam rom1.INIT_27 = 256'h0000000000000000FF00FF1818181818_3636363636363636F700F73636363636; // cf(�) ce(�)
defparam rom1.INIT_28 = 256'h1818181818181818FF00FF0000000000_0000000000000000FF36363636363636; // d1(�) d0(�)
defparam rom1.INIT_29 = 256'h00000000000000003F36363636363636_3636363636363636FF00000000000000; // d3(�) d2(�)
defparam rom1.INIT_2A = 256'h18181818181818181F181F0000000000_00000000000000001F181F1818181818; // d5(�) d4(�)
defparam rom1.INIT_2B = 256'h3636363636363636FF36363636363636_36363636363636363F00000000000000; // d7(�) d6(�)
defparam rom1.INIT_2C = 256'h0000000000000000F818181818181818_1818181818181818FF18FF1818181818; // d9(�) d8(�)
defparam rom1.INIT_2D = 256'hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_18181818181818181F00000000000000; // db(�) da(�)
defparam rom1.INIT_2E = 256'hF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0_FFFFFFFFFFFFFFFFFF00000000000000; // dd(�) dc(�)
defparam rom1.INIT_2F = 256'h000000000000000000FFFFFFFFFFFFFF_0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F; // df(�) de(�)
defparam rom1.INIT_30 = 256'h00000000CCC6C6C6CCD8CCCCCC780000_0000000076DCD8D8D8DC760000000000; // e1(�) e0(�)
defparam rom1.INIT_31 = 256'h000000006C6C6C6C6C6C6CFE00000000_00000000C0C0C0C0C0C0C0C6C6FE0000; // e3(�) e2(�)
defparam rom1.INIT_32 = 256'h0000000070D8D8D8D8D87E0000000000_00000000FEC66030183060C6FE000000; // e5(�) e4(�)
defparam rom1.INIT_33 = 256'h00000000181818181818DC7600000000_000000C060607C666666666600000000; // e7(�) e6(�)
defparam rom1.INIT_34 = 256'h00000000386CC6C6FEC6C66C38000000_000000007E183C6666663C187E000000; // e9(�) e8(�)
defparam rom1.INIT_35 = 256'h000000003C666666663E0C18301E0000_00000000EE6C6C6C6CC6C6C66C380000; // eb(�) ea(�)
defparam rom1.INIT_36 = 256'h00000000C0607EF3DBDB7E0603000000_0000000000007EDBDBDB7E0000000000; // ed(�) ec(�)
defparam rom1.INIT_37 = 256'h00000000C6C6C6C6C6C6C6C67C000000_000000001C306060607C6060301C0000; // ef(�) ee(�)
defparam rom1.INIT_38 = 256'h00000000FF000018187E181800000000_0000000000FE0000FE0000FE00000000; // f1(�) f0(�)
defparam rom1.INIT_39 = 256'h000000007E000C18306030180C000000_000000007E0030180C060C1830000000; // f3(�) f2(�)
defparam rom1.INIT_3A = 256'h0000000070D8D8D81818181818181818_18181818181818181818181B1B0E0000; // f5(�) f4(�)
defparam rom1.INIT_3B = 256'h000000000000DC7600DC760000000000_00000000001818007E00181800000000; // f7(�) f6(�)
defparam rom1.INIT_3C = 256'h00000000000000181800000000000000_0000000000000000000000386C6C3800; // f9(�) f8(�)
defparam rom1.INIT_3D = 256'h000000001C3C6C6CEC0C0C0C0C0C0F00_00000000000000180000000000000000; // fb(�) fa(�)
defparam rom1.INIT_3E = 256'h000000000000000000F8C86030D87000_0000000000000000006C6C6C6C6CD800; // fd(�) fc(�)
defparam rom1.INIT_3F = 256'h00000000000000000000000000000000_00000000007C7C7C7C7C7C7C00000000; // ff(�) fe(�)
 
// Assignments
assign rdata = addr[11] ? rdata1 : rdata0;
endmodule
/trunk/soc/vga/rtl/ram2k_b16.v
0,0 → 1,40
`timescale 1ns/10ps
 
module ram_2k (clk, rst, cs, we, addr, rdata, wdata);
// IO Ports
input clk;
input rst;
input cs;
input we;
input [10:0] addr;
output [7:0] rdata;
input [7:0] wdata;
 
// Net declarations
wire dp;
 
// Module instantiations
RAMB16_S9 ram (.DO(rdata),
.DOP (dp),
.ADDR (addr),
.CLK (clk),
.DI (wdata),
.DIP (dp),
.EN (cs),
.SSR (rst),
.WE (we));
 
defparam ram.INIT_00 = 256'h554456_2043504F53_20302E3176_20726F737365636F7270_2074655A;
/*
defparam ram.INIT_00 = 256'h3130393837363534333231303938373635343332313039383736353433323130;
defparam ram.INIT_01 = 256'h3332313039383736353433323130393837363534333231303938373635343332;
defparam ram.INIT_02 = 256'h3534333231303938373635343332313039383736353433323130393837363534;
defparam ram.INIT_03 = 256'h3736353433323130393837363534333231303938373635343332313039383736;
defparam ram.INIT_04 = 256'h3938373635343332313039383736353433323130393837363534333231303938;
defparam ram.INIT_05 = 256'h3130393837363534333231303938373635343332313039383736353433323130;
defparam ram.INIT_06 = 256'h3332313039383736353433323130393837363534333231303938373635343332;
defparam ram.INIT_07 = 256'h3534333231303938373635343332313039383736353433323130393837363534;
defparam ram.INIT_08 = 256'h3736353433323130393837363534333231303938373635343332313039383736;
defparam ram.INIT_09 = 256'h3938373635343332313039383736353433323130393837363534333231303938;
*/
endmodule
/trunk/soc/vga/sim/tb.do
0,0 → 1,8
vdel -all -lib work
vmap unisims /opt/Xilinx/10.1/modelsim/verilog/unisims
vlib work
vlog -work work -lint vdu.v vdu_tb.v ram2k_b16_attr.v ram2k_b16.v char_rom_b16.v
vlog -work work /opt/Xilinx/10.1/ISE/verilog/src/glbl.v
vsim -L /opt/Xilinx/10.1/modelsim/verilog/unisims -novopt -t ns work.vdu_tb work.glbl
add wave -radix hexadecimal /vdu_tb/vdu0/*
 
/trunk/soc/vga/sim/vdu_tb.v
0,0 → 1,34
`timescale 1ns / 1ps
 
module vdu_tb;
 
reg clk;
reg rst;
 
wire [1:0] tft_lcd_r;
wire [1:0] tft_lcd_g;
wire [1:0] tft_lcd_b;
wire tft_lcd_hsync;
wire tft_lcd_vsync;
 
vdu vdu0 (
.wb_rst_i (rst),
.wb_clk_i (clk), // 25MHz VDU clock
.vga_red_o (tft_lcd_r),
.vga_green_o (tft_lcd_g),
.vga_blue_o (tft_lcd_b),
.horiz_sync (tft_lcd_hsync),
.vert_sync (tft_lcd_vsync)
);
 
always #20 clk <= ~clk;
 
initial
begin
rst <= 1'b0;
clk <= 1'b0;
#25 rst <= 1'b1;
#50 rst <= 1'b0;
end
 
endmodule
/trunk/doc/schema.svg File deleted
/trunk/doc/schematic.odg File deleted \ No newline at end of file
/trunk/doc/cpu.svg
0,0 → 1,1027
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="531.49609"
height="331.76306"
id="svg5448"
sodipodi:version="0.32"
inkscape:version="0.46"
version="1.0"
sodipodi:docbase="/home/zeus/pfc/doc/figs"
sodipodi:docname="cpu.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="/home/zeus/pfc/doc/system.png"
inkscape:export-xdpi="300"
inkscape:export-ydpi="300">
<defs
id="defs5450">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 165.88153 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="531.49609 : 165.88153 : 1"
inkscape:persp3d-origin="265.74805 : 110.58769 : 1"
id="perspective4007" />
<linearGradient
inkscape:collect="always"
id="linearGradient4423">
<stop
style="stop-color:#ff6600;stop-opacity:1;"
offset="0"
id="stop4425" />
<stop
style="stop-color:#ff6600;stop-opacity:0;"
offset="1"
id="stop4427" />
</linearGradient>
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mend"
style="overflow:visible">
<path
id="path3643"
d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.4,0,0,-0.4,-4,0)" />
</marker>
<marker
inkscape:stockid="TriangleOutM"
orient="auto"
refY="0"
refX="0"
id="TriangleOutM"
style="overflow:visible">
<path
id="path3551"
d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="scale(0.4,0.4)" />
</marker>
<marker
inkscape:stockid="TriangleOutS"
orient="auto"
refY="0"
refX="0"
id="TriangleOutS"
style="overflow:visible">
<path
id="path3548"
d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="scale(0.2,0.2)" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend"
style="overflow:visible">
<path
id="path3625"
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(-0.6,-0.6)" />
</marker>
<marker
inkscape:stockid="Arrow2Send"
orient="auto"
refY="0"
refX="0"
id="Arrow2Send"
style="overflow:visible">
<path
id="path3619"
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="matrix(-0.3,0,0,-0.3,0.69,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Send"
orient="auto"
refY="0"
refX="0"
id="Arrow1Send"
style="overflow:visible">
<path
id="path3637"
d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.2,0,0,-0.2,-1.2,0)" />
</marker>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4423"
id="radialGradient4429"
cx="329.58322"
cy="314.35028"
fx="329.58322"
fy="314.35028"
r="21.449848"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
gradientUnits="userSpaceOnUse" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4423"
id="radialGradient4447"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
cx="329.58322"
cy="314.35028"
fx="329.58322"
fy="314.35028"
r="21.449848" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4423"
id="radialGradient4453"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
cx="329.58322"
cy="314.35028"
fx="329.58322"
fy="314.35028"
r="21.449848" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4423"
id="radialGradient4459"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
cx="329.58322"
cy="314.35028"
fx="329.58322"
fy="314.35028"
r="21.449848" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4423"
id="radialGradient4465"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
cx="329.58322"
cy="314.35028"
fx="329.58322"
fy="314.35028"
r="21.449848" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4423"
id="radialGradient4471"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
cx="329.58322"
cy="314.35028"
fx="329.58322"
fy="314.35028"
r="21.449848" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4423"
id="radialGradient4477"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
cx="329.58322"
cy="314.35028"
fx="329.58322"
fy="314.35028"
r="21.449848" />
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="marker2679"
style="overflow:visible">
<path
id="path2681"
d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.4,0,0,-0.4,-4,0)" />
</marker>
<marker
inkscape:stockid="TriangleOutM"
orient="auto"
refY="0"
refX="0"
id="marker2683"
style="overflow:visible">
<path
id="path2685"
d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="scale(0.4,0.4)" />
</marker>
<marker
inkscape:stockid="TriangleOutS"
orient="auto"
refY="0"
refX="0"
id="marker2687"
style="overflow:visible">
<path
id="path2689"
d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="scale(0.2,0.2)" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="marker2691"
style="overflow:visible">
<path
id="path2693"
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="scale(-0.6,-0.6)" />
</marker>
<marker
inkscape:stockid="Arrow2Send"
orient="auto"
refY="0"
refX="0"
id="marker2695"
style="overflow:visible">
<path
id="path2697"
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
transform="matrix(-0.3,0,0,-0.3,0.69,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Send"
orient="auto"
refY="0"
refX="0"
id="marker2699"
style="overflow:visible">
<path
id="path2701"
d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.2,0,0,-0.2,-1.2,0)" />
</marker>
<radialGradient
r="21.449848"
fy="314.35028"
fx="329.58322"
cy="314.35028"
cx="329.58322"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
gradientUnits="userSpaceOnUse"
id="radialGradient11396"
xlink:href="#linearGradient4423"
inkscape:collect="always" />
<radialGradient
r="21.449848"
fy="314.35028"
fx="329.58322"
cy="314.35028"
cx="329.58322"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
gradientUnits="userSpaceOnUse"
id="radialGradient11394"
xlink:href="#linearGradient4423"
inkscape:collect="always" />
<radialGradient
r="21.449848"
fy="314.35028"
fx="329.58322"
cy="314.35028"
cx="329.58322"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
gradientUnits="userSpaceOnUse"
id="radialGradient11392"
xlink:href="#linearGradient4423"
inkscape:collect="always" />
<radialGradient
r="21.449848"
fy="314.35028"
fx="329.58322"
cy="314.35028"
cx="329.58322"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
gradientUnits="userSpaceOnUse"
id="radialGradient11390"
xlink:href="#linearGradient4423"
inkscape:collect="always" />
<radialGradient
r="21.449848"
fy="314.35028"
fx="329.58322"
cy="314.35028"
cx="329.58322"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
gradientUnits="userSpaceOnUse"
id="radialGradient11388"
xlink:href="#linearGradient4423"
inkscape:collect="always" />
<radialGradient
r="21.449848"
fy="314.35028"
fx="329.58322"
cy="314.35028"
cx="329.58322"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
gradientUnits="userSpaceOnUse"
id="radialGradient11386"
xlink:href="#linearGradient4423"
inkscape:collect="always" />
<radialGradient
r="21.449848"
fy="314.35028"
fx="329.58322"
cy="314.35028"
cx="329.58322"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
gradientUnits="userSpaceOnUse"
id="radialGradient11384"
xlink:href="#linearGradient4423"
inkscape:collect="always" />
<radialGradient
r="21.449848"
fy="314.35028"
fx="329.58322"
cy="314.35028"
cx="329.58322"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
gradientUnits="userSpaceOnUse"
id="radialGradient11382"
xlink:href="#linearGradient4423"
inkscape:collect="always" />
<radialGradient
r="21.449848"
fy="314.35028"
fx="329.58322"
cy="314.35028"
cx="329.58322"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
gradientUnits="userSpaceOnUse"
id="radialGradient11380"
xlink:href="#linearGradient4423"
inkscape:collect="always" />
<radialGradient
r="21.449848"
fy="314.35028"
fx="329.58322"
cy="314.35028"
cx="329.58322"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
gradientUnits="userSpaceOnUse"
id="radialGradient11378"
xlink:href="#linearGradient4423"
inkscape:collect="always" />
<radialGradient
r="21.449848"
fy="314.35028"
fx="329.58322"
cy="314.35028"
cx="329.58322"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
gradientUnits="userSpaceOnUse"
id="radialGradient11376"
xlink:href="#linearGradient4423"
inkscape:collect="always" />
<radialGradient
r="21.449848"
fy="314.35028"
fx="329.58322"
cy="314.35028"
cx="329.58322"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
gradientUnits="userSpaceOnUse"
id="radialGradient11374"
xlink:href="#linearGradient4423"
inkscape:collect="always" />
<radialGradient
r="21.449848"
fy="314.35028"
fx="329.58322"
cy="314.35028"
cx="329.58322"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
gradientUnits="userSpaceOnUse"
id="radialGradient11372"
xlink:href="#linearGradient4423"
inkscape:collect="always" />
<radialGradient
r="21.449848"
fy="314.35028"
fx="329.58322"
cy="314.35028"
cx="329.58322"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
gradientUnits="userSpaceOnUse"
id="radialGradient11370"
xlink:href="#linearGradient4423"
inkscape:collect="always" />
<radialGradient
r="21.449848"
fy="314.35028"
fx="329.58322"
cy="314.35028"
cx="329.58322"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
gradientUnits="userSpaceOnUse"
id="radialGradient11368"
xlink:href="#linearGradient4423"
inkscape:collect="always" />
<radialGradient
r="21.449848"
fy="314.35028"
fx="329.58322"
cy="314.35028"
cx="329.58322"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
gradientUnits="userSpaceOnUse"
id="radialGradient11366"
xlink:href="#linearGradient4423"
inkscape:collect="always" />
<radialGradient
r="21.449848"
fy="314.35028"
fx="329.58322"
cy="314.35028"
cx="329.58322"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
gradientUnits="userSpaceOnUse"
id="radialGradient11364"
xlink:href="#linearGradient4423"
inkscape:collect="always" />
<radialGradient
r="21.449848"
fy="314.35028"
fx="329.58322"
cy="314.35028"
cx="329.58322"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
gradientUnits="userSpaceOnUse"
id="radialGradient11362"
xlink:href="#linearGradient4423"
inkscape:collect="always" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0000027,0,-8.4040814e-4)"
r="21.449848"
fy="314.35028"
fx="329.58322"
cy="314.35028"
cx="329.58322"
id="radialGradient11360"
xlink:href="#linearGradient4423"
inkscape:collect="always" />
<marker
style="overflow:visible"
id="marker11356"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Send">
<path
transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
id="path11358" />
</marker>
<marker
style="overflow:visible"
id="marker11352"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Send">
<path
transform="matrix(-0.3,0,0,-0.3,0.69,0)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
id="path11354" />
</marker>
<marker
style="overflow:visible"
id="marker11348"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Mend">
<path
transform="scale(-0.6,-0.6)"
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
id="path11350" />
</marker>
<marker
style="overflow:visible"
id="marker11344"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutS">
<path
transform="scale(0.2,0.2)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z "
id="path11346" />
</marker>
<marker
style="overflow:visible"
id="marker11340"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutM">
<path
transform="scale(0.4,0.4)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
d="M 5.77,0 L -2.88,5 L -2.88,-5 L 5.77,0 z "
id="path11342" />
</marker>
<marker
style="overflow:visible"
id="marker11336"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
id="path11338" />
</marker>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4423"
id="radialGradient12450"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0000027,678.47563,-20.528827)"
cx="329.58322"
cy="314.35028"
fx="329.58322"
fy="314.35028"
r="21.449848" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4423"
id="radialGradient12452"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0000027,-660.67068,-155.77498)"
cx="329.58322"
cy="314.35028"
fx="329.58322"
fy="314.35028"
r="21.449848" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4423"
id="radialGradient12458"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0000027,-494.27072,-465.23991)"
cx="329.58322"
cy="314.35028"
fx="329.58322"
fy="314.35028"
r="21.449848" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4423"
id="radialGradient12464"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0000027,-195.43083,-650.04486)"
cx="329.58322"
cy="314.35028"
fx="329.58322"
fy="314.35028"
r="21.449848" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4423"
id="radialGradient12470"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0000027,155.77414,-660.67152)"
cx="329.58322"
cy="314.35028"
fx="329.58322"
fy="314.35028"
r="21.449848" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4423"
id="radialGradient12476"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0000027,465.23907,-494.27156)"
cx="329.58322"
cy="314.35028"
fx="329.58322"
fy="314.35028"
r="21.449848" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4423"
id="radialGradient12482"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0000027,650.04402,-195.43168)"
cx="329.58322"
cy="314.35028"
fx="329.58322"
fy="314.35028"
r="21.449848" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4423"
id="radialGradient13026"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0000027,678.47563,-20.528827)"
cx="329.58322"
cy="314.35028"
fx="329.58322"
fy="314.35028"
r="21.449848" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4423"
id="radialGradient13028"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0000027,-660.67068,-155.77498)"
cx="329.58322"
cy="314.35028"
fx="329.58322"
fy="314.35028"
r="21.449848" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4423"
id="radialGradient13034"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0000027,-494.27072,-465.23991)"
cx="329.58322"
cy="314.35028"
fx="329.58322"
fy="314.35028"
r="21.449848" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4423"
id="radialGradient13040"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0000027,-195.43083,-650.04486)"
cx="329.58322"
cy="314.35028"
fx="329.58322"
fy="314.35028"
r="21.449848" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4423"
id="radialGradient13046"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0000027,155.77414,-660.67152)"
cx="329.58322"
cy="314.35028"
fx="329.58322"
fy="314.35028"
r="21.449848" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4423"
id="radialGradient13052"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0000027,465.23907,-494.27156)"
cx="329.58322"
cy="314.35028"
fx="329.58322"
fy="314.35028"
r="21.449848" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4423"
id="radialGradient13058"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.0000027,650.04402,-195.43168)"
cx="329.58322"
cy="314.35028"
fx="329.58322"
fy="314.35028"
r="21.449848" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="white"
bordercolor="#00a0cc"
borderopacity="1"
gridtolerance="10000"
guidetolerance="10"
objecttolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="1.4142136"
inkscape:cx="409.91733"
inkscape:cy="87.521234"
inkscape:document-units="mm"
inkscape:current-layer="layer4"
width="1052.3622px"
height="744.09449px"
showborder="false"
borderlayer="false"
inkscape:showpageshadow="false"
showgrid="true"
grid_units="mm"
inkscape:grid-points="true"
inkscape:grid-bbox="false"
inkscape:window-width="971"
inkscape:window-height="825"
inkscape:window-x="187"
inkscape:window-y="108"
inkscape:object-paths="false"
inkscape:guide-bbox="true"
showguides="true"
units="mm"
inkscape:guide-points="true"
inkscape:object-nodes="false">
<inkscape:grid
id="GridFromPre046Settings"
type="xygrid"
originx="0px"
originy="0px"
spacingx="0.5mm"
spacingy="0.5mm"
color="#0000ff"
empcolor="#0000ff"
opacity="0.2"
empopacity="0.4"
empspacing="5"
units="mm"
visible="true"
enabled="true" />
</sodipodi:namedview>
<metadata
id="metadata5453">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="Frames"
style="opacity:1;display:inline"
transform="translate(-356.18916,29.146127)">
<rect
rx="17"
ry="17"
y="236.93549"
x="279.20203"
height="214.50037"
width="282.4989"
id="rect6307"
style="opacity:0.17924529;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffff00;stroke-width:13.99960613;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
<text
transform="matrix(0,-1,1,0,0,0)"
sodipodi:linespacing="100%"
id="text6309"
y="292.40964"
x="-437.2626"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#fdca01;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold"
xml:space="preserve"><tspan
y="292.40964"
x="-437.2626"
id="tspan6311"
sodipodi:role="line">fetch</tspan></text>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;opacity:1;fill:#336699;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold"
x="-446.12088"
y="903.63013"
id="text4413"
sodipodi:linespacing="100%"
transform="matrix(0,-1,1,0,0,0)"><tspan
sodipodi:role="line"
id="tspan4415"
x="-446.12088"
y="903.63013">exec</tspan></text>
<rect
style="opacity:0.17924529;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#013397;stroke-width:13.99960613;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect4206"
width="292.32281"
height="380.90552"
x="613.07892"
y="81.16024"
ry="17"
rx="17" />
<path
style="fill:#b9ffc0;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.54330254;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 834.53561,391.19961 L 772.52774,419.54607 L 772.52774,378.79804 L 790.24427,371.71143 L 772.52774,364.62481 L 772.52774,323.87678 L 834.53561,353.99489 L 834.53561,391.19961 z"
id="rect6393"
sodipodi:nodetypes="cccccccc" />
<rect
transform="matrix(0,-1,1,0,0,0)"
y="666.22852"
x="-293.75867"
height="97.440941"
width="115.1577"
id="rect3081"
style="opacity:1;fill:#f0e1ff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.54330254;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<path
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.54330707;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
d="M 768.98444,343.36497 L 765.44112,339.82165 L 765.44112,346.90827 L 768.98444,343.36497 z"
id="path5190"
sodipodi:nodetypes="cccc" />
<path
sodipodi:nodetypes="ccc"
id="path5235"
d="M 742.40963,291.98707 L 742.40963,343.45235 L 765.44113,343.36497"
style="opacity:1;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.54330707;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
<text
sodipodi:linespacing="100%"
id="text6395"
y="240.60905"
x="714.41382"
style="font-size:14;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:100%;writing-mode:lr-tb;text-anchor:middle;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
id="tspan6397"
y="240.60905"
x="714.41382"
sodipodi:role="line">regfile</tspan></text>
<text
xml:space="preserve"
style="font-size:14px;font-style:normal;font-weight:bold;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold"
x="802.64587"
y="377.0264"
id="text4772"><tspan
sodipodi:role="line"
id="tspan4774"
x="802.64587"
y="377.0264">alu</tspan></text>
<g
style="display:inline"
id="g4732"
transform="matrix(1,0,0,-1,405.04843,659.95654)">
<rect
transform="matrix(0,-1,1,0,0,0)"
y="287.09473"
x="-290.01682"
height="35.433022"
width="63.779522"
id="rect4726"
style="opacity:1;fill:#f7ffb9;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.54330254;stroke-linecap:square;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<path
sodipodi:nodetypes="cccc"
id="path4730"
d="M 322.52768,258.12704 L 287.09468,286.4735 L 287.09468,229.78059 L 322.52768,258.12704 z"
style="opacity:1;fill:none;fill-rule:nonzero;stroke:#000000;stroke-width:3.5433073;stroke-linecap:square;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
</g>
<path
sodipodi:nodetypes="cccc"
id="path5045"
d="M 688.59982,421.31768 L 685.0565,417.77436 L 685.0565,424.86098 L 688.59982,421.31768 z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.54330707;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
<path
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.54330707;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
d="M 688.59982,382.34131 L 685.0565,378.79799 L 685.0565,385.88461 L 688.59982,382.34131 z"
id="path5053"
sodipodi:nodetypes="cccc" />
<path
sodipodi:type="arc"
style="fill:#eab9ff;fill-opacity:1;stroke:none;stroke-width:3.54330707;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
id="path5055"
sodipodi:cx="500.49213"
sodipodi:cy="305.61023"
sodipodi:rx="7.7467957"
sodipodi:ry="7.7467957"
d="M 508.23892,305.61023 A 7.7467957,7.7467957 0 1 1 492.74533,305.61023 A 7.7467957,7.7467957 0 1 1 508.23892,305.61023 z"
transform="matrix(-1,0,0,-1,1203.2652,687.95157)" />
<text
xml:space="preserve"
style="font-size:14px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans"
x="-707.11627"
y="-377.02634"
id="text5057"
transform="scale(-1,-1)"><tspan
sodipodi:role="line"
id="tspan5059"
x="-707.11627"
y="-377.02634">1</tspan></text>
<path
transform="matrix(-1,0,0,-1,1203.2652,726.9279)"
d="M 508.23892,305.61023 A 7.7467957,7.7467957 0 1 1 492.74533,305.61023 A 7.7467957,7.7467957 0 1 1 508.23892,305.61023 z"
sodipodi:ry="7.7467957"
sodipodi:rx="7.7467957"
sodipodi:cy="305.61023"
sodipodi:cx="500.49213"
id="path5061"
style="fill:#eab9ff;fill-opacity:1;stroke:none;stroke-width:3.54330707;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
sodipodi:type="arc" />
<text
id="text5063"
y="-416.00266"
x="-707.11621"
style="font-size:14px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans"
xml:space="preserve"
transform="scale(-1,-1)"><tspan
y="-416.00266"
x="-707.11621"
id="tspan5065"
sodipodi:role="line">0</tspan></text>
<path
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.54330707;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
d="M 709.85965,437.26255 L 708.08799,439.03419 L 711.63129,439.03419 L 709.85965,437.26255 z"
id="path5071"
sodipodi:nodetypes="cccc" />
</g>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-458.41358,-33.651178)"
style="opacity:1;display:inline">
<rect
style="opacity:1;color:#000000;fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.54399991;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect3251"
width="0"
height="7.0866141"
x="920.77161"
y="576.93512"
ry="0" />
<g
style="opacity:1;display:inline"
id="g4018"
transform="matrix(-2,0,0,-2,1872.3126,1146.073)" />
<rect
ry="0"
y="559.57684"
x="-475.29138"
height="7.0866141"
width="0"
id="rect11662"
style="color:#000000;fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.54399991;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
<g
transform="matrix(-2,0,0,-2,476.2496,1128.7147)"
id="g11710"
style="display:inline" />
<g
transform="translate(-963.023,-539.34497)"
style="display:inline"
inkscape:label="Frames"
id="g2705" />
<rect
style="color:#000000;fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.54399991;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
id="rect2724"
width="0"
height="7.0866141"
x="-113.87404"
y="6.8209252"
ry="0" />
<g
style="display:inline"
id="g2736"
transform="matrix(-2,0,0,-2,837.668,575.95973)" />
<path
sodipodi:type="arc"
style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:3.54330707;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path5985"
sodipodi:cx="301.18109"
sodipodi:cy="124.01572"
sodipodi:rx="0"
sodipodi:ry="0"
d="M 301.18109 124.01572 A 0 0 0 1 1 301.18109,124.01572 A 0 0 0 1 1 301.18109 124.01572 z"
transform="translate(-1035.1338,-510.50197)" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="-736.2063"
y="-477.35321"
id="text12449"><tspan
sodipodi:role="line"
id="tspan12451"
x="-736.2063"
y="-477.35321" /></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
x="-691.65857"
y="-358.55927"
id="text12475"><tspan
sodipodi:role="line"
id="tspan12477"
x="-691.65857"
y="-358.55927" /></text>
</g>
</svg>
/trunk/src/splitlh.c File deleted
/trunk/src/Makefile File deleted
/trunk/src/tools/splitlh.c
0,0 → 1,47
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
 
int main(int argc, char *argv[])
{
int fd, count, out0, out1;
char word[2];
 
if (argc != 4) fprintf(stderr, "Syntax: %s infile evenfile oddfile\n",
argv[0]);
fd=open(argv[1], O_RDONLY);
if(fd < 0)
{
fprintf(stderr, "Error opening file\n");
return 1;
}
 
out0 = open (argv[2], O_WRONLY|O_CREAT|O_TRUNC,
S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
if(out0 < 0)
{
fprintf(stderr, "Error creating even file\n");
return 2;
}
 
out1 = open (argv[3], O_WRONLY|O_CREAT|O_TRUNC,
S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
if(out1 < 0)
{
fprintf(stderr, "Error creating odd file\n");
return 3;
}
 
do {
count = read(fd, word, 2);
if (count > 0) write(out0, &word[0], 1);
if (count > 1) write(out1, &word[1], 1);
} while (count > 0);
 
close (fd);
close (out0);
close (out1);
return 0;
}
/trunk/src/tools/out2rom-ml403.c
0,0 → 1,61
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
char buf1[2];
char buf2[2];
int f1, f2, c1, c2;
char err[50];
 
if (argc!=3)
{
sprintf(err, "Usage: %s hd.img bios.img\n", argv[0]);
write(2, &err, strlen(err));
exit(1);
}
 
f1 = open (argv[1], O_RDONLY);
if (f1<0)
{
sprintf(err, "Could not open file %s\n", argv[1]);
write(2, &err, strlen(err));
exit(1);
}
 
f2 = open (argv[2], O_RDONLY);
if (f2<0)
{
sprintf(err, "Could not open file %s\n", argv[2]);
write(2, &err, strlen(err));
exit(1);
}
 
while (1)
{
c1=read(f1, &buf1, 2);
c2=read(f2, &buf2, 2);
 
if (c1<2 && c2<2) break;
else
{
if (c1<2) { buf1[0] = 0xff; buf1[1] = 0xff; }
if (c2<2) { buf2[0] = 0xff; buf2[1] = 0xff; }
}
 
write (1, &buf1[1], 1);
write (1, &buf1[0], 1);
write (1, &buf2[1], 1);
write (1, &buf2[0], 1);
}
 
close(f1);
close(f2);
 
return 0;
}
 
/trunk/src/tools/incr-img.c
0,0 → 1,60
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
int f1, f2, c1, c2;
char err[50];
unsigned char *buf1, *buf2;
 
if (argc!=3)
{
sprintf(err, "Usage: %s hdnew.img hdref.img\n", argv[0]);
write(2, &err, strlen(err));
exit(1);
}
 
f1 = open (argv[1], O_RDONLY);
if (f1<0)
{
sprintf(err, "Could not open file %s\n", argv[1]);
write(2, &err, strlen(err));
exit(1);
}
 
f2 = open (argv[2], O_RDONLY);
if (f2<0)
{
sprintf(err, "Could not open file %s\n", argv[2]);
write(2, &err, strlen(err));
exit(1);
}
 
buf1 = malloc(131072);
if (!buf1)
{
sprintf(err, "Could not allocate 128kb of memory for the 1st buffer\n");
write(2, &err, strlen(err));
exit(1);
}
 
buf2 = malloc(131072);
if (!buf2)
{
sprintf(err, "Could not allocate 128kb of memory for the 2nd buffer\n");
write(2, &err, strlen(err));
exit(1);
}
 
 
c1=read(f1, &buf1, 131072); // 128kb block
c2=read(f2, &buf2, 131072);
 
memcmp (buf1, buf2, 131072);
 
return 0;
}
/trunk/src/tools/ff.c
0,0 → 1,13
int main(int argc, char *argv[])
{
int f = -1;
int i, top;
 
if (argc==2) top=atoi (argv[1]);
else top = 1000000;
 
for (i=0; i<top; i++)
write (1, &f, 4);
 
return 0;
}
/trunk/src/tools/Makefile
0,0 → 1,8
all: ../bin/out2rom-ml403 ../bin/ff
 
../bin/splitlh: splitlh.c
gcc -o ../bin/splitlh splitlh.c
../bin/out2rom-ml403: out2rom-ml403.c
gcc -o ../bin/out2rom-ml403 out2rom-ml403.c
../bin/ff: ff.c
gcc -o ../bin/ff ff.c
/trunk/src/bochs-diff-2.3.7/disasm/syntax.cc
0,0 → 1,293
/////////////////////////////////////////////////////////////////////////
// $Id: syntax.cc,v 1.1 2008-11-14 03:31:24 zeus Exp $
/////////////////////////////////////////////////////////////////////////
 
#include <stdio.h>
#include "disasm.h"
 
//////////////////
// Intel STYLE
//////////////////
 
#define BX_DISASM_SUPPORT_X86_64
 
#ifdef BX_DISASM_SUPPORT_X86_64
 
static const char *intel_general_16bit_regname[16] = {
"ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
"r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
};
 
static const char *intel_general_32bit_regname[16] = {
"eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
"r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d"
};
 
static const char *intel_general_64bit_regname[16] = {
"rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
"r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
};
 
static const char *intel_general_8bit_regname_rex[16] = {
"al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
"r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b"
};
 
#else
 
static const char *intel_general_16bit_regname[8] = {
"ax", "cx", "dx", "bx", "sp", "bp", "si", "di"
};
 
static const char *intel_general_32bit_regname[8] = {
"eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi"
};
 
#endif
 
static const char *intel_general_8bit_regname[8] = {
"al", "cl", "dl", "bl", "ah", "ch", "dh", "bh"
};
 
static const char *intel_segment_name[8] = {
"es", "cs", "ss", "ds", "fs", "gs", "??", "??"
};
 
static const char *intel_index16[8] = {
"bx+si",
"bx+di",
"bp+si",
"bp+di",
"si",
"di",
"bp",
"bx"
};
 
 
//////////////////
// AT&T STYLE
//////////////////
 
#ifdef BX_DISASM_SUPPORT_X86_64
 
static const char *att_general_16bit_regname[16] = {
"%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di",
"%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w"
};
 
static const char *att_general_32bit_regname[16] = {
"%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi",
"%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d"
};
 
static const char *att_general_64bit_regname[16] = {
"%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi",
"%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
};
 
static const char *att_general_8bit_regname_rex[16] = {
"%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil",
"%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b"
};
 
#else
 
static const char *att_general_16bit_regname[8] = {
"%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di"
};
 
static const char *att_general_32bit_regname[8] = {
"%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi"
};
 
#endif
 
static const char *att_general_8bit_regname[8] = {
"%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh"
};
 
static const char *att_segment_name[8] = {
"%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%??", "%??"
};
 
static const char *att_index16[8] = {
"%bx,%si",
"%bx,%di",
"%bp,%si",
"%bp,%di",
"%si",
"%di",
"%bp",
"%bx"
};
 
#define NULL_SEGMENT_REGISTER 7
 
void disassembler::initialize_modrm_segregs()
{
sreg_mod00_rm16[0] = segment_name[DS_REG];
sreg_mod00_rm16[1] = segment_name[DS_REG];
sreg_mod00_rm16[2] = segment_name[SS_REG];
sreg_mod00_rm16[3] = segment_name[SS_REG];
sreg_mod00_rm16[4] = segment_name[DS_REG];
sreg_mod00_rm16[5] = segment_name[DS_REG];
sreg_mod00_rm16[6] = segment_name[DS_REG];
sreg_mod00_rm16[7] = segment_name[DS_REG];
 
sreg_mod01or10_rm16[0] = segment_name[DS_REG];
sreg_mod01or10_rm16[1] = segment_name[DS_REG];
sreg_mod01or10_rm16[2] = segment_name[SS_REG];
sreg_mod01or10_rm16[3] = segment_name[SS_REG];
sreg_mod01or10_rm16[4] = segment_name[DS_REG];
sreg_mod01or10_rm16[5] = segment_name[DS_REG];
sreg_mod01or10_rm16[6] = segment_name[SS_REG];
sreg_mod01or10_rm16[7] = segment_name[DS_REG];
 
sreg_mod01or10_rm32[0] = segment_name[DS_REG];
sreg_mod01or10_rm32[1] = segment_name[DS_REG];
sreg_mod01or10_rm32[2] = segment_name[DS_REG];
sreg_mod01or10_rm32[3] = segment_name[DS_REG];
sreg_mod01or10_rm32[4] = segment_name[NULL_SEGMENT_REGISTER];
sreg_mod01or10_rm32[5] = segment_name[SS_REG];
sreg_mod01or10_rm32[6] = segment_name[DS_REG];
sreg_mod01or10_rm32[7] = segment_name[DS_REG];
sreg_mod01or10_rm32[8] = segment_name[DS_REG];
sreg_mod01or10_rm32[9] = segment_name[DS_REG];
sreg_mod01or10_rm32[10] = segment_name[DS_REG];
sreg_mod01or10_rm32[11] = segment_name[DS_REG];
sreg_mod01or10_rm32[12] = segment_name[NULL_SEGMENT_REGISTER];
sreg_mod01or10_rm32[13] = segment_name[DS_REG];
sreg_mod01or10_rm32[14] = segment_name[DS_REG];
sreg_mod01or10_rm32[15] = segment_name[DS_REG];
 
sreg_mod00_base32[0] = segment_name[DS_REG];
sreg_mod00_base32[1] = segment_name[DS_REG];
sreg_mod00_base32[2] = segment_name[DS_REG];
sreg_mod00_base32[3] = segment_name[DS_REG];
sreg_mod00_base32[4] = segment_name[SS_REG];
sreg_mod00_base32[5] = segment_name[DS_REG];
sreg_mod00_base32[6] = segment_name[DS_REG];
sreg_mod00_base32[7] = segment_name[DS_REG];
sreg_mod00_base32[8] = segment_name[DS_REG];
sreg_mod00_base32[9] = segment_name[DS_REG];
sreg_mod00_base32[10] = segment_name[DS_REG];
sreg_mod00_base32[11] = segment_name[DS_REG];
sreg_mod00_base32[12] = segment_name[DS_REG];
sreg_mod00_base32[13] = segment_name[DS_REG];
sreg_mod00_base32[14] = segment_name[DS_REG];
sreg_mod00_base32[15] = segment_name[DS_REG];
 
sreg_mod01or10_base32[0] = segment_name[DS_REG];
sreg_mod01or10_base32[1] = segment_name[DS_REG];
sreg_mod01or10_base32[2] = segment_name[DS_REG];
sreg_mod01or10_base32[3] = segment_name[DS_REG];
sreg_mod01or10_base32[4] = segment_name[SS_REG];
sreg_mod01or10_base32[5] = segment_name[SS_REG];
sreg_mod01or10_base32[6] = segment_name[DS_REG];
sreg_mod01or10_base32[7] = segment_name[DS_REG];
sreg_mod01or10_base32[8] = segment_name[DS_REG];
sreg_mod01or10_base32[9] = segment_name[DS_REG];
sreg_mod01or10_base32[10] = segment_name[DS_REG];
sreg_mod01or10_base32[11] = segment_name[DS_REG];
sreg_mod01or10_base32[12] = segment_name[DS_REG];
sreg_mod01or10_base32[13] = segment_name[DS_REG];
sreg_mod01or10_base32[14] = segment_name[DS_REG];
sreg_mod01or10_base32[15] = segment_name[DS_REG];
}
 
//////////////////
// Intel STYLE
//////////////////
 
void disassembler::set_syntax_intel()
{
intel_mode = 1;
 
general_16bit_regname = intel_general_16bit_regname;
general_8bit_regname = intel_general_8bit_regname;
general_32bit_regname = intel_general_32bit_regname;
general_8bit_regname_rex = intel_general_8bit_regname_rex;
general_64bit_regname = intel_general_64bit_regname;
 
segment_name = intel_segment_name;
index16 = intel_index16;
 
initialize_modrm_segregs();
}
 
void disassembler::print_disassembly_intel(const x86_insn *insn, const BxDisasmOpcodeInfo_t *entry)
{
// print opcode
dis_sprintf("%s ", entry->IntelOpcode);
 
if (entry->Operand1) {
(this->*entry->Operand1)(insn);
}
if (entry->Operand2) {
dis_sprintf(", ");
(this->*entry->Operand2)(insn);
}
if (entry->Operand3) {
dis_sprintf(", ");
(this->*entry->Operand3)(insn);
}
if (entry->Operand4) {
dis_sprintf(", ");
(this->*entry->Operand4)(insn);
}
}
 
//////////////////
// AT&T STYLE
//////////////////
 
void disassembler::set_syntax_att()
{
intel_mode = 0;
 
general_16bit_regname = att_general_16bit_regname;
general_8bit_regname = att_general_8bit_regname;
general_32bit_regname = att_general_32bit_regname;
general_8bit_regname_rex = att_general_8bit_regname_rex;
general_64bit_regname = att_general_64bit_regname;
 
segment_name = att_segment_name;
index16 = att_index16;
 
initialize_modrm_segregs();
}
 
void disassembler::toggle_syntax_mode()
{
if (intel_mode) set_syntax_att();
else set_syntax_intel();
}
/*
void disassembler::print_disassembly_att(const x86_insn *insn, const BxDisasmOpcodeInfo_t *entry)
{
// print opcode
dis_sprintf("%s ", entry->AttOpcode);
 
if (entry->Operand4) {
(this->*entry->Operand4)(insn);
dis_sprintf(", ");
}
if (entry->Operand3) {
(this->*entry->Operand3)(insn);
dis_sprintf(", ");
}
if (entry->Operand2) {
(this->*entry->Operand2)(insn);
dis_sprintf(", ");
}
if (entry->Operand1) {
(this->*entry->Operand1)(insn);
}
}
*/
void disassembler::print_disassembly_att(const x86_insn *insn, const BxDisasmOpcodeInfo_t *entry)
{
// print opcode
dis_sprintf("%s", entry->AttOpcode);
}
trunk/src/bochs-diff-2.3.7/disasm/syntax.cc Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/src/bochs-diff-2.3.7/configure-zet =================================================================== --- trunk/src/bochs-diff-2.3.7/configure-zet (nonexistent) +++ trunk/src/bochs-diff-2.3.7/configure-zet (revision 39) @@ -0,0 +1,13 @@ +#!/bin/bash +CFLAGS='-g3 -O0' CXXFLAGS='-g3 -O0' ./configure \ + --prefix=$(pwd)/../../opt/bochs-2.3.7-zet \ + --enable-disasm \ + --enable-debugger \ + --disable-docbook \ + --disable-vbe \ + --disable-fpu \ + --disable-mmx \ + --enable-cpu-level=3 \ + --disable-cdrom \ + --enable-logging \ + --enable-instrumentation="instrument/zet"
trunk/src/bochs-diff-2.3.7/configure-zet Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/src/bochs-diff-2.3.7/bochs.h =================================================================== --- trunk/src/bochs-diff-2.3.7/bochs.h (nonexistent) +++ trunk/src/bochs-diff-2.3.7/bochs.h (revision 39) @@ -0,0 +1,633 @@ +///////////////////////////////////////////////////////////////////////// +// $Id: bochs.h,v 1.1 2008-11-14 03:31:22 zeus Exp $ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002 MandrakeSoft S.A. +// +// MandrakeSoft S.A. +// 43, rue d'Aboukir +// 75002 Paris - France +// http://www.linux-mandrake.com/ +// http://www.mandrakesoft.com/ +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +// +// bochs.h is the master header file for all C++ code. It includes all +// the system header files needed by bochs, and also includes all the bochs +// C++ header files. Because bochs.h and the files that it includes has +// structure and class definitions, it cannot be called from C code. +// + +#ifndef BX_BOCHS_H +# define BX_BOCHS_H 1 + +#include "config.h" /* generated by configure script from config.h.in */ + +#ifndef __QNXNTO__ +extern "C" { +#endif + +#ifdef WIN32 +// In a win32 compile (including cygwin), windows.h is required for several +// files in gui and iodev. It is important to include it here in a header +// file so that WIN32-specific data types can be used in fields of classes. +#include +#endif + +#include +#include +#include +#if defined(__sun__) +#undef EAX +#undef ECX +#undef EDX +#undef EBX +#undef ESP +#undef EBP +#undef ESI +#undef EDI +#undef EIP +#undef CS +#undef DS +#undef ES +#undef SS +#undef FS +#undef GS +#endif +#include +#include + +#ifndef WIN32 +# include +#else +# include +#endif +#include +#if BX_WITH_MACOS +# include +# include +# include +# include +#elif BX_WITH_CARBON +# include +# include +# include /* for MAXPATHLEN */ +# include +# include +#else +# ifndef WIN32 +# include +# endif +# include +# include +#endif +#include +#include +#include +#include +#ifdef macintosh +# define SuperDrive "[fd:]" +#endif + +#ifndef __QNXNTO__ +} +#endif + +#include "osdep.h" /* platform dependent includes and defines */ +#include "bx_debug/debug.h" +#include "bxversion.h" + +#include "gui/siminterface.h" + +// BX_SHARE_PATH should be defined by the makefile. If not, give it +// a value of NULL to avoid compile problems. +#ifndef BX_SHARE_PATH +#define BX_SHARE_PATH NULL +#endif + +// prototypes +int bx_begin_simulation(int argc, char *argv[]); +void bx_stop_simulation(); +char *bx_find_bochsrc(void); +int bx_parse_cmdline(int arg, int argc, char *argv[]); +int bx_read_configuration(const char *rcfile); +int bx_write_configuration(const char *rcfile, int overwrite); +void bx_reset_options(void); +Bit32u crc32(const Bit8u *buf, int len); +// for param-tree testing only +void print_tree(bx_param_c *node, int level = 0); + +// +// some macros to interface the CPU and memory to external environment +// so that these functions can be redirected to the debugger when +// needed. +// + +#define BXRS_PARAM_SPECIAL(parent, name, maxvalue, save_handler, restore_handler) \ +{ \ + bx_param_num_c *param = new bx_param_num_c(parent, #name, "", "", 0, maxvalue, 0); \ + param->set_base(BASE_HEX); \ + param->set_sr_handlers(this, save_handler, restore_handler); \ +} + +#define BXRS_PARAM_SPECIAL64(parent, name, save_handler, restore_handler) \ + BXRS_PARAM_SPECIAL(parent, name, BX_MAX_BIT64U, save_handler, restore_handler) +#define BXRS_PARAM_SPECIAL32(parent, name, save_handler, restore_handler) \ + BXRS_PARAM_SPECIAL(parent, name, BX_MAX_BIT32U, save_handler, restore_handler) +#define BXRS_PARAM_SPECIAL16(parent, name, save_handler, restore_handler) \ + BXRS_PARAM_SPECIAL(parent, name, BX_MAX_BIT16U, save_handler, restore_handler) +#define BXRS_PARAM_SPECIAL8(parent, name, save_handler, restore_handler) \ + BXRS_PARAM_SPECIAL(parent, name, BX_MAX_BIT8U, save_handler, restore_handler) + +#define BXRS_HEX_PARAM_SIMPLE32(parent, name) \ + new bx_shadow_num_c(parent, #name, (Bit32u*)&(name), BASE_HEX) +#define BXRS_HEX_PARAM_SIMPLE64(parent, name) \ + new bx_shadow_num_c(parent, #name, (Bit64u*)&(name), BASE_HEX) + +#define BXRS_HEX_PARAM_SIMPLE(parent, name) \ + new bx_shadow_num_c(parent, #name, &(name), BASE_HEX) +#define BXRS_HEX_PARAM_FIELD(parent, name, field) \ + new bx_shadow_num_c(parent, #name, &(field), BASE_HEX) + +#define BXRS_DEC_PARAM_SIMPLE(parent, name) \ + new bx_shadow_num_c(parent, #name, &(name), BASE_DEC) +#define BXRS_DEC_PARAM_FIELD(parent, name, field) \ + new bx_shadow_num_c(parent, #name, &(field), BASE_DEC) + +#define BXRS_PARAM_BOOL(parent, name, field) \ + new bx_shadow_bool_c(parent, #name, (bx_bool*)(&(field))) + +// =-=-=-=-=-=-=- Normal optimized use -=-=-=-=-=-=-=-=-=-=-=-=-=-= +// some pc_systems functions just redirect to the IO devices so optimize +// by eliminating call here +// +// #define BX_INP(addr, len) bx_pc_system.inp(addr, len) +// #define BX_OUTP(addr, val, len) bx_pc_system.outp(addr, val, len) +#define BX_INP(addr, len) bx_devices.inp(addr, len) +#define BX_OUTP(addr, val, len) bx_devices.outp(addr, val, len) +#define BX_TICK1() bx_pc_system.tick1() +#define BX_TICKN(n) bx_pc_system.tickn(n) +#define BX_INTR bx_pc_system.INTR +#define BX_SET_INTR(b) bx_pc_system.set_INTR(b) +#define BX_CPU_C bx_cpu_c +#define BX_MEM_C bx_mem_c +#define BX_HRQ (bx_pc_system.HRQ) + +#if BX_SUPPORT_SMP +#define BX_CPU(x) (bx_cpu_array[x]) +#else +#define BX_CPU(x) (&bx_cpu) +#endif + +#define BX_MEM(x) (&bx_mem) + +#define BX_SET_ENABLE_A20(enabled) bx_pc_system.set_enable_a20(enabled) +#define BX_GET_ENABLE_A20() bx_pc_system.get_enable_a20() + +#if BX_SUPPORT_A20 +# define A20ADDR(x) (bx_phy_address(x) & bx_pc_system.a20_mask) +#else +# define A20ADDR(x) (bx_phy_address(x)) +#endif + +#if BX_SUPPORT_SMP +# define BX_TICK1_IF_SINGLE_PROCESSOR() \ + if (BX_SMP_PROCESSORS == 1) BX_TICK1() +# define BX_TICKN_IF_SINGLE_PROCESSOR(n) \ + if (BX_SMP_PROCESSORS == 1) BX_TICKN(n) +#else +# define BX_TICK1_IF_SINGLE_PROCESSOR() BX_TICK1() +# define BX_TICKN_IF_SINGLE_PROCESSOR(n) BX_TICKN(n) +#endif + +// you can't use static member functions on the CPU, if there are going +// to be 2 cpus. Check this early on. +#if BX_SUPPORT_SMP +# if BX_USE_CPU_SMF +# error For SMP simulation, BX_USE_CPU_SMF must be 0. +# endif +#endif + +// +// Ways for the the external environment to report back information +// to the debugger. +// + +#if BX_DEBUGGER +# define BX_DBG_ASYNC_INTR bx_guard.async.irq +# define BX_DBG_ASYNC_DMA bx_guard.async.dma + +# define BX_DBG_DMA_REPORT(addr, len, what, val) \ + if (bx_guard.report.dma) bx_dbg_dma_report(addr, len, what, val) +# define BX_DBG_IAC_REPORT(vector, irq) \ + if (bx_guard.report.irq) bx_dbg_iac_report(vector, irq) +# define BX_DBG_A20_REPORT(val) \ + if (bx_guard.report.a20) bx_dbg_a20_report(val) +# define BX_DBG_IO_REPORT(port, size, op, val) \ + if (bx_guard.report.io) bx_dbg_io_report(port, size, op, val) +# define BX_DBG_UCMEM_REPORT(addr, size, op, val) \ + if (bx_guard.report.ucmem) bx_dbg_ucmem_report(addr, size, op, val) +# define BX_DBG_LIN_MEMORY_ACCESS(cpu, lin, phy, len, pl, rw, data) \ + bx_dbg_lin_memory_access(cpu, lin, phy, len, pl, rw, data) +# define BX_DBG_PHY_MEMORY_ACCESS(cpu, phy, len, rw, data) \ + bx_dbg_phy_memory_access(cpu, phy, len, rw, data) +#else // #if BX_DEBUGGER +// debugger not compiled in, use empty stubs +# define BX_DBG_ASYNC_INTR 1 +# define BX_DBG_ASYNC_DMA 1 +# define BX_DBG_DMA_REPORT(addr, len, what, val) /* empty */ +# define BX_DBG_IAC_REPORT(vector, irq) /* empty */ +# define BX_DBG_A20_REPORT(val) /* empty */ +# define BX_DBG_IO_REPORT(addr, size, op, val) /* empty */ +# define BX_DBG_UCMEM_REPORT(addr, size, op, val) /* empty */ +# define BX_DBG_LIN_MEMORY_ACCESS(cpu, lin, phy, len, pl, rw, data) /* empty */ +# define BX_DBG_PHY_MEMORY_ACCESS(cpu, phy, len, rw, data) /* empty */ +#endif // #if BX_DEBUGGER + +#define MAGIC_LOGNUM 0x12345678 + +typedef class BOCHSAPI logfunctions +{ + char *prefix; + int type; +// values of onoff: 0=ignore, 1=report, 2=ask, 3=fatal +#define ACT_IGNORE 0 +#define ACT_REPORT 1 +#define ACT_ASK 2 +#define ACT_FATAL 3 +#define N_ACT 4 + int onoff[N_LOGLEV]; + class iofunctions *logio; + // default log actions for all devices, declared and initialized + // in logio.cc. + BOCHSAPI_CYGONLY static int default_onoff[N_LOGLEV]; +public: + logfunctions(void); + logfunctions(class iofunctions *); + ~logfunctions(void); + + void info(const char *fmt, ...) BX_CPP_AttrPrintf(2, 3); + void error(const char *fmt, ...) BX_CPP_AttrPrintf(2, 3); + void panic(const char *fmt, ...) BX_CPP_AttrPrintf(2, 3); + void pass(const char *fmt, ...) BX_CPP_AttrPrintf(2, 3); + void ldebug(const char *fmt, ...) BX_CPP_AttrPrintf(2, 3); + void fatal (const char *prefix, const char *fmt, va_list ap, int exit_status); +#if BX_EXTERNAL_DEBUGGER + virtual void ask (int level, const char *prefix, const char *fmt, va_list ap); +#else + void ask (int level, const char *prefix, const char *fmt, va_list ap); +#endif + void put(const char *); + void settype(int); + void setio(class iofunctions *); + void setonoff(int loglev, int value) { + assert (loglev >= 0 && loglev < N_LOGLEV); + onoff[loglev] = value; + } + char *getprefix () { return prefix; } + int getonoff(int level) { + assert (level>=0 && level= 0 && loglev < N_LOGLEV); + assert (action >= 0 && action < N_ACT); + default_onoff[loglev] = action; + } + static int get_default_action (int loglev) { + assert (loglev >= 0 && loglev < N_LOGLEV); + return default_onoff[loglev]; + } +} logfunc_t; + +#define BX_LOGPREFIX_SIZE 51 + +enum { + IOLOG=0, FDLOG, GENLOG, CMOSLOG, CDLOG, DMALOG, ETHLOG, G2HLOG, HDLOG, KBDLOG, + NE2KLOG, PARLOG, HDEMULOG, PCILOG, PICLOG, PITLOG, SB16LOG, SERLOG, VGALOG, + DEVLOG, MEMLOG, DISLOG, GUILOG, IOAPICLOG, APICLOG, CPU0LOG, CPU1LOG, + CPU2LOG, CPU3LOG, CPU4LOG, CPU5LOG, CPU6LOG, CPU7LOG, CPU8LOG, CPU9LOG, + CPU10LOG, CPU11LOG, CPU12LOG, CPU13LOG, CPU14LOG, CPU15LOG, CTRLLOG, + UNMAPLOG, SERRLOG, BIOSLOG, PIT81LOG, PIT82LOG, IODEBUGLOG, PCI2ISALOG, + PLUGINLOG, EXTFPUIRQLOG , PCIVGALOG, PCIUSBLOG, VTIMERLOG, STIMERLOG, + PCIIDELOG, PCIDEVLOG, PCIPNICLOG, SPEAKERLOG, BUSMLOG, GAMELOG, ACPILOG +}; + +class BOCHSAPI iofunctions { + int magic; + char logprefix[BX_LOGPREFIX_SIZE]; + FILE *logfd; + class logfunctions *log; + void init(void); + void flush(void); + +// Log Class types +public: + iofunctions(void); + iofunctions(FILE *); + iofunctions(int); + iofunctions(const char *); + ~iofunctions(void); + + void out(int facility, int level, const char *pre, const char *fmt, va_list ap); + + void init_log(const char *fn); + void init_log(int fd); + void init_log(FILE *fs); + void exit_log(); + void set_log_prefix(const char *prefix); + int get_n_logfns() { return n_logfn; } + logfunc_t *get_logfn(int index) { return logfn_list[index]; } + void add_logfn(logfunc_t *fn); + void remove_logfn(logfunc_t *fn); + void set_log_action(int loglevel, int action); + const char *getlevel(int i) { + static const char *loglevel[N_LOGLEV] = { + "DEBUG", + "INFO", + "ERROR", + "PANIC", + "PASS" + }; + if (i>=0 && i=ACT_IGNORE && idbg_xlate_linear2phy() and +// BX_CPU(n)->dword.eip, etc. +#endif +#endif + +typedef struct { + bx_bool floppy; + bx_bool keyboard; + bx_bool video; + bx_bool disk; + bx_bool pit; + bx_bool pic; + bx_bool bios; + bx_bool cmos; + bx_bool a20; + bx_bool interrupts; + bx_bool exceptions; + bx_bool debugger; + bx_bool mouse; + bx_bool io; + bx_bool dma; + bx_bool unsupported_io; + bx_bool serial; + bx_bool cdrom; + bx_bool print_timestamps; +#if BX_DEBUGGER + bx_bool magic_break_enabled; +#endif +#if BX_GDBSTUB + bx_bool gdbstub_enabled; +#endif +#if BX_SUPPORT_APIC + bx_bool apic; + bx_bool ioapic; +#endif +#if BX_DEBUG_LINUX + bx_bool linux_syscall; +#endif + void* record_io; +} bx_debug_t; + +void CDECL bx_signal_handler(int signum); +int bx_atexit(void); +BOCHSAPI extern bx_debug_t bx_dbg; + +// memory access type (read/write/rw) +#define BX_READ 0 +#define BX_WRITE 1 +#define BX_RW 2 + +#define DATA_ACCESS 0 +#define CODE_ACCESS 1 + +#include "memory/memory.h" +#include "pc_system.h" +#include "plugin.h" +#include "gui/gui.h" +#include "gui/textconfig.h" +#include "gui/keymap.h" + +/* --- EXTERNS --- */ + +#if BX_GUI_SIGHANDLER +extern bx_bool bx_gui_sighandler; +#endif + +// This value controls how often each I/O device's periodic() method +// gets called. The timer is set up in iodev/devices.cc. +#define BX_IODEV_HANDLER_PERIOD 100 // microseconds +//#define BX_IODEV_HANDLER_PERIOD 10 // microseconds + +#define BX_PATHNAME_LEN 512 + +#define BX_KBD_XT_TYPE 0 +#define BX_KBD_AT_TYPE 1 +#define BX_KBD_MF_TYPE 2 + +#define BX_N_OPTROM_IMAGES 4 +#define BX_N_OPTRAM_IMAGES 4 +#define BX_N_SERIAL_PORTS 4 +#define BX_N_PARALLEL_PORTS 2 +#define BX_N_USB_HUBS 1 +#define BX_N_PCI_SLOTS 5 + +#if BX_SUPPORT_SMP + #define BX_SMP_PROCESSORS (bx_cpu_count) +#else + #define BX_SMP_PROCESSORS 1 +#endif + +void bx_center_print(FILE *file, const char *line, unsigned maxwidth); + +#include "instrument.h" + +// These are some convenience macros which abstract out accesses between +// a variable in native byte ordering to/from guest (x86) memory, which is +// always in little endian format. You must deal with alignment (if your +// system cares) and endian rearranging. Don't assume anything. You could +// put some platform specific asm() statements here, to make use of native +// instructions to help perform these operations more efficiently than C++. + + +#ifdef BX_LITTLE_ENDIAN + +#define WriteHostWordToLittleEndian(hostPtr, nativeVar16) \ + *((Bit16u*)(hostPtr)) = (nativeVar16) +#define WriteHostDWordToLittleEndian(hostPtr, nativeVar32) \ + *((Bit32u*)(hostPtr)) = (nativeVar32) +#define WriteHostQWordToLittleEndian(hostPtr, nativeVar64) \ + *((Bit64u*)(hostPtr)) = (nativeVar64) + +#define ReadHostWordFromLittleEndian(hostPtr, nativeVar16) \ + (nativeVar16) = *((Bit16u*)(hostPtr)) +#define ReadHostDWordFromLittleEndian(hostPtr, nativeVar32) \ + (nativeVar32) = *((Bit32u*)(hostPtr)) +#define ReadHostQWordFromLittleEndian(hostPtr, nativeVar64) \ + (nativeVar64) = *((Bit64u*)(hostPtr)) + +#define CopyHostWordLittleEndian(hostAddrDst, hostAddrSrc) \ + (* (Bit16u *)(hostAddrDst)) = (* (Bit16u *)(hostAddrSrc)); +#define CopyHostDWordLittleEndian(hostAddrDst, hostAddrSrc) \ + (* (Bit32u *)(hostAddrDst)) = (* (Bit32u *)(hostAddrSrc)); +#define CopyHostQWordLittleEndian(hostAddrDst, hostAddrSrc) \ + (* (Bit64u *)(hostAddrDst)) = (* (Bit64u *)(hostAddrSrc)); + +#else + +#define WriteHostWordToLittleEndian(hostPtr, nativeVar16) { \ + ((Bit8u *)(hostPtr))[0] = (Bit8u) (nativeVar16); \ + ((Bit8u *)(hostPtr))[1] = (Bit8u) ((nativeVar16)>>8); \ +} +#define WriteHostDWordToLittleEndian(hostPtr, nativeVar32) { \ + ((Bit8u *)(hostPtr))[0] = (Bit8u) (nativeVar32); \ + ((Bit8u *)(hostPtr))[1] = (Bit8u) ((nativeVar32)>>8); \ + ((Bit8u *)(hostPtr))[2] = (Bit8u) ((nativeVar32)>>16); \ + ((Bit8u *)(hostPtr))[3] = (Bit8u) ((nativeVar32)>>24); \ +} +#define WriteHostQWordToLittleEndian(hostPtr, nativeVar64) { \ + ((Bit8u *)(hostPtr))[0] = (Bit8u) (nativeVar64); \ + ((Bit8u *)(hostPtr))[1] = (Bit8u) ((nativeVar64)>>8); \ + ((Bit8u *)(hostPtr))[2] = (Bit8u) ((nativeVar64)>>16); \ + ((Bit8u *)(hostPtr))[3] = (Bit8u) ((nativeVar64)>>24); \ + ((Bit8u *)(hostPtr))[4] = (Bit8u) ((nativeVar64)>>32); \ + ((Bit8u *)(hostPtr))[5] = (Bit8u) ((nativeVar64)>>40); \ + ((Bit8u *)(hostPtr))[6] = (Bit8u) ((nativeVar64)>>48); \ + ((Bit8u *)(hostPtr))[7] = (Bit8u) ((nativeVar64)>>56); \ +} + +#define ReadHostWordFromLittleEndian(hostPtr, nativeVar16) { \ + (nativeVar16) = ((Bit16u) ((Bit8u *)(hostPtr))[0]) | \ + (((Bit16u) ((Bit8u *)(hostPtr))[1])<<8) ; \ +} +#define ReadHostDWordFromLittleEndian(hostPtr, nativeVar32) { \ + (nativeVar32) = ((Bit32u) ((Bit8u *)(hostPtr))[0]) | \ + (((Bit32u) ((Bit8u *)(hostPtr))[1])<<8) | \ + (((Bit32u) ((Bit8u *)(hostPtr))[2])<<16) | \ + (((Bit32u) ((Bit8u *)(hostPtr))[3])<<24); \ +} +#define ReadHostQWordFromLittleEndian(hostPtr, nativeVar64) { \ + (nativeVar64) = ((Bit64u) ((Bit8u *)(hostPtr))[0]) | \ + (((Bit64u) ((Bit8u *)(hostPtr))[1])<<8) | \ + (((Bit64u) ((Bit8u *)(hostPtr))[2])<<16) | \ + (((Bit64u) ((Bit8u *)(hostPtr))[3])<<24) | \ + (((Bit64u) ((Bit8u *)(hostPtr))[4])<<32) | \ + (((Bit64u) ((Bit8u *)(hostPtr))[5])<<40) | \ + (((Bit64u) ((Bit8u *)(hostPtr))[6])<<48) | \ + (((Bit64u) ((Bit8u *)(hostPtr))[7])<<56); \ +} + +#define CopyHostWordLittleEndian(hostAddrDst, hostAddrSrc) { \ + ((Bit8u *)(hostAddrDst))[0] = ((Bit8u *)(hostAddrSrc))[0]; \ + ((Bit8u *)(hostAddrDst))[1] = ((Bit8u *)(hostAddrSrc))[1]; \ +} +#define CopyHostDWordLittleEndian(hostAddrDst, hostAddrSrc) { \ + ((Bit8u *)(hostAddrDst))[0] = ((Bit8u *)(hostAddrSrc))[0]; \ + ((Bit8u *)(hostAddrDst))[1] = ((Bit8u *)(hostAddrSrc))[1]; \ + ((Bit8u *)(hostAddrDst))[2] = ((Bit8u *)(hostAddrSrc))[2]; \ + ((Bit8u *)(hostAddrDst))[3] = ((Bit8u *)(hostAddrSrc))[3]; \ +} +#define CopyHostQWordLittleEndian(hostAddrDst, hostAddrSrc) { \ + ((Bit8u *)(hostAddrDst))[0] = ((Bit8u *)(hostAddrSrc))[0]; \ + ((Bit8u *)(hostAddrDst))[1] = ((Bit8u *)(hostAddrSrc))[1]; \ + ((Bit8u *)(hostAddrDst))[2] = ((Bit8u *)(hostAddrSrc))[2]; \ + ((Bit8u *)(hostAddrDst))[3] = ((Bit8u *)(hostAddrSrc))[3]; \ + ((Bit8u *)(hostAddrDst))[4] = ((Bit8u *)(hostAddrSrc))[4]; \ + ((Bit8u *)(hostAddrDst))[5] = ((Bit8u *)(hostAddrSrc))[5]; \ + ((Bit8u *)(hostAddrDst))[6] = ((Bit8u *)(hostAddrSrc))[6]; \ + ((Bit8u *)(hostAddrDst))[7] = ((Bit8u *)(hostAddrSrc))[7]; \ +} + +#endif + +#endif /* BX_BOCHS_H */ Index: trunk/src/bochs-diff-2.3.7/gui/gui.cc =================================================================== --- trunk/src/bochs-diff-2.3.7/gui/gui.cc (nonexistent) +++ trunk/src/bochs-diff-2.3.7/gui/gui.cc (revision 39) @@ -0,0 +1,785 @@ +///////////////////////////////////////////////////////////////////////// +// $Id: gui.cc,v 1.1 2008-11-14 03:31:24 zeus Exp $ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002 MandrakeSoft S.A. +// +// MandrakeSoft S.A. +// 43, rue d'Aboukir +// 75002 Paris - France +// http://www.linux-mandrake.com/ +// http://www.mandrakesoft.com/ +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +#include +#include "bochs.h" +#include "iodev.h" +#include "gui/bitmaps/floppya.h" +#include "gui/bitmaps/floppyb.h" +#include "gui/bitmaps/mouse.h" +#include "gui/bitmaps/reset.h" +#include "gui/bitmaps/power.h" +#include "gui/bitmaps/snapshot.h" +#include "gui/bitmaps/copy.h" +#include "gui/bitmaps/paste.h" +#include "gui/bitmaps/configbutton.h" +#include "gui/bitmaps/cdromd.h" +#include "gui/bitmaps/userbutton.h" +#include "gui/bitmaps/saverestore.h" + +#if BX_WITH_MACOS +# include +#endif + +bx_gui_c *bx_gui = NULL; + +#define BX_GUI_THIS bx_gui-> +#define LOG_THIS BX_GUI_THIS + +#define BX_KEY_UNKNOWN 0x7fffffff +#define N_USER_KEYS 37 + +typedef struct { + const char *key; + Bit32u symbol; +} user_key_t; + +static user_key_t user_keys[N_USER_KEYS] = +{ + { "f1", BX_KEY_F1 }, + { "f2", BX_KEY_F2 }, + { "f3", BX_KEY_F3 }, + { "f4", BX_KEY_F4 }, + { "f5", BX_KEY_F5 }, + { "f6", BX_KEY_F6 }, + { "f7", BX_KEY_F7 }, + { "f8", BX_KEY_F8 }, + { "f9", BX_KEY_F9 }, + { "f10", BX_KEY_F10 }, + { "f11", BX_KEY_F11 }, + { "f12", BX_KEY_F12 }, + { "alt", BX_KEY_ALT_L }, + { "bksl", BX_KEY_BACKSLASH }, + { "bksp", BX_KEY_BACKSPACE }, + { "ctrl", BX_KEY_CTRL_L }, + { "del", BX_KEY_DELETE }, + { "down", BX_KEY_DOWN }, + { "end", BX_KEY_END }, + { "enter", BX_KEY_ENTER }, + { "esc", BX_KEY_ESC }, + { "home", BX_KEY_HOME }, + { "ins", BX_KEY_INSERT }, + { "left", BX_KEY_LEFT }, + { "menu", BX_KEY_MENU }, + { "minus", BX_KEY_MINUS }, + { "pgdwn", BX_KEY_PAGE_DOWN }, + { "pgup", BX_KEY_PAGE_UP }, + { "plus", BX_KEY_KP_ADD }, + { "right", BX_KEY_RIGHT }, + { "shift", BX_KEY_SHIFT_L }, + { "space", BX_KEY_SPACE }, + { "tab", BX_KEY_TAB }, + { "up", BX_KEY_UP }, + { "win", BX_KEY_WIN_L }, + { "print", BX_KEY_PRINT }, + { "power", BX_KEY_POWER_POWER } +}; + +bx_gui_c::bx_gui_c(void) +{ + put("GUI"); // Init in specific_init + settype(GUILOG); + statusitem_count = 0; + framebuffer = NULL; +} + +bx_gui_c::~bx_gui_c() +{ + if (framebuffer != NULL) { + delete [] framebuffer; + } +} + +void bx_gui_c::init(int argc, char **argv, unsigned tilewidth, unsigned tileheight) +{ + BX_GUI_THIS new_gfx_api = 0; + BX_GUI_THIS host_xres = 640; + BX_GUI_THIS host_yres = 480; + BX_GUI_THIS host_bpp = 8; + BX_GUI_THIS dialog_caps = BX_GUI_DLG_RUNTIME | BX_GUI_DLG_SAVE_RESTORE; + + specific_init(argc, argv, tilewidth, tileheight, BX_HEADER_BAR_Y); + + // Define some bitmaps to use in the headerbar + BX_GUI_THIS floppyA_bmap_id = create_bitmap(bx_floppya_bmap, + BX_FLOPPYA_BMAP_X, BX_FLOPPYA_BMAP_Y); + BX_GUI_THIS floppyA_eject_bmap_id = create_bitmap(bx_floppya_eject_bmap, + BX_FLOPPYA_BMAP_X, BX_FLOPPYA_BMAP_Y); + BX_GUI_THIS floppyB_bmap_id = create_bitmap(bx_floppyb_bmap, + BX_FLOPPYB_BMAP_X, BX_FLOPPYB_BMAP_Y); + BX_GUI_THIS floppyB_eject_bmap_id = create_bitmap(bx_floppyb_eject_bmap, + BX_FLOPPYB_BMAP_X, BX_FLOPPYB_BMAP_Y); + BX_GUI_THIS cdromD_bmap_id = create_bitmap(bx_cdromd_bmap, + BX_CDROMD_BMAP_X, BX_CDROMD_BMAP_Y); + BX_GUI_THIS cdromD_eject_bmap_id = create_bitmap(bx_cdromd_eject_bmap, + BX_CDROMD_BMAP_X, BX_CDROMD_BMAP_Y); + BX_GUI_THIS mouse_bmap_id = create_bitmap(bx_mouse_bmap, + BX_MOUSE_BMAP_X, BX_MOUSE_BMAP_Y); + BX_GUI_THIS nomouse_bmap_id = create_bitmap(bx_nomouse_bmap, + BX_MOUSE_BMAP_X, BX_MOUSE_BMAP_Y); + + BX_GUI_THIS power_bmap_id = create_bitmap(bx_power_bmap, BX_POWER_BMAP_X, BX_POWER_BMAP_Y); + BX_GUI_THIS reset_bmap_id = create_bitmap(bx_reset_bmap, BX_RESET_BMAP_X, BX_RESET_BMAP_Y); + BX_GUI_THIS snapshot_bmap_id = create_bitmap(bx_snapshot_bmap, BX_SNAPSHOT_BMAP_X, BX_SNAPSHOT_BMAP_Y); + BX_GUI_THIS copy_bmap_id = create_bitmap(bx_copy_bmap, BX_COPY_BMAP_X, BX_COPY_BMAP_Y); + BX_GUI_THIS paste_bmap_id = create_bitmap(bx_paste_bmap, BX_PASTE_BMAP_X, BX_PASTE_BMAP_Y); + BX_GUI_THIS config_bmap_id = create_bitmap(bx_config_bmap, BX_CONFIG_BMAP_X, BX_CONFIG_BMAP_Y); + BX_GUI_THIS user_bmap_id = create_bitmap(bx_user_bmap, BX_USER_BMAP_X, BX_USER_BMAP_Y); + BX_GUI_THIS save_restore_bmap_id = create_bitmap(bx_save_restore_bmap, + BX_SAVE_RESTORE_BMAP_X, BX_SAVE_RESTORE_BMAP_Y); + + // Add the initial bitmaps to the headerbar, and enable callback routine, for use + // when that bitmap is clicked on + + // Floppy A: +// BX_GUI_THIS floppyA_status = DEV_floppy_get_media_status(0); +BX_GUI_THIS floppyA_status = true; + if (BX_GUI_THIS floppyA_status) + BX_GUI_THIS floppyA_hbar_id = headerbar_bitmap(BX_GUI_THIS floppyA_bmap_id, + BX_GRAVITY_LEFT, floppyA_handler); + else + BX_GUI_THIS floppyA_hbar_id = headerbar_bitmap(BX_GUI_THIS floppyA_eject_bmap_id, + BX_GRAVITY_LEFT, floppyA_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS floppyA_hbar_id, "Change floppy A: media"); + + // Floppy B: +// BX_GUI_THIS floppyB_status = DEV_floppy_get_media_status(1); +BX_GUI_THIS floppyB_status = false; + if (BX_GUI_THIS floppyB_status) + BX_GUI_THIS floppyB_hbar_id = headerbar_bitmap(BX_GUI_THIS floppyB_bmap_id, + BX_GRAVITY_LEFT, floppyB_handler); + else + BX_GUI_THIS floppyB_hbar_id = headerbar_bitmap(BX_GUI_THIS floppyB_eject_bmap_id, + BX_GRAVITY_LEFT, floppyB_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS floppyB_hbar_id, "Change floppy B: media"); + + // CDROM, + // the harddrive object is not initialised yet, + // so we just set the bitmap to ejected for now + BX_GUI_THIS cdromD_hbar_id = headerbar_bitmap(BX_GUI_THIS cdromD_eject_bmap_id, + BX_GRAVITY_LEFT, cdromD_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS cdromD_hbar_id, "Change first CDROM media"); + + // Mouse button + if (SIM->get_param_bool(BXPN_MOUSE_ENABLED)->get()) + BX_GUI_THIS mouse_hbar_id = headerbar_bitmap(BX_GUI_THIS mouse_bmap_id, + BX_GRAVITY_LEFT, toggle_mouse_enable); + else + BX_GUI_THIS mouse_hbar_id = headerbar_bitmap(BX_GUI_THIS nomouse_bmap_id, + BX_GRAVITY_LEFT, toggle_mouse_enable); + BX_GUI_THIS set_tooltip(BX_GUI_THIS mouse_hbar_id, "Enable mouse capture"); + + // These are the buttons on the right side. They are created in order + // of right to left. + + // Power button + BX_GUI_THIS power_hbar_id = headerbar_bitmap(BX_GUI_THIS power_bmap_id, + BX_GRAVITY_RIGHT, power_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS power_hbar_id, "Turn power off"); + // Save/Restore Button + BX_GUI_THIS save_restore_hbar_id = headerbar_bitmap(BX_GUI_THIS save_restore_bmap_id, + BX_GRAVITY_RIGHT, save_restore_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS save_restore_hbar_id, "Save simulation state"); + // Reset button + BX_GUI_THIS reset_hbar_id = headerbar_bitmap(BX_GUI_THIS reset_bmap_id, + BX_GRAVITY_RIGHT, reset_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS reset_hbar_id, "Reset the system"); + // Configure button + BX_GUI_THIS config_hbar_id = headerbar_bitmap(BX_GUI_THIS config_bmap_id, + BX_GRAVITY_RIGHT, config_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS config_hbar_id, "Runtime config dialog"); + // Snapshot button + BX_GUI_THIS snapshot_hbar_id = headerbar_bitmap(BX_GUI_THIS snapshot_bmap_id, + BX_GRAVITY_RIGHT, snapshot_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS snapshot_hbar_id, "Save snapshot of the text mode screen"); + // Paste button + BX_GUI_THIS paste_hbar_id = headerbar_bitmap(BX_GUI_THIS paste_bmap_id, + BX_GRAVITY_RIGHT, paste_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS paste_hbar_id, "Paste clipboard text as emulated keystrokes"); + // Copy button + BX_GUI_THIS copy_hbar_id = headerbar_bitmap(BX_GUI_THIS copy_bmap_id, + BX_GRAVITY_RIGHT, copy_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS copy_hbar_id, "Copy text mode screen to the clipboard"); + // User button + BX_GUI_THIS user_hbar_id = headerbar_bitmap(BX_GUI_THIS user_bmap_id, + BX_GRAVITY_RIGHT, userbutton_handler); + BX_GUI_THIS set_tooltip(BX_GUI_THIS user_hbar_id, "Send keyboard shortcut"); + + if (SIM->get_param_bool(BXPN_TEXT_SNAPSHOT_CHECK)->get()) { + bx_pc_system.register_timer(this, bx_gui_c::snapshot_checker, (unsigned) 1000000, 1, 1, "snap_chk"); + } + + BX_GUI_THIS charmap_updated = 0; + + if (!BX_GUI_THIS new_gfx_api && (BX_GUI_THIS framebuffer == NULL)) { + BX_GUI_THIS framebuffer = new Bit8u[BX_MAX_XRES * BX_MAX_YRES * 4]; + } + show_headerbar(); +} + +void bx_gui_c::cleanup(void) +{ + statusitem_count = 0; +} + +void bx_gui_c::update_drive_status_buttons(void) +{ + BX_GUI_THIS floppyA_status = /* DEV_floppy_get_media_status(0) + && */ (SIM->get_param_enum(BXPN_FLOPPYA_STATUS)->get() == BX_INSERTED); + BX_GUI_THIS floppyB_status = false /*DEV_floppy_get_media_status(1) + && (SIM->get_param_enum(BXPN_FLOPPYB_STATUS)->get() == BX_INSERTED) */; + //Bit32u handle = DEV_hd_get_first_cd_handle(); + //BX_GUI_THIS cdromD_status = DEV_hd_get_cd_media_status(handle); + BX_GUI_THIS cdromD_status = false; + if (BX_GUI_THIS floppyA_status) + replace_bitmap(BX_GUI_THIS floppyA_hbar_id, BX_GUI_THIS floppyA_bmap_id); + else { +#if BX_WITH_MACOS + // If we are using the Mac floppy driver, eject the disk + // from the floppy drive. This doesn't work in MacOS X. + if (!strcmp(SIM->get_param_string(BXPN_FLOPPYA_PATH)->getptr(), SuperDrive)) + DiskEject(1); +#endif + replace_bitmap(BX_GUI_THIS floppyA_hbar_id, BX_GUI_THIS floppyA_eject_bmap_id); + } + if (BX_GUI_THIS floppyB_status) + replace_bitmap(BX_GUI_THIS floppyB_hbar_id, BX_GUI_THIS floppyB_bmap_id); + else { +#if BX_WITH_MACOS + // If we are using the Mac floppy driver, eject the disk + // from the floppy drive. This doesn't work in MacOS X. + if (!strcmp(SIM->get_param_string(BXPN_FLOPPYB_PATH)->getptr(), SuperDrive)) + DiskEject(1); +#endif + replace_bitmap(BX_GUI_THIS floppyB_hbar_id, BX_GUI_THIS floppyB_eject_bmap_id); + } + if (BX_GUI_THIS cdromD_status) + replace_bitmap(BX_GUI_THIS cdromD_hbar_id, BX_GUI_THIS cdromD_bmap_id); + else { + replace_bitmap(BX_GUI_THIS cdromD_hbar_id, BX_GUI_THIS cdromD_eject_bmap_id); + } +} + +void bx_gui_c::floppyA_handler(void) +{ + if (SIM->get_param_enum(BXPN_FLOPPYA_DEVTYPE)->get() == BX_FLOPPY_NONE) + return; // no primary floppy device present + if (BX_GUI_THIS dialog_caps & BX_GUI_DLG_FLOPPY) { + // instead of just toggling the status, call win32dialog to bring up + // a dialog asking what disk image you want to switch to. + int ret = SIM->ask_param(BXPN_FLOPPYA_PATH); + if (ret > 0) { + BX_GUI_THIS update_drive_status_buttons(); + } + return; + } + BX_GUI_THIS floppyA_status = !BX_GUI_THIS floppyA_status; + DEV_floppy_set_media_status(0, BX_GUI_THIS floppyA_status); + BX_GUI_THIS update_drive_status_buttons(); +} + +void bx_gui_c::floppyB_handler(void) +{ + if (SIM->get_param_enum(BXPN_FLOPPYB_DEVTYPE)->get() == BX_FLOPPY_NONE) + return; // no secondary floppy device present + if (BX_GUI_THIS dialog_caps & BX_GUI_DLG_FLOPPY) { + // instead of just toggling the status, call win32dialog to bring up + // a dialog asking what disk image you want to switch to. + int ret = SIM->ask_param(BXPN_FLOPPYB_PATH); + if (ret > 0) { + BX_GUI_THIS update_drive_status_buttons(); + } + return; + } + BX_GUI_THIS floppyB_status = !BX_GUI_THIS floppyB_status; + DEV_floppy_set_media_status(1, BX_GUI_THIS floppyB_status); + BX_GUI_THIS update_drive_status_buttons(); +} + +void bx_gui_c::cdromD_handler(void) +{ + Bit32u handle = DEV_hd_get_first_cd_handle(); + if (BX_GUI_THIS dialog_caps & BX_GUI_DLG_CDROM) { + // instead of just toggling the status, call win32dialog to bring up + // a dialog asking what disk image you want to switch to. + // This code handles the first cdrom only. The cdrom drives #2, #3 and + // #4 are handled in the win32 runtime dialog. + bx_param_c *cdrom = SIM->get_first_cdrom(); + if (cdrom == NULL) + return; // no cdrom found + int ret = SIM->ask_param(cdrom); + if (ret > 0) { + BX_GUI_THIS update_drive_status_buttons(); + } + return; + } + BX_GUI_THIS cdromD_status = + DEV_hd_set_cd_media_status(handle, !BX_GUI_THIS cdromD_status); + BX_GUI_THIS update_drive_status_buttons(); +} + +void bx_gui_c::reset_handler(void) +{ + BX_INFO(("system RESET callback")); + bx_pc_system.Reset(BX_RESET_HARDWARE); +} + +void bx_gui_c::power_handler(void) +{ + // test case for yes/no dialog: confirm power off + //if (!SIM->ask_yes_no("Quit Bochs", "Are you sure ?", 0)) + // return; + // the user pressed power button, so there's no doubt they want bochs + // to quit. Change panics to fatal for the GUI and then do a panic. + bx_user_quit = 1; + LOG_THIS setonoff(LOGLEV_PANIC, ACT_FATAL); + BX_PANIC (("POWER button turned off.")); + // shouldn't reach this point, but if you do, QUIT!!! + fprintf (stderr, "Bochs is exiting because you pressed the power button.\n"); + BX_EXIT (1); +} + +Bit32s bx_gui_c::make_text_snapshot(char **snapshot, Bit32u *length) +{ + Bit8u* raw_snap = NULL; + char *clean_snap; + unsigned line_addr, txt_addr, txHeight, txWidth; + + DEV_vga_get_text_snapshot(&raw_snap, &txHeight, &txWidth); + if (txHeight <= 0) return -1; + clean_snap = (char*) malloc(txHeight*(txWidth+2)+1); + txt_addr = 0; + for (unsigned i=0; i 0) && (clean_snap[txt_addr-1] == ' ')) txt_addr--; +#ifdef WIN32 + if(!(SIM->get_param_bool(BXPN_TEXT_SNAPSHOT_CHECK)->get())) { + clean_snap[txt_addr++] = 13; + } +#endif + clean_snap[txt_addr++] = 10; + } + clean_snap[txt_addr] = 0; + *snapshot = clean_snap; + *length = txt_addr; + return 0; +} + +// create a text snapshot and copy to the system clipboard. On guis that +// we haven't figured out how to support yet, dump to a file instead. +void bx_gui_c::copy_handler(void) +{ + Bit32u len; + char *text_snapshot; + if (make_text_snapshot (&text_snapshot, &len) < 0) { + BX_INFO(("copy button failed, mode not implemented")); + return; + } + if (!BX_GUI_THIS set_clipboard_text(text_snapshot, len)) { + // platform specific code failed, use portable code instead + FILE *fp = fopen("copy.txt", "w"); + fwrite(text_snapshot, 1, len, fp); + fclose(fp); + } + free(text_snapshot); +} + +// Check the current text snapshot against file snapchk.txt. +void bx_gui_c::snapshot_checker(void *this_ptr) +{ + char filename[BX_PATHNAME_LEN]; + strcpy(filename,"snapchk.txt"); + FILE *fp = fopen(filename, "rb"); + if(fp) { + char *text_snapshot; + Bit32u len; + if (make_text_snapshot (&text_snapshot, &len) < 0) { + return; + } + char *compare_snapshot = (char *) malloc((len+1) * sizeof(char)); + fread(compare_snapshot, 1, len, fp); + fclose(fp); + strcpy(filename,"snapmask.txt"); + fp=fopen(filename, "rb"); + if(fp) { + char *mask_snapshot = (char *) malloc((len+1) * sizeof(char)); + unsigned i; + bx_bool flag = 1; + fread(mask_snapshot, 1, len, fp); + fclose(fp); + for(i=0;iask_filename (filename, sizeof(filename), + "Save snapshot as...", "snapshot.txt", + bx_param_string_c::SAVE_FILE_DIALOG); + if (ret < 0) { // cancelled + free(text_snapshot); + return; + } + } else { + strcpy (filename, "snapshot.txt"); + } + FILE *fp = fopen(filename, "wb"); + fwrite(text_snapshot, 1, len, fp); + fclose(fp); + free(text_snapshot); +} + +// Read ASCII chars from the system clipboard and paste them into bochs. +// Note that paste cannot work with the key mapping tables loaded. +void bx_gui_c::paste_handler(void) +{ + Bit32s nbytes; + Bit8u *bytes; + if (!bx_keymap.isKeymapLoaded ()) { + BX_ERROR (("keyboard_mapping disabled, so paste cannot work")); + return; + } + if (!BX_GUI_THIS get_clipboard_text(&bytes, &nbytes)) { + BX_ERROR (("paste not implemented on this platform")); + return; + } + BX_INFO (("pasting %d bytes", nbytes)); + DEV_kbd_paste_bytes (bytes, nbytes); +} + +void bx_gui_c::config_handler(void) +{ + if (BX_GUI_THIS dialog_caps & BX_GUI_DLG_RUNTIME) { + SIM->configuration_interface(NULL, CI_RUNTIME_CONFIG); + } +} + +void bx_gui_c::toggle_mouse_enable(void) +{ + int old = SIM->get_param_bool(BXPN_MOUSE_ENABLED)->get(); + BX_DEBUG (("toggle mouse_enabled, now %d", !old)); + SIM->get_param_bool(BXPN_MOUSE_ENABLED)->set(!old); +} + +Bit32u get_user_key(char *key) +{ + int i = 0; + + while (i < N_USER_KEYS) { + if (!strcmp(key, user_keys[i].key)) + return user_keys[i].symbol; + i++; + } + return BX_KEY_UNKNOWN; +} + +void bx_gui_c::userbutton_handler(void) +{ + Bit32u shortcut[4]; + Bit32u symbol; + char user_shortcut[512]; + char *ptr; + int i, len = 0, ret = 1; + + if (BX_GUI_THIS dialog_caps & BX_GUI_DLG_USER) { + ret = SIM->ask_param(BXPN_USER_SHORTCUT); + } + strcpy(user_shortcut, SIM->get_param_string(BXPN_USER_SHORTCUT)->getptr()); + if ((ret > 0) && user_shortcut[0] && (strcmp(user_shortcut, "none"))) { + ptr = strtok(user_shortcut, "-"); + if ((strcmp(ptr, SIM->get_param_string(BXPN_USER_SHORTCUT)->getptr())) || + (strlen(SIM->get_param_string(BXPN_USER_SHORTCUT)->getptr()) < 6)) { + while (ptr) { + symbol = get_user_key(ptr); + if (symbol == BX_KEY_UNKNOWN) { + BX_ERROR(("Unknown shortcut %s ignored", ptr)); + return; + } + shortcut[len++] = symbol; + ptr = strtok(NULL, "-"); + } + } else { + BX_ERROR(("Unknown shortcut %s ignored", user_shortcut)); + return; + } + i = 0; + while (i < len) { + DEV_kbd_gen_scancode(shortcut[i++]); + } + i--; + while (i >= 0) { + DEV_kbd_gen_scancode(shortcut[i--] | BX_KEY_RELEASED); + } + } +} + +void bx_gui_c::save_restore_handler(void) +{ + int ret; + char sr_path[BX_PATHNAME_LEN]; + + if (BX_GUI_THIS dialog_caps & BX_GUI_DLG_SAVE_RESTORE) { + sr_path[0] = 0; + ret = SIM->ask_filename(sr_path, sizeof(sr_path), + "Save Bochs state to folder...", "none", + bx_param_string_c::SELECT_FOLDER_DLG); + if ((ret >= 0) && (strcmp(sr_path, "none"))) { + if (SIM->save_state(sr_path)) { + if (!SIM->ask_yes_no("WARNING", + "The save function currently doesn't handle the state of hard drive images,\n" + "so we don't recommend to continue, unless you are running a read-only\n" + "guest system (e.g. Live-CD).\n\n" + "Do you want to continue?", 0)) { + power_handler(); + } + } + } + } +} + +void bx_gui_c::mouse_enabled_changed(bx_bool val) +{ + // This is only called when SIM->get_init_done is 1. Note that VAL + // is the new value of mouse_enabled, which may not match the old + // value which is still in SIM->get_param_bool(BXPN_MOUSE_ENABLED)->get(). + BX_DEBUG (("replacing the mouse bitmaps")); + if (val) + BX_GUI_THIS replace_bitmap(BX_GUI_THIS mouse_hbar_id, BX_GUI_THIS mouse_bmap_id); + else + BX_GUI_THIS replace_bitmap(BX_GUI_THIS mouse_hbar_id, BX_GUI_THIS nomouse_bmap_id); + // give the GUI a chance to respond to the event. Most guis will hide + // the native mouse cursor and do something to trap the mouse inside the + // bochs VGA display window. + BX_GUI_THIS mouse_enabled_changed_specific (val); +} + +void bx_gui_c::init_signal_handlers() +{ +#if BX_GUI_SIGHANDLER + if (bx_gui_sighandler) + { + Bit32u mask = bx_gui->get_sighandler_mask (); + for (Bit32u sig=0; sig<32; sig++) + { + if (mask & (1<> 5] = 1; + BX_GUI_THIS charmap_updated = 1; +} + +void bx_gui_c::beep_on(float frequency) +{ + BX_INFO(("GUI Beep ON (frequency=%.2f)", frequency)); +} + +void bx_gui_c::beep_off() +{ + BX_INFO(("GUI Beep OFF")); +} + +int bx_gui_c::register_statusitem(const char *text) +{ + if (statusitem_count < BX_MAX_STATUSITEMS) { + strncpy(statusitem_text[statusitem_count], text, 8); + statusitem_text[statusitem_count][7] = 0; + return statusitem_count++; + } else { + return -1; + } +} + +void bx_gui_c::get_capabilities(Bit16u *xres, Bit16u *yres, Bit16u *bpp) +{ + *xres = 1024; + *yres = 768; + *bpp = 32; +} + +bx_svga_tileinfo_t *bx_gui_c::graphics_tile_info(bx_svga_tileinfo_t *info) +{ + if (!info) { + info = (bx_svga_tileinfo_t *)malloc(sizeof(bx_svga_tileinfo_t)); + if (!info) { + return NULL; + } + } + + BX_GUI_THIS host_pitch = BX_GUI_THIS host_xres * ((BX_GUI_THIS host_bpp + 1) >> 3); + + info->bpp = BX_GUI_THIS host_bpp; + info->pitch = BX_GUI_THIS host_pitch; + switch (info->bpp) { + case 15: + info->red_shift = 15; + info->green_shift = 10; + info->blue_shift = 5; + info->red_mask = 0x7c00; + info->green_mask = 0x03e0; + info->blue_mask = 0x001f; + break; + case 16: + info->red_shift = 16; + info->green_shift = 11; + info->blue_shift = 5; + info->red_mask = 0xf800; + info->green_mask = 0x07e0; + info->blue_mask = 0x001f; + break; + case 24: + case 32: + info->red_shift = 24; + info->green_shift = 16; + info->blue_shift = 8; + info->red_mask = 0xff0000; + info->green_mask = 0x00ff00; + info->blue_mask = 0x0000ff; + break; + } + info->is_indexed = (BX_GUI_THIS host_bpp == 8); +#ifdef BX_LITTLE_ENDIAN + info->is_little_endian = 1; +#else + info->is_little_endian = 0; +#endif + + return info; +} + +Bit8u *bx_gui_c::graphics_tile_get(unsigned x0, unsigned y0, + unsigned *w, unsigned *h) +{ + if (x0+X_TILESIZE > BX_GUI_THIS host_xres) { + *w = BX_GUI_THIS host_xres - x0; + } + else { + *w = X_TILESIZE; + } + + if (y0+Y_TILESIZE > BX_GUI_THIS host_yres) { + *h = BX_GUI_THIS host_yres - y0; + } + else { + *h = Y_TILESIZE; + } + + return (Bit8u *)framebuffer + y0 * BX_GUI_THIS host_pitch + + x0 * ((BX_GUI_THIS host_bpp + 1) >> 3); +} + +void bx_gui_c::graphics_tile_update_in_place(unsigned x0, unsigned y0, + unsigned w, unsigned h) +{ + Bit8u tile[X_TILESIZE * Y_TILESIZE * 4]; + Bit8u *tile_ptr, *fb_ptr; + Bit16u xc, yc, fb_pitch, tile_pitch; + Bit8u r, diffx, diffy; + + diffx = (x0 % X_TILESIZE); + diffy = (y0 % Y_TILESIZE); + if (diffx > 0) { + x0 -= diffx; + w += diffx; + } + if (diffy > 0) { + y0 -= diffy; + h += diffy; + } + fb_pitch = BX_GUI_THIS host_pitch; + tile_pitch = X_TILESIZE * ((BX_GUI_THIS host_bpp + 1) >> 3); + for (yc=y0; yc<(y0+h); yc+=Y_TILESIZE) { + for (xc=x0; xc<(x0+w); xc+=X_TILESIZE) { + fb_ptr = BX_GUI_THIS framebuffer + (yc * fb_pitch + xc * ((BX_GUI_THIS host_bpp + 1) >> 3)); + tile_ptr = &tile[0]; + for (r=0; rget_reg(a)) +#define DEV_cmos_set_reg(a,b) (bx_devices.pluginCmosDevice->set_reg(a,b)) +#define DEV_cmos_checksum() (bx_devices.pluginCmosDevice->checksum_cmos()) +#define DEV_cmos_get_timeval() (bx_devices.pluginCmosDevice->get_timeval()) +#define DEV_cmos_present() (bx_devices.pluginCmosDevice != &bx_devices.stubCmos) + +///////// keyboard macros +#define DEV_mouse_motion(dx, dy, state) \ + (bx_devices.pluginKeyboard->mouse_motion(dx, dy, 0, state)) +#define DEV_mouse_motion_ext(dx, dy, dz, state) \ + (bx_devices.pluginKeyboard->mouse_motion(dx, dy, dz, state)) +#define DEV_kbd_gen_scancode(key) \ + (bx_devices.pluginKeyboard->gen_scancode(key)) +#define DEV_kbd_paste_bytes(bytes, count) \ + (bx_devices.pluginKeyboard->paste_bytes(bytes,count)) + +///////// hard drive macros +#define DEV_hd_read_handler(a, b, c) \ + (bx_devices.pluginHardDrive->virt_read_handler(b, c)) +#define DEV_hd_write_handler(a, b, c, d) \ + (bx_devices.pluginHardDrive->virt_write_handler(b, c, d)) +#define DEV_hd_get_first_cd_handle() \ + (bx_devices.pluginHardDrive->get_first_cd_handle()) +#define DEV_hd_get_device_handle(a,b) \ + (bx_devices.pluginHardDrive->get_device_handle(a,b)) +#define DEV_hd_get_cd_media_status(handle) \ + (bx_devices.pluginHardDrive->get_cd_media_status(handle)) +#define DEV_hd_set_cd_media_status(handle, status) \ + (bx_devices.pluginHardDrive->set_cd_media_status(handle, status)) +#define DEV_hd_present() (bx_devices.pluginHardDrive != &bx_devices.stubHardDrive) +#define DEV_hd_bmdma_read_sector(a,b,c) bx_devices.pluginHardDrive->bmdma_read_sector(a,b,c) +#define DEV_hd_bmdma_write_sector(a,b) bx_devices.pluginHardDrive->bmdma_write_sector(a,b) +#define DEV_hd_bmdma_complete(a) bx_devices.pluginHardDrive->bmdma_complete(a) + +#define DEV_bulk_io_quantum_requested() (bx_devices.bulkIOQuantumsRequested) +#define DEV_bulk_io_quantum_transferred() (bx_devices.bulkIOQuantumsTransferred) +#define DEV_bulk_io_host_addr() (bx_devices.bulkIOHostAddr) + +///////// FLOPPY macros +#define DEV_floppy_get_media_status(drive) bx_devices.pluginFloppyDevice->get_media_status(drive) +#define DEV_floppy_set_media_status(drive, status) bx_devices.pluginFloppyDevice->set_media_status(drive, status) +#define DEV_floppy_present() (bx_devices.pluginFloppyDevice != &bx_devices.stubFloppy) + +///////// DMA macros +#define DEV_dma_register_8bit_channel(channel, dmaRead, dmaWrite, name) \ + (bx_devices.pluginDmaDevice->registerDMA8Channel(channel, dmaRead, dmaWrite, name)) +#define DEV_dma_register_16bit_channel(channel, dmaRead, dmaWrite, name) \ + (bx_devices.pluginDmaDevice->registerDMA16Channel(channel, dmaRead, dmaWrite, name)) +#define DEV_dma_unregister_channel(channel) \ + (bx_devices.pluginDmaDevice->unregisterDMAChannel(channel)) +#define DEV_dma_set_drq(channel, val) \ + (bx_devices.pluginDmaDevice->set_DRQ(channel, val)) +#define DEV_dma_get_tc() \ + (bx_devices.pluginDmaDevice->get_TC()) +#define DEV_dma_raise_hlda() \ + (bx_devices.pluginDmaDevice->raise_HLDA()) + +///////// PIC macros +#define DEV_pic_lower_irq(b) (bx_devices.pluginPicDevice->lower_irq(b)) +#define DEV_pic_raise_irq(b) (bx_devices.pluginPicDevice->raise_irq(b)) +#define DEV_pic_set_mode(a,b) (bx_devices.pluginPicDevice->set_mode(a,b)) +#define DEV_pic_iac() (bx_devices.pluginPicDevice->IAC()) +#define DEV_pic_show_pic_state() (bx_devices.pluginPicDevice->show_pic_state()) + +///////// VGA macros +#define DEV_vga_mem_read(addr) (bx_devices.pluginVgaDevice->mem_read(addr)) +#define DEV_vga_mem_write(addr, val) (bx_devices.pluginVgaDevice->mem_write(addr, val)) +#define DEV_vga_redraw_area(left, top, right, bottom) \ + (bx_devices.pluginVgaDevice->redraw_area(left, top, right, bottom)) +#define DEV_vga_get_text_snapshot(rawsnap, height, width) \ + (bx_devices.pluginVgaDevice->get_text_snapshot(rawsnap, height, width)) +#define DEV_vga_refresh() \ + (bx_devices.pluginVgaDevice->trigger_timer(bx_devices.pluginVgaDevice)) +#define DEV_vga_get_actl_pal_idx(index) (bx_devices.pluginVgaDevice->get_actl_palette_idx(index)) +#define DEV_vga_dump_status() (bx_devices.pluginVgaDevice->dump_status()) + +///////// PCI macros +#define DEV_register_pci_handlers(a,b,c,d) \ + (bx_devices.pluginPciBridge->register_pci_handlers(a,b,c,d)) +#define DEV_is_pci_device(name) bx_devices.pluginPciBridge->is_pci_device(name) +#define DEV_pci_set_irq(a,b,c) bx_devices.pluginPci2IsaBridge->pci_set_irq(a,b,c) +#define DEV_pci_set_base_mem(a,b,c,d,e,f) \ + (bx_devices.pluginPciBridge->pci_set_base_mem(a,b,c,d,e,f)) +#define DEV_pci_set_base_io(a,b,c,d,e,f,g,h) \ + (bx_devices.pluginPciBridge->pci_set_base_io(a,b,c,d,e,f,g,h)) +#define DEV_pci_rd_memtype(addr) bx_devices.pluginPciBridge->rd_memType(addr) +#define DEV_pci_wr_memtype(addr) bx_devices.pluginPciBridge->wr_memType(addr) +#define DEV_pci_print_i440fx_state() bx_devices.pluginPciBridge->print_i440fx_state() +#define DEV_ide_bmdma_present() bx_devices.pluginPciIdeController->bmdma_present() +#define DEV_ide_bmdma_set_irq(a) bx_devices.pluginPciIdeController->bmdma_set_irq(a) +#define DEV_acpi_generate_smi(a) bx_devices.pluginACPIController->generate_smi(a) + +///////// NE2000 macro +#define DEV_ne2k_print_info(file,page,reg,brief) \ + bx_devices.pluginNE2kDevice->print_info(file,page,reg,brief) + +///////// Speaker macros +#define DEV_speaker_beep_on(frequency) bx_devices.pluginSpeaker->beep_on(frequency) +#define DEV_speaker_beep_off() bx_devices.pluginSpeaker->beep_off() + +///////// Serial macro +#define DEV_serial_mouse_enq(dx, dy, dz, state) \ + (bx_devices.pluginSerialDevice->serial_mouse_enq(dx, dy, dz, state)) + +///////// BUS mouse macro +#define DEV_bus_mouse_enq(dx, dy, dz, state) \ + (bx_devices.pluginBusMouse->bus_mouse_enq(dx, dy, 0, state)) + +///////// USB device macros +#if BX_SUPPORT_PCIUSB +#define DEV_usb_mouse_enq(dx, dy, dz, state) \ + (bx_devices.pluginPciUSBAdapter->usb_mouse_enq(dx, dy, dz, state)) +#define DEV_usb_mouse_enabled_changed(enable) \ + (bx_devices.pluginPciUSBAdapter->usb_mouse_enabled_changed(enable)) +#define DEV_usb_key_enq(scan_code) \ + (bx_devices.pluginPciUSBAdapter->usb_key_enq(scan_code)) +#define DEV_usb_keyboard_connected() \ + (bx_devices.pluginPciUSBAdapter->usb_keyboard_connected()) +#define DEV_usb_mouse_connected() \ + (bx_devices.pluginPciUSBAdapter->usb_mouse_connected()) +#endif + +//////// Memory macros +#define DEV_register_memory_handlers(param,rh,wh,b,e) \ + bx_devices.mem->registerMemoryHandlers(param,rh,wh,b,e) +#define DEV_unregister_memory_handlers(rh,wh,b,e) \ + bx_devices.mem->unregisterMemoryHandlers(rh,wh,b,e) + + +#if BX_HAVE_DLFCN_H +#include +#endif + +typedef Bit32u (*ioReadHandler_t)(void *, Bit32u, unsigned); +typedef void (*ioWriteHandler_t)(void *, Bit32u, Bit32u, unsigned); + +extern plugin_t *plugins; + +typedef struct _device_t +{ + const char *name; + plugin_t *plugin; + + class bx_devmodel_c *devmodel; // BBD hack + + struct _device_t *next; +} device_t; + + +extern device_t *devices; + +void plugin_startup(void); +void plugin_load(char *name, char *args, plugintype_t); +plugin_t *plugin_unload(plugin_t *plugin); +void plugin_init_all(void); +void plugin_fini_all(void); + +/* === Device Stuff === */ +typedef void (*deviceInitMem_t)(BX_MEM_C *); +typedef void (*deviceInitDev_t)(void); +typedef void (*deviceReset_t)(unsigned); + +BOCHSAPI void pluginRegisterDeviceDevmodel(plugin_t *plugin, plugintype_t type, bx_devmodel_c *dev, const char *name); +BOCHSAPI bx_bool pluginDevicePresent(char *name); + +/* === IO port stuff === */ +BOCHSAPI extern int (*pluginRegisterIOReadHandler)(void *thisPtr, ioReadHandler_t callback, + unsigned base, const char *name, Bit8u mask); +BOCHSAPI extern int (*pluginRegisterIOWriteHandler)(void *thisPtr, ioWriteHandler_t callback, + unsigned base, const char *name, Bit8u mask); +BOCHSAPI extern int (*pluginUnregisterIOReadHandler)(void *thisPtr, ioReadHandler_t callback, + unsigned base, Bit8u mask); +BOCHSAPI extern int (*pluginUnregisterIOWriteHandler)(void *thisPtr, ioWriteHandler_t callback, + unsigned base, Bit8u mask); +BOCHSAPI extern int (*pluginRegisterIOReadHandlerRange)(void *thisPtr, ioReadHandler_t callback, + unsigned base, unsigned end, const char *name, Bit8u mask); +BOCHSAPI extern int (*pluginRegisterIOWriteHandlerRange)(void *thisPtr, ioWriteHandler_t callback, + unsigned base, unsigned end, const char *name, Bit8u mask); +BOCHSAPI extern int (*pluginUnregisterIOReadHandlerRange)(void *thisPtr, ioReadHandler_t callback, + unsigned begin, unsigned end, Bit8u mask); +BOCHSAPI extern int (*pluginUnregisterIOWriteHandlerRange)(void *thisPtr, ioWriteHandler_t callback, + unsigned begin, unsigned end, Bit8u mask); +BOCHSAPI extern int (*pluginRegisterDefaultIOReadHandler)(void *thisPtr, ioReadHandler_t callback, + const char *name, Bit8u mask); +BOCHSAPI extern int (*pluginRegisterDefaultIOWriteHandler)(void *thisPtr, ioWriteHandler_t callback, + const char *name, Bit8u mask); + +/* === A20 enable line stuff === */ +BOCHSAPI extern unsigned (*pluginGetA20E)(void); +BOCHSAPI extern void (*pluginSetA20E)(unsigned val); + +/* === IRQ stuff === */ +BOCHSAPI extern void (*pluginRegisterIRQ)(unsigned irq, const char *name); +BOCHSAPI extern void (*pluginUnregisterIRQ)(unsigned irq, const char *name); + +/* === Floppy stuff ===*/ +BOCHSAPI extern unsigned (* pluginFloppyGetMediaStatus)(unsigned drive); +BOCHSAPI extern unsigned (* pluginFloppySetMediaStatus)(unsigned drive, unsigned status); + +/* === VGA stuff === */ +BOCHSAPI extern void (* pluginVGARedrawArea)(unsigned x0, unsigned y0, + unsigned width, unsigned height); +BOCHSAPI extern Bit8u (* pluginVGAMemRead)(Bit32u addr); +BOCHSAPI extern void (* pluginVGAMemWrite)(Bit32u addr, Bit8u value); +BOCHSAPI extern void (* pluginVGAGetTextSnapshot)(Bit8u **text_snapshot, + unsigned *txHeight, unsigned *txWidth); +BOCHSAPI extern void (* pluginVGARefresh)(void *); +BOCHSAPI extern void (* pluginVGASetUpdateInterval)(unsigned); +BOCHSAPI extern Bit8u (* pluginVGAGetActlPaletteIdx)(Bit8u index); + +/* === Timer stuff === */ +BOCHSAPI extern int (*pluginRegisterTimer)(void *this_ptr, void (*funct)(void *), + Bit32u useconds, bx_bool continuous, + bx_bool active, const char *name); + +BOCHSAPI extern void (*pluginActivateTimer)(unsigned id, Bit32u usec, bx_bool continuous); +BOCHSAPI extern void (*pluginDeactivateTimer)(unsigned id); + +/* === HRQ stuff === */ +BOCHSAPI extern void (*pluginSetHRQ)(unsigned val); +BOCHSAPI extern void (*pluginSetHRQHackCallback)(void (*callback)(void)); + +/* === PCI stuff === */ +BOCHSAPI extern bx_bool (*pluginRegisterPCIDevice)(void *this_ptr, + Bit32u (*bx_pci_read_handler)(void *, Bit8u, unsigned), + void(*bx_pci_write_handler)(void *, Bit8u, Bit32u, unsigned), + Bit8u *devfunc, const char *name, const char *descr); +BOCHSAPI extern Bit8u (*pluginRd_memType)(Bit32u addr); +BOCHSAPI extern Bit8u (*pluginWr_memType)(Bit32u addr); + +void plugin_abort(void); + +int bx_load_plugin(const char *name, plugintype_t type); +extern void bx_unload_plugin(const char *name); +extern void bx_init_plugins(void); +extern void bx_reset_plugins(unsigned); +extern void bx_unload_plugins(void); +extern void bx_plugins_register_state(void); +extern void bx_plugins_after_restore_state(void); + +// every plugin must define these, within the extern"C" block, so that +// a non-mangled function symbol is available in the shared library. +void plugin_fini(void); +int plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]); + +// still in extern "C" +#define DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(mod) \ + int lib##mod##_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]); \ + void lib##mod##_LTX_plugin_fini(void); + +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(harddrv) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(keyboard) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(busmouse) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(serial) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(unmapped) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(biosdev) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(cmos) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(dma) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(pic) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(vga) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(floppy) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(parallel) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(hdemu) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(pci) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(pci2isa) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(pci_ide) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(pcivga) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(pcidev) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(pciusb) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(pcipnic) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(sb16) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(ne2k) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(extfpuirq) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(gameport) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(speaker) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(acpi) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(amigaos) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(beos) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(carbon) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(macintosh) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(nogui) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(rfb) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(sdl) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(svga) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(term) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(win32) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(wx) +DECLARE_PLUGIN_INIT_FINI_FOR_MODULE(x) + + +#ifdef __cplusplus +} +#endif + +#endif /* __PLUGIN_H */ Index: trunk/src/bochs-diff-2.3.7/iodev/Makefile.in =================================================================== --- trunk/src/bochs-diff-2.3.7/iodev/Makefile.in (nonexistent) +++ trunk/src/bochs-diff-2.3.7/iodev/Makefile.in (revision 39) @@ -0,0 +1,1226 @@ +# Copyright (C) 2001 MandrakeSoft S.A. +# +# MandrakeSoft S.A. +# 43, rue d'Aboukir +# 75002 Paris - France +# http://www.linux-mandrake.com/ +# http://www.mandrakesoft.com/ +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +# Makefile for the iodev component of bochs + + +@SUFFIX_LINE@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +srcdir = @srcdir@ +VPATH = @srcdir@ +bindir = @bindir@ +libdir = @libdir@ +datarootdir = @datarootdir@ +mandir = @mandir@ +man1dir = $(mandir)/man1 +man5dir = $(mandir)/man5 +docdir = $(datarootdir)/doc/bochs +sharedir = $(datarootdir)/bochs +top_builddir = .. +top_srcdir = @top_srcdir@ + +SHELL = /bin/sh + +@SET_MAKE@ + +CXX = @CXX@ +CXXFLAGS = $(BX_INCDIRS) @CXXFLAGS@ @GUI_CXXFLAGS@ + +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +RANLIB = @RANLIB@ +PLUGIN_PATH=@libdir@ +top_builddir = .. +LIBTOOL=@LIBTOOL@ +WIN32_DLL_IMPORT_LIBRARY=../dllexports.a + +CDROM_OBJS = @CDROM_OBJS@ +IOAPIC_OBJS = @IOAPIC_OBJS@ +SOUNDLOW_OBJS = @SOUNDLOW_OBJS@ +NETLOW_OBJS = @NETLOW_OBJS@ +USBDEV_OBJS = @USBDEV_OBJS@ +SCSI_OBJS = @SCSI_OBJS@ + +BX_INCDIRS = -I.. -I$(srcdir)/.. -I../@INSTRUMENT_DIR@ -I$(srcdir)/../@INSTRUMENT_DIR@ +LOCAL_CXXFLAGS = $(MCH_CFLAGS) + +PCIDEV_CXXFLAGS = -I$(srcdir)/../host/linux/pcidev + +OBJS_THAT_CANNOT_BE_PLUGINS = \ + devices.o \ + pit82c54.o pit_wrap.o \ + virt_timer.o \ + slowdown_timer.o \ + @IODEBUG_OBJS@ \ + $(MCH_OBJS) \ + $(IOAPIC_OBJS) + +OBJS_THAT_CAN_BE_PLUGINS = \ + pic.o \ + serial.o \ + parallel.o \ + hdemu.o \ + floppy.o \ + keyboard.o \ + vga.o \ + biosdev.o \ + cmos.o \ + harddrv.o \ + dma.o \ + unmapped.o \ + extfpuirq.o \ + speaker.o \ + busmouse.o \ + @GAME_OBJS@ \ + @PCI_OBJ@ \ + @SB16_OBJS@ \ + @NE2K_OBJS@ + +OBJS_THAT_SUPPORT_OTHER_PLUGINS = \ + scancodes.o \ + serial_raw.o \ + svga_cirrus.o \ + hdimage.o \ + vmware3.o \ + vmware4.o \ + $(CDROM_OBJS) \ + $(SOUNDLOW_OBJS) \ + $(NETLOW_OBJS) \ + $(USBDEV_OBJS) \ + $(SCSI_OBJS) + +NONPLUGIN_OBJS = @IODEV_NON_PLUGIN_OBJS@ +PLUGIN_OBJS = @IODEV_PLUGIN_OBJS@ + +all: libiodev.a + +plugins: $(PLUGIN_OBJS:@PLUGIN_LIBNAME_TRANSFORMATION@) + +libiodev.a: $(NONPLUGIN_OBJS) + @RMCOMMAND@ libiodev.a + @MAKELIB@ $(NONPLUGIN_OBJS) + @RANLIB@ libiodev.a + +# standard compile rule for C++ files +.@CPP_SUFFIX@.o: + $(CXX) @DASH@c $(CXXFLAGS) $(LOCAL_CXXFLAGS) @CXXFP@$< @OFP@$@ + +pcidev.o : pcidev.@CPP_SUFFIX@ + $(CXX) @DASH@c $(CXXFLAGS) $(LOCAL_CXXFLAGS) $(PCIDEV_CXXFLAGS) @CXXFP@$< @OFP@$@ + +##### building plugins with libtool +%.lo: %.@CPP_SUFFIX@ + $(LIBTOOL) --mode=compile $(CXX) -c $(CXXFLAGS) $(LOCAL_CXXFLAGS) $< -o $@ + +pcidev.lo : pcidev.@CPP_SUFFIX@ + $(LIBTOOL) --mode=compile $(CXX) -c $(CXXFLAGS) $(LOCAL_CXXFLAGS) $(PCIDEV_CXXFLAGS) $< -o $@ + +libbx_%.la: %.lo + $(LIBTOOL) --mode=link $(CXX) -module $< -o $@ -rpath $(PLUGIN_PATH) + +# special link rules for plugins that require more than one object file +libbx_harddrv.la: harddrv.lo hdimage.lo vmware3.lo vmware4.lo $(CDROM_OBJS:.o=.lo) + $(LIBTOOL) --mode=link $(CXX) -module harddrv.lo hdimage.lo vmware3.lo vmware4.lo $(CDROM_OBJS:.o=.lo) -o libbx_harddrv.la -rpath $(PLUGIN_PATH) + +libbx_keyboard.la: keyboard.lo scancodes.lo + $(LIBTOOL) --mode=link $(CXX) -module keyboard.lo scancodes.lo -o libbx_keyboard.la -rpath $(PLUGIN_PATH) + +libbx_pit.la: pit82c54.lo pit_wrap.lo + $(LIBTOOL) --mode=link $(CXX) -module pit82c54.lo pit_wrap.lo -o libbx_pit.la -rpath $(PLUGIN_PATH) + +libbx_sb16.la: sb16.lo $(SOUNDLOW_OBJS:.o=.lo) + $(LIBTOOL) --mode=link $(CXX) -module sb16.lo $(SOUNDLOW_OBJS:.o=.lo) -o libbx_sb16.la -rpath $(PLUGIN_PATH) + +libbx_ne2k.la: ne2k.lo $(NETLOW_OBJS:.o=.lo) + $(LIBTOOL) --mode=link $(CXX) -module ne2k.lo $(NETLOW_OBJS:.o=.lo) -o libbx_ne2k.la -rpath $(PLUGIN_PATH) + +libbx_pcipnic.la: pcipnic.lo $(NETLOW_OBJS:.o=.lo) + $(LIBTOOL) --mode=link $(CXX) -module pcipnic.lo $(NETLOW_OBJS:.o=.lo) -o libbx_pcipnic.la -rpath $(PLUGIN_PATH) + +libbx_serial.la: serial.lo serial_raw.lo + $(LIBTOOL) --mode=link $(CXX) -module serial.lo serial_raw.lo -o libbx_serial.la -rpath $(PLUGIN_PATH) + +libbx_vga.la: vga.lo svga_cirrus.lo + $(LIBTOOL) --mode=link $(CXX) -module vga.lo svga_cirrus.lo -o libbx_vga.la -rpath $(PLUGIN_PATH) + +libbx_pciusb.la: pciusb.lo usb_hid.lo usb_msd.lo scsi_device.lo hdimage.lo cdrom.lo + $(LIBTOOL) --mode=link $(CXX) -module pciusb.lo usb_hid.lo usb_msd.lo scsi_device.lo hdimage.lo cdrom.lo -o libbx_pciusb.la -rpath $(PLUGIN_PATH) + +#### building DLLs for win32 (tested on cygwin only) +bx_%.dll: %.o + $(CXX) $(CXXFLAGS) -shared -o $@ $< $(WIN32_DLL_IMPORT_LIBRARY) + +# special link rules for plugins that require more than one object file +bx_harddrv.dll: harddrv.o hdimage.o vmware3.o vmware4.o $(CDROM_OBJS) + $(CXX) $(CXXFLAGS) -shared -o bx_harddrv.dll harddrv.o hdimage.o vmware3.o vmware4.o $(CDROM_OBJS) $(WIN32_DLL_IMPORT_LIBRARY) + +bx_keyboard.dll: keyboard.o scancodes.o + $(CXX) $(CXXFLAGS) -shared -o bx_keyboard.dll keyboard.o scancodes.o $(WIN32_DLL_IMPORT_LIBRARY) + +bx_pit.dll: pit82c54.o pit_wrap.o + $(CXX) $(CXXFLAGS) -shared -o bx_pit.dll pit82c54.o pit_wrap.o $(WIN32_DLL_IMPORT_LIBRARY) + +bx_sb16.dll: sb16.o $(SOUNDLOW_OBJS) + $(CXX) $(CXXFLAGS) -shared -o bx_sb16.dll sb16.o $(SOUNDLOW_OBJS) $(WIN32_DLL_IMPORT_LIBRARY) -lwinmm + +bx_ne2k.dll: ne2k.o $(NETLOW_OBJS) + $(CXX) $(CXXFLAGS) -shared -o bx_ne2k.dll ne2k.o $(NETLOW_OBJS) $(WIN32_DLL_IMPORT_LIBRARY) + +bx_pcipnic.dll: pcipnic.o $(NETLOW_OBJS) + $(CXX) $(CXXFLAGS) -shared -o bx_pcipnic.dll pcipnic.o $(NETLOW_OBJS) $(WIN32_DLL_IMPORT_LIBRARY) + +bx_gameport.dll: gameport.o + $(CXX) $(CXXFLAGS) -shared -o bx_gameport.dll gameport.o $(WIN32_DLL_IMPORT_LIBRARY) -lwinmm + +bx_serial.dll: serial.o serial_raw.o + $(CXX) $(CXXFLAGS) -shared -o bx_serial.dll serial.o serial_raw.o $(WIN32_DLL_IMPORT_LIBRARY) -lwsock32 + +bx_vga.dll: vga.o svga_cirrus.o + $(CXX) $(CXXFLAGS) -shared -o bx_vga.dll vga.o svga_cirrus.o $(WIN32_DLL_IMPORT_LIBRARY) + +bx_pciusb.dll: pciusb.o usb_hid.o usb_msd.o scsi_device.o hdimage.o cdrom.o + $(CXX) $(CXXFLAGS) -shared -o bx_pciusb.dll pciusb.o usb_hid.o usb_msd.o scsi_device.o hdimage.o cdrom.o $(WIN32_DLL_IMPORT_LIBRARY) + +##### end DLL section + +clean: + @RMCOMMAND@ -rf .libs *.lo *.o *.la *.a *.dll + +dist-clean: clean + @RMCOMMAND@ Makefile + +########################################### +# dependencies generated by +# gcc -MM -I.. -I../instrument/stubs *.cc | sed -e 's/\.cc/.@CPP_SUFFIX@/g' +# gcc -MM -I.. -I../instrument/stubs *.cc | \ +# sed -e 's/\.cc/.@CPP_SUFFIX@/g' -e 's/\.o:/.lo:/g' +# +# This means that every source file is listed twice, once with a .o rule +# and then again with an identical .lo rule. The .lo rules are used when +# building plugins. +########################################### +acpi.o: acpi.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../memory/memory.h ../pc_system.h ../plugin.h ../extplugin.h \ + ../gui/gui.h ../gui/textconfig.h ../config.h ../gui/keymap.h \ + ../instrument/stubs/instrument.h iodev.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +biosdev.o: biosdev.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +busmouse.o: busmouse.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +cdrom_amigaos.o: cdrom_amigaos.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h scsi_commands.h \ + cdrom.h +cdrom_beos.o: cdrom_beos.@CPP_SUFFIX@ cdrom_beos.h +cdrom.o: cdrom.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../memory/memory.h ../pc_system.h ../plugin.h ../extplugin.h \ + ../gui/gui.h ../gui/textconfig.h ../config.h ../gui/keymap.h \ + ../instrument/stubs/instrument.h +cmos.o: cmos.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +crc32.o: crc32.@CPP_SUFFIX@ crc32.h ../config.h +devices.o: devices.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h iodev.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +dma.o: dma.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +eth_arpback.o: eth_arpback.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +eth.o: eth.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +eth_fbsd.o: eth_fbsd.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +eth_linux.o: eth_linux.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +eth_null.o: eth_null.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +eth_packetmaker.o: eth_packetmaker.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h \ + ../osdep.h ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +eth_tap.o: eth_tap.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +eth_tuntap.o: eth_tuntap.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +eth_vde.o: eth_vde.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +eth_vnet.o: eth_vnet.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +eth_win32.o: eth_win32.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +extfpuirq.o: extfpuirq.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +floppy.o: floppy.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +gameport.o: gameport.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +guest2host.o: guest2host.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +harddrv.o: harddrv.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h \ + hdimage.h vmware3.h vmware4.h cdrom.h +hdemu.o: hdemu.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +hdimage.o: hdimage.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h hdimage.h +ioapic.o: ioapic.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../memory/memory.h ../pc_system.h ../plugin.h ../extplugin.h \ + ../gui/gui.h ../gui/textconfig.h ../config.h ../gui/keymap.h \ + ../instrument/stubs/instrument.h ../cpu/apic.h iodev.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +iodebug.o: iodebug.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../cpu/cpu.h \ + ../disasm/disasm.h ../config.h ../cpu/crregs.h ../cpu/descriptor.h \ + ../cpu/instr.h ../cpu/lazy_flags.h iodev.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +keyboard.o: keyboard.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h \ + scancodes.h +ne2k.o: ne2k.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +parallel.o: parallel.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +pci2isa.o: pci2isa.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +pci.o: pci.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +pcidev.o: pcidev.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +pci_ide.o: pci_ide.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +pcipnic.o: pcipnic.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +pciusb.o: pciusb.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +pcivga.o: pcivga.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +pic.o: pic.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +pit82c54.o: pit82c54.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h \ + pit82c54.h +pit_wrap.o: pit_wrap.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h \ + speaker.h +sb16.o: sb16.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +scancodes.o: scancodes.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h scancodes.h +scsi_device.o: scsi_device.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +serial.o: serial.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +serial_raw.o: serial_raw.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +slowdown_timer.o: slowdown_timer.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h slowdown_timer.h +soundlnx.o: soundlnx.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h sb16.h +soundosx.o: soundosx.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h sb16.h +soundwin.o: soundwin.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h sb16.h +speaker.o: speaker.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h speaker.h +svga_cirrus.o: svga_cirrus.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +unmapped.o: unmapped.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +usb_hid.o: usb_hid.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +usb_msd.o: usb_msd.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +vga.o: vga.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +virt_timer.o: virt_timer.@CPP_SUFFIX@ ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h virt_timer.h +vmware3.o: vmware3.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h hdimage.h vmware3.h +vmware4.o: vmware4.@CPP_SUFFIX@ iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h hdimage.h vmware4.h +acpi.lo: acpi.cc ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../memory/memory.h ../pc_system.h ../plugin.h ../extplugin.h \ + ../gui/gui.h ../gui/textconfig.h ../config.h ../gui/keymap.h \ + ../instrument/stubs/instrument.h iodev.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +biosdev.lo: biosdev.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +busmouse.lo: busmouse.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +cdrom_amigaos.lo: cdrom_amigaos.cc ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h scsi_commands.h \ + cdrom.h +cdrom_beos.lo: cdrom_beos.cc cdrom_beos.h +cdrom.lo: cdrom.cc ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../memory/memory.h ../pc_system.h ../plugin.h ../extplugin.h \ + ../gui/gui.h ../gui/textconfig.h ../config.h ../gui/keymap.h \ + ../instrument/stubs/instrument.h +cmos.lo: cmos.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +crc32.lo: crc32.cc crc32.h ../config.h +devices.lo: devices.cc ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h iodev.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +dma.lo: dma.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +eth_arpback.lo: eth_arpback.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +eth.lo: eth.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +eth_fbsd.lo: eth_fbsd.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +eth_linux.lo: eth_linux.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +eth_null.lo: eth_null.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +eth_packetmaker.lo: eth_packetmaker.cc iodev.h ../bochs.h ../config.h \ + ../osdep.h ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +eth_tap.lo: eth_tap.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +eth_tuntap.lo: eth_tuntap.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +eth_vde.lo: eth_vde.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +eth_vnet.lo: eth_vnet.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +eth_win32.lo: eth_win32.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +extfpuirq.lo: extfpuirq.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +floppy.lo: floppy.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +gameport.lo: gameport.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +guest2host.lo: guest2host.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +harddrv.lo: harddrv.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h \ + hdimage.h vmware3.h vmware4.h cdrom.h +hdemu.lo: hdemu.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +hdimage.lo: hdimage.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h hdimage.h +ioapic.lo: ioapic.cc ../bochs.h ../config.h ../osdep.h ../bx_debug/debug.h \ + ../config.h ../osdep.h ../bxversion.h ../gui/siminterface.h \ + ../memory/memory.h ../pc_system.h ../plugin.h ../extplugin.h \ + ../gui/gui.h ../gui/textconfig.h ../config.h ../gui/keymap.h \ + ../instrument/stubs/instrument.h ../cpu/apic.h iodev.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +iodebug.lo: iodebug.cc ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../cpu/cpu.h \ + ../disasm/disasm.h ../config.h ../cpu/crregs.h ../cpu/descriptor.h \ + ../cpu/instr.h ../cpu/lazy_flags.h iodev.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +keyboard.lo: keyboard.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h \ + scancodes.h +ne2k.lo: ne2k.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +parallel.lo: parallel.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +pci2isa.lo: pci2isa.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +pci.lo: pci.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +pcidev.lo: pcidev.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +pci_ide.lo: pci_ide.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +pcipnic.lo: pcipnic.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +pciusb.lo: pciusb.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +pcivga.lo: pcivga.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +pic.lo: pic.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +pit82c54.lo: pit82c54.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h \ + pit82c54.h +pit_wrap.lo: pit_wrap.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h \ + speaker.h +sb16.lo: sb16.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +scancodes.lo: scancodes.cc ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h scancodes.h +scsi_device.lo: scsi_device.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +serial.lo: serial.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +serial_raw.lo: serial_raw.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +slowdown_timer.lo: slowdown_timer.cc ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h slowdown_timer.h +soundlnx.lo: soundlnx.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h sb16.h +soundosx.lo: soundosx.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h sb16.h +soundwin.lo: soundwin.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h sb16.h +speaker.lo: speaker.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h speaker.h +svga_cirrus.lo: svga_cirrus.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +unmapped.lo: unmapped.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +usb_hid.lo: usb_hid.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +usb_msd.lo: usb_msd.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h +vga.lo: vga.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h ../iodev/vga.h \ + ../iodev/biosdev.h ../iodev/cmos.h ../iodev/dma.h ../iodev/floppy.h \ + ../iodev/harddrv.h ../iodev/keyboard.h ../iodev/parallel.h \ + ../iodev/hdemu.h ../iodev/pic.h ../iodev/pit_wrap.h ../bochs.h \ + ../iodev/pit82c54.h ../iodev/virt_timer.h ../iodev/serial.h \ + ../iodev/unmapped.h ../iodev/ne2k.h ../iodev/guest2host.h \ + ../iodev/slowdown_timer.h ../iodev/extfpuirq.h ../iodev/gameport.h +virt_timer.lo: virt_timer.cc ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h virt_timer.h +vmware3.lo: vmware3.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h hdimage.h vmware3.h +vmware4.lo: vmware4.cc iodev.h ../bochs.h ../config.h ../osdep.h \ + ../bx_debug/debug.h ../config.h ../osdep.h ../bxversion.h \ + ../gui/siminterface.h ../memory/memory.h ../pc_system.h ../plugin.h \ + ../extplugin.h ../gui/gui.h ../gui/textconfig.h ../config.h \ + ../gui/keymap.h ../instrument/stubs/instrument.h hdimage.h vmware4.h Index: trunk/src/bochs-diff-2.3.7/iodev/devices.cc =================================================================== --- trunk/src/bochs-diff-2.3.7/iodev/devices.cc (nonexistent) +++ trunk/src/bochs-diff-2.3.7/iodev/devices.cc (revision 39) @@ -0,0 +1,1041 @@ +///////////////////////////////////////////////////////////////////////// +// $Id: devices.cc,v 1.1 2008-11-14 03:31:25 zeus Exp $ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002 MandrakeSoft S.A. +// +// MandrakeSoft S.A. +// 43, rue d'Aboukir +// 75002 Paris - France +// http://www.linux-mandrake.com/ +// http://www.mandrakesoft.com/ +// +// I/O port handlers API Copyright (C) 2003 by Frank Cornelis +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +///////////////////////////////////////////////////////////////////////// + + +#include "bochs.h" +#include "iodev.h" +#define LOG_THIS bx_devices. + + +/* main memory size (in Kbytes) + * subtract 1k for extended BIOS area + * report only base memory, not extended mem + */ +#define BASE_MEMORY_IN_K 640 + + +bx_devices_c bx_devices; + + +// constructor for bx_devices_c +bx_devices_c::bx_devices_c() +{ + put("DEV"); + settype(DEVLOG); + + read_port_to_handler = NULL; + write_port_to_handler = NULL; + io_read_handlers.next = NULL; + io_read_handlers.handler_name = NULL; + io_write_handlers.next = NULL; + io_write_handlers.handler_name = NULL; + init_stubs(); + + for (unsigned i=0; i < BX_MAX_IRQS; i++) { + irq_handler_name[i] = NULL; + } +} + +bx_devices_c::~bx_devices_c() +{ + // nothing needed for now + timer_handle = BX_NULL_TIMER_HANDLE; +} + +void bx_devices_c::init_stubs() +{ +#if BX_SUPPORT_PCI + pluginPciBridge = &stubPci; + pluginPci2IsaBridge = &stubPci2Isa; + pluginPciIdeController = &stubPciIde; +#if BX_SUPPORT_ACPI + pluginACPIController = &stubACPIController; +#endif +#if BX_SUPPORT_PCIVGA + pluginPciVgaAdapter = NULL; +#endif +#if BX_SUPPORT_PCIDEV + pluginPciDevAdapter = NULL; +#endif +#if BX_SUPPORT_PCIUSB + pluginPciUSBAdapter = &stubUsbAdapter; +#endif +#if BX_SUPPORT_PCIPNIC + pluginPciPNicAdapter = NULL; +#endif +#endif + pit = NULL; + pluginKeyboard = &stubKeyboard; + pluginDmaDevice = &stubDma; + pluginFloppyDevice = &stubFloppy; + pluginBiosDevice = NULL; + pluginCmosDevice = &stubCmos; + pluginSerialDevice = &stubSerial; + pluginParallelDevice = NULL; + pluginUnmapped = NULL; + pluginVgaDevice = &stubVga; + pluginPicDevice = &stubPic; + pluginHardDrive = &stubHardDrive; + pluginSB16Device = NULL; + pluginNE2kDevice =&stubNE2k; + pluginExtFpuIrq = NULL; + pluginGameport = NULL; + pluginSpeaker = &stubSpeaker; +#if BX_SUPPORT_BUSMOUSE + pluginBusMouse = &stubBusMouse; +#endif +#if BX_SUPPORT_IODEBUG + iodebug = NULL; +#endif +#if 0 + g2h = NULL; +#endif +} + +void bx_devices_c::init(BX_MEM_C *newmem) +{ + unsigned i; + const char def_name[] = "Default"; + + BX_DEBUG(("Init $Id: devices.cc,v 1.1 2008-11-14 03:31:25 zeus Exp $")); + mem = newmem; + + /* set no-default handlers, will be overwritten by the real default handler */ + register_default_io_read_handler(NULL, &default_read_handler, def_name, 7); + io_read_handlers.next = &io_read_handlers; + io_read_handlers.prev = &io_read_handlers; + io_read_handlers.usage_count = 0; // not used with the default handler + + register_default_io_write_handler(NULL, &default_write_handler, def_name, 7); + io_write_handlers.next = &io_write_handlers; + io_write_handlers.prev = &io_write_handlers; + io_write_handlers.usage_count = 0; // not used with the default handler + + if (read_port_to_handler) + delete [] read_port_to_handler; + if (write_port_to_handler) + delete [] write_port_to_handler; + read_port_to_handler = new struct io_handler_struct *[PORTS]; + write_port_to_handler = new struct io_handler_struct *[PORTS]; + + /* set handlers to the default one */ + for (i=0; i < PORTS; i++) { + read_port_to_handler[i] = &io_read_handlers; + write_port_to_handler[i] = &io_write_handlers; + } + + for (i=0; i < BX_MAX_IRQS; i++) { + delete [] irq_handler_name[i]; + irq_handler_name[i] = NULL; + } + + // register as soon as possible - the devices want to have their timers ! + bx_virt_timer.init(); + bx_slowdown_timer.init(); + + // BBD: At present, the only difference between "core" and "optional" + // plugins is that initialization and reset of optional plugins is handled + // by the plugin device list (). Init and reset of core plugins is done + // "by hand" in this file. Basically, we're using core plugins when we + // want to control the init order. + // + // CB: UNMAPPED and BIOSDEV should maybe be optional + PLUG_load_plugin(unmapped, PLUGTYPE_CORE); + PLUG_load_plugin(biosdev, PLUGTYPE_CORE); + PLUG_load_plugin(cmos, PLUGTYPE_CORE); +/* + PLUG_load_plugin(dma, PLUGTYPE_CORE); + PLUG_load_plugin(pic, PLUGTYPE_CORE); +*/ + PLUG_load_plugin(vga, PLUGTYPE_CORE); +/* + PLUG_load_plugin(floppy, PLUGTYPE_CORE); + PLUG_load_plugin(harddrv, PLUGTYPE_OPTIONAL); + PLUG_load_plugin(keyboard, PLUGTYPE_OPTIONAL); +#if BX_SUPPORT_BUSMOUSE + if (SIM->get_param_enum(BXPN_MOUSE_TYPE)->get() == BX_MOUSE_TYPE_BUS) { + PLUG_load_plugin(busmouse, PLUGTYPE_OPTIONAL); + } +#endif + if (is_serial_enabled()) + PLUG_load_plugin(serial, PLUGTYPE_OPTIONAL); + if (is_parallel_enabled()) + PLUG_load_plugin(parallel, PLUGTYPE_OPTIONAL); +*/ + PLUG_load_plugin(hdemu, PLUGTYPE_OPTIONAL); +/* + PLUG_load_plugin(extfpuirq, PLUGTYPE_OPTIONAL); +#if BX_SUPPORT_GAMEPORT + PLUG_load_plugin(gameport, PLUGTYPE_OPTIONAL); +#endif + PLUG_load_plugin(speaker, PLUGTYPE_OPTIONAL); +*/ + // Start with registering the default (unmapped) handler + pluginUnmapped->init (); +/* + // PCI logic (i440FX) + if (SIM->get_param_bool(BXPN_I440FX_SUPPORT)->get()) { +#if BX_SUPPORT_PCI + PLUG_load_plugin(pci, PLUGTYPE_CORE); + PLUG_load_plugin(pci2isa, PLUGTYPE_CORE); + PLUG_load_plugin(pci_ide, PLUGTYPE_OPTIONAL); +#if BX_SUPPORT_ACPI + PLUG_load_plugin(acpi, PLUGTYPE_OPTIONAL); +#endif +#if BX_SUPPORT_PCIVGA + if ((DEV_is_pci_device("pcivga")) && + (!strcmp(SIM->get_param_string(BXPN_VGA_EXTENSION)->getptr(), "vbe"))) { + PLUG_load_plugin(pcivga, PLUGTYPE_OPTIONAL); + } +#endif +#if BX_SUPPORT_PCIUSB + if (is_usb_enabled()) { + PLUG_load_plugin(pciusb, PLUGTYPE_OPTIONAL); + } +#endif +#if BX_SUPPORT_PCIDEV + if (SIM->get_param_num(BXPN_PCIDEV_VENDOR)->get() != 0xffff) { + PLUG_load_plugin(pcidev, PLUGTYPE_OPTIONAL); + } +#endif +#if BX_SUPPORT_PCIPNIC + if (SIM->get_param_bool(BXPN_PNIC_ENABLED)->get()) { + PLUG_load_plugin(pcipnic, PLUGTYPE_OPTIONAL); + } +#endif +#else + BX_ERROR(("Bochs is not compiled with PCI support")); +#endif + } + + // NE2000 NIC + if (SIM->get_param_bool(BXPN_NE2K_ENABLED)->get()) { +#if BX_SUPPORT_NE2K + PLUG_load_plugin(ne2k, PLUGTYPE_OPTIONAL); +#else + BX_ERROR(("Bochs is not compiled with NE2K support")); +#endif + } + +#if BX_SUPPORT_APIC + // I/O APIC 82093AA + ioapic = & bx_ioapic; + ioapic->init (); +#endif +*/ + // BIOS log + pluginBiosDevice->init (); + + // CMOS RAM & RTC + pluginCmosDevice->init (); +/* + //--- 8237 DMA --- + pluginDmaDevice->init(); + + //--- FLOPPY --- + pluginFloppyDevice->init(); + + //--- SOUND --- + if (SIM->get_param_bool(BXPN_SB16_ENABLED)->get()) { +#if BX_SUPPORT_SB16 + PLUG_load_plugin(sb16, PLUGTYPE_OPTIONAL); +#else + BX_ERROR(("Bochs is not compiled with SB16 support")); +#endif + } + +#if BX_SUPPORT_PCI + pluginPciBridge->init (); + pluginPci2IsaBridge->init (); +#endif +*/ + //--- VGA adapter --- + pluginVgaDevice->init (); +/* + //--- 8259A PIC --- + pluginPicDevice->init(); + + //--- 8254 PIT --- + pit = & bx_pit; + pit->init(); + +#if BX_SUPPORT_IODEBUG + iodebug = &bx_iodebug; + iodebug->init(); +#endif + +#if 0 + // Guest to Host interface. Used with special guest drivers + // which move data to/from the host environment. + g2h = &bx_g2h; + g2h->init(); +#endif +*/ + // system hardware + register_io_read_handler(this, &read_handler, 0x0092, + "Port 92h System Control", 1); + register_io_write_handler(this, &write_handler, 0x0092, + "Port 92h System Control", 1); + + // misc. CMOS + Bit32u extended_memory_in_k = mem->get_memory_in_k() > 1024 ? (mem->get_memory_in_k() - 1024) : 0; + if (extended_memory_in_k > 0xfc00) extended_memory_in_k = 0xfc00; + + DEV_cmos_set_reg(0x15, (Bit8u) BASE_MEMORY_IN_K); + DEV_cmos_set_reg(0x16, (Bit8u) (BASE_MEMORY_IN_K >> 8)); + DEV_cmos_set_reg(0x17, (Bit8u) (extended_memory_in_k & 0xff)); + DEV_cmos_set_reg(0x18, (Bit8u) ((extended_memory_in_k >> 8) & 0xff)); + DEV_cmos_set_reg(0x30, (Bit8u) (extended_memory_in_k & 0xff)); + DEV_cmos_set_reg(0x31, (Bit8u) ((extended_memory_in_k >> 8) & 0xff)); + + Bit32u extended_memory_in_64k = mem->get_memory_in_k() > 16384 ? (mem->get_memory_in_k() - 16384) / 64 : 0; + if (extended_memory_in_64k > 0xffff) extended_memory_in_64k = 0xffff; + + DEV_cmos_set_reg(0x34, (Bit8u) (extended_memory_in_64k & 0xff)); + DEV_cmos_set_reg(0x35, (Bit8u) ((extended_memory_in_64k >> 8) & 0xff)); +/* + if (timer_handle != BX_NULL_TIMER_HANDLE) { + timer_handle = bx_pc_system.register_timer(this, timer_handler, + (unsigned) BX_IODEV_HANDLER_PERIOD, 1, 1, "devices.cc"); + } +*/ + // Clear fields for bulk IO acceleration transfers. + bulkIOHostAddr = 0; + bulkIOQuantumsRequested = 0; + bulkIOQuantumsTransferred = 0; + + bx_init_plugins(); + + /* now perform checksum of CMOS memory */ + DEV_cmos_checksum(); +} + +void bx_devices_c::reset(unsigned type) +{ + mem->disable_smram(); + pluginUnmapped->reset(type); +#if BX_SUPPORT_PCI + if (SIM->get_param_bool(BXPN_I440FX_SUPPORT)->get()) { + pluginPciBridge->reset(type); + pluginPci2IsaBridge->reset(type); + } +#endif +#if BX_SUPPORT_APIC + ioapic->reset(type); +#endif + pluginBiosDevice->reset(type); + pluginCmosDevice->reset(type); + pluginDmaDevice->reset(type); + pluginFloppyDevice->reset(type); + pluginVgaDevice->reset(type); + pluginPicDevice->reset(type); + pit->reset(type); +#if BX_SUPPORT_IODEBUG + iodebug->reset(type); +#endif + // now reset optional plugins + bx_reset_plugins(type); +} + +void bx_devices_c::register_state() +{ + bx_virt_timer.register_state(); +#if BX_SUPPORT_PCI + if (SIM->get_param_bool(BXPN_I440FX_SUPPORT)->get()) { + pluginPciBridge->register_state(); + pluginPci2IsaBridge->register_state(); + } +#endif +#if BX_SUPPORT_APIC + ioapic->register_state(); +#endif + pluginCmosDevice->register_state(); + pluginDmaDevice->register_state(); + pluginFloppyDevice->register_state(); + pluginVgaDevice->register_state(); + pluginPicDevice->register_state(); + pit->register_state(); + // now register state of optional plugins + bx_plugins_register_state(); +} + +void bx_devices_c::after_restore_state() +{ + bx_slowdown_timer.after_restore_state(); +#if BX_SUPPORT_PCI + if (SIM->get_param_bool(BXPN_I440FX_SUPPORT)->get()) { + pluginPciBridge->after_restore_state(); + pluginPci2IsaBridge->after_restore_state(); + } +#endif + pluginCmosDevice->after_restore_state(); + pluginVgaDevice->after_restore_state(); + bx_plugins_after_restore_state(); +} + +void bx_devices_c::exit() +{ + // delete i/o handlers before unloading plugins + struct io_handler_struct *io_read_handler = io_read_handlers.next; + struct io_handler_struct *curr = NULL; + while (io_read_handler != &io_read_handlers) { + io_read_handler->prev->next = io_read_handler->next; + io_read_handler->next->prev = io_read_handler->prev; + curr = io_read_handler; + io_read_handler = io_read_handler->next; + delete [] curr->handler_name; + delete curr; + } + struct io_handler_struct *io_write_handler = io_write_handlers.next; + while (io_write_handler != &io_write_handlers) { + io_write_handler->prev->next = io_write_handler->next; + io_write_handler->next->prev = io_write_handler->prev; + curr = io_write_handler; + io_write_handler = io_write_handler->next; + delete [] curr->handler_name; + delete curr; + } + + pit->exit(); + bx_virt_timer.setup(); + bx_slowdown_timer.exit(); + + PLUG_unload_plugin(unmapped); + PLUG_unload_plugin(biosdev); + PLUG_unload_plugin(cmos); + PLUG_unload_plugin(dma); + PLUG_unload_plugin(pic); + PLUG_unload_plugin(vga); + PLUG_unload_plugin(floppy); +#if BX_SUPPORT_PCI + PLUG_unload_plugin(pci); + PLUG_unload_plugin(pci2isa); +#endif + bx_unload_plugins(); + init_stubs(); +} + +Bit32u bx_devices_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_DEV_SMF + bx_devices_c *class_ptr = (bx_devices_c *) this_ptr; + return class_ptr->port92_read(address, io_len); +} + +Bit32u bx_devices_c::port92_read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_DEV_SMF + + BX_DEBUG(("port92h read partially supported!!!")); + BX_DEBUG((" returning %02x", (unsigned) (BX_GET_ENABLE_A20() << 1))); + return(BX_GET_ENABLE_A20() << 1); +} + +void bx_devices_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_DEV_SMF + bx_devices_c *class_ptr = (bx_devices_c *) this_ptr; + class_ptr->port92_write(address, value, io_len); +} + +void bx_devices_c::port92_write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_DEV_SMF + + BX_DEBUG(("port92h write of %02x partially supported!!!", (unsigned) value)); + BX_DEBUG(("A20: set_enable_a20() called")); + BX_SET_ENABLE_A20((value & 0x02) >> 1); + BX_DEBUG(("A20: now %u", (unsigned) BX_GET_ENABLE_A20())); + if (value & 0x01) { /* high speed reset */ + BX_INFO(("iowrite to port0x92 : reset resquested")); + bx_pc_system.Reset(BX_RESET_SOFTWARE); + } +} + +// This defines a no-default read handler, +// so Bochs does not segfault if unmapped is not loaded +Bit32u bx_devices_c::default_read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ + UNUSED(this_ptr); + BX_PANIC(("No default io-read handler found for 0x%04x/%d. Unmapped io-device not loaded ?", address, io_len)); + return 0xffffffff; +} + +// This defines a no-default write handler, +// so Bochs does not segfault if unmapped is not loaded +void bx_devices_c::default_write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ + UNUSED(this_ptr); + BX_PANIC(("No default io-write handler found for 0x%04x/%d. Unmapped io-device not loaded ?", address, io_len)); +} + +void bx_devices_c::timer_handler(void *this_ptr) +{ + bx_devices_c *class_ptr = (bx_devices_c *) this_ptr; + class_ptr->timer(); +} + +void bx_devices_c::timer() +{ + // separate calls to bx_gui->handle_events from the keyboard code. + { + static int multiple=0; + if (++multiple==10) + { + multiple=0; + SIM->periodic(); + if (! bx_pc_system.kill_bochs_request) + bx_gui->handle_events(); + } + } +} + +bx_bool bx_devices_c::register_irq(unsigned irq, const char *name) +{ + if (irq >= BX_MAX_IRQS) { + BX_PANIC(("IO device %s registered with IRQ=%d above %u", + name, irq, (unsigned) BX_MAX_IRQS-1)); + return 0; + } + if (irq_handler_name[irq]) { + BX_PANIC(("IRQ %u conflict, %s with %s", irq, + irq_handler_name[irq], name)); + return 0; + } + irq_handler_name[irq] = new char[strlen(name)+1]; + strcpy(irq_handler_name[irq], name); + return 1; +} + +bx_bool bx_devices_c::unregister_irq(unsigned irq, const char *name) +{ + if (irq >= BX_MAX_IRQS) { + BX_PANIC(("IO device %s tried to unregister IRQ %d above %u", + name, irq, (unsigned) BX_MAX_IRQS-1)); + return 0; + } + if (!irq_handler_name[irq]) { + BX_INFO(("IO device %s tried to unregister IRQ %d, not registered", + name, irq)); + return 0; + } + + if (strcmp(irq_handler_name[irq], name)) { + BX_INFO(("IRQ %u not registered to %s but to %s", irq, + name, irq_handler_name[irq])); + return 0; + } + delete [] irq_handler_name[irq]; + irq_handler_name[irq] = NULL; + return 1; +} + +bx_bool bx_devices_c::register_io_read_handler(void *this_ptr, bx_read_handler_t f, + Bit32u addr, const char *name, Bit8u mask) +{ + addr &= 0x0000ffff; + + if (!f) + return 0; + + /* first check if the port already has a handlers != the default handler */ + if (read_port_to_handler[addr] && + read_port_to_handler[addr] != &io_read_handlers) { // the default + BX_ERROR(("IO device address conflict(read) at IO address %Xh", + (unsigned) addr)); + BX_ERROR((" conflicting devices: %s & %s", + read_port_to_handler[addr]->handler_name, name)); + return 0; + } + + /* first find existing handle for function or create new one */ + struct io_handler_struct *curr = &io_read_handlers; + struct io_handler_struct *io_read_handler = NULL; + do { + if (curr->funct == f && + curr->mask == mask && + curr->this_ptr == this_ptr && + curr->handler_name == name) { // really want the same name too + io_read_handler = curr; + break; + } + curr = curr->next; + } while (curr->next != &io_read_handlers); + + if (!io_read_handler) { + io_read_handler = new struct io_handler_struct; + io_read_handler->funct = (void *)f; + io_read_handler->this_ptr = this_ptr; + io_read_handler->handler_name = new char[strlen(name)+1]; + strcpy(io_read_handler->handler_name, name); + io_read_handler->mask = mask; + io_read_handler->usage_count = 0; + // add the handler to the double linked list of handlers + io_read_handlers.prev->next = io_read_handler; + io_read_handler->next = &io_read_handlers; + io_read_handler->prev = io_read_handlers.prev; + io_read_handlers.prev = io_read_handler; + } + + io_read_handler->usage_count++; + read_port_to_handler[addr] = io_read_handler; + return 1; // address mapped successfully +} + +bx_bool bx_devices_c::register_io_write_handler(void *this_ptr, bx_write_handler_t f, + Bit32u addr, const char *name, Bit8u mask) +{ + addr &= 0x0000ffff; + + if (!f) + return 0; + + /* first check if the port already has a handlers != the default handler */ + if (write_port_to_handler[addr] && + write_port_to_handler[addr] != &io_write_handlers) { // the default + BX_ERROR(("IO device address conflict(write) at IO address %Xh", + (unsigned) addr)); + BX_ERROR((" conflicting devices: %s & %s", + write_port_to_handler[addr]->handler_name, name)); + return 0; + } + + /* first find existing handle for function or create new one */ + struct io_handler_struct *curr = &io_write_handlers; + struct io_handler_struct *io_write_handler = NULL; + do { + if (curr->funct == f && + curr->mask == mask && + curr->this_ptr == this_ptr && + curr->handler_name == name) { // really want the same name too + io_write_handler = curr; + break; + } + curr = curr->next; + } while (curr->next != &io_write_handlers); + + if (!io_write_handler) { + io_write_handler = new struct io_handler_struct; + io_write_handler->funct = (void *)f; + io_write_handler->this_ptr = this_ptr; + io_write_handler->handler_name = new char[strlen(name)+1]; + strcpy(io_write_handler->handler_name, name); + io_write_handler->mask = mask; + io_write_handler->usage_count = 0; + // add the handler to the double linked list of handlers + io_write_handlers.prev->next = io_write_handler; + io_write_handler->next = &io_write_handlers; + io_write_handler->prev = io_write_handlers.prev; + io_write_handlers.prev = io_write_handler; + } + + io_write_handler->usage_count++; + write_port_to_handler[addr] = io_write_handler; + return 1; // address mapped successfully +} + +bx_bool bx_devices_c::register_io_read_handler_range(void *this_ptr, bx_read_handler_t f, + Bit32u begin_addr, Bit32u end_addr, + const char *name, Bit8u mask) +{ + Bit32u addr; + begin_addr &= 0x0000ffff; + end_addr &= 0x0000ffff; + + if (end_addr < begin_addr) { + BX_ERROR(("!!! end_addr < begin_addr !!!")); + return 0; + } + + if (!f) { + BX_ERROR(("!!! f == NULL !!!")); + return 0; + } + + /* first check if the port already has a handlers != the default handler */ + for (addr = begin_addr; addr <= end_addr; addr++) + if (read_port_to_handler[addr] && + read_port_to_handler[addr] != &io_read_handlers) { // the default + BX_ERROR(("IO device address conflict(read) at IO address %Xh", + (unsigned) addr)); + BX_ERROR((" conflicting devices: %s & %s", + read_port_to_handler[addr]->handler_name, name)); + return 0; + } + + /* first find existing handle for function or create new one */ + struct io_handler_struct *curr = &io_read_handlers; + struct io_handler_struct *io_read_handler = NULL; + do { + if (curr->funct == f && + curr->mask == mask && + curr->this_ptr == this_ptr && + curr->handler_name == name) { + io_read_handler = curr; + break; + } + curr = curr->next; + } while (curr->next != &io_read_handlers); + + if (!io_read_handler) { + io_read_handler = new struct io_handler_struct; + io_read_handler->funct = (void *)f; + io_read_handler->this_ptr = this_ptr; + io_read_handler->handler_name = new char[strlen(name)+1]; + strcpy(io_read_handler->handler_name, name); + io_read_handler->mask = mask; + io_read_handler->usage_count = 0; + // add the handler to the double linked list of handlers + io_read_handlers.prev->next = io_read_handler; + io_read_handler->next = &io_read_handlers; + io_read_handler->prev = io_read_handlers.prev; + io_read_handlers.prev = io_read_handler; + } + + io_read_handler->usage_count += end_addr - begin_addr + 1; + for (addr = begin_addr; addr <= end_addr; addr++) + read_port_to_handler[addr] = io_read_handler; + return 1; // address mapped successfully +} + +bx_bool bx_devices_c::register_io_write_handler_range(void *this_ptr, bx_write_handler_t f, + Bit32u begin_addr, Bit32u end_addr, + const char *name, Bit8u mask) +{ + Bit32u addr; + begin_addr &= 0x0000ffff; + end_addr &= 0x0000ffff; + + if (end_addr < begin_addr) { + BX_ERROR(("!!! end_addr < begin_addr !!!")); + return 0; + } + + if (!f) { + BX_ERROR(("!!! f == NULL !!!")); + return 0; + } + + /* first check if the port already has a handlers != the default handler */ + for (addr = begin_addr; addr <= end_addr; addr++) + if (write_port_to_handler[addr] && + write_port_to_handler[addr] != &io_write_handlers) { // the default + BX_ERROR(("IO device address conflict(read) at IO address %Xh", + (unsigned) addr)); + BX_ERROR((" conflicting devices: %s & %s", + write_port_to_handler[addr]->handler_name, name)); + return 0; + } + + /* first find existing handle for function or create new one */ + struct io_handler_struct *curr = &io_write_handlers; + struct io_handler_struct *io_write_handler = NULL; + do { + if (curr->funct == f && + curr->mask == mask && + curr->this_ptr == this_ptr && + curr->handler_name == name) { + io_write_handler = curr; + break; + } + curr = curr->next; + } while (curr->next != &io_write_handlers); + + if (!io_write_handler) { + io_write_handler = new struct io_handler_struct; + io_write_handler->funct = (void *)f; + io_write_handler->this_ptr = this_ptr; + io_write_handler->handler_name = new char[strlen(name)+1]; + strcpy(io_write_handler->handler_name, name); + io_write_handler->mask = mask; + io_write_handler->usage_count = 0; + // add the handler to the double linked list of handlers + io_write_handlers.prev->next = io_write_handler; + io_write_handler->next = &io_write_handlers; + io_write_handler->prev = io_write_handlers.prev; + io_write_handlers.prev = io_write_handler; + } + + io_write_handler->usage_count += end_addr - begin_addr + 1; + for (addr = begin_addr; addr <= end_addr; addr++) + write_port_to_handler[addr] = io_write_handler; + return 1; // address mapped successfully +} + + +// Registration of default handlers (mainly be the unmapped device) +bx_bool bx_devices_c::register_default_io_read_handler(void *this_ptr, bx_read_handler_t f, + const char *name, Bit8u mask) +{ + io_read_handlers.funct = (void *)f; + io_read_handlers.this_ptr = this_ptr; + if (io_read_handlers.handler_name) { + delete [] io_read_handlers.handler_name; + } + io_read_handlers.handler_name = new char[strlen(name)+1]; + strcpy(io_read_handlers.handler_name, name); + io_read_handlers.mask = mask; + return 1; +} + +bx_bool bx_devices_c::register_default_io_write_handler(void *this_ptr, bx_write_handler_t f, + const char *name, Bit8u mask) +{ + io_write_handlers.funct = (void *)f; + io_write_handlers.this_ptr = this_ptr; + if (io_write_handlers.handler_name) { + delete [] io_write_handlers.handler_name; + } + io_write_handlers.handler_name = new char[strlen(name)+1]; + strcpy(io_write_handlers.handler_name, name); + io_write_handlers.mask = mask; + return 1; +} + +bx_bool bx_devices_c::unregister_io_read_handler(void *this_ptr, bx_read_handler_t f, + Bit32u addr, Bit8u mask) +{ + addr &= 0x0000ffff; + + struct io_handler_struct *io_read_handler = read_port_to_handler[addr]; + + //BX_INFO(("Unregistering I/O read handler at %#x", addr)); + + if (!io_read_handler) { + BX_ERROR((">>> NO IO_READ_HANDLER <<<")); + return 0; + } + + if (io_read_handler == &io_read_handlers) { + BX_ERROR((">>> CANNOT UNREGISTER THE DEFAULT IO_READ_HANDLER <<<")); + return 0; // cannot unregister the default handler + } + + if (io_read_handler->funct != f) { + BX_ERROR((">>> NOT THE SAME IO_READ_HANDLER FUNC <<<")); + return 0; + } + + if (io_read_handler->this_ptr != this_ptr) { + BX_ERROR((">>> NOT THE SAME IO_READ_HANDLER THIS_PTR <<<")); + return 0; + } + + if (io_read_handler->mask != mask) { + BX_ERROR((">>> NOT THE SAME IO_READ_HANDLER MASK <<<")); + return 0; + } + + read_port_to_handler[addr] = &io_read_handlers; // reset to default + io_read_handler->usage_count--; + + if (!io_read_handler->usage_count) { // kill this handler entry + io_read_handler->prev->next = io_read_handler->next; + io_read_handler->next->prev = io_read_handler->prev; + delete [] io_read_handler->handler_name; + delete io_read_handler; + } + return 1; +} + +bx_bool bx_devices_c::unregister_io_write_handler(void *this_ptr, bx_write_handler_t f, + Bit32u addr, Bit8u mask) +{ + addr &= 0x0000ffff; + + struct io_handler_struct *io_write_handler = write_port_to_handler[addr]; + + if (!io_write_handler) + return 0; + + if (io_write_handler == &io_write_handlers) + return 0; // cannot unregister the default handler + + if (io_write_handler->funct != f) + return 0; + + if (io_write_handler->this_ptr != this_ptr) + return 0; + + if (io_write_handler->mask != mask) + return 0; + + write_port_to_handler[addr] = &io_write_handlers; // reset to default + io_write_handler->usage_count--; + + if (!io_write_handler->usage_count) { // kill this handler entry + io_write_handler->prev->next = io_write_handler->next; + io_write_handler->next->prev = io_write_handler->prev; + delete [] io_write_handler->handler_name; + delete io_write_handler; + } + return 1; +} + +bx_bool bx_devices_c::unregister_io_read_handler_range(void *this_ptr, bx_read_handler_t f, + Bit32u begin, Bit32u end, Bit8u mask) +{ + begin &= 0x0000ffff; + end &= 0x0000ffff; + Bit32u addr; + bx_bool ret = 1; + + /* + * the easy way this time + */ + for (addr = begin; addr <= end; addr++) + if (!unregister_io_read_handler(this_ptr, f, addr, mask)) + ret = 0; + + return ret; +} + +bx_bool bx_devices_c::unregister_io_write_handler_range(void *this_ptr, bx_write_handler_t f, + Bit32u begin, Bit32u end, Bit8u mask) +{ + begin &= 0x0000ffff; + end &= 0x0000ffff; + Bit32u addr; + bx_bool ret = 1; + + /* + * the easy way this time + */ + for (addr = begin; addr <= end; addr++) + if (!unregister_io_write_handler(this_ptr, f, addr, mask)) + ret = 0; + + return ret; +} + + +/* + * Read a byte of data from the IO memory address space + */ + + Bit32u BX_CPP_AttrRegparmN(2) +bx_devices_c::inp(Bit16u addr, unsigned io_len) +{ + struct io_handler_struct *io_read_handler; + Bit32u ret; + + BX_INSTR_INP(addr, io_len); + + io_read_handler = read_port_to_handler[addr]; + if (io_read_handler->mask & io_len) { + ret = ((bx_read_handler_t)io_read_handler->funct)(io_read_handler->this_ptr, (Bit32u)addr, io_len); + } else { + switch (io_len) { + case 1: ret = 0xff; break; + case 2: ret = 0xffff; break; + default: ret = 0xffffffff; break; + } + if (addr != 0x0cf8) { // don't flood the logfile when probing PCI + BX_ERROR(("read from port 0x%04x with len %d returns 0x%x", addr, io_len, ret)); + } + } + BX_INSTR_INP2(addr, io_len, ret); + BX_DBG_IO_REPORT(addr, io_len, BX_READ, ret); + return(ret); +} + + +/* + * Write a byte of data to the IO memory address space. + */ + + void BX_CPP_AttrRegparmN(3) +bx_devices_c::outp(Bit16u addr, Bit32u value, unsigned io_len) +{ + struct io_handler_struct *io_write_handler; + + BX_INSTR_OUTP(addr, io_len); + BX_INSTR_OUTP2(addr, io_len, value); + + BX_DBG_IO_REPORT(addr, io_len, BX_WRITE, value); + + io_write_handler = write_port_to_handler[addr]; + if (io_write_handler->mask & io_len) { + ((bx_write_handler_t)io_write_handler->funct)(io_write_handler->this_ptr, (Bit32u)addr, value, io_len); + } else if (addr != 0x0cf8) { // don't flood the logfile when probing PCI + BX_ERROR(("write to port 0x%04x with len %d ignored", addr, io_len)); + } +} + +bx_bool bx_devices_c::is_serial_enabled(void) +{ + char pname[24]; + + for (int i=0; iget_param_bool(pname)->get()) + return true; + } + return false; +} + +bx_bool bx_devices_c::is_usb_enabled(void) +{ + char pname[20]; + + for (int i=0; iget_param_bool(pname)->get()) + return true; + } + return false; +} + +bx_bool bx_devices_c::is_parallel_enabled(void) +{ + char pname[26]; + + for (int i=0; iget_param_bool(pname)->get()) + return true; + } + return false; +} + +void bx_pci_device_stub_c::register_pci_state(bx_list_c *list, Bit8u *pci_conf) +{ + char name[6]; + + bx_list_c *pci = new bx_list_c(list, "pci_conf", 256); + for (unsigned i=0; i<256; i++) { + sprintf(name, "0x%02x", i); + new bx_shadow_num_c(pci, name, &pci_conf[i], BASE_HEX); + } +} Index: trunk/src/bochs-diff-2.3.7/iodev/hdemu.cc =================================================================== --- trunk/src/bochs-diff-2.3.7/iodev/hdemu.cc (nonexistent) +++ trunk/src/bochs-diff-2.3.7/iodev/hdemu.cc (revision 39) @@ -0,0 +1,118 @@ +// Define BX_PLUGGABLE in files that can be compiled into plugins. For +// platforms that require a special tag on exported symbols, BX_PLUGGABLE +// is used to know when we are exporting symbols and when we are importing. +#define BX_PLUGGABLE + +#include "iodev.h" +#define LOG_THIS theHdemuDevice-> + +bx_hdemu_c *theHdemuDevice = NULL; + +int libhdemu_LTX_plugin_init(plugin_t *plugin, plugintype_t type, int argc, char *argv[]) +{ + theHdemuDevice = new bx_hdemu_c(); + bx_devices.pluginHdemuDevice = theHdemuDevice; + BX_REGISTER_DEVICE_DEVMODEL(plugin, type, theHdemuDevice, "hdemu"); + return(0); // Success +} + +void libhdemu_LTX_plugin_fini(void) +{ + delete theHdemuDevice; +} + +bx_hdemu_c::bx_hdemu_c() +{ + put("HDEMU"); + settype(HDEMULOG); + input = NULL; +} + +bx_hdemu_c::~bx_hdemu_c() +{ + if (input != NULL) fclose(input); + BX_DEBUG(("Exit")); +} + +void bx_hdemu_c::init(void) +{ + char name[16]; + + BX_DEBUG(("Init $Id: hdemu.cc,v 1.1 2008-11-14 03:31:25 zeus Exp $")); + + sprintf(name, "Hd emu"); + /* hdemu i/o ports */ + DEV_register_ioread_handler_range(this, read_handler, 0xe000, 0xe1fe, name, 2); + DEV_register_iowrite_handler(this, write_handler, 0xe000, name, 2); + + /* internal state */ + BX_HDEMU_THIS base = 0x0; + + /* input file */ + input = fopen("hd.img", "rb"); + if (!input) + BX_PANIC(("Could not open 'hd.img' to read hard disk contents")); +} + +void bx_hdemu_c::reset(unsigned type) +{ +} + +void bx_hdemu_c::register_state(void) +{ + unsigned i; + char name[4], pname[20]; + bx_list_c *base, *port; + + bx_list_c *list = new bx_list_c(SIM->get_bochs_root(), "hdemu", "Hard disk emulator", 1); + + sprintf(name, "0", i); + port = new bx_list_c(list, name, 1); + new bx_shadow_num_c(port, "base", &BX_HDEMU_THIS base, BASE_HEX); +} + +// static IO port read callback handler +// redirects to non-static class handler to avoid virtual functions + +Bit32u bx_hdemu_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len) +{ +#if !BX_USE_PAR_SMF + bx_hdemu_c *class_ptr = (bx_hdemu_c *) this_ptr; + return class_ptr->read(address, io_len); +} + +Bit32u bx_hdemu_c::read(Bit32u address, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_PAR_SMF + + Bit16u retval; + size_t result; + address = address & 0x01ff; + + fseek (BX_HDEMU_THIS input, address+(BX_HDEMU_THIS base)*512, SEEK_SET ); + result = fread (&retval, 2, 1, BX_HDEMU_THIS input); + + return(retval); +} + +// static IO port write callback handler +// redirects to non-static class handler to avoid virtual functions + +void bx_hdemu_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) +{ +#if !BX_USE_PAR_SMF + bx_hdemu_c *class_ptr = (bx_hdemu_c *) this_ptr; + + class_ptr->write(address, value, io_len); +} + +void bx_hdemu_c::write(Bit32u address, Bit32u value, unsigned io_len) +{ +#else + UNUSED(this_ptr); +#endif // !BX_USE_PAR_SMF + + BX_HDEMU_THIS base = value; +} Index: trunk/src/bochs-diff-2.3.7/iodev/hdemu.h =================================================================== --- trunk/src/bochs-diff-2.3.7/iodev/hdemu.h (nonexistent) +++ trunk/src/bochs-diff-2.3.7/iodev/hdemu.h (revision 39) @@ -0,0 +1,34 @@ +#ifndef BX_IODEV_HDEMU_H +#define BX_IODEV_HDEMU_H + +#define BX_USE_HDEMU_SMF 1 + +#if BX_USE_HDEMU_SMF +# define BX_HDEMU_SMF static +# define BX_HDEMU_THIS theHdemuDevice-> +#else +# define BX_HDEMU_SMF +# define BX_HDEMU_THIS this-> +#endif + +class bx_hdemu_c : public bx_devmodel_c { +public: + bx_hdemu_c(); + virtual ~bx_hdemu_c(); + virtual void init(void); + virtual void reset(unsigned type); + virtual void register_state(void); + +private: + FILE *input; + Bit16u base; + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); +#if !BX_USE_HDEMU_SMF + Bit32u read(Bit32u address, unsigned io_len); + void write(Bit32u address, Bit32u value, unsigned io_len); +#endif +}; + +#endif Index: trunk/src/bochs-diff-2.3.7/iodev/iodev.h =================================================================== --- trunk/src/bochs-diff-2.3.7/iodev/iodev.h (nonexistent) +++ trunk/src/bochs-diff-2.3.7/iodev/iodev.h (revision 39) @@ -0,0 +1,619 @@ +///////////////////////////////////////////////////////////////////////// +// $Id: iodev.h,v 1.1 2008-11-14 03:31:25 zeus Exp $ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002 MandrakeSoft S.A. +// +// MandrakeSoft S.A. +// 43, rue d'Aboukir +// 75002 Paris - France +// http://www.linux-mandrake.com/ +// http://www.mandrakesoft.com/ +// +// I/O port handlers API Copyright (C) 2003 by Frank Cornelis +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +///////////////////////////////////////////////////////////////////////// + +#ifndef IODEV_H +#define IODEV_H + +#include "bochs.h" + +/* maximum number of emulated devices allowed. floppy, vga, etc... + you can increase this to anything below 256 since an 8-bit handle + is used for each device */ +#define BX_MAX_IO_DEVICES 30 + +/* the last device in the array is the "default" I/O device */ +#define BX_DEFAULT_IO_DEVICE (BX_MAX_IO_DEVICES-1) + +/* number of IRQ lines supported. In an ISA PC there are two + PIC chips cascaded together. each has 8 IRQ lines, so there + should be 16 IRQ's total */ +#define BX_MAX_IRQS 16 +#define BX_NO_IRQ -1 + +class bx_pit_c; +#if BX_SUPPORT_APIC +class bx_ioapic_c; +#endif +#if BX_SUPPORT_IODEBUG +class bx_iodebug_c; +#endif +#if 0 +class bx_g2h_c; +#endif + +typedef Bit32u (*bx_read_handler_t)(void *, Bit32u, unsigned); +typedef void (*bx_write_handler_t)(void *, Bit32u, Bit32u, unsigned); + +#if BX_USE_DEV_SMF +# define BX_DEV_SMF static +# define BX_DEV_THIS bx_devices. +#else +# define BX_DEV_SMF +# define BX_DEV_THIS this-> +#endif + +////////////////////////////////////////////////////////////////////// +// bx_devmodel_c declaration +////////////////////////////////////////////////////////////////////// + +// This class defines virtual methods that are common to all devices. +// Child classes do not need to implement all of them, because in this +// definition they are defined as empty, as opposed to being pure +// virtual (= 0). +class BOCHSAPI bx_devmodel_c : public logfunctions { + public: + virtual ~bx_devmodel_c() {} + virtual void init_mem(BX_MEM_C *) {} + virtual void init(void) {} + virtual void reset(unsigned type) {} + virtual void register_state(void) {} + virtual void after_restore_state(void) {} +}; + +////////////////////////////////////////////////////////////////////// +// declare stubs for PCI devices +////////////////////////////////////////////////////////////////////// + +class bx_list_c; + +// the best should be deriving of bx_pci_device_stub_c from bx_devmodel_c +// but it make serious problems for cirrus_svga device +class BOCHSAPI bx_pci_device_stub_c { +public: + virtual ~bx_pci_device_stub_c() {} + + virtual Bit32u pci_read_handler(Bit8u address, unsigned io_len) { + return 0; + } + + virtual void pci_write_handler(Bit8u address, Bit32u value, unsigned io_len) {} + + void register_pci_state(bx_list_c *list, Bit8u *pci_conf); +}; + +////////////////////////////////////////////////////////////////////// +// declare stubs for devices +////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////// +#define STUBFUNC(dev,method) \ + pluginlog->panic("%s called in %s stub. you must not have loaded the %s plugin", #dev, #method, #dev) +////////////////////////////////////////////////////////////////////// + +class BOCHSAPI bx_keyb_stub_c : public bx_devmodel_c { +public: + virtual ~bx_keyb_stub_c() {} + // stubs for bx_keyb_c methods + virtual void mouse_motion(int delta_x, int delta_y, int delta_z, unsigned button_state) { + STUBFUNC(keyboard, mouse_motion); + } + virtual void gen_scancode(Bit32u key) { + STUBFUNC(keyboard, gen_scancode); + } + virtual void paste_bytes(Bit8u *data, Bit32s length) { + STUBFUNC(keyboard, paste_bytes); + } +}; + +class BOCHSAPI bx_hard_drive_stub_c : public bx_devmodel_c { +public: + virtual void init() { + STUBFUNC(HD, init); + } + virtual void reset(unsigned type) { + STUBFUNC(HD, reset); + } + virtual Bit32u get_device_handle(Bit8u channel, Bit8u device) { + STUBFUNC(HD, get_device_handle); return 0; + } + virtual Bit32u get_first_cd_handle(void) { + STUBFUNC(HD, get_first_cd_handle); return 0; + } + virtual unsigned get_cd_media_status(Bit32u handle) { + STUBFUNC(HD, get_cd_media_status); return 0; + } + virtual unsigned set_cd_media_status(Bit32u handle, unsigned status) { + STUBFUNC(HD, set_cd_media_status); return 0; + } + virtual Bit32u virt_read_handler(Bit32u address, unsigned io_len) + { + STUBFUNC(HD, virt_read_handler); return 0; + } + virtual void virt_write_handler(Bit32u address, + Bit32u value, unsigned io_len) + { + STUBFUNC(HD, virt_write_handler); + } + virtual bx_bool bmdma_read_sector(Bit8u channel, Bit8u *buffer, Bit32u *sector_size) { + STUBFUNC(HD, bmdma_read_sector); return 0; + } + virtual bx_bool bmdma_write_sector(Bit8u channel, Bit8u *buffer) { + STUBFUNC(HD, bmdma_write_sector); return 0; + } + virtual void bmdma_complete(Bit8u channel) { + STUBFUNC(HD, bmdma_complete); + } +}; + +class BOCHSAPI bx_floppy_stub_c : public bx_devmodel_c { +public: + virtual unsigned get_media_status(unsigned drive) { + STUBFUNC(floppy, get_media_status); return 0; + } + virtual unsigned set_media_status(unsigned drive, unsigned status) { + STUBFUNC(floppy, set_media_status); return 0; + } +}; + +class BOCHSAPI bx_cmos_stub_c : public bx_devmodel_c { +public: + virtual Bit32u get_reg(unsigned reg) { + STUBFUNC(cmos, get_reg); return 0; + } + virtual void set_reg(unsigned reg, Bit32u val) { + STUBFUNC(cmos, set_reg); + } + virtual time_t get_timeval() { + return 0; + } + virtual void checksum_cmos(void) { + STUBFUNC(cmos, checksum); + } +}; + +class BOCHSAPI bx_dma_stub_c : public bx_devmodel_c { +public: + virtual unsigned registerDMA8Channel( + unsigned channel, + void (* dmaRead)(Bit8u *data_byte), + void (* dmaWrite)(Bit8u *data_byte), + const char *name) + { + STUBFUNC(dma, registerDMA8Channel); return 0; + } + virtual unsigned registerDMA16Channel( + unsigned channel, + void (* dmaRead)(Bit16u *data_word), + void (* dmaWrite)(Bit16u *data_word), + const char *name) + { + STUBFUNC(dma, registerDMA16Channel); return 0; + } + virtual unsigned unregisterDMAChannel(unsigned channel) { + STUBFUNC(dma, unregisterDMAChannel); return 0; + } + virtual unsigned get_TC(void) { + STUBFUNC(dma, get_TC); return 0; + } + virtual void set_DRQ(unsigned channel, bx_bool val) { + STUBFUNC(dma, set_DRQ); + } + virtual void raise_HLDA(void) { + STUBFUNC(dma, raise_HLDA); + } +}; + +class BOCHSAPI bx_pic_stub_c : public bx_devmodel_c { +public: + virtual void raise_irq(unsigned irq_no) { + STUBFUNC(pic, raise_irq); + } + virtual void lower_irq(unsigned irq_no) { + STUBFUNC(pic, lower_irq); + } + virtual void set_mode(bx_bool ma_sl, Bit8u mode) { + STUBFUNC(pic, set_mode); + } + virtual Bit8u IAC(void) { + STUBFUNC(pic, IAC); return 0; + } + virtual void show_pic_state(void) { + STUBFUNC(pic, show_pic_state); + } +}; + +class BOCHSAPI bx_vga_stub_c : public bx_devmodel_c { +public: + virtual void redraw_area(unsigned x0, unsigned y0, + unsigned width, unsigned height) { + STUBFUNC(vga, redraw_area); + } + virtual Bit8u mem_read(Bit32u addr) { + STUBFUNC(vga, mem_read); return 0; + } + virtual void mem_write(Bit32u addr, Bit8u value) { + STUBFUNC(vga, mem_write); + } + virtual void get_text_snapshot(Bit8u **text_snapshot, + unsigned *txHeight, unsigned *txWidth) { + STUBFUNC(vga, get_text_snapshot); + } + virtual void trigger_timer(void *this_ptr) { + STUBFUNC(vga, trigger_timer); + } + virtual Bit8u get_actl_palette_idx(Bit8u index) { + return 0; + } + virtual void dump_status(void) {} +}; + +class BOCHSAPI bx_pci_bridge_stub_c : public bx_devmodel_c, public bx_pci_device_stub_c { +public: + virtual bx_bool register_pci_handlers(bx_pci_device_stub_c *device, + Bit8u *devfunc, const char *name, + const char *descr) + { + STUBFUNC(pci, register_pci_handlers); return 0; + } + virtual bx_bool is_pci_device(const char *name) { + return 0; + } + virtual bx_bool pci_set_base_mem(void *this_ptr, memory_handler_t f1, memory_handler_t f2, + Bit32u *addr, Bit8u *pci_conf, unsigned size) { + STUBFUNC(pci, pci_set_base_mem); + return 0; + } + + virtual bx_bool pci_set_base_io(void *this_ptr, bx_read_handler_t f1, bx_write_handler_t f2, + Bit32u *addr, Bit8u *pci_conf, unsigned size, + const Bit8u *iomask, const char *name) { + STUBFUNC(pci, pci_set_base_io); + return 0; + } + + virtual Bit8u rd_memType(Bit32u addr) { return 0; } + virtual Bit8u wr_memType(Bit32u addr) { return 0; } + virtual void print_i440fx_state(void) {} +}; + +class BOCHSAPI bx_pci2isa_stub_c : public bx_devmodel_c, public bx_pci_device_stub_c { +public: + virtual void pci_set_irq (Bit8u devfunc, unsigned line, bx_bool level) { + STUBFUNC(pci2isa, pci_set_irq); + } +}; + +class BOCHSAPI bx_pci_ide_stub_c : public bx_devmodel_c, public bx_pci_device_stub_c { +public: + virtual bx_bool bmdma_present(void) { + return 0; + } + virtual void bmdma_set_irq(Bit8u channel) {} +}; + +class BOCHSAPI bx_ne2k_stub_c : public bx_devmodel_c { +public: + virtual void print_info(FILE *file, int page, int reg, int nodups) {} +}; + +class BOCHSAPI bx_speaker_stub_c : public bx_devmodel_c { +public: + virtual void beep_on(float frequency) {} + virtual void beep_off() {} +}; + +class BOCHSAPI bx_serial_stub_c : public bx_devmodel_c { +public: + virtual void serial_mouse_enq(int delta_x, int delta_y, int delta_z, unsigned button_state) { + STUBFUNC(serial, serial_mouse_enq); + } +}; + +#if BX_SUPPORT_PCIUSB +class BOCHSAPI bx_pci_usb_stub_c : public bx_devmodel_c, public bx_pci_device_stub_c { +public: + virtual void usb_mouse_enq(int delta_x, int delta_y, int delta_z, unsigned button_state) { + STUBFUNC(pciusb, usb_mouse_enq); + } + virtual void usb_mouse_enabled_changed(bx_bool enable) { + STUBFUNC(pciusb, usb_mouse_enabled_changed); + } + virtual bx_bool usb_key_enq(Bit8u *scan_code) { + STUBFUNC(pciusb, usb_key_enq); + return 0; + } + virtual bx_bool usb_keyboard_connected() { return 0; } + virtual bx_bool usb_mouse_connected() { return 0; } +}; +#endif + +#if BX_SUPPORT_ACPI +class BOCHSAPI bx_acpi_ctrl_stub_c : public bx_devmodel_c, public bx_pci_device_stub_c { +public: + virtual void generate_smi(Bit8u value) {} +}; +#endif + +#if BX_SUPPORT_BUSMOUSE +class BOCHSAPI bx_busm_stub_c : public bx_devmodel_c { +public: + virtual void bus_mouse_enq(int delta_x, int delta_y, int delta_z, unsigned button_state) { + STUBFUNC(busmouse, bus_mouse_enq); + } +}; +#endif + +class BOCHSAPI bx_devices_c : public logfunctions { +public: + bx_devices_c(void); + ~bx_devices_c(void); + // Initialize the device stubs (in constructur and exit()) + void init_stubs(void); + // Register I/O addresses and IRQ lines. Initialize any internal + // structures. init() is called only once, even if the simulator + // reboots or is restarted. + void init(BX_MEM_C *); + // Enter reset state in response to a reset condition. + // The types of reset conditions are defined in bochs.h: + // power-on, hardware, or software. + void reset(unsigned type); + // Cleanup the devices when the simulation quits. + void exit(void); + void register_state(void); + void after_restore_state(void); + BX_MEM_C *mem; // address space associated with these devices + bx_bool register_io_read_handler(void *this_ptr, bx_read_handler_t f, + Bit32u addr, const char *name, Bit8u mask); + bx_bool unregister_io_read_handler(void *this_ptr, bx_read_handler_t f, + Bit32u addr, Bit8u mask); + bx_bool register_io_write_handler(void *this_ptr, bx_write_handler_t f, + Bit32u addr, const char *name, Bit8u mask); + bx_bool unregister_io_write_handler(void *this_ptr, bx_write_handler_t f, + Bit32u addr, Bit8u mask); + bx_bool register_io_read_handler_range(void *this_ptr, bx_read_handler_t f, + Bit32u begin_addr, Bit32u end_addr, + const char *name, Bit8u mask); + bx_bool register_io_write_handler_range(void *this_ptr, bx_write_handler_t f, + Bit32u begin_addr, Bit32u end_addr, + const char *name, Bit8u mask); + bx_bool unregister_io_read_handler_range(void *this_ptr, bx_read_handler_t f, + Bit32u begin, Bit32u end, Bit8u mask); + bx_bool unregister_io_write_handler_range(void *this_ptr, bx_write_handler_t f, + Bit32u begin, Bit32u end, Bit8u mask); + bx_bool register_default_io_read_handler(void *this_ptr, bx_read_handler_t f, const char *name, Bit8u mask); + bx_bool register_default_io_write_handler(void *this_ptr, bx_write_handler_t f, const char *name, Bit8u mask); + bx_bool register_irq(unsigned irq, const char *name); + bx_bool unregister_irq(unsigned irq, const char *name); + Bit32u inp(Bit16u addr, unsigned io_len) BX_CPP_AttrRegparmN(2); + void outp(Bit16u addr, Bit32u value, unsigned io_len) BX_CPP_AttrRegparmN(3); + + static void timer_handler(void *); + void timer(void); + + bx_devmodel_c *pluginBiosDevice; +#if BX_SUPPORT_APIC + bx_ioapic_c *ioapic; +#endif + bx_pci_bridge_stub_c *pluginPciBridge; + bx_pci2isa_stub_c *pluginPci2IsaBridge; + bx_pci_ide_stub_c *pluginPciIdeController; +#if BX_SUPPORT_ACPI + bx_acpi_ctrl_stub_c *pluginACPIController; +#endif + bx_devmodel_c *pluginPciVgaAdapter; + bx_devmodel_c *pluginPciDevAdapter; + bx_devmodel_c *pluginPciPNicAdapter; + bx_pit_c *pit; + bx_keyb_stub_c *pluginKeyboard; + bx_dma_stub_c *pluginDmaDevice; + bx_floppy_stub_c *pluginFloppyDevice; + bx_cmos_stub_c *pluginCmosDevice; + bx_serial_stub_c *pluginSerialDevice; +#if BX_SUPPORT_PCIUSB + bx_pci_usb_stub_c *pluginPciUSBAdapter; +#endif + bx_devmodel_c *pluginParallelDevice; + bx_devmodel_c *pluginHdemuDevice; + bx_devmodel_c *pluginUnmapped; + bx_vga_stub_c *pluginVgaDevice; + bx_pic_stub_c *pluginPicDevice; + bx_hard_drive_stub_c *pluginHardDrive; + bx_devmodel_c *pluginSB16Device; + bx_ne2k_stub_c *pluginNE2kDevice; + bx_devmodel_c *pluginExtFpuIrq; + bx_devmodel_c *pluginGameport; + bx_speaker_stub_c *pluginSpeaker; +#if BX_SUPPORT_BUSMOUSE + bx_busm_stub_c *pluginBusMouse; +#endif +#if BX_SUPPORT_IODEBUG + bx_iodebug_c *iodebug; +#endif +#if 0 + bx_g2h_c *g2h; +#endif + + // stub classes that the pointers (above) can point to until a plugin is + // loaded + bx_cmos_stub_c stubCmos; + bx_keyb_stub_c stubKeyboard; +#if BX_SUPPORT_BUSMOUSE + bx_busm_stub_c stubBusMouse; +#endif + bx_hard_drive_stub_c stubHardDrive; + bx_dma_stub_c stubDma; + bx_pic_stub_c stubPic; + bx_floppy_stub_c stubFloppy; + bx_vga_stub_c stubVga; + bx_pci_bridge_stub_c stubPci; + bx_pci2isa_stub_c stubPci2Isa; + bx_pci_ide_stub_c stubPciIde; + bx_ne2k_stub_c stubNE2k; + bx_speaker_stub_c stubSpeaker; + bx_serial_stub_c stubSerial; +#if BX_SUPPORT_PCIUSB + bx_pci_usb_stub_c stubUsbAdapter; +#endif +#if BX_SUPPORT_ACPI + bx_acpi_ctrl_stub_c stubACPIController; +#endif + + // Some info to pass to devices which can handled bulk IO. This allows + // the interface to remain the same for IO devices which can't handle + // bulk IO. We should probably implement special INPBulk() and OUTBulk() + // functions which stick these values in the bx_devices_c class, and + // then call the normal functions rather than having gross globals + // variables. + Bit8u* bulkIOHostAddr; + unsigned bulkIOQuantumsRequested; + unsigned bulkIOQuantumsTransferred; + +private: + + struct io_handler_struct { + struct io_handler_struct *next; + struct io_handler_struct *prev; + void *funct; // C++ type checking is great, but annoying + void *this_ptr; + char *handler_name; // name of device + int usage_count; + Bit8u mask; // io_len mask + }; + struct io_handler_struct io_read_handlers; + struct io_handler_struct io_write_handlers; +#define PORTS 0x10000 + struct io_handler_struct **read_port_to_handler; + struct io_handler_struct **write_port_to_handler; + + // more for informative purposes, the names of the devices which + // are use each of the IRQ 0..15 lines are stored here + char *irq_handler_name[BX_MAX_IRQS]; + + static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); + BX_DEV_SMF Bit32u port92_read(Bit32u address, unsigned io_len); + BX_DEV_SMF void port92_write(Bit32u address, Bit32u value, unsigned io_len); + + static Bit32u default_read_handler(void *this_ptr, Bit32u address, unsigned io_len); + static void default_write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len); + + int timer_handle; + bx_bool is_serial_enabled(); + bx_bool is_usb_enabled(); + bx_bool is_parallel_enabled(); +}; + +// memory stub has an assumption that there are no memory accesses splitting 4K page +BX_CPP_INLINE void DEV_MEM_READ_PHYSICAL(bx_phy_address phy_addr, unsigned len, Bit8u *ptr) +{ + while(len > 0) { + unsigned remainingInPage = 0x1000 - (phy_addr & 0xfff); + if (len < remainingInPage) remainingInPage = len; + BX_MEM(0)->readPhysicalPage(NULL, phy_addr, remainingInPage, ptr); + ptr += remainingInPage; + phy_addr += remainingInPage; + len -= remainingInPage; + } +} + +// memory stub has an assumption that there are no memory accesses splitting 4K page +BX_CPP_INLINE void DEV_MEM_WRITE_PHYSICAL(bx_phy_address phy_addr, unsigned len, Bit8u *ptr) +{ + while(len > 0) { + unsigned remainingInPage = 0x1000 - (phy_addr & 0xfff); + if (len < remainingInPage) remainingInPage = len; + BX_MEM(0)->writePhysicalPage(NULL, phy_addr, remainingInPage, ptr); + ptr += remainingInPage; + phy_addr += remainingInPage; + len -= remainingInPage; + } +} + +#ifndef NO_DEVICE_INCLUDES + +#if BX_SUPPORT_PCI +#include "iodev/pci.h" +#include "iodev/pci2isa.h" +#include "iodev/pci_ide.h" +#if BX_SUPPORT_ACPI +#include "iodev/acpi.h" +#endif +#if BX_SUPPORT_PCIVGA +#include "iodev/pcivga.h" +#endif +#if BX_SUPPORT_PCIDEV +#include "iodev/pcidev.h" +#endif +#if BX_SUPPORT_PCIUSB +#include "iodev/pciusb.h" +#endif +#endif +#include "iodev/vga.h" +#if BX_SUPPORT_APIC +# include "iodev/ioapic.h" +#endif +#include "iodev/biosdev.h" +#include "iodev/cmos.h" +#include "iodev/dma.h" +#include "iodev/floppy.h" +#include "iodev/harddrv.h" +#if BX_SUPPORT_IODEBUG +# include "iodev/iodebug.h" +#endif +#include "iodev/keyboard.h" +#if BX_SUPPORT_BUSMOUSE +# include "iodev/busmouse.h" +#endif +#include "iodev/parallel.h" +#include "iodev/hdemu.h" +#include "iodev/pic.h" +#include "iodev/pit_wrap.h" +#include "iodev/virt_timer.h" +#include "iodev/serial.h" +#if BX_SUPPORT_SB16 +# include "iodev/sb16.h" +#endif +#include "iodev/unmapped.h" +#include "iodev/ne2k.h" +#if BX_SUPPORT_PCIPNIC +#include "iodev/pcipnic.h" +#endif +#include "iodev/guest2host.h" +#include "iodev/slowdown_timer.h" +#include "iodev/extfpuirq.h" +#include "iodev/gameport.h" + +#endif /* NO_DEVICE_INCLUDES */ + +#if BX_PROVIDE_DEVICE_MODELS +BOCHSAPI extern bx_devices_c bx_devices; +#endif + +#endif /* IODEV_H */ Index: trunk/src/bochs-diff-2.3.7/cpu/cpu.cc =================================================================== --- trunk/src/bochs-diff-2.3.7/cpu/cpu.cc (nonexistent) +++ trunk/src/bochs-diff-2.3.7/cpu/cpu.cc (revision 39) @@ -0,0 +1,989 @@ +///////////////////////////////////////////////////////////////////////// +// $Id: cpu.cc,v 1.1 2008-11-14 03:31:23 zeus Exp $ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001 MandrakeSoft S.A. +// +// MandrakeSoft S.A. +// 43, rue d'Aboukir +// 75002 Paris - France +// http://www.linux-mandrake.com/ +// http://www.mandrakesoft.com/ +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +///////////////////////////////////////////////////////////////////////// + +#define NEED_CPU_REG_SHORTCUTS 1 +#include "bochs.h" +#include "cpu.h" +#define LOG_THIS BX_CPU_THIS_PTR + +#include "iodev/iodev.h" + +#if BX_EXTERNAL_DEBUGGER +#include "extdb.h" +#endif + +// Make code more tidy with a few macros. +#if BX_SUPPORT_X86_64==0 +#define RIP EIP +#define RCX ECX +#endif + +// ICACHE instrumentation code +#if BX_SUPPORT_ICACHE + +#define InstrumentICACHE 0 + +#if InstrumentICACHE +static unsigned iCacheLookups=0; +static unsigned iCacheMisses=0; + +#define InstrICache_StatsMask 0xffffff + +#define InstrICache_Stats() {\ + if ((iCacheLookups & InstrICache_StatsMask) == 0) { \ + BX_INFO(("ICACHE lookups: %u, misses: %u, hit rate = %6.2f%% ", \ + iCacheLookups, \ + iCacheMisses, \ + (iCacheLookups-iCacheMisses) * 100.0 / iCacheLookups)); \ + iCacheLookups = iCacheMisses = 0; \ + } \ +} +#define InstrICache_Increment(v) (v)++ + +#else +#define InstrICache_Stats() +#define InstrICache_Increment(v) +#endif + +#endif // BX_SUPPORT_ICACHE + +// The CHECK_MAX_INSTRUCTIONS macro allows cpu_loop to execute a few +// instructions and then return so that the other processors have a chance to +// run. This is used by bochs internal debugger or when simulating +// multiple processors. +// +// If maximum instructions have been executed, return. The zero-count +// means run forever. +#if BX_SUPPORT_SMP || BX_DEBUGGER + #define CHECK_MAX_INSTRUCTIONS(count) \ + if ((count) > 0) { \ + (count)--; \ + if ((count) == 0) return; \ + } +#else + #define CHECK_MAX_INSTRUCTIONS(count) +#endif + +void BX_CPU_C::cpu_loop(Bit32u max_instr_count) +{ +#if BX_DEBUGGER + BX_CPU_THIS_PTR break_point = 0; + BX_CPU_THIS_PTR magic_break = 0; + BX_CPU_THIS_PTR stop_reason = STOP_NO_REASON; +#endif + + if (setjmp(BX_CPU_THIS_PTR jmp_buf_env)) { + // only from exception function we can get here ... + BX_INSTR_NEW_INSTRUCTION(BX_CPU_ID); + BX_TICK1_IF_SINGLE_PROCESSOR(); +#if BX_DEBUGGER || BX_EXTERNAL_DEBUGGER || BX_GDBSTUB + if (dbg_instruction_epilog()) return; +#endif + CHECK_MAX_INSTRUCTIONS(max_instr_count); +#if BX_GDBSTUB + if (bx_dbg.gdbstub_enabled) return; +#endif + } + + // If the exception() routine has encountered a nasty fault scenario, + // the debugger may request that control is returned to it so that + // the situation may be examined. +#if BX_DEBUGGER + if (bx_guard.interrupt_requested) return; +#endif + + // We get here either by a normal function call, or by a longjmp + // back from an exception() call. In either case, commit the + // new EIP/ESP, and set up other environmental fields. This code + // mirrors similar code below, after the interrupt() call. + BX_CPU_THIS_PTR prev_rip = RIP; // commit new EIP + BX_CPU_THIS_PTR speculative_rsp = 0; + BX_CPU_THIS_PTR EXT = 0; + BX_CPU_THIS_PTR errorno = 0; + + while (1) { + + // check on events which occurred for previous instructions (traps) + // and ones which are asynchronous to the CPU (hardware interrupts) +/* + * Zet: we don't handle external interrupts + * + if (BX_CPU_THIS_PTR async_event) { + if (handleAsyncEvent()) { + // If request to return to caller ASAP. + return; + } + } + */ +no_async_event: + + Bit32u eipBiased = RIP + BX_CPU_THIS_PTR eipPageBias; + + if (eipBiased >= BX_CPU_THIS_PTR eipPageWindowSize) { + prefetch(); + eipBiased = RIP + BX_CPU_THIS_PTR eipPageBias; + } + +#if BX_SUPPORT_ICACHE + bx_phy_address pAddr = BX_CPU_THIS_PTR pAddrA20Page + eipBiased; + bxICacheEntry_c *entry = BX_CPU_THIS_PTR iCache.get_entry(pAddr); + bxInstruction_c *i = entry->i; + + InstrICache_Increment(iCacheLookups); + InstrICache_Stats(); + + if ((entry->pAddr == pAddr) && + (entry->writeStamp == *(BX_CPU_THIS_PTR currPageWriteStampPtr))) + { + // iCache hit. An instruction was found in the iCache. +#if BX_INSTRUMENTATION + BX_INSTR_OPCODE(BX_CPU_ID, BX_CPU_THIS_PTR eipFetchPtr + eipBiased, + i->ilen(), BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].cache.u.segment.d_b, Is64BitMode()); +#endif + } + else { + // iCache miss. No validated instruction with matching fetch parameters + // is in the iCache. + InstrICache_Increment(iCacheMisses); + serveICacheMiss(entry, eipBiased, pAddr); + i = entry->i; + } +#else + bxInstruction_c iStorage, *i = &iStorage; + unsigned remainingInPage = BX_CPU_THIS_PTR eipPageWindowSize - eipBiased; + const Bit8u *fetchPtr = BX_CPU_THIS_PTR eipFetchPtr + eipBiased; + fetchInstruction(i, fetchPtr, remainingInPage); +#endif + +#if BX_SUPPORT_TRACE_CACHE + unsigned length = entry->ilen; + + for(;;i++) { +#endif + // An instruction will have been fetched using either the normal case, + // or the boundary fetch (across pages), by this point. + BX_INSTR_FETCH_DECODE_COMPLETED(BX_CPU_ID, i); + +#if BX_DEBUGGER || BX_EXTERNAL_DEBUGGER || BX_GDBSTUB + if (dbg_instruction_prolog()) return; +#endif + +#if BX_DISASM + if (BX_CPU_THIS_PTR trace) { + // print the instruction that is about to be executed + debug_disasm_instruction(BX_CPU_THIS_PTR prev_rip); + } +#endif + + // decoding instruction compeleted -> continue with execution + BX_INSTR_BEFORE_EXECUTION(BX_CPU_ID, i); + RIP += i->ilen(); + BX_CPU_CALL_METHOD(i->execute, (i)); // might iterate repeat instruction + BX_CPU_THIS_PTR prev_rip = RIP; // commit new RIP + BX_INSTR_AFTER_EXECUTION(BX_CPU_ID, i); + BX_TICK1_IF_SINGLE_PROCESSOR(); + + // inform instrumentation about new instruction + BX_INSTR_NEW_INSTRUCTION(BX_CPU_ID); + + // note instructions generating exceptions never reach this point +#if BX_DEBUGGER || BX_EXTERNAL_DEBUGGER || BX_GDBSTUB + if (dbg_instruction_epilog()) return; +#endif + + CHECK_MAX_INSTRUCTIONS(max_instr_count); + +#if BX_SUPPORT_TRACE_CACHE + if (BX_CPU_THIS_PTR async_event) { + // clear stop trace magic indication that probably was set by repeat or branch32/64 + BX_CPU_THIS_PTR async_event &= ~BX_ASYNC_EVENT_STOP_TRACE; + break; + } + + if (--length == 0) goto no_async_event; + } +#endif + } // while (1) +} + +void BX_CPP_AttrRegparmN(2) BX_CPU_C::repeat(bxInstruction_c *i, BxExecutePtr_tR execute) +{ + // non repeated instruction + if (! i->repUsedL()) { + BX_CPU_CALL_METHOD(execute, (i)); + return; + } + +#if BX_SUPPORT_X86_64 + if (i->as64L()) { + while(1) { + if (RCX != 0) { + BX_CPU_CALL_METHOD(execute, (i)); + BX_INSTR_REPEAT_ITERATION(BX_CPU_ID, i); + RCX --; + } + if (RCX == 0) return; + +#if BX_DEBUGGER == 0 + if (BX_CPU_THIS_PTR async_event) +#endif + break; // exit always if debugger enabled + + BX_TICK1_IF_SINGLE_PROCESSOR(); + } + } + else +#endif + if (i->as32L()) { + while(1) { + if (ECX != 0) { + BX_CPU_CALL_METHOD(execute, (i)); + BX_INSTR_REPEAT_ITERATION(BX_CPU_ID, i); + RCX = ECX - 1; + } + if (ECX == 0) return; + +#if BX_DEBUGGER == 0 + if (BX_CPU_THIS_PTR async_event) +#endif + break; // exit always if debugger enabled + + BX_TICK1_IF_SINGLE_PROCESSOR(); + } + } + else // 16bit addrsize + { + while(1) { + if (CX != 0) { + BX_CPU_CALL_METHOD(execute, (i)); + BX_INSTR_REPEAT_ITERATION(BX_CPU_ID, i); + CX --; + } + if (CX == 0) return; + +#if BX_DEBUGGER == 0 + if (BX_CPU_THIS_PTR async_event) +#endif + break; // exit always if debugger enabled + + BX_TICK1_IF_SINGLE_PROCESSOR(); + } + } + + RIP = BX_CPU_THIS_PTR prev_rip; // repeat loop not done, restore RIP + +#if BX_SUPPORT_TRACE_CACHE + // assert magic async_event to stop trace execution + BX_CPU_THIS_PTR async_event |= BX_ASYNC_EVENT_STOP_TRACE; +#endif +} + +void BX_CPP_AttrRegparmN(2) BX_CPU_C::repeat_ZFL(bxInstruction_c *i, BxExecutePtr_tR execute) +{ + // non repeated instruction + if (! i->repUsedL()) { + BX_CPU_CALL_METHOD(execute, (i)); + return; + } + + unsigned rep = i->repUsedValue(); + +#if BX_SUPPORT_X86_64 + if (i->as64L()) { + while(1) { + if (RCX != 0) { + BX_CPU_CALL_METHOD(execute, (i)); + BX_INSTR_REPEAT_ITERATION(BX_CPU_ID, i); + RCX --; + } + if (rep==3 && get_ZF()==0) return; + if (rep==2 && get_ZF()!=0) return; + if (RCX == 0) return; + +#if BX_DEBUGGER == 0 + if (BX_CPU_THIS_PTR async_event) +#endif + break; // exit always if debugger enabled + + BX_TICK1_IF_SINGLE_PROCESSOR(); + } + } + else +#endif + if (i->as32L()) { + while(1) { + if (ECX != 0) { + BX_CPU_CALL_METHOD(execute, (i)); + BX_INSTR_REPEAT_ITERATION(BX_CPU_ID, i); + RCX = ECX - 1; + } + if (rep==3 && get_ZF()==0) return; + if (rep==2 && get_ZF()!=0) return; + if (ECX == 0) return; + +#if BX_DEBUGGER == 0 + if (BX_CPU_THIS_PTR async_event) +#endif + break; // exit always if debugger enabled + + BX_TICK1_IF_SINGLE_PROCESSOR(); + } + } + else // 16bit addrsize + { + while(1) { + if (CX != 0) { + BX_CPU_CALL_METHOD(execute, (i)); + BX_INSTR_REPEAT_ITERATION(BX_CPU_ID, i); + CX --; + } + if (rep==3 && get_ZF()==0) return; + if (rep==2 && get_ZF()!=0) return; + if (CX == 0) return; + +#if BX_DEBUGGER == 0 + if (BX_CPU_THIS_PTR async_event) +#endif + break; // exit always if debugger enabled + + BX_TICK1_IF_SINGLE_PROCESSOR(); + } + } + + RIP = BX_CPU_THIS_PTR prev_rip; // repeat loop not done, restore RIP + +#if BX_SUPPORT_TRACE_CACHE + // assert magic async_event to stop trace execution + BX_CPU_THIS_PTR async_event |= BX_ASYNC_EVENT_STOP_TRACE; +#endif +} + +unsigned BX_CPU_C::handleAsyncEvent(void) +{ + // + // This area is where we process special conditions and events. + // + if (BX_CPU_THIS_PTR debug_trap & BX_DEBUG_TRAP_SPECIAL) { + // I made up the bitmask above to mean HALT state. + // for one processor, pass the time as quickly as possible until + // an interrupt wakes up the CPU. + while (1) + { + if ((BX_CPU_INTR && (BX_CPU_THIS_PTR get_IF() || (BX_CPU_THIS_PTR debug_trap & BX_DEBUG_TRAP_MWAIT_IF))) || + BX_CPU_THIS_PTR nmi_pending || BX_CPU_THIS_PTR smi_pending) + { + // interrupt ends the HALT condition +#if BX_SUPPORT_MONITOR_MWAIT + if (BX_CPU_THIS_PTR debug_trap & BX_DEBUG_TRAP_MWAIT) + BX_MEM(0)->clear_monitor(BX_CPU_THIS_PTR bx_cpuid); +#endif + BX_CPU_THIS_PTR debug_trap = 0; // clear traps for after resume + BX_CPU_THIS_PTR inhibit_mask = 0; // clear inhibits for after resume + break; + } + if ((BX_CPU_THIS_PTR debug_trap & BX_DEBUG_TRAP_SPECIAL) == 0) { + BX_INFO(("handleAsyncEvent: reset detected in HLT state")); + break; + } + + // for multiprocessor simulation, even if this CPU is halted we still + // must give the others a chance to simulate. If an interrupt has + // arrived, then clear the HALT condition; otherwise just return from + // the CPU loop with stop_reason STOP_CPU_HALTED. +#if BX_SUPPORT_SMP + if (BX_SMP_PROCESSORS > 1) { + // HALT condition remains, return so other CPUs have a chance +#if BX_DEBUGGER + BX_CPU_THIS_PTR stop_reason = STOP_CPU_HALTED; +#endif + return 1; // Return to caller of cpu_loop. + } +#endif + +#if BX_DEBUGGER + if (bx_guard.interrupt_requested) + return 1; // Return to caller of cpu_loop. +#endif + + BX_TICK1(); + } + } else if (bx_pc_system.kill_bochs_request) { + // setting kill_bochs_request causes the cpu loop to return ASAP. + return 1; // Return to caller of cpu_loop. + } + + // Priority 1: Hardware Reset and Machine Checks + // RESET + // Machine Check + // (bochs doesn't support these) + + // Priority 2: Trap on Task Switch + // T flag in TSS is set + if (BX_CPU_THIS_PTR debug_trap & 0x00008000) { + BX_CPU_THIS_PTR dr6 |= BX_CPU_THIS_PTR debug_trap; + exception(BX_DB_EXCEPTION, 0, 0); // no error, not interrupt + } + + // Priority 3: External Hardware Interventions + // FLUSH + // STOPCLK + // SMI + // INIT + // (bochs doesn't support these) + if (BX_CPU_THIS_PTR smi_pending && ! BX_CPU_THIS_PTR smm_mode()) + { + // clear SMI pending flag and disable NMI when SMM was accepted + BX_CPU_THIS_PTR smi_pending = 0; + BX_CPU_THIS_PTR nmi_disable = 1; + enter_system_management_mode(); + } + + // Priority 4: Traps on Previous Instruction + // Breakpoints + // Debug Trap Exceptions (TF flag set or data/IO breakpoint) + if (BX_CPU_THIS_PTR debug_trap && + !(BX_CPU_THIS_PTR inhibit_mask & BX_INHIBIT_DEBUG)) + { + // A trap may be inhibited on this boundary due to an instruction + // which loaded SS. If so we clear the inhibit_mask below + // and don't execute this code until the next boundary. + // Commit debug events to DR6 + BX_CPU_THIS_PTR dr6 |= BX_CPU_THIS_PTR debug_trap; + exception(BX_DB_EXCEPTION, 0, 0); // no error, not interrupt + } + + // Priority 5: External Interrupts + // NMI Interrupts + // Maskable Hardware Interrupts + if (BX_CPU_THIS_PTR inhibit_mask & BX_INHIBIT_INTERRUPTS) { + // Processing external interrupts is inhibited on this + // boundary because of certain instructions like STI. + // inhibit_mask is cleared below, in which case we will have + // an opportunity to check interrupts on the next instruction + // boundary. + } + else if (BX_CPU_THIS_PTR nmi_pending) { + BX_CPU_THIS_PTR nmi_pending = 0; + BX_CPU_THIS_PTR nmi_disable = 1; + BX_CPU_THIS_PTR errorno = 0; + BX_CPU_THIS_PTR EXT = 1; /* external event */ + BX_INSTR_HWINTERRUPT(BX_CPU_ID, 2, BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value, RIP); + interrupt(2, 0, 0, 0); + } + else if (BX_CPU_INTR && BX_CPU_THIS_PTR get_IF() && BX_DBG_ASYNC_INTR) + { + Bit8u vector; + + // NOTE: similar code in ::take_irq() +#if BX_SUPPORT_APIC + if (BX_CPU_THIS_PTR local_apic.INTR) + vector = BX_CPU_THIS_PTR local_apic.acknowledge_int(); + else +#endif + // if no local APIC, always acknowledge the PIC. + vector = DEV_pic_iac(); // may set INTR with next interrupt + BX_CPU_THIS_PTR errorno = 0; + BX_CPU_THIS_PTR EXT = 1; /* external event */ + BX_INSTR_HWINTERRUPT(BX_CPU_ID, vector, + BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value, RIP); + interrupt(vector, 0, 0, 0); + // Set up environment, as would be when this main cpu loop gets + // invoked. At the end of normal instructions, we always commmit + // the new EIP/ESP values. But here, we call interrupt() much like + // it was a sofware interrupt instruction, and need to effect the + // commit here. This code mirrors similar code above. + BX_CPU_THIS_PTR prev_rip = RIP; // commit new RIP + BX_CPU_THIS_PTR speculative_rsp = 0; + BX_CPU_THIS_PTR EXT = 0; + BX_CPU_THIS_PTR errorno = 0; + } + else if (BX_HRQ && BX_DBG_ASYNC_DMA) { + // NOTE: similar code in ::take_dma() + // assert Hold Acknowledge (HLDA) and go into a bus hold state + DEV_dma_raise_hlda(); + } + + // Priority 6: Faults from fetching next instruction + // Code breakpoint fault + // Code segment limit violation (priority 7 on 486/Pentium) + // Code page fault (priority 7 on 486/Pentium) + // (handled in main decode loop) + + // Priority 7: Faults from decoding next instruction + // Instruction length > 15 bytes + // Illegal opcode + // Coprocessor not available + // (handled in main decode loop etc) + + // Priority 8: Faults on executing an instruction + // Floating point execution + // Overflow + // Bound error + // Invalid TSS + // Segment not present + // Stack fault + // General protection + // Data page fault + // Alignment check + // (handled by rest of the code) + + if (BX_CPU_THIS_PTR get_TF()) + { + // TF is set before execution of next instruction. Schedule + // a debug trap (#DB) after execution. After completion of + // next instruction, the code above will invoke the trap. + BX_CPU_THIS_PTR debug_trap |= 0x00004000; // BS flag in DR6 + } + + // Now we can handle things which are synchronous to instruction + // execution. + if (BX_CPU_THIS_PTR get_RF()) { + BX_CPU_THIS_PTR clear_RF(); + } +#if BX_X86_DEBUGGER + else { + // only bother comparing if any breakpoints enabled + if (BX_CPU_THIS_PTR dr7 & 0x000000ff) { + bx_address iaddr = get_laddr(BX_SEG_REG_CS, BX_CPU_THIS_PTR prev_rip); + Bit32u dr6_bits = hwdebug_compare(iaddr, 1, BX_HWDebugInstruction, BX_HWDebugInstruction); + if (dr6_bits) + { + // Add to the list of debug events thus far. + BX_CPU_THIS_PTR async_event = 1; + BX_CPU_THIS_PTR debug_trap |= dr6_bits; + // If debug events are not inhibited on this boundary, + // fire off a debug fault. Otherwise handle it on the next + // boundary. (becomes a trap) + if (! (BX_CPU_THIS_PTR inhibit_mask & BX_INHIBIT_DEBUG)) { + // Commit debug events to DR6 + BX_CPU_THIS_PTR dr6 = BX_CPU_THIS_PTR debug_trap; + exception(BX_DB_EXCEPTION, 0, 0); // no error, not interrupt + } + } + } + } +#endif + + // We have ignored processing of external interrupts and + // debug events on this boundary. Reset the mask so they + // will be processed on the next boundary. + BX_CPU_THIS_PTR inhibit_mask = 0; + + if (!(BX_CPU_INTR || + BX_CPU_THIS_PTR debug_trap || + BX_HRQ || + BX_CPU_THIS_PTR get_TF() +#if BX_X86_DEBUGGER + || (BX_CPU_THIS_PTR dr7 & 0xff) +#endif + )) + BX_CPU_THIS_PTR async_event = 0; + + return 0; // Continue executing cpu_loop. +} + + +// boundaries of consideration: +// +// * physical memory boundary: 1024k (1Megabyte) (increments of...) +// * A20 boundary: 1024k (1Megabyte) +// * page boundary: 4k +// * ROM boundary: 2k (dont care since we are only reading) +// * segment boundary: any + +void BX_CPU_C::prefetch(void) +{ + bx_address temp_rip = RIP; + bx_address laddr = BX_CPU_THIS_PTR get_laddr(BX_SEG_REG_CS, temp_rip); + bx_phy_address pAddr; + unsigned pageOffset = PAGE_OFFSET(laddr); + + // Calculate RIP at the beginning of the page. + BX_CPU_THIS_PTR eipPageBias = pageOffset - RIP; + BX_CPU_THIS_PTR eipPageWindowSize = 4096; + +#if BX_SUPPORT_X86_64 + if (Is64BitMode()) { + if (! IsCanonical(RIP)) { + BX_ERROR(("prefetch: #GP(0): RIP crossed canonical boundary")); + exception(BX_GP_EXCEPTION, 0, 0); + } + } + else +#endif + { + Bit32u temp_limit = BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].cache.u.segment.limit_scaled; + if (((Bit32u) temp_rip) > temp_limit) { + BX_ERROR(("prefetch: EIP [%08x] > CS.limit [%08x]", (Bit32u) temp_rip, temp_limit)); + exception(BX_GP_EXCEPTION, 0, 0); + } + if (temp_limit + BX_CPU_THIS_PTR eipPageBias < 4096) { + BX_CPU_THIS_PTR eipPageWindowSize = temp_limit + BX_CPU_THIS_PTR eipPageBias + 1; + } + } + + bx_address lpf = LPFOf(laddr); + unsigned TLB_index = BX_TLB_INDEX_OF(lpf, 0); + bx_TLB_entry *tlbEntry = &BX_CPU_THIS_PTR TLB.entry[TLB_index]; + Bit8u *fetchPtr = 0; + + if (tlbEntry->lpf == lpf && (tlbEntry->accessBits & (0x01 << CPL))) { + pAddr = A20ADDR(tlbEntry->ppf | pageOffset); +#if BX_SupportGuest2HostTLB + fetchPtr = (Bit8u*) (tlbEntry->hostPageAddr); +#endif + } + else { + if (BX_CPU_THIS_PTR cr0.get_PG()) { + pAddr = translate_linear(laddr, CPL, BX_READ, CODE_ACCESS); + pAddr = A20ADDR(pAddr); + } + else { + pAddr = A20ADDR(laddr); + } + } + + BX_CPU_THIS_PTR pAddrA20Page = LPFOf(pAddr); + + if (fetchPtr) { + BX_CPU_THIS_PTR eipFetchPtr = fetchPtr; + } + else { + BX_CPU_THIS_PTR eipFetchPtr = BX_MEM(0)->getHostMemAddr(BX_CPU_THIS, + BX_CPU_THIS_PTR pAddrA20Page, BX_READ, CODE_ACCESS); + } + + // Sanity checks + if (! BX_CPU_THIS_PTR eipFetchPtr) { + if (pAddr >= BX_MEM(0)->get_memory_len()) { + BX_PANIC(("prefetch: running in bogus memory, pAddr=0x" FMT_PHY_ADDRX, pAddr)); + } + else { + BX_PANIC(("prefetch: getHostMemAddr vetoed direct read, pAddr=0x" FMT_PHY_ADDRX, pAddr)); + } + } + +#if BX_SUPPORT_ICACHE + BX_CPU_THIS_PTR currPageWriteStampPtr = pageWriteStampTable.getPageWriteStampPtr(pAddr); + Bit32u pageWriteStamp = *(BX_CPU_THIS_PTR currPageWriteStampPtr); + pageWriteStamp &= ~ICacheWriteStampFetchModeMask; // Clear out old fetch mode bits + pageWriteStamp |= BX_CPU_THIS_PTR fetchModeMask; // And add new ones + pageWriteStampTable.setPageWriteStamp(pAddr, pageWriteStamp); +#endif +} + +void BX_CPU_C::boundaryFetch(const Bit8u *fetchPtr, unsigned remainingInPage, bxInstruction_c *i) +{ + unsigned j; + Bit8u fetchBuffer[16]; // Really only need 15 + unsigned ret; + + if (remainingInPage >= 15) { + BX_ERROR(("boundaryFetch #GP(0): too many instruction prefixes")); + exception(BX_GP_EXCEPTION, 0, 0); + } + + // Read all leftover bytes in current page up to boundary. + for (j=0; jilen(), + BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].cache.u.segment.d_b, Is64BitMode()); +} + +void BX_CPU_C::deliver_NMI(void) +{ + BX_CPU_THIS_PTR nmi_pending = 1; + BX_CPU_THIS_PTR async_event = 1; +} + +void BX_CPU_C::deliver_SMI(void) +{ + BX_CPU_THIS_PTR smi_pending = 1; + BX_CPU_THIS_PTR async_event = 1; +} + +#if BX_EXTERNAL_DEBUGGER +void BX_CPU_C::ask(int level, const char *prefix, const char *fmt, va_list ap) +{ + char buf1[1024]; + vsprintf (buf1, fmt, ap); + printf ("%s %s\n", prefix, buf1); + trap_debugger(1, BX_CPU_THIS); +} +#endif + +#if BX_DEBUGGER || BX_EXTERNAL_DEBUGGER || BX_GDBSTUB +bx_bool BX_CPU_C::dbg_instruction_prolog(void) +{ +#if BX_DEBUGGER + if(dbg_check_begin_instr_bpoint()) return 1; +#endif + +#if BX_EXTERNAL_DEBUGGER + bx_external_debugger(BX_CPU_THIS); +#endif + + return 0; +} + +bx_bool BX_CPU_C::dbg_instruction_epilog(void) +{ +#if BX_DEBUGGER + if (dbg_check_end_instr_bpoint()) return 1; +#endif + +#if BX_GDBSTUB + if (bx_dbg.gdbstub_enabled) { + unsigned reason = bx_gdbstub_check(EIP); + if (reason != GDBSTUB_STOP_NO_REASON) return 1; + } +#endif + + return 0; +} +#endif // BX_DEBUGGER || BX_EXTERNAL_DEBUGGER || BX_GDBSTUB + +#if BX_DEBUGGER +extern unsigned dbg_show_mask; + +bx_bool BX_CPU_C::dbg_check_begin_instr_bpoint(void) +{ + Bit64u tt = bx_pc_system.time_ticks(); + bx_address debug_eip = RIP; + Bit16u cs = BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].selector.value; + + BX_CPU_THIS_PTR guard_found.cs = cs; + BX_CPU_THIS_PTR guard_found.eip = debug_eip; + BX_CPU_THIS_PTR guard_found.laddr = BX_CPU_THIS_PTR get_laddr(BX_SEG_REG_CS, debug_eip); + BX_CPU_THIS_PTR guard_found.is_32bit_code = + BX_CPU_THIS_PTR sregs[BX_SEG_REG_CS].cache.u.segment.d_b; + BX_CPU_THIS_PTR guard_found.is_64bit_code = Is64BitMode(); + + // support for 'show' command in debugger + if(dbg_show_mask) { + int rv = bx_dbg_show_symbolic(); + if (rv) return(rv); + } + + // see if debugger is looking for iaddr breakpoint of any type + if (bx_guard.guard_for & BX_DBG_GUARD_IADDR_ALL) { +#if (BX_DBG_MAX_VIR_BPOINTS > 0) + if (bx_guard.guard_for & BX_DBG_GUARD_IADDR_VIR) { + if ((BX_CPU_THIS_PTR guard_found.icount!=0) || + (tt != BX_CPU_THIS_PTR guard_found.time_tick)) + { + for (unsigned i=0; i 0) + if (bx_guard.guard_for & BX_DBG_GUARD_IADDR_LIN) { + if ((BX_CPU_THIS_PTR guard_found.icount!=0) || + (tt != BX_CPU_THIS_PTR guard_found.time_tick)) + { + for (unsigned i=0; i 0) + if (bx_guard.guard_for & BX_DBG_GUARD_IADDR_PHY) { + bx_phy_address phy; + bx_bool valid = dbg_xlate_linear2phy(BX_CPU_THIS_PTR guard_found.laddr, &phy); + // The "guard_found.icount!=0" condition allows you to step or + // continue beyond a breakpoint. Bryce tried removing it once, + // and once you get to a breakpoint you are stuck there forever. + // Not pretty. + if (valid && ((BX_CPU_THIS_PTR guard_found.icount!=0) || + (tt != BX_CPU_THIS_PTR guard_found.time_tick))) + { + for (unsigned i=0; i> bitnum); \ + } \ + BX_CPP_INLINE void set_##name (Bit8u val) { \ + val32 = (val32&~(1<> 0); + } + BX_CPP_INLINE void set_PE (Bit8u val) { + printf("set_PE()\n"); + val32 = (val32&~(1<<0)) | (val ? (1<<0) : 0); + } + IMPLEMENT_CRREG_ACCESSORS(MP, 1); + IMPLEMENT_CRREG_ACCESSORS(EM, 2); + IMPLEMENT_CRREG_ACCESSORS(TS, 3); +#if BX_CPU_LEVEL >= 4 + IMPLEMENT_CRREG_ACCESSORS(ET, 4); + IMPLEMENT_CRREG_ACCESSORS(NE, 5); + IMPLEMENT_CRREG_ACCESSORS(AM, 18); + IMPLEMENT_CRREG_ACCESSORS(WP, 16); + IMPLEMENT_CRREG_ACCESSORS(CD, 29); + IMPLEMENT_CRREG_ACCESSORS(NW, 30); +#endif + IMPLEMENT_CRREG_ACCESSORS(PG, 31); + + BX_CPP_INLINE Bit32u getRegister() { return val32; } + BX_CPP_INLINE void setRegister(Bit32u val) { if (val & 1) printf("setCR0 (PE)\n"); val32 = val; } +}; + +#if BX_CPU_LEVEL >= 4 +struct bx_cr4_t { + Bit32u val32; // 32bit value of register + +#if BX_SUPPORT_VME + IMPLEMENT_CRREG_ACCESSORS(VME, 0); + IMPLEMENT_CRREG_ACCESSORS(PVI, 1); +#endif + IMPLEMENT_CRREG_ACCESSORS(TSD, 2); + IMPLEMENT_CRREG_ACCESSORS(DE, 3); + IMPLEMENT_CRREG_ACCESSORS(PSE, 4); + IMPLEMENT_CRREG_ACCESSORS(PAE, 5); + IMPLEMENT_CRREG_ACCESSORS(MCE, 6); + IMPLEMENT_CRREG_ACCESSORS(PGE, 7); + IMPLEMENT_CRREG_ACCESSORS(PCE, 8); + IMPLEMENT_CRREG_ACCESSORS(OSFXSR, 9); + IMPLEMENT_CRREG_ACCESSORS(OSXMMEXCPT, 10); +#if BX_SUPPORT_XSAVE + IMPLEMENT_CRREG_ACCESSORS(OSXSAVE, 18); +#endif + + BX_CPP_INLINE Bit32u getRegister() { return val32; } + BX_CPP_INLINE void setRegister(Bit32u val) { val32 = val; } +}; +#endif // #if BX_CPU_LEVEL >= 4 + +#if BX_SUPPORT_VME + #define CR4_VME_ENABLED (BX_CPU_THIS_PTR cr4.get_VME()) +#else + #define CR4_VME_ENABLED (0) +#endif + +#if BX_SUPPORT_X86_64 + +struct bx_efer_t { + Bit32u val32; // 32bit value of register + + IMPLEMENT_CRREG_ACCESSORS(SCE, 0); + IMPLEMENT_CRREG_ACCESSORS(LME, 8); + IMPLEMENT_CRREG_ACCESSORS(LMA, 10); + IMPLEMENT_CRREG_ACCESSORS(NXE, 11); + IMPLEMENT_CRREG_ACCESSORS(FFXSR, 14); + + BX_CPP_INLINE Bit32u getRegister() { return val32; } + BX_CPP_INLINE void setRegister(Bit32u val) { val32 = val; } +}; + +#define BX_EFER_LMA_MASK (1<<10) +#define BX_EFER_SUPPORTED_BITS BX_CONST64(0x00004d01) + +#endif + +#if BX_SUPPORT_XSAVE +struct xcr0_t { + Bit32u val32; // 32bit value of register + +#define BX_XCR0_SUPPORTED_BITS 0x3 + +#define BX_XCR0_FPU_BIT 0 +#define BX_XCR0_FPU_MASK (1<
trunk/src/bochs-diff-2.3.7/cpu/crregs.h Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/src/bochs-diff-2.3.7/cpu/bcd.cc =================================================================== --- trunk/src/bochs-diff-2.3.7/cpu/bcd.cc (nonexistent) +++ trunk/src/bochs-diff-2.3.7/cpu/bcd.cc (revision 39) @@ -0,0 +1,208 @@ +///////////////////////////////////////////////////////////////////////// +// $Id: bcd.cc,v 1.1 2008-11-14 03:31:23 zeus Exp $ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2002 MandrakeSoft S.A. +// +// MandrakeSoft S.A. +// 43, rue d'Aboukir +// 75002 Paris - France +// http://www.linux-mandrake.com/ +// http://www.mandrakesoft.com/ +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +///////////////////////////////////////////////////////////////////////// + +#define NEED_CPU_REG_SHORTCUTS 1 +#include "bochs.h" +#include "cpu.h" +#define LOG_THIS BX_CPU_THIS_PTR + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::AAA(bxInstruction_c *) +{ + /* + * Note: This instruction incorrectly documented in Intel's materials. + * The right description is: + * + * IF (((AL and 0FH) > 9) or (AF==1) + * THEN + * IF CPU<286 THEN { AL <- AL+6 } + * ELSE { AX <- AX+6 } + * AH <- AH+1 + * CF <- 1 + * AF <- 1 + * ELSE + * CF <- 0 + * AF <- 0 + * ENDIF + * AL <- AL and 0Fh + */ + + /* Validated against Intel Pentium family hardware. */ + + /* AAA affects the following flags: A,C */ + + if (((AL & 0x0f) > 9) || get_AF()) + { + AX = AX + 0x106; + assert_AF(); + assert_CF(); + } + else { + clear_AF(); + clear_CF(); + } + + AL = AL & 0x0f; + + /* AAA affects also the following flags: Z,S,O,P */ + /* modification of the flags is undocumented */ + + /* The following behaviour seems to match the P6 and + its derived processors. */ + clear_OF(); + clear_SF(); /* sign is always 0 because bits 4-7 of AL are zeroed */ + set_ZF(AL == 0); + set_PF_base(AL); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::AAS(bxInstruction_c *) +{ + /* AAS affects the following flags: A,C */ + + if (((AL & 0x0F) > 0x09) || get_AF()) + { + AX = AX - 0x106; + assert_AF(); + assert_CF(); + } + else { + clear_CF(); + clear_AF(); + } + + AL = AL & 0x0f; + + /* AAS affects also the following flags: Z,S,O,P */ + /* modification of the flags is undocumented */ + + /* The following behaviour seems to match the P6 and + its derived processors. */ + clear_OF(); + clear_SF(); /* sign is always 0 because bits 4-7 of AL are zeroed */ + set_ZF(AL == 0); + set_PF_base(AL); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::AAM(bxInstruction_c *i) +{ + Bit8u al, imm8 = i->Ib(); + + if (imm8 == 0) + exception(BX_DE_EXCEPTION, 0, 0); + + al = AL; + AH = al / imm8; + AL = al % imm8; + + /* modification of flags A,C,O is undocumented */ + /* The following behaviour seems to match the P6 and + its derived processors. */ + SET_FLAGS_OSZAPC_LOGIC_8(AL); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::AAD(bxInstruction_c *i) +{ + Bit16u tmp = AH; + tmp *= i->Ib(); + tmp += AL; + + AX = (tmp & 0xff); + + /* modification of flags A,C,O is undocumented */ + /* The following behaviour seems to match the P6 and + its derived processors. */ + SET_FLAGS_OSZAPC_LOGIC_8(AL); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::DAA(bxInstruction_c *) +{ + Bit8u tmpAL = AL; + int tmpCF = 0; + + /* Validated against Intel Pentium family hardware. */ + + // DAA affects the following flags: S,Z,A,P,C + + if (((tmpAL & 0x0F) > 0x09) || get_AF()) + { + tmpCF = ((AL > 0xF9) || get_CF()); + AL = AL + 0x06; + assert_AF(); + } + else + clear_AF(); + + if ((tmpAL > 0x99) || get_CF()) + { + AL = AL + 0x60; + tmpCF = 1; + } +/* else + tmpCF = 0; +*/ + clear_OF(); /* undocumented flag modification */ + set_SF(AL >= 0x80); + set_ZF(AL==0); + set_PF_base(AL); + set_CF(tmpCF); +} + +void BX_CPP_AttrRegparmN(1) BX_CPU_C::DAS(bxInstruction_c *) +{ + /* The algorithm for DAS is fashioned after the pseudo code in the + * Pentium Processor Family Developer's Manual, volume 3. It seems + * to have changed from earlier processor's manuals. I'm not sure + * if this is a correction in the algorithm printed, or Intel has + * changed the handling of instruction. Validated against Intel + * Pentium family hardware. + */ + + Bit8u tmpAL = AL; + int tmpCF = 0; + + /* DAS effect the following flags: A,C,S,Z,P */ + + if (((tmpAL & 0x0F) > 0x09) || get_AF()) + { + tmpCF = (AL < 0x06) || get_CF(); + AL = AL - 0x06; + assert_AF(); + } + else + clear_AF(); + + if ((tmpAL > 0x99) || get_CF()) + { + AL = AL - 0x60; + tmpCF = 1; + } + + clear_OF(); /* undocumented flag modification */ + set_SF(AL >= 0x80); + set_ZF(AL==0); + set_PF_base(AL); + set_CF(tmpCF); +} Index: trunk/src/bochs-diff-2.3.7/instrument/zet/Makefile.in =================================================================== --- trunk/src/bochs-diff-2.3.7/instrument/zet/Makefile.in (nonexistent) +++ trunk/src/bochs-diff-2.3.7/instrument/zet/Makefile.in (revision 39) @@ -0,0 +1,77 @@ +# Copyright (C) 2001 MandrakeSoft S.A. +# +# MandrakeSoft S.A. +# 43, rue d'Aboukir +# 75002 Paris - France +# http://www.linux-mandrake.com/ +# http://www.mandrakesoft.com/ +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +@SUFFIX_LINE@ + +srcdir = @srcdir@ +VPATH = @srcdir@ + +SHELL = /bin/sh + +@SET_MAKE@ + +CC = @CC@ +CFLAGS = @CFLAGS@ +CXX = @CXX@ +CXXFLAGS = @CXXFLAGS@ + +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +RANLIB = @RANLIB@ + + +# =========================================================== +# end of configurable options +# =========================================================== + + +BX_OBJS = \ + instrument.o + +BX_INCLUDES = + +BX_INCDIRS = -I../.. -I$(srcdir)/../.. -I. -I$(srcdir)/. + +.@CPP_SUFFIX@.o: + $(CXX) -c $(CXXFLAGS) $(BX_INCDIRS) @CXXFP@$< @OFP@$@ + + +.c.o: + $(CC) -c $(CFLAGS) $(BX_INCDIRS) @CFP@$< @OFP@$@ + + + +libinstrument.a: $(BX_OBJS) + @RMCOMMAND@ libinstrument.a + @MAKELIB@ $(BX_OBJS) + $(RANLIB) libinstrument.a + +$(BX_OBJS): $(BX_INCLUDES) + + +clean: + @RMCOMMAND@ *.o + @RMCOMMAND@ *.a + +dist-clean: clean + @RMCOMMAND@ Makefile Index: trunk/src/bochs-diff-2.3.7/instrument/zet/instrument.cc =================================================================== --- trunk/src/bochs-diff-2.3.7/instrument/zet/instrument.cc (nonexistent) +++ trunk/src/bochs-diff-2.3.7/instrument/zet/instrument.cc (revision 39) @@ -0,0 +1,295 @@ +///////////////////////////////////////////////////////////////////////// +// $Id: instrument.cc,v 1.1 2008-11-14 03:31:25 zeus Exp $ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001 MandrakeSoft S.A. +// +// MandrakeSoft S.A. +// 43, rue d'Aboukir +// 75002 Paris - France +// http://www.linux-mandrake.com/ +// http://www.mandrakesoft.com/ +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +#include +#include +#include +#include +using std::cerr; +using std::endl; + + +#include "bochs.h" +#include "cpu/cpu.h" + +// maximum size of an instruction +#define MAX_OPCODE_SIZE 16 + +// maximum physical addresses an instruction can generate +#define MAX_DATA_ACCESSES 1024 + +// Use this variable to turn on/off collection of instrumentation data +// If you are not using the debugger to turn this on/off, then possibly +// start this at 1 instead of 0. +typedef std::map TStrUIntMap; +TStrUIntMap *stats = 0; + +unsigned long ninstr = 0; + +static disassembler bx_disassembler; + +static struct instruction_t { + bx_bool valid; // is current instruction valid + unsigned opcode_size; + unsigned nprefixes; + Bit8u opcode[MAX_OPCODE_SIZE]; + bx_bool is32, is64; + unsigned num_data_accesses; + struct { + bx_address laddr; // linear address + bx_phy_address paddr; // physical address + unsigned op; // BX_READ, BX_WRITE or BX_RW + unsigned size; // 1 .. 8 + } data_access[MAX_DATA_ACCESSES]; + bx_bool is_branch; + bx_bool is_taken; + bx_address target_linear; +} *instruction; + +static logfunctions *instrument_log = new logfunctions (); +#define LOG_THIS instrument_log-> + +void bx_instr_init(unsigned cpu) +{ + assert(cpu < BX_SMP_PROCESSORS); + + if (instruction == NULL) + instruction = new struct instruction_t[BX_SMP_PROCESSORS]; + + fprintf(stderr, "Initialize cpu %d\n", cpu); + + bx_disassembler.toggle_syntax_mode(); +} + +void bx_instr_reset(unsigned cpu) +{ + instruction[cpu].valid = 0; + instruction[cpu].nprefixes = 0; + instruction[cpu].num_data_accesses = 0; + instruction[cpu].is_branch = 0; +} + +void bx_instr_print() +{ + if (stats) + { + cerr << "stats contains:\nKey\tValue\n"; + + // use const_iterator to walk through elements of pairs + for ( std::map + ::const_iterator iter = stats->begin(); + iter != stats->end(); ++iter ) + + cerr << iter->first << '\t' << iter->second << '\n'; + + cerr << endl; + cerr << "# instr: " << ninstr << endl; + } + else + { + cerr << "There's no statistics to show!" << endl; + } +} + +void bx_instr_start() +{ + if (stats) cerr << "instrumentation already started" << endl; + else stats = new TStrUIntMap; +} + +void bx_instr_stop() +{ + if (stats) + { + delete stats; + stats = 0; + } + else + { + cerr << "there's no statistics to stop!" << endl; + } +} + +void bx_instr_new_instruction(unsigned cpu) +{ + Bit16u sel; + if (!stats) return; + + ninstr++; + instruction_t *i = &instruction[cpu]; + + if (i->valid) + { + char disasm_tbuf[512]; // buffer for instruction disassembly + unsigned length = i->opcode_size, n; + + bx_disassembler.disasm(i->is32, i->is64, 0, 0, i->opcode, disasm_tbuf); + + if(length != 0) + { + sel = bx_cpu.sregs[BX_SEG_REG_CS].selector.value; + if (sel!=0xf000 && sel!=0xc000) { + (*stats)[std::string(disasm_tbuf)]++; + } + } + } + + instruction[cpu].valid = 0; + instruction[cpu].nprefixes = 0; + instruction[cpu].num_data_accesses = 0; + instruction[cpu].is_branch = 0; +} + +static void branch_taken(unsigned cpu, bx_address new_eip) +{ + if (!stats || !instruction[cpu].valid) return; + + // find linear address + bx_address laddr = BX_CPU(cpu)->get_laddr(BX_SEG_REG_CS, new_eip); + + instruction[cpu].is_branch = 1; + instruction[cpu].is_taken = 1; + instruction[cpu].target_linear = laddr; +} + +void bx_instr_cnear_branch_taken(unsigned cpu, bx_address new_eip) +{ + branch_taken(cpu, new_eip); +} + +void bx_instr_cnear_branch_not_taken(unsigned cpu) +{ + if (!stats || !instruction[cpu].valid) return; + + instruction[cpu].is_branch = 1; + instruction[cpu].is_taken = 0; +} + +void bx_instr_ucnear_branch(unsigned cpu, unsigned what, bx_address new_eip) +{ + branch_taken(cpu, new_eip); +} + +void bx_instr_far_branch(unsigned cpu, unsigned what, Bit16u new_cs, bx_address new_eip) +{ + branch_taken(cpu, new_eip); +} + +void bx_instr_opcode(unsigned cpu, const Bit8u *opcode, unsigned len, bx_bool is32, bx_bool is64) +{ + if (!stats) return; + + for(unsigned i=0;i= MAX_DATA_ACCESSES) + { + return; + } + + bx_address lin = BX_CPU(cpu)->get_laddr(seg, offset); + bx_bool page_valid = BX_CPU(cpu)->dbg_xlate_linear2phy(lin, &phy); + phy = A20ADDR(phy); + + // If linear translation doesn't exist, a paging exception will occur. + // Invalidate physical address data for now. + if (!page_valid) + { + phy = 0; + } + + index = instruction[cpu].num_data_accesses; + instruction[cpu].data_access[index].laddr = lin; + instruction[cpu].data_access[index].paddr = phy; + instruction[cpu].data_access[index].op = rw; +// instruction[cpu].data_access[index].size = size; + instruction[cpu].num_data_accesses++; +} + +void bx_instr_mem_data_access(unsigned cpu, unsigned seg, unsigned offset, unsigned len, unsigned rw) +{ + return; +} Index: trunk/src/bochs-diff-2.3.7/instrument/zet/instrument.h =================================================================== --- trunk/src/bochs-diff-2.3.7/instrument/zet/instrument.h (nonexistent) +++ trunk/src/bochs-diff-2.3.7/instrument/zet/instrument.h (revision 39) @@ -0,0 +1,213 @@ +///////////////////////////////////////////////////////////////////////// +// $Id: instrument.h,v 1.1 2008-11-14 03:31:25 zeus Exp $ +///////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2001 MandrakeSoft S.A. +// +// MandrakeSoft S.A. +// 43, rue d'Aboukir +// 75002 Paris - France +// http://www.linux-mandrake.com/ +// http://www.mandrakesoft.com/ +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +// possible types passed to BX_INSTR_TLB_CNTRL() +#define BX_INSTR_MOV_CR3 10 +#define BX_INSTR_INVLPG 11 +#define BX_INSTR_TASKSWITCH 12 + +// possible types passed to BX_INSTR_CACHE_CNTRL() +#define BX_INSTR_INVD 20 +#define BX_INSTR_WBINVD 21 + +// possible types passed to BX_INSTR_FAR_BRANCH() +#define BX_INSTR_IS_CALL 10 +#define BX_INSTR_IS_RET 11 +#define BX_INSTR_IS_IRET 12 +#define BX_INSTR_IS_JMP 13 +#define BX_INSTR_IS_INT 14 +#define BX_INSTR_IS_SYSCALL 15 +#define BX_INSTR_IS_SYSRET 16 +#define BX_INSTR_IS_SYSENTER 17 +#define BX_INSTR_IS_SYSEXIT 18 + +// possible types passed to BX_INSTR_PREFETCH_HINT() +#define BX_INSTR_PREFETCH_NTA 0 +#define BX_INSTR_PREFETCH_T0 1 +#define BX_INSTR_PREFETCH_T1 2 +#define BX_INSTR_PREFETCH_T2 3 + + +#if BX_INSTRUMENTATION + +class bxInstruction_c; + +// called from the CPU core + +void bx_instr_init(unsigned cpu); +void bx_instr_reset(unsigned cpu); +void bx_instr_start(); +void bx_instr_stop(); +void bx_instr_print(); +void bx_instr_new_instruction(unsigned cpu); + +void bx_instr_cnear_branch_taken(unsigned cpu, bx_address new_eip); +void bx_instr_cnear_branch_not_taken(unsigned cpu); +void bx_instr_ucnear_branch(unsigned cpu, unsigned what, bx_address new_eip); +void bx_instr_far_branch(unsigned cpu, unsigned what, Bit16u new_cs, bx_address new_eip); + +void bx_instr_opcode(unsigned cpu, const Bit8u *opcode, unsigned len, bx_bool is32, bx_bool is64); +void bx_instr_fetch_decode_completed(unsigned cpu, bxInstruction_c *i); + +void bx_instr_prefix(unsigned cpu, Bit8u prefix); + +void bx_instr_interrupt(unsigned cpu, unsigned vector); +void bx_instr_exception(unsigned cpu, unsigned vector); +void bx_instr_hwinterrupt(unsigned cpu, unsigned vector, Bit16u cs, bx_address eip); + +void bx_instr_mem_data_access(unsigned cpu, unsigned seg, bx_address offset, unsigned len, unsigned rw); + +/* simulation init, shutdown, reset */ +# define BX_INSTR_INIT(cpu_id) bx_instr_init(cpu_id) +# define BX_INSTR_EXIT(cpu_id) +# define BX_INSTR_RESET(cpu_id) bx_instr_reset(cpu_id) +# define BX_INSTR_HLT(cpu_id) +# define BX_INSTR_MWAIT(cpu_id, addr, len, flags) +# define BX_INSTR_NEW_INSTRUCTION(cpu_id) bx_instr_new_instruction(cpu_id) + +/* called from command line debugger */ +# define BX_INSTR_DEBUG_PROMPT() +# define BX_INSTR_START() bx_instr_start() +# define BX_INSTR_STOP() bx_instr_stop() +# define BX_INSTR_PRINT() bx_instr_print() + +/* branch resoultion */ +# define BX_INSTR_CNEAR_BRANCH_TAKEN(cpu_id, new_eip) bx_instr_cnear_branch_taken(cpu_id, new_eip) +# define BX_INSTR_CNEAR_BRANCH_NOT_TAKEN(cpu_id) bx_instr_cnear_branch_not_taken(cpu_id) +# define BX_INSTR_UCNEAR_BRANCH(cpu_id, what, new_eip) bx_instr_ucnear_branch(cpu_id, what, new_eip) +# define BX_INSTR_FAR_BRANCH(cpu_id, what, new_cs, new_eip) bx_instr_far_branch(cpu_id, what, new_cs, new_eip) + +/* decoding completed */ +# define BX_INSTR_OPCODE(cpu_id, opcode, len, is32, is64) \ + bx_instr_opcode(cpu_id, opcode, len, is32, is64) +# define BX_INSTR_FETCH_DECODE_COMPLETED(cpu_id, i) \ + bx_instr_fetch_decode_completed(cpu_id, i) + +/* prefix byte decoded */ +# define BX_INSTR_PREFIX(cpu_id, prefix) bx_instr_prefix(cpu_id, prefix) + +/* exceptional case and interrupt */ +# define BX_INSTR_EXCEPTION(cpu_id, vector) bx_instr_exception(cpu_id, vector) +# define BX_INSTR_INTERRUPT(cpu_id, vector) bx_instr_interrupt(cpu_id, vector) +# define BX_INSTR_HWINTERRUPT(cpu_id, vector, cs, eip) bx_instr_hwinterrupt(cpu_id, vector, cs, eip) + +/* TLB/CACHE control instruction executed */ +# define BX_INSTR_CLFLUSH(cpu_id, laddr, paddr) +# define BX_INSTR_CACHE_CNTRL(cpu_id, what) +# define BX_INSTR_TLB_CNTRL(cpu_id, what, new_cr3) +# define BX_INSTR_PREFETCH_HINT(cpu_id, what, seg, offset) + +/* execution */ +# define BX_INSTR_BEFORE_EXECUTION(cpu_id, i) +# define BX_INSTR_AFTER_EXECUTION(cpu_id, i) +# define BX_INSTR_REPEAT_ITERATION(cpu_id, i) + +/* memory access */ +# define BX_INSTR_LIN_ACCESS(cpu_id, lin, phy, len, rw) + +/* memory access */ +# define BX_INSTR_MEM_DATA_ACCESS(cpu_id, seg, offset, len, rw) \ + bx_instr_mem_data_access(cpu_id, seg, offset, len, rw) + +/* called from memory object */ +# define BX_INSTR_PHY_WRITE(cpu_id, addr, len) +# define BX_INSTR_PHY_READ(cpu_id, addr, len) + +/* feedback from device units */ +# define BX_INSTR_INP(addr, len) +# define BX_INSTR_INP2(addr, len, val) +# define BX_INSTR_OUTP(addr, len) +# define BX_INSTR_OUTP2(addr, len, val) + +/* wrmsr callback */ +# define BX_INSTR_WRMSR(cpu_id, addr, value) + +#else + +/* simulation init, shutdown, reset */ +# define BX_INSTR_INIT(cpu_id) +# define BX_INSTR_EXIT(cpu_id) +# define BX_INSTR_RESET(cpu_id) +# define BX_INSTR_HLT(cpu_id) +# define BX_INSTR_MWAIT(cpu_id, addr, len, flags) +# define BX_INSTR_NEW_INSTRUCTION(cpu_id) + +/* called from command line debugger */ +# define BX_INSTR_DEBUG_PROMPT() +# define BX_INSTR_START() +# define BX_INSTR_STOP() +# define BX_INSTR_PRINT() + +/* branch resoultion */ +# define BX_INSTR_CNEAR_BRANCH_TAKEN(cpu_id, new_eip) +# define BX_INSTR_CNEAR_BRANCH_NOT_TAKEN(cpu_id) +# define BX_INSTR_UCNEAR_BRANCH(cpu_id, what, new_eip) +# define BX_INSTR_FAR_BRANCH(cpu_id, what, new_cs, new_eip) + +/* decoding completed */ +# define BX_INSTR_OPCODE(cpu_id, opcode, len, is32, is64) +# define BX_INSTR_FETCH_DECODE_COMPLETED(cpu_id, i) + +/* prefix byte decoded */ +# define BX_INSTR_PREFIX(cpu_id, prefix) + +/* exceptional case and interrupt */ +# define BX_INSTR_EXCEPTION(cpu_id, vector) +# define BX_INSTR_INTERRUPT(cpu_id, vector) +# define BX_INSTR_HWINTERRUPT(cpu_id, vector, cs, eip) + +/* TLB/CACHE control instruction executed */ +# define BX_INSTR_CLFLUSH(cpu_id, laddr, paddr) +# define BX_INSTR_CACHE_CNTRL(cpu_id, what) +# define BX_INSTR_TLB_CNTRL(cpu_id, what, new_cr3) +# define BX_INSTR_PREFETCH_HINT(cpu_id, what, seg, offset) + +/* execution */ +# define BX_INSTR_BEFORE_EXECUTION(cpu_id, i) +# define BX_INSTR_AFTER_EXECUTION(cpu_id, i) +# define BX_INSTR_REPEAT_ITERATION(cpu_id, i) + +/* memory access */ +# define BX_INSTR_LIN_ACCESS(cpu_id, lin, phy, len, rw) + +/* memory access */ +# define BX_INSTR_MEM_DATA_ACCESS(cpu_id, seg, offset, len, rw) + +/* called from memory object */ +# define BX_INSTR_PHY_WRITE(cpu_id, addr, len) +# define BX_INSTR_PHY_READ(cpu_id, addr, len) + +/* feedback from device units */ +# define BX_INSTR_INP(addr, len) +# define BX_INSTR_INP2(addr, len, val) +# define BX_INSTR_OUTP(addr, len) +# define BX_INSTR_OUTP2(addr, len, val) + +/* wrmsr callback */ +# define BX_INSTR_WRMSR(cpu_id, addr, value) + +#endif Index: trunk/sim/mult.v =================================================================== --- trunk/sim/mult.v (revision 38) +++ trunk/sim/mult.v (nonexistent) @@ -1,659 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Copyright (c) 1995-2008 Xilinx, Inc. All rights reserved. -//////////////////////////////////////////////////////////////////////////////// -// ____ ____ -// / /\/ / -// /___/ \ / Vendor: Xilinx -// \ \ \/ Version: K.39 -// \ \ Application: netgen -// / / Filename: mult.v -// /___/ /\ Timestamp: Sun Oct 5 16:08:58 2008 -// \ \ / \ -// \___\/\___\ -// -// Command : -intstyle ise -w -sim -ofmt verilog /home/zeus/zet/impl/virtex4-ml403ep/ise-kotku/tmp/_cg/mult.ngc /home/zeus/zet/impl/virtex4-ml403ep/ise-kotku/tmp/_cg/mult.v -// Device : 4vfx12ff668-10 -// Input file : /home/zeus/zet/impl/virtex4-ml403ep/ise-kotku/tmp/_cg/mult.ngc -// Output file : /home/zeus/zet/impl/virtex4-ml403ep/ise-kotku/tmp/_cg/mult.v -// # of Modules : 1 -// Design Name : mult -// Xilinx : /opt/Xilinx/10.1/ISE -// -// Purpose: -// This verilog netlist is a verification model and uses simulation -// primitives which may not represent the true implementation of the -// device, however the netlist is functionally correct and should not -// be modified. This file cannot be synthesized and should only be used -// with supported simulation tools. -// -// Reference: -// Development System Reference Guide, Chapter 23 and Synthesis and Simulation Design Guide, Chapter 6 -// -//////////////////////////////////////////////////////////////////////////////// - -`timescale 1 ns/1 ps - -module mult ( - clk, a, b, p -); - input clk; - input [16 : 0] a; - input [16 : 0] b; - output [33 : 0] p; - - // synthesis translate_off - - wire \BU2/N1 ; - wire NLW_VCC_P_UNCONNECTED; - wire NLW_GND_G_UNCONNECTED; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_CECARRYIN_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<47>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<46>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<45>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<44>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<43>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<42>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<41>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<40>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<39>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<38>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<37>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<36>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<35>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<34>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<33>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<32>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<31>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<30>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<29>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<28>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<27>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<26>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<25>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<24>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<23>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<22>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<21>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<20>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<19>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<18>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<17>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<16>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<15>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<14>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<13>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<12>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<11>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<10>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<9>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<8>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<7>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<6>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<5>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<4>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<3>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<2>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<1>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<0>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<47>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<46>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<45>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<44>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<43>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<42>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<41>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<40>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<39>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<38>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<37>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<36>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<35>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<34>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<33>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<32>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<31>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<30>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<29>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<28>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<27>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<26>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<25>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<24>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<23>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<22>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<21>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<20>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<19>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<18>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<17>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<16>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<15>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<14>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<13>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<12>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<11>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<10>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<9>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<8>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<7>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<6>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<5>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<4>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<3>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<2>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<1>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<0>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<17>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<16>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<15>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<14>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<13>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<12>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<11>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<10>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<9>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<8>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<7>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<6>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<5>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<4>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<3>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<2>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<1>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<0>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<47>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<46>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<45>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<44>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<43>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<42>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<41>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<40>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<39>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<38>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<37>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<36>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<35>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<34>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<33>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<32>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<31>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<30>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<29>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<28>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<27>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<26>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<25>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<24>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<23>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<22>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<21>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<20>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<19>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<18>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<17>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<16>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<15>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<14>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<13>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<12>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<11>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<10>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<9>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<8>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<7>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<6>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<5>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<4>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<3>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<2>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<1>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<0>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<47>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<46>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<45>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<44>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<43>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<42>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<41>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<40>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<39>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<38>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<37>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<36>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<35>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<34>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<17>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<16>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<15>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<14>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<13>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<12>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<11>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<10>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<9>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<8>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<7>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<6>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<5>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<4>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<3>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<2>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<1>_UNCONNECTED ; - wire \NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<0>_UNCONNECTED ; - wire [16 : 0] a_2; - wire [16 : 0] b_3; - wire [33 : 0] \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg ; - wire [0 : 0] \BU2/zero_detect ; - assign - a_2[16] = a[16], - a_2[15] = a[15], - a_2[14] = a[14], - a_2[13] = a[13], - a_2[12] = a[12], - a_2[11] = a[11], - a_2[10] = a[10], - a_2[9] = a[9], - a_2[8] = a[8], - a_2[7] = a[7], - a_2[6] = a[6], - a_2[5] = a[5], - a_2[4] = a[4], - a_2[3] = a[3], - a_2[2] = a[2], - a_2[1] = a[1], - a_2[0] = a[0], - b_3[16] = b[16], - b_3[15] = b[15], - b_3[14] = b[14], - b_3[13] = b[13], - b_3[12] = b[12], - b_3[11] = b[11], - b_3[10] = b[10], - b_3[9] = b[9], - b_3[8] = b[8], - b_3[7] = b[7], - b_3[6] = b[6], - b_3[5] = b[5], - b_3[4] = b[4], - b_3[3] = b[3], - b_3[2] = b[2], - b_3[1] = b[1], - b_3[0] = b[0], - p[33] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [33], - p[32] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [32], - p[31] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [31], - p[30] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [30], - p[29] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [29], - p[28] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [28], - p[27] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [27], - p[26] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [26], - p[25] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [25], - p[24] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [24], - p[23] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [23], - p[22] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [22], - p[21] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [21], - p[20] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [20], - p[19] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [19], - p[18] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [18], - p[17] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [17], - p[16] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [16], - p[15] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [15], - p[14] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [14], - p[13] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [13], - p[12] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [12], - p[11] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [11], - p[10] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [10], - p[9] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [9], - p[8] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [8], - p[7] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [7], - p[6] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [6], - p[5] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [5], - p[4] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [4], - p[3] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [3], - p[2] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [2], - p[1] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [1], - p[0] = \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [0]; - VCC VCC_0 ( - .P(NLW_VCC_P_UNCONNECTED) - ); - GND GND_1 ( - .G(NLW_GND_G_UNCONNECTED) - ); - DSP48 #( - .CARRYINSELREG ( 0 ), - .LEGACY_MODE ( "MULT18X18" ), - .AREG ( 0 ), - .BREG ( 0 ), - .CREG ( 0 ), - .MREG ( 0 ), - .PREG ( 1 ), - .CARRYINREG ( 0 ), - .SUBTRACTREG ( 0 ), - .OPMODEREG ( 0 ), - .B_INPUT ( "DIRECT" )) - \BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000 ( - .CARRYIN(\BU2/zero_detect [0]), - .CEA(\BU2/zero_detect [0]), - .CEB(\BU2/zero_detect [0]), - .CEC(\BU2/zero_detect [0]), - .CECTRL(\BU2/zero_detect [0]), - .CEP(\BU2/N1 ), - .CEM(\BU2/zero_detect [0]), - .CECARRYIN(\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_CECARRYIN_UNCONNECTED ), - .CECINSUB(\BU2/zero_detect [0]), - .CLK(clk), - .RSTA(\BU2/zero_detect [0]), - .RSTB(\BU2/zero_detect [0]), - .RSTC(\BU2/zero_detect [0]), - .RSTCTRL(\BU2/zero_detect [0]), - .RSTP(\BU2/zero_detect [0]), - .RSTM(\BU2/zero_detect [0]), - .RSTCARRYIN(\BU2/zero_detect [0]), - .SUBTRACT(\BU2/zero_detect [0]), - .A({a_2[16], a_2[16], a_2[15], a_2[14], a_2[13], a_2[12], a_2[11], a_2[10], a_2[9], a_2[8], a_2[7], a_2[6], a_2[5], a_2[4], a_2[3], a_2[2], a_2[1] -, a_2[0]}), - .PCIN({\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<47>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<46>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<45>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<44>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<43>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<42>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<41>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<40>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<39>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<38>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<37>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<36>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<35>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<34>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<33>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<32>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<31>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<30>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<29>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<28>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<27>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<26>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<25>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<24>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<23>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<22>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<21>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<20>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<19>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<18>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<17>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<16>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<15>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<14>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<13>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<12>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<11>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<10>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<9>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<8>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<7>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<6>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<5>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<4>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<3>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<2>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<1>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCIN<0>_UNCONNECTED }), - .B({b_3[16], b_3[16], b_3[15], b_3[14], b_3[13], b_3[12], b_3[11], b_3[10], b_3[9], b_3[8], b_3[7], b_3[6], b_3[5], b_3[4], b_3[3], b_3[2], b_3[1] -, b_3[0]}), - .C({\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<47>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<46>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<45>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<44>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<43>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<42>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<41>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<40>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<39>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<38>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<37>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<36>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<35>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<34>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<33>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<32>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<31>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<30>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<29>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<28>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<27>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<26>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<25>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<24>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<23>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<22>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<21>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<20>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<19>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<18>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<17>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<16>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<15>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<14>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<13>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<12>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<11>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<10>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<9>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<8>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<7>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<6>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<5>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<4>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<3>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<2>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<1>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_C<0>_UNCONNECTED }), - .CARRYINSEL({\BU2/zero_detect [0], \BU2/zero_detect [0]}), - .OPMODE({\BU2/zero_detect [0], \BU2/zero_detect [0], \BU2/zero_detect [0], \BU2/zero_detect [0], \BU2/N1 , \BU2/zero_detect [0], \BU2/N1 }), - .BCIN({\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<17>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<16>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<15>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<14>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<13>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<12>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<11>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<10>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<9>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<8>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<7>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<6>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<5>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<4>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<3>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<2>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<1>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCIN<0>_UNCONNECTED }), - .PCOUT({\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<47>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<46>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<45>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<44>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<43>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<42>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<41>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<40>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<39>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<38>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<37>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<36>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<35>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<34>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<33>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<32>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<31>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<30>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<29>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<28>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<27>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<26>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<25>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<24>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<23>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<22>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<21>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<20>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<19>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<18>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<17>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<16>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<15>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<14>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<13>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<12>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<11>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<10>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<9>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<8>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<7>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<6>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<5>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<4>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<3>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<2>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<1>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_PCOUT<0>_UNCONNECTED }), - .P({\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<47>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<46>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<45>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<44>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<43>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<42>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<41>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<40>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<39>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<38>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<37>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<36>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<35>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_P<34>_UNCONNECTED , -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [33], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [32], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [31], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [30], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [29], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [28], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [27], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [26], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [25], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [24], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [23], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [22], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [21], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [20], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [19], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [18], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [17], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [16], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [15], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [14], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [13], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [12], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [11], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [10], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [9], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [8], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [7], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [6], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [5], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [4], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [3], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [2], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [1], -\BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/m_reg [0]}), - .BCOUT({\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<17>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<16>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<15>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<14>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<13>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<12>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<11>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<10>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<9>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<8>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<7>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<6>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<5>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<4>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<3>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<2>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<1>_UNCONNECTED , -\NLW_BU2/U0/i_synth.i_synth_model/gEMBEDDED_MULT.gEMB_MULTS_only.gDSP.iDSP/Mmult_m_reg_mult0000_BCOUT<0>_UNCONNECTED }) - ); - VCC \BU2/XST_VCC ( - .P(\BU2/N1 ) - ); - GND \BU2/XST_GND ( - .G(\BU2/zero_detect [0]) - ); - -// synthesis translate_on - -endmodule - -// synthesis translate_off - -`timescale 1 ps / 1 ps - -module glbl (); - - parameter ROC_WIDTH = 100000; - parameter TOC_WIDTH = 0; - - wire GSR; - wire GTS; - wire PRLD; - - reg GSR_int; - reg GTS_int; - reg PRLD_int; - -//-------- JTAG Globals -------------- - wire JTAG_TDO_GLBL; - wire JTAG_TCK_GLBL; - wire JTAG_TDI_GLBL; - wire JTAG_TMS_GLBL; - wire JTAG_TRST_GLBL; - - reg JTAG_CAPTURE_GLBL; - reg JTAG_RESET_GLBL; - reg JTAG_SHIFT_GLBL; - reg JTAG_UPDATE_GLBL; - - reg JTAG_SEL1_GLBL = 0; - reg JTAG_SEL2_GLBL = 0 ; - reg JTAG_SEL3_GLBL = 0; - reg JTAG_SEL4_GLBL = 0; - - reg JTAG_USER_TDO1_GLBL = 1'bz; - reg JTAG_USER_TDO2_GLBL = 1'bz; - reg JTAG_USER_TDO3_GLBL = 1'bz; - reg JTAG_USER_TDO4_GLBL = 1'bz; - - assign (weak1, weak0) GSR = GSR_int; - assign (weak1, weak0) GTS = GTS_int; - assign (weak1, weak0) PRLD = PRLD_int; - - initial begin - GSR_int = 1'b1; - PRLD_int = 1'b1; - #(ROC_WIDTH) - GSR_int = 1'b0; - PRLD_int = 1'b0; - end - - initial begin - GTS_int = 1'b1; - #(TOC_WIDTH) - GTS_int = 1'b0; - end - -endmodule - -// synthesis translate_on Index: trunk/sim/modelsim/s.do =================================================================== --- trunk/sim/modelsim/s.do (nonexistent) +++ trunk/sim/modelsim/s.do (revision 39) @@ -0,0 +1,3 @@ +vsim -L /opt/Xilinx/10.1/modelsim/verilog/unisims -novopt -t ns work.testbench work.glbl +add memory /mem0/ram +run 50us Index: trunk/sim/timescale.v =================================================================== --- trunk/sim/timescale.v (nonexistent) +++ trunk/sim/timescale.v (revision 39) @@ -0,0 +1,2 @@ +`timescale 1ns / 10ps + Index: trunk/README =================================================================== --- trunk/README (nonexistent) +++ trunk/README (revision 39) @@ -0,0 +1,27 @@ +Quick help +---------- +The most important file is "impl/virtex4-ml403ep/syn/kotku.v" as is the +top level module for the complete SOC system. + +For building the system (Xilinx tools must be installed): +$ source /opt/Xilinx/10.1/ISE/settings64.sh # (or equivalent) +$ cd rtl-model/ +$ ../bin/web2rom # (php-cli package must be installed) +$ cd ../impl/virtex4-ml403ep/syn/ +$ make + +As a result, you will have a file named "kotku.bit", which is the conf- +iguration stream for the FPGA. + + +Explanation of directories +-------------------------- +bin/ - Some scripts to prepare ROMs, download microcode, etc... +doc/ - Documentation stub +impl/ - Implementation dependent files (for different boards) + currently one board supported: virtex4-ml403ep/ +rtl-model/ - Zet processor RTL model +sim/ - Simulation scripts and testbenches +soc/ - Implementation independent files for the SOC system +src/ - Source files for some commands used to transform ROMs +tests/ - 8086 test benches (exactly the same as in the web)

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.