Fixed 8080 bug exposed by the exerciser (but still a long way from 100% passing)
This commit is contained in:
parent
94c1ada877
commit
2a447fa6ae
8 changed files with 1974 additions and 13 deletions
|
|
@ -4,8 +4,8 @@
|
|||
<name pos="center">8080 Test Machine</name>
|
||||
<computer id="computer" busWidth="16"/>
|
||||
<cpu id="cpu8080" model="8080" cycles="2000000"/>
|
||||
<rom id="romTest" addr="0x0100" size="0x0400" file="/devices/pc8080/rom/test/8080PRE.json" writable="true"/>
|
||||
<ram id="ramTest" addr="0x0500" size="0xFB00"/>
|
||||
<rom id="romTest" addr="0x0100" size="0x1200" file="/devices/pc8080/rom/test/8080EXER.json" writable="true"/>
|
||||
<ram id="ramTest" addr="0x1300" size="0xED00"/>
|
||||
<panel ref="/devices/pc8080/panel/wide.xml"/>
|
||||
<debugger id="debugger" commands="s 8086"/>
|
||||
<debugger id="debugger"/>
|
||||
</machine>
|
||||
|
|
|
|||
1284
devices/pc8080/rom/test/8080EXER.MAC
Normal file
1284
devices/pc8080/rom/test/8080EXER.MAC
Normal file
File diff suppressed because it is too large
Load diff
290
devices/pc8080/rom/test/8080EXER.json
Normal file
290
devices/pc8080/rom/test/8080EXER.json
Normal file
|
|
@ -0,0 +1,290 @@
|
|||
{"bytes":[
|
||||
195,19,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,42,6,0,249,17,246,13,14,9,205,234,13,33,
|
||||
58,1,126,35,182,202,47,1,43,205,206,10,195,34,1,17,
|
||||
19,14,14,9,205,234,13,195,0,0,110,1,206,1,46,2,
|
||||
142,2,238,2,78,3,174,3,14,4,110,4,206,4,46,5,
|
||||
142,5,238,5,78,6,174,6,14,7,110,7,206,7,46,8,
|
||||
142,8,238,8,78,9,174,9,14,10,110,10,0,0,255,9,
|
||||
0,0,0,165,196,199,196,38,210,80,160,234,88,102,133,198,
|
||||
222,201,155,48,0,0,0,0,0,0,0,0,0,33,248,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,255,255,255,255,255,255,215,0,255,255,0,0,0,0,100,
|
||||
97,100,32,60,98,44,100,44,104,44,115,112,62,46,46,46,
|
||||
46,46,46,46,46,46,46,46,46,46,46,46,46,36,255,198,
|
||||
0,0,0,64,145,60,126,103,122,109,223,97,91,41,11,16,
|
||||
102,178,133,56,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,255,0,0,0,255,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,215,0,0,0,0,0,0,0,97,
|
||||
108,117,111,112,32,110,110,46,46,46,46,46,46,46,46,46,
|
||||
46,46,46,46,46,46,46,46,46,46,46,46,46,36,255,128,
|
||||
0,0,0,62,197,58,87,77,76,3,1,9,227,102,166,208,
|
||||
59,187,173,63,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,255,0,0,0,0,0,0,255,0,0,0,0,
|
||||
0,0,0,255,255,255,255,215,0,0,0,0,0,0,0,97,
|
||||
108,117,111,112,32,60,98,44,99,44,100,44,101,44,104,44,
|
||||
108,44,109,44,97,62,46,46,46,46,46,46,46,36,255,39,
|
||||
0,0,0,65,33,250,9,96,29,89,165,91,141,121,144,4,
|
||||
142,157,41,24,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,215,255,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,
|
||||
100,97,97,44,99,109,97,44,115,116,99,44,99,109,99,62,
|
||||
46,46,46,46,46,46,46,46,46,46,46,46,46,36,255,60,
|
||||
0,0,0,223,74,216,213,152,229,43,138,176,167,27,67,68,
|
||||
90,48,208,1,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,255,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,215,0,0,0,0,0,0,0,60,
|
||||
105,110,114,44,100,99,114,62,32,97,46,46,46,46,46,46,
|
||||
46,46,46,46,46,46,46,46,46,46,46,46,46,36,255,4,
|
||||
0,0,0,35,214,45,67,97,122,128,129,134,90,133,30,134,
|
||||
88,187,155,1,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,215,0,0,0,0,0,0,0,60,
|
||||
105,110,114,44,100,99,114,62,32,98,46,46,46,46,46,46,
|
||||
46,46,46,46,46,46,46,46,46,46,46,46,46,36,255,3,
|
||||
0,0,0,151,205,171,68,201,141,227,227,204,17,164,232,2,
|
||||
73,77,42,8,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,33,248,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,215,0,0,0,0,0,0,0,60,
|
||||
105,110,120,44,100,99,120,62,32,98,46,46,46,46,46,46,
|
||||
46,46,46,46,46,46,46,46,46,46,46,46,46,36,255,12,
|
||||
0,0,0,137,215,53,9,91,5,133,159,39,139,8,210,149,
|
||||
5,96,6,1,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,215,0,0,0,0,0,0,0,60,
|
||||
105,110,114,44,100,99,114,62,32,99,46,46,46,46,46,46,
|
||||
46,46,46,46,46,46,46,46,46,46,46,46,46,36,255,20,
|
||||
0,0,0,234,160,186,95,251,101,28,152,204,56,188,222,67,
|
||||
92,189,3,1,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,215,0,0,0,0,0,0,0,60,
|
||||
105,110,114,44,100,99,114,62,32,100,46,46,46,46,46,46,
|
||||
46,46,46,46,46,46,46,46,46,46,46,46,46,36,255,19,
|
||||
0,0,0,46,52,29,19,201,40,202,10,103,153,46,58,146,
|
||||
246,84,157,8,0,0,0,0,0,0,0,0,0,0,0,33,
|
||||
248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,215,0,0,0,0,0,0,0,60,
|
||||
105,110,120,44,100,99,120,62,32,100,46,46,46,46,46,46,
|
||||
46,46,46,46,46,46,46,46,46,46,46,46,46,36,255,28,
|
||||
0,0,0,47,96,13,76,2,36,245,226,244,160,10,161,19,
|
||||
50,37,89,1,0,0,0,0,0,0,0,0,0,0,0,255,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,215,0,0,0,0,0,0,0,60,
|
||||
105,110,114,44,100,99,114,62,32,101,46,46,46,46,46,46,
|
||||
46,46,46,46,46,46,46,46,46,46,46,46,46,36,255,36,
|
||||
0,0,0,6,21,235,242,221,232,43,38,166,17,26,188,23,
|
||||
6,24,40,1,0,0,0,0,0,0,0,0,0,0,255,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,215,0,0,0,0,0,0,0,60,
|
||||
105,110,114,44,100,99,114,62,32,104,46,46,46,46,46,46,
|
||||
46,46,46,46,46,46,46,46,46,46,46,46,46,36,255,35,
|
||||
0,0,0,244,195,165,7,109,27,4,79,194,226,42,130,87,
|
||||
224,225,195,8,0,0,0,0,0,0,0,0,0,33,248,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,215,0,0,0,0,0,0,0,60,
|
||||
105,110,120,44,100,99,120,62,32,104,46,46,46,46,46,46,
|
||||
46,46,46,46,46,46,46,46,46,46,46,46,46,36,255,44,
|
||||
0,0,0,49,128,32,165,86,67,9,180,193,244,162,223,209,
|
||||
60,162,62,1,0,0,0,0,0,0,0,0,0,255,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,215,0,0,0,0,0,0,0,60,
|
||||
105,110,114,44,100,99,114,62,32,108,46,46,46,46,46,46,
|
||||
46,46,46,46,46,46,46,46,46,46,46,46,46,36,255,52,
|
||||
0,0,0,86,184,124,12,62,229,3,1,126,135,88,218,21,
|
||||
92,55,31,1,0,0,0,255,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,215,0,0,0,0,0,0,0,60,
|
||||
105,110,114,44,100,99,114,62,32,109,46,46,46,46,46,46,
|
||||
46,46,46,46,46,46,46,46,46,46,46,46,46,36,255,51,
|
||||
0,0,0,111,52,130,212,105,209,182,222,148,164,118,244,83,
|
||||
2,91,133,8,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,33,248,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,215,0,0,0,0,0,0,0,60,
|
||||
105,110,120,44,100,99,120,62,32,115,112,46,46,46,46,46,
|
||||
46,46,46,46,46,46,46,46,46,46,46,46,46,36,255,42,
|
||||
3,1,0,99,152,48,120,119,32,254,177,250,185,184,171,4,
|
||||
6,21,96,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,255,255,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,
|
||||
104,108,100,32,110,110,110,110,46,46,46,46,46,46,46,46,
|
||||
46,46,46,46,46,46,46,46,46,46,46,46,46,36,255,34,
|
||||
3,1,0,3,208,114,119,83,127,114,63,234,100,128,225,16,
|
||||
45,233,53,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,255,255,0,0,0,0,0,0,0,0,0,0,0,0,115,
|
||||
104,108,100,32,110,110,110,110,46,46,46,46,46,46,46,46,
|
||||
46,46,46,46,46,46,46,46,46,46,46,46,46,36,255,1,
|
||||
0,0,0,28,92,70,45,185,142,120,96,177,116,14,179,70,
|
||||
209,204,48,48,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,255,255,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,
|
||||
120,105,32,60,98,44,100,44,104,44,115,112,62,44,110,110,
|
||||
110,110,46,46,46,46,46,46,46,46,46,46,46,36,255,10,
|
||||
0,0,0,168,179,42,29,142,127,172,66,3,1,3,1,198,
|
||||
177,142,239,16,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,255,0,0,0,0,
|
||||
0,0,0,0,0,0,0,215,255,0,0,0,0,0,0,108,
|
||||
100,97,120,32,60,98,44,100,62,46,46,46,46,46,46,46,
|
||||
46,46,46,46,46,46,46,46,46,46,46,46,46,36,255,6,
|
||||
0,0,0,7,196,157,244,61,209,57,3,137,222,85,116,83,
|
||||
192,9,85,56,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,255,0,0,0,0,0,0,109,
|
||||
118,105,32,60,98,44,99,44,100,44,101,44,104,44,108,44,
|
||||
109,44,97,62,44,110,110,46,46,46,46,46,46,36,255,64,
|
||||
0,0,0,164,114,36,160,172,97,3,1,199,130,143,113,151,
|
||||
143,142,239,63,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,255,0,0,0,0,
|
||||
0,0,0,255,255,255,255,215,255,0,0,0,0,0,0,109,
|
||||
111,118,32,60,98,99,100,101,104,108,97,62,44,60,98,99,
|
||||
100,101,104,108,97,62,46,46,46,46,46,46,46,36,255,50,
|
||||
3,1,0,104,253,236,244,160,68,67,181,83,6,186,205,210,
|
||||
79,216,31,8,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,255,0,0,0,0,
|
||||
0,0,0,0,0,0,0,215,255,0,0,0,0,0,0,115,
|
||||
116,97,32,110,110,110,110,32,47,32,108,100,97,32,110,110,
|
||||
110,110,46,46,46,46,46,46,46,46,46,46,46,36,255,7,
|
||||
0,0,0,146,203,67,109,144,10,132,194,83,12,14,245,145,
|
||||
235,252,64,24,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,255,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,215,0,0,0,0,0,0,0,60,
|
||||
114,108,99,44,114,114,99,44,114,97,108,44,114,97,114,62,
|
||||
46,46,46,46,46,46,46,46,46,46,46,46,46,36,255,2,
|
||||
0,0,0,59,12,146,181,255,108,158,149,3,1,4,1,193,
|
||||
33,231,189,24,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,255,255,0,0,0,
|
||||
0,0,0,0,0,0,0,0,255,0,0,0,0,0,0,115,
|
||||
116,97,120,32,60,98,44,100,62,46,46,46,46,46,46,46,
|
||||
46,46,46,46,46,46,46,46,46,46,46,46,46,36,229,126,
|
||||
35,102,111,126,50,127,13,35,229,17,20,0,25,17,222,12,
|
||||
205,77,12,225,229,17,40,0,25,17,6,13,205,77,12,33,
|
||||
6,13,54,1,225,229,17,77,13,1,4,0,126,18,35,19,
|
||||
11,120,177,194,252,10,17,3,1,1,16,0,126,18,35,19,
|
||||
11,120,177,194,12,11,17,44,0,25,235,14,9,205,234,13,
|
||||
205,142,14,58,77,13,254,118,202,58,11,230,223,254,221,194,
|
||||
55,11,58,78,13,254,118,196,46,13,205,141,12,196,177,12,
|
||||
225,202,118,11,17,60,0,25,205,79,14,17,34,14,202,109,
|
||||
11,17,41,14,14,9,205,234,13,205,181,13,17,68,14,14,
|
||||
9,205,234,13,33,162,14,205,181,13,17,76,14,14,9,205,
|
||||
234,13,225,35,35,201,229,62,1,50,236,11,50,16,12,33,
|
||||
222,12,34,237,11,33,6,13,34,17,12,6,4,225,229,17,
|
||||
77,13,205,160,11,6,16,17,3,1,205,160,11,195,35,11,
|
||||
205,169,11,35,5,194,160,11,201,197,213,229,78,17,20,0,
|
||||
25,126,254,0,202,202,11,6,8,15,245,62,0,220,239,11,
|
||||
169,15,79,241,5,194,185,11,6,8,17,20,0,25,126,254,
|
||||
0,202,229,11,6,8,15,245,62,0,220,19,12,169,15,79,
|
||||
241,5,194,214,11,225,209,121,18,19,193,201,0,0,0,197,
|
||||
229,42,237,11,70,33,236,11,126,79,7,119,254,1,194,8,
|
||||
12,42,237,11,35,34,237,11,120,161,225,193,200,62,1,201,
|
||||
0,0,0,197,229,42,17,12,70,33,16,12,126,79,7,119,
|
||||
254,1,194,44,12,42,17,12,35,34,17,12,120,161,225,193,
|
||||
200,62,1,201,245,197,213,229,54,0,84,93,19,11,126,18,
|
||||
35,19,11,120,177,194,62,12,225,209,193,241,201,213,235,1,
|
||||
40,0,205,52,12,235,6,20,14,1,22,0,94,123,161,202,
|
||||
99,12,20,121,7,79,254,1,194,93,12,35,5,194,92,12,
|
||||
122,230,248,15,15,15,111,38,0,122,230,7,60,71,62,128,
|
||||
7,5,194,128,12,209,25,17,20,0,25,119,201,197,213,229,
|
||||
33,222,12,17,20,0,235,25,235,52,126,254,0,202,172,12,
|
||||
71,26,160,202,168,12,54,0,193,209,225,201,35,19,195,153,
|
||||
12,197,213,229,33,6,13,17,20,0,235,25,235,126,183,202,
|
||||
217,12,71,26,160,194,213,12,120,7,254,1,194,211,12,54,
|
||||
0,35,19,119,175,225,209,193,201,35,19,195,189,12,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,245,197,
|
||||
213,229,243,33,0,0,57,34,169,13,49,5,1,225,225,225,
|
||||
209,193,241,34,151,13,42,17,1,249,42,151,13,0,0,0,
|
||||
0,34,151,13,33,0,0,218,94,13,57,195,96,13,57,55,
|
||||
34,167,13,42,151,13,49,167,13,245,197,213,229,229,229,42,
|
||||
169,13,249,251,42,3,1,34,153,13,33,165,13,126,230,255,
|
||||
119,6,16,17,153,13,33,162,14,26,19,205,102,14,5,194,
|
||||
137,13,225,209,193,241,201,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,126,205,199,13,35,
|
||||
5,194,171,13,201,245,197,229,6,4,126,205,199,13,35,5,
|
||||
194,186,13,225,193,241,201,245,15,15,15,15,205,208,13,241,
|
||||
245,197,213,229,230,15,254,10,218,221,13,198,39,198,48,95,
|
||||
14,2,205,234,13,225,209,193,241,201,245,197,213,229,205,5,
|
||||
0,225,209,193,241,201,56,48,56,48,32,105,110,115,116,114,
|
||||
117,99,116,105,111,110,32,101,120,101,114,99,105,115,101,114,
|
||||
10,13,36,84,101,115,116,115,32,99,111,109,112,108,101,116,
|
||||
101,36,32,32,79,75,10,13,36,32,32,69,82,82,79,82,
|
||||
32,42,42,42,42,32,99,114,99,32,101,120,112,101,99,116,
|
||||
101,100,58,36,32,102,111,117,110,100,58,36,10,13,36,197,
|
||||
213,229,17,162,14,6,4,26,190,194,98,14,35,19,5,194,
|
||||
87,14,225,209,193,201,245,197,213,229,229,17,3,0,25,174,
|
||||
111,38,0,41,41,235,33,166,14,25,235,225,1,4,0,26,
|
||||
168,70,119,19,35,13,194,127,14,225,209,193,241,201,245,197,
|
||||
229,33,162,14,62,255,6,4,119,35,5,194,152,14,225,193,
|
||||
241,201,0,0,0,0,0,0,0,0,119,7,48,150,238,14,
|
||||
97,44,153,9,81,186,7,109,196,25,112,106,244,143,233,99,
|
||||
165,53,158,100,149,163,14,219,136,50,121,220,184,164,224,213,
|
||||
233,30,151,210,217,136,9,182,76,43,126,177,124,189,231,184,
|
||||
45,7,144,191,29,145,29,183,16,100,106,176,32,242,243,185,
|
||||
113,72,132,190,65,222,26,218,212,125,109,221,228,235,244,212,
|
||||
181,81,131,211,133,199,19,108,152,86,100,107,168,192,253,98,
|
||||
249,122,138,101,201,236,20,1,92,79,99,6,108,217,250,15,
|
||||
61,99,141,8,13,245,59,110,32,200,76,105,16,94,213,96,
|
||||
65,228,162,103,113,114,60,3,228,209,75,4,212,71,210,13,
|
||||
133,253,165,10,181,107,53,181,168,250,66,178,152,108,219,187,
|
||||
201,214,172,188,249,64,50,216,108,227,69,223,92,117,220,214,
|
||||
13,207,171,209,61,89,38,217,48,172,81,222,0,58,200,215,
|
||||
81,128,191,208,97,22,33,180,244,181,86,179,196,35,207,186,
|
||||
149,153,184,189,165,15,40,2,184,158,95,5,136,8,198,12,
|
||||
217,178,177,11,233,36,47,111,124,135,88,104,76,17,193,97,
|
||||
29,171,182,102,45,61,118,220,65,144,1,219,113,6,152,210,
|
||||
32,188,239,213,16,42,113,177,133,137,6,182,181,31,159,191,
|
||||
228,165,232,184,212,51,120,7,201,162,15,0,249,52,150,9,
|
||||
168,142,225,14,152,24,127,106,13,187,8,109,61,45,145,100,
|
||||
108,151,230,99,92,1,107,107,81,244,28,108,97,98,133,101,
|
||||
48,216,242,98,0,78,108,6,149,237,27,1,165,123,130,8,
|
||||
244,193,245,15,196,87,101,176,217,198,18,183,233,80,139,190,
|
||||
184,234,252,185,136,124,98,221,29,223,21,218,45,73,140,211,
|
||||
124,243,251,212,76,101,77,178,97,88,58,181,81,206,163,188,
|
||||
0,116,212,187,48,226,74,223,165,65,61,216,149,215,164,209,
|
||||
196,109,211,214,244,251,67,105,233,106,52,110,217,252,173,103,
|
||||
136,70,218,96,184,208,68,4,45,115,51,3,29,229,170,10,
|
||||
76,95,221,13,124,201,80,5,113,60,39,2,65,170,190,11,
|
||||
16,16,201,12,32,134,87,104,181,37,32,111,133,179,185,102,
|
||||
212,9,206,97,228,159,94,222,249,14,41,217,201,152,176,208,
|
||||
152,34,199,215,168,180,89,179,61,23,46,180,13,129,183,189,
|
||||
92,59,192,186,108,173,237,184,131,32,154,191,179,182,3,182,
|
||||
226,12,116,177,210,154,234,213,71,57,157,210,119,175,4,219,
|
||||
38,21,115,220,22,131,227,99,11,18,148,100,59,132,13,109,
|
||||
106,62,122,106,90,168,228,14,207,11,147,9,255,157,10,0,
|
||||
174,39,125,7,158,177,240,15,147,68,135,8,163,210,30,1,
|
||||
242,104,105,6,194,254,247,98,87,93,128,101,103,203,25,108,
|
||||
54,113,110,107,6,231,254,212,27,118,137,211,43,224,16,218,
|
||||
122,90,103,221,74,204,249,185,223,111,142,190,239,249,23,183,
|
||||
190,67,96,176,142,213,214,214,163,232,161,209,147,126,56,216,
|
||||
194,196,79,223,242,82,209,187,103,241,166,188,87,103,63,181,
|
||||
6,221,72,178,54,75,216,13,43,218,175,10,27,76,54,3,
|
||||
74,246,65,4,122,96,223,96,239,195,168,103,223,85,49,110,
|
||||
142,239,70,105,190,121,203,97,179,140,188,102,131,26,37,111,
|
||||
210,160,82,104,226,54,204,12,119,149,187,11,71,3,34,2,
|
||||
22,185,85,5,38,47,197,186,59,190,178,189,11,40,43,180,
|
||||
90,146,92,179,106,4,194,215,255,167,181,208,207,49,44,217,
|
||||
158,139,91,222,174,29,155,100,194,176,236,99,242,38,117,106,
|
||||
163,156,2,109,147,10,156,9,6,169,235,14,54,63,114,7,
|
||||
103,133,5,0,87,19,149,191,74,130,226,184,122,20,123,177,
|
||||
43,174,12,182,27,56,146,210,142,155,229,213,190,13,124,220,
|
||||
239,183,11,219,223,33,134,211,210,212,241,212,226,66,104,221,
|
||||
179,248,31,218,131,110,129,190,22,205,246,185,38,91,111,176,
|
||||
119,225,24,183,71,119,136,8,90,230,255,15,106,112,102,6,
|
||||
59,202,17,1,11,92,143,101,158,255,248,98,174,105,97,107,
|
||||
255,211,22,108,207,69,160,10,226,120,215,13,210,238,78,4,
|
||||
131,84,57,3,179,194,167,103,38,97,208,96,22,247,73,105,
|
||||
71,77,62,110,119,219,174,209,106,74,217,214,90,220,64,223,
|
||||
11,102,55,216,59,240,169,188,174,83,222,187,158,197,71,178,
|
||||
207,127,48,181,255,233,189,189,242,28,202,186,194,138,83,179,
|
||||
147,48,36,180,163,166,186,208,54,5,205,215,6,147,84,222,
|
||||
87,41,35,217,103,191,179,102,122,46,196,97,74,184,93,104,
|
||||
27,2,42,111,43,148,180,11,190,55,195,12,142,161,90,5,
|
||||
223,27,45,2,239,141,160,10,226,120,215,13,210,238,78,4,
|
||||
131,84,57,3,179,194,167,103,38,97,208,96,22,247,73,105,
|
||||
71,77,62,110,119,219,174,209,106,74,217,214,90,220,64,223,
|
||||
11,102,55,216,59,240,169,188,174,83,222,187,158,197,71,178,
|
||||
207,127,48,181,255,233,189,189,242,28,202,186,194,138,83,179,
|
||||
147,48,36,180,163,166,186,208,54,5,205,215,6,147,84,222]
|
||||
}
|
||||
291
devices/pc8080/rom/test/8080PRE.MAC
Normal file
291
devices/pc8080/rom/test/8080PRE.MAC
Normal file
|
|
@ -0,0 +1,291 @@
|
|||
title 'Preliminary Z80 tests'
|
||||
|
||||
; prelim.z80 - Preliminary Z80 tests
|
||||
; Copyright (C) 1994 Frank D. Cringle
|
||||
;
|
||||
; This program is free software; 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 2
|
||||
; of the License, or (at your option) any later version.
|
||||
;
|
||||
; This program 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 General Public License for more details.
|
||||
;
|
||||
; You should have received a copy of the GNU General Public License
|
||||
; along with this program; if not, write to the Free Software
|
||||
; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
|
||||
; These tests have two goals. To start with, we assume the worst and
|
||||
; successively test the instructions needed to continue testing.
|
||||
; Then we try to test all instructions which cannot be handled by
|
||||
; zexlax - the crc-based instruction exerciser.
|
||||
|
||||
; Initially errors are 'reported' by jumping to 0. This should reboot
|
||||
; cp/m, so if the program terminates without any output one of the
|
||||
; early tests failed. Later errors are reported by outputting an
|
||||
; address via the bdos conout routine. The address can be located in
|
||||
; a listing of this program.
|
||||
|
||||
; If the program runs to completion it displays a suitable message.
|
||||
|
||||
;******************************************************************************
|
||||
;
|
||||
; Modified by Ian Bartholomew to run a preliminary test on an 8080 CPU
|
||||
;
|
||||
; Assemble using M80
|
||||
;
|
||||
;******************************************************************************
|
||||
|
||||
.8080
|
||||
aseg
|
||||
org 100h
|
||||
|
||||
start: mvi a,1 ; test simple compares and z/nz jumps
|
||||
cpi 2
|
||||
jz 0
|
||||
cpi 1
|
||||
jnz 0
|
||||
jmp lab0
|
||||
hlt ; emergency exit
|
||||
db 0ffh
|
||||
|
||||
lab0: call lab2 ; does a simple call work?
|
||||
lab1: jmp 0 ; fail
|
||||
|
||||
lab2: pop h ; check return address
|
||||
mov a,h
|
||||
cpi high lab1
|
||||
jz lab3
|
||||
jmp 0
|
||||
lab3: mov a,l
|
||||
cpi low lab1
|
||||
jz lab4
|
||||
jmp 0
|
||||
|
||||
; test presence and uniqueness of all machine registers
|
||||
; (except ir)
|
||||
lab4: lxi sp,regs1
|
||||
pop psw
|
||||
pop b
|
||||
pop d
|
||||
pop h
|
||||
lxi sp,regs2+8
|
||||
push h
|
||||
push d
|
||||
push b
|
||||
push psw
|
||||
|
||||
v defl 0
|
||||
rept 8
|
||||
lda regs2+v/2
|
||||
v defl v+2
|
||||
cpi v
|
||||
jnz 0
|
||||
endm
|
||||
|
||||
; test access to memory via (hl)
|
||||
lxi h,hlval
|
||||
mov a,m
|
||||
cpi 0a5h
|
||||
jnz 0
|
||||
lxi h,hlval+1
|
||||
mov a,m
|
||||
cpi 03ch
|
||||
jnz 0
|
||||
|
||||
; test unconditional return
|
||||
lxi sp,stack
|
||||
lxi h,reta
|
||||
push h
|
||||
ret
|
||||
jmp 0
|
||||
|
||||
; test instructions needed for hex output
|
||||
reta: mvi a,0ffh
|
||||
ani 0fh
|
||||
cpi 0fh
|
||||
jnz 0
|
||||
mvi a,05ah
|
||||
ani 0fh
|
||||
cpi 0ah
|
||||
jnz 0
|
||||
rrc
|
||||
cpi 05h
|
||||
jnz 0
|
||||
rrc
|
||||
cpi 82h
|
||||
jnz 0
|
||||
rrc
|
||||
cpi 41h
|
||||
jnz 0
|
||||
rrc
|
||||
cpi 0a0h
|
||||
jnz 0
|
||||
lxi h,01234h
|
||||
push h
|
||||
pop b
|
||||
mov a,b
|
||||
cpi 12h
|
||||
jnz 0
|
||||
mov a,c
|
||||
cpi 34h
|
||||
jnz 0
|
||||
|
||||
; from now on we can report errors by displaying an address
|
||||
|
||||
; test conditional call, ret, jp, jr
|
||||
tcond macro flag,pcond,ncond,rel
|
||||
lxi h,&flag
|
||||
push h
|
||||
pop psw
|
||||
c&pcond lab1&pcond
|
||||
jmp error
|
||||
lab1&pcond: pop h
|
||||
lxi h,0d7h xor &flag
|
||||
push h
|
||||
pop psw
|
||||
c&ncond lab2&pcond
|
||||
jmp error
|
||||
lab2&pcond: pop h
|
||||
lxi h,lab3&pcond
|
||||
push h
|
||||
lxi h,&flag
|
||||
push h
|
||||
pop psw
|
||||
r&pcond
|
||||
call error
|
||||
lab3&pcond: lxi h,lab4&pcond
|
||||
push h
|
||||
lxi h,0d7h xor &flag
|
||||
push h
|
||||
pop psw
|
||||
r&ncond
|
||||
call error
|
||||
lab4&pcond: lxi h,&flag
|
||||
push h
|
||||
pop psw
|
||||
j&pcond lab5&pcond
|
||||
call error
|
||||
lab5&pcond: lxi h,0d7h xor &flag
|
||||
push h
|
||||
pop psw
|
||||
j&ncond lab6&pcond
|
||||
call error
|
||||
lab6&pcond:
|
||||
endm
|
||||
|
||||
tcond 1,c,nc,1
|
||||
tcond 4,pe,po,0
|
||||
tcond 040h,z,nz,1
|
||||
tcond 080h,m,p,0
|
||||
|
||||
; test indirect jumps
|
||||
lxi h,lab7
|
||||
pchl
|
||||
call error
|
||||
|
||||
; djnz (and (partially) inc a, inc hl)
|
||||
lab7: mvi a,0a5h
|
||||
mvi b,4
|
||||
lab8: rrc
|
||||
dcr b
|
||||
jnz lab8
|
||||
cpi 05ah
|
||||
cnz error
|
||||
mvi b,16
|
||||
lab9: inr a
|
||||
dcr b
|
||||
jnz lab9
|
||||
cpi 06ah
|
||||
cnz error
|
||||
mvi b,0
|
||||
lxi h,0
|
||||
lab10: inx h
|
||||
dcr b
|
||||
jnz lab10
|
||||
mov a,h
|
||||
cpi 1
|
||||
cnz error
|
||||
mov a,l
|
||||
cpi 0
|
||||
cnz error
|
||||
|
||||
allok: lxi d,okmsg
|
||||
mvi c,9
|
||||
call 5
|
||||
jmp 0
|
||||
|
||||
okmsg: db '8080 Preliminary tests complete$'
|
||||
|
||||
; display address at top of stack and exit
|
||||
error: pop b
|
||||
mvi h,high hextab
|
||||
mov a,b
|
||||
rrc
|
||||
rrc
|
||||
rrc
|
||||
rrc
|
||||
ani 15
|
||||
mov l,a
|
||||
mov a,m
|
||||
call conout
|
||||
mov a,b
|
||||
ani 15
|
||||
mov l,a
|
||||
mov a,m
|
||||
call conout
|
||||
mov a,c
|
||||
rrc
|
||||
rrc
|
||||
rrc
|
||||
rrc
|
||||
ani 15
|
||||
mov l,a
|
||||
mov a,m
|
||||
call conout
|
||||
mov a,c
|
||||
ani 15
|
||||
mov l,a
|
||||
mov a,m
|
||||
call conout
|
||||
mvi a,13
|
||||
call conout
|
||||
mvi a,10
|
||||
call conout
|
||||
jmp 0
|
||||
|
||||
conout: push psw
|
||||
push b
|
||||
push d
|
||||
push h
|
||||
mvi c,2
|
||||
mov e,a
|
||||
call 5
|
||||
pop h
|
||||
pop d
|
||||
pop b
|
||||
pop psw
|
||||
ret
|
||||
|
||||
v defl 0
|
||||
regs1: rept 8
|
||||
v defl v+2
|
||||
db v
|
||||
endm
|
||||
|
||||
regs2: ds 8,0
|
||||
|
||||
hlval: db 0a5h,03ch
|
||||
|
||||
; skip to next page boundary
|
||||
org (($+255)/256)*256
|
||||
hextab: db '0123456789abcdef'
|
||||
ds 240
|
||||
|
||||
stack equ $
|
||||
|
||||
end start
|
||||
|
||||
|
|
@ -628,7 +628,7 @@ CPUDef.opSTC = function()
|
|||
CPUDef.opDADSP = function()
|
||||
{
|
||||
var w;
|
||||
this.setSP(w = this.getHL() + this.getSP());
|
||||
this.setHL(w = this.getHL() + this.getSP());
|
||||
this.resultZeroCarry = (this.resultZeroCarry & 0xff) | ((w >> 8) & 0x100);
|
||||
this.nStepCycles -= 10;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -3707,6 +3707,7 @@ if (DEBUGGER) {
|
|||
sMsg = "halting";
|
||||
this.stopCPU();
|
||||
} else {
|
||||
if (this.isBusy(true)) return;
|
||||
sMsg = "already halted";
|
||||
}
|
||||
if (!fQuiet) this.println(sMsg);
|
||||
|
|
|
|||
|
|
@ -115,7 +115,29 @@ function ROM(parmsROM)
|
|||
|
||||
Component.subclass(ROM);
|
||||
|
||||
ROM.CPM_VECTORS = [0x0000, 0x0005];
|
||||
ROM.CPM = {
|
||||
BIOS: {
|
||||
VECTOR: 0x0000
|
||||
},
|
||||
BDOS: {
|
||||
VECTOR: 0x0005,
|
||||
FUNC: { // function number (specified in regC)
|
||||
RESET: 0x00,
|
||||
CON_READ: 0x01, // output: A = L = ASCII character
|
||||
CON_WRITE: 0x02, // input: E = ASCII character
|
||||
AUX_READ: 0x03, // output: A = L = ASCII character
|
||||
AUX_WRITE: 0x04, // input: E = ASCII character
|
||||
PRN_WRITE: 0x05, // input: E = ASCII character
|
||||
MEM_SIZE: 0x06, // output: base address of CCP (Console Command Processor), but which register? (perhaps moot if this was CP/M 1.3 only...)
|
||||
CON_IO: 0x06, // input: E = ASCII character (or 0xFF to return ASCII character in A)
|
||||
GET_IOBYTE: 0x07,
|
||||
SET_IOBYTE: 0x08,
|
||||
STR_WRITE: 0x09 // input: DE = address of string
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
ROM.CPM.VECTORS = [ROM.CPM.BIOS.VECTOR, ROM.CPM.BDOS.VECTOR];
|
||||
|
||||
/*
|
||||
* NOTE: There's currently no need for this component to have a reset() function, since
|
||||
|
|
@ -344,12 +366,14 @@ ROM.prototype.addROM = function(addr)
|
|||
* (namely, 0x0000, which is the CP/M reset vector, and 0x0005, which is the CP/M system call vector) and
|
||||
* then telling the CPU to call us whenever a HLT occurs, so we can check PC for one of these addresses.
|
||||
*/
|
||||
for (i = 0; i < ROM.CPM_VECTORS.length; i++) {
|
||||
this.bus.setByteDirect(ROM.CPM_VECTORS[i], CPUDef.OPCODE.HLT);
|
||||
for (i = 0; i < ROM.CPM.VECTORS.length; i++) {
|
||||
this.bus.setByteDirect(ROM.CPM.VECTORS[i], CPUDef.OPCODE.HLT);
|
||||
}
|
||||
|
||||
this.cpu.addHaltCheck(function(rom) {
|
||||
return function(addr) {rom.checkCPMVector(addr)};
|
||||
return function(addr) {
|
||||
return rom.checkCPMVector(addr)
|
||||
};
|
||||
}(this));
|
||||
|
||||
this.cpu.setReset(addr);
|
||||
|
|
@ -371,18 +395,88 @@ ROM.prototype.addROM = function(addr)
|
|||
*/
|
||||
ROM.prototype.checkCPMVector = function(addr)
|
||||
{
|
||||
var i = ROM.CPM_VECTORS.indexOf(addr);
|
||||
var i = ROM.CPM.VECTORS.indexOf(addr);
|
||||
if (i >= 0) {
|
||||
if (this.dbg) {
|
||||
this.println("CP/M vector " + str.toHexWord(addr));
|
||||
this.cpu.setPC(addr); // this is purely for the Debugger's benefit, to show the HLT
|
||||
this.dbg.stopCPU();
|
||||
var fCPM = false;
|
||||
var cpu = this.cpu;
|
||||
var dbg = this.dbg;
|
||||
if (addr == ROM.CPM.BDOS.VECTOR) {
|
||||
fCPM = true;
|
||||
switch(cpu.regC) {
|
||||
case ROM.CPM.BDOS.FUNC.CON_WRITE:
|
||||
this.writeCPMString(this.getCPMChar(cpu.regE));
|
||||
break;
|
||||
case ROM.CPM.BDOS.FUNC.STR_WRITE:
|
||||
this.writeCPMString(this.getCPMString(cpu.getDE(), '$'));
|
||||
break;
|
||||
default:
|
||||
fCPM = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (fCPM) {
|
||||
CPUDef.opRET.call(cpu); // for recognized calls, automatically return
|
||||
}
|
||||
else if (dbg) {
|
||||
this.println("\nCP/M vector " + str.toHexWord(addr));
|
||||
cpu.setPC(addr); // this is purely for the Debugger's benefit, to show the HLT
|
||||
dbg.stopCPU();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* getCPMChar(ch)
|
||||
*
|
||||
* @this {ROM}
|
||||
* @param {number} ch
|
||||
* @return {string}
|
||||
*/
|
||||
ROM.prototype.getCPMChar = function(ch)
|
||||
{
|
||||
return String.fromCharCode(ch);
|
||||
};
|
||||
|
||||
/**
|
||||
* getCPMString(addr, chEnd)
|
||||
*
|
||||
* @this {ROM}
|
||||
* @param {number} addr (of a string)
|
||||
* @param {string|number} [chEnd] (terminating character, default is 0)
|
||||
* @return {string}
|
||||
*/
|
||||
ROM.prototype.getCPMString = function(addr, chEnd)
|
||||
{
|
||||
var s = "";
|
||||
var cchMax = 255;
|
||||
var bEnd = chEnd && chEnd.length && chEnd.charCodeAt(0) || chEnd || 0;
|
||||
while (cchMax--) {
|
||||
var b = this.cpu.getByte(addr++);
|
||||
if (b == bEnd) break;
|
||||
s += String.fromCharCode(b);
|
||||
}
|
||||
return s;
|
||||
};
|
||||
|
||||
/**
|
||||
* writeCPMString(s)
|
||||
*
|
||||
* @this {ROM}
|
||||
* @param {string} s
|
||||
*/
|
||||
ROM.prototype.writeCPMString = function(s)
|
||||
{
|
||||
s = s.replace(/\r/g, '');
|
||||
if (this.controlPrint) {
|
||||
this.controlPrint.value += s;
|
||||
this.controlPrint.scrollTop = this.controlPrint.scrollHeight;
|
||||
}
|
||||
this.log(s);
|
||||
};
|
||||
|
||||
/**
|
||||
* cloneROM(addr)
|
||||
*
|
||||
|
|
|
|||
|
|
@ -6663,6 +6663,7 @@ if (DEBUGGER) {
|
|||
sMsg = "halting";
|
||||
this.stopCPU();
|
||||
} else {
|
||||
if (this.isBusy(true)) return;
|
||||
sMsg = "already halted";
|
||||
}
|
||||
if (!fQuiet) this.println(sMsg);
|
||||
|
|
|
|||
Loading…
Reference in a new issue