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

Subversion Repositories rtf8088

[/] [rtf8088/] [trunk/] [rtl/] [verilog/] [bootrom.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 robfinch
module bootrom(cyc, stb, adr, o, acko);
2
input cyc;
3
input stb;
4
input [19:0] adr;
5
output [7:0] o;
6
reg [7:0] o;
7
output acko;
8
 
9
wire cs = cyc && stb && adr[19:12]==8'hFF;
10
assign acko = cs;
11
 
12
reg [7:0] mem [256:2047];
13
integer i;
14
 
15
initial begin
16
        $readmemh("c:\\emu8086\\MyBuild\\test1.hex", mem);
17
        for (i = 256; i < 264; i = i + 1)
18
                $display("%h:%h ", i, mem[i]);
19
 
20
//      mem[0] = 8'hb8;         // MOV AX,0
21
//      mem[1] = 8'h00;
22
//      mem[2] = 8'h00;
23
//      
24
//      // Move to segment register
25
//      mem[3] = 8'h8e;         // MOV DS,AX
26
//      mem[4] = 8'hd8;
27
//      mem[5] = 8'h8e;         // MOV SS,AX
28
//      mem[6] = 8'hd0;
29
//
30
//      // Move immediate to register
31
//      mem[7] = 8'hbb;         // MOV BX,128
32
//      mem[8] = 8'h80;
33
//      mem[9] = 8'h00;
34
//      mem[10] = 8'hbe;                // MOV SI,1
35
//      mem[11] = 8'h01;
36
//      mem[12] = 8'h00;
37
//      mem[13] = 8'hbf;                // MOV DI,2
38
//      mem[14] = 8'h02;
39
//      mem[15] = 8'h00;
40
//      mem[16] = 8'hbd;                // MOV BP,768
41
//      mem[17] = 8'h00;
42
//      mem[18] = 8'h03;
43
//
44
//      // Displacement is zero
45
//      mem[19] = 8'hc6;        // MOV [BX+SI],1
46
//      mem[20] = 8'h00;
47
//      mem[21] = 8'h01;
48
//      mem[22] = 8'hc6;        // MOV [BX+DI],2
49
//      mem[23] = 8'h01;
50
//      mem[24] = 8'h02;
51
//      mem[25] = 8'hc6;        // MOV [BP+SI],3
52
//      mem[26] = 8'h02;
53
//      mem[27] = 8'h03;
54
//      mem[28] = 8'hc6;        // MOV [BP+DI],4
55
//      mem[29] = 8'h03;
56
//      mem[30] = 8'h04;
57
//      mem[31] = 8'hc6;        // MOV [SI],5
58
//      mem[32] = 8'h04;
59
//      mem[33] = 8'h05;
60
//      mem[34] = 8'hc6;        // MOV [DI],6
61
//      mem[35] = 8'h05;
62
//      mem[36] = 8'h06;
63
//      mem[37] = 8'hc6;        // MOV 0400,7
64
//      mem[38] = 8'h06;
65
//      mem[39] = 8'h07;
66
//      mem[40] = 8'h00;
67
//      mem[41] = 8'h04;
68
//      mem[42] = 8'hc6;        // MOV [BX],8
69
//      mem[43] = 8'h07;
70
//      mem[44] = 8'h08;
71
//
72
//      // Displacement is a single byte
73
//      mem[45] = 8'hc6;        // MOV [BX+SI+10],1
74
//      mem[46] = 8'h40;
75
//      mem[47] = 8'h0A;
76
//      mem[48] = 8'h01;
77
//      mem[49] = 8'hc6;        // MOV [BX+DI+10],2
78
//      mem[50] = 8'h41;
79
//      mem[51] = 8'h0A;
80
//      mem[52] = 8'h02;
81
//      mem[53] = 8'hc6;        // MOV [BP+SI+10],3
82
//      mem[54] = 8'h42;
83
//      mem[55] = 8'h0A;
84
//      mem[56] = 8'h03;
85
//      mem[57] = 8'hc6;        // MOV [BP+DI+10],4
86
//      mem[58] = 8'h43;
87
//      mem[59] = 8'h0A;
88
//      mem[60] = 8'h04;
89
//      mem[61] = 8'hc6;        // MOV [SI+10],5
90
//      mem[62] = 8'h44;
91
//      mem[63] = 8'h0A;
92
//      mem[64] = 8'h05;
93
//      mem[65] = 8'hc6;        // MOV [DI+10],6
94
//      mem[66] = 8'h45;
95
//      mem[67] = 8'h0A;
96
//      mem[68] = 8'h06;
97
//      mem[69] = 8'hc6;        // MOV [BP+10],7
98
//      mem[70] = 8'h46;
99
//      mem[71] = 8'h0A;
100
//      mem[72] = 8'h07;
101
//      mem[73] = 8'hc6;        // MOV [BX+10],8
102
//      mem[74] = 8'h47;
103
//      mem[75] = 8'h0A;
104
//      mem[76] = 8'h08;
105
//      
106
//      // Displacement is a two bytes
107
//      mem[77] = 8'hc6;        // MOV [BX+SI+1034],1
108
//      mem[78] = 8'h80;
109
//      mem[79] = 8'h0A;
110
//      mem[80] = 8'h04;
111
//      mem[81] = 8'h01;
112
//      mem[82] = 8'hc6;        // MOV [BX+DI+1034],2
113
//      mem[83] = 8'h81;
114
//      mem[84] = 8'h0A;
115
//      mem[85] = 8'h04;
116
//      mem[86] = 8'h02;
117
//      mem[87] = 8'hc6;        // MOV [BP+SI+1034],3
118
//      mem[88] = 8'h82;
119
//      mem[89] = 8'h0A;
120
//      mem[90] = 8'h04;
121
//      mem[91] = 8'h03;
122
//      mem[92] = 8'hc6;        // MOV [BP+DI+1034],4
123
//      mem[93] = 8'h83;
124
//      mem[94] = 8'h0A;
125
//      mem[95] = 8'h04;
126
//      mem[96] = 8'h04;
127
//      mem[97] = 8'hc6;        // MOV [SI+1034],5
128
//      mem[98] = 8'h84;
129
//      mem[99] = 8'h0A;
130
//      mem[100] = 8'h04;
131
//      mem[101] = 8'h05;
132
//      mem[102] = 8'hc6;       // MOV [DI+1034],6
133
//      mem[103] = 8'h85;
134
//      mem[104] = 8'h0A;
135
//      mem[105] = 8'h04;
136
//      mem[106] = 8'h06;
137
//      mem[107] = 8'hc6;       // MOV [BP+1034],7
138
//      mem[108] = 8'h86;
139
//      mem[109] = 8'h0A;
140
//      mem[110] = 8'h04;
141
//      mem[111] = 8'h07;
142
//      mem[112] = 8'hc6;       // MOV [BX+1034],8
143
//      mem[113] = 8'h87;
144
//      mem[114] = 8'h0A;
145
//      mem[115] = 8'h04;
146
//      mem[116] = 8'h08;
147
//
148
//      mem[117] = 8'h90;       // NOP
149
//      mem[118] = 8'h90;
150
//      mem[119] = 8'h90;
151
//      
152
//      mem[120] = 8'hb8;       // MOV AX,1
153
//      mem[121] = 8'h01;
154
//      mem[122] = 8'h00;
155
//      mem[123] = 8'hbb;       // MOV BX,2
156
//      mem[124] = 8'h02;
157
//      mem[125] = 8'h00;
158
//      mem[126] = 8'hb9;       // MOV CX,3
159
//      mem[127] = 8'h03;
160
//      mem[128] = 8'h00;
161
//      mem[129] = 8'hba;       // MOV DX,4
162
//      mem[130] = 8'h04;
163
//      mem[131] = 8'h00;
164
//      mem[132] = 8'hbc;       // MOV SP,128
165
//      mem[133] = 8'h80;
166
//      mem[134] = 8'h00;
167
//      mem[135] = 8'hbd;       // MOV BP,6
168
//      mem[136] = 8'h06;
169
//      mem[137] = 8'h00;
170
//      mem[138] = 8'hbe;       // MOV SI,7
171
//      mem[139] = 8'h07;
172
//      mem[140] = 8'h00;
173
//      mem[141] = 8'hbf;       // MOV DI,8
174
//      mem[142] = 8'h08;
175
//      mem[143] = 8'h00;
176
//      mem[144] = 8'h50;       // PUSH AX
177
//      mem[145] = 8'h51;       // PUSH CX
178
//      mem[146] = 8'h52;       // PUSH DX
179
//      mem[147] = 8'h53;       // PUSH BX
180
//      mem[148] = 8'h54;       // PUSH SP
181
//      mem[149] = 8'h55;       // PUSH BP
182
//      mem[150] = 8'h56;       // PUSH SI
183
//      mem[151] = 8'h57;       // PUSH DI
184
//      mem[152] = 8'h06;       // PUSH ES
185
//      mem[153] = 8'h0e;       // PUSH CS
186
//      mem[154] = 8'h16;       // PUSH SS
187
//      mem[155] = 8'h1e;       // PUSH DS
188
//      mem[156] = 8'h9c;       // PUSHF
189
//      mem[157] = 8'h90;
190
//      mem[158] = 8'h90;
191
//      mem[159] = 8'h90;
192
//      mem[160] = 8'hFF;       // PUSH 040B
193
//      mem[161] = 8'h36;
194
//      mem[162] = 8'h0B;
195
//      mem[163] = 8'h04;
196
//      mem[164] = 8'h90;       // NOP
197
//      mem[165] = 8'h8F;       // POP 040B
198
//      mem[166] = 8'h06;
199
//      mem[167] = 8'h0B;
200
//      mem[168] = 8'h04;
201
//      mem[169] = 8'h9D;       // POPF
202
//      mem[170] = 8'h1F;       // POP DS
203
//      mem[171] = 8'h17;       // POP SS
204
//      mem[172] = 8'h0F;       // POP CS
205
//      mem[173] = 8'h07;       // POP ES
206
//      mem[174] = 8'h5f;       // POP DI
207
//      mem[175] = 8'h5e;       // POP SI
208
//      mem[176] = 8'h5d;       // POP BP
209
//      mem[177] = 8'h5d;       // POP BP
210
//      mem[178] = 8'h5b;       // POP BX
211
//      mem[179] = 8'h5a;       // POP DX
212
//      mem[180] = 8'h59;       // POP CX
213
//      mem[181] = 8'h58;       // POP AX
214
//      
215
        mem[2032] = 8'hea;      // JMP FAR FF00:0100
216
        mem[2033] = 8'h00;
217
        mem[2034] = 8'h01;
218
        mem[2035] = 8'h00;
219
        mem[2036] = 8'hFF;
220
end
221
 
222
always @(adr or cs)
223
if (cs)
224
        o <= mem[adr[10:0]];
225
else
226
        o <= 8'h00;
227
 
228
endmodule
229
 

powered by: WebSVN 2.1.0

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