OpenCores
URL https://opencores.org/ocsvn/am9080_cpu_based_on_microcoded_am29xx_bit-slices/am9080_cpu_based_on_microcoded_am29xx_bit-slices/trunk

Subversion Repositories am9080_cpu_based_on_microcoded_am29xx_bit-slices

[/] [am9080_cpu_based_on_microcoded_am29xx_bit-slices/] [trunk/] [prog/] [cpudiag.asm] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 zpekic
;***********************************************************************
2
; MICROCOSM ASSOCIATES  8080/8085 CPU DIAGNOSTIC VERSION 1.0  (C) 1980
3
;***********************************************************************
4
;
5
;DONATED TO THE "SIG/M" CP/M USER'S GROUP BY:
6
;KELLY SMITH, MICROCOSM ASSOCIATES
7
;3055 WACO AVENUE
8
;SIMI VALLEY, CALIFORNIA, 93065
9
;(805) 527-9321 (MODEM, CP/M-NET (TM))
10
;(805) 527-0518 (VERBAL)
11
;
12
BDOS    EQU     00005H  ;BDOS ENTRY TO CP/M
13
WBOOT   EQU     00000H  ;RE-ENTRY TO CP/M WARM BOOT
14
;
15
;
16
                ORG WBOOT; -- CPU starts here after reset
17
                DI
18
                JMP INIT
19
;
20
; -- Fake "BDOS", only implement functions 2 and 9 (https://www.seasip.info/Cpm/bdos.html)
21
;
22
                ORG BDOS;
23
 
24
                PUSH PSW
25
                MOV A, C
26
                CPI 2
27
                JZ C_WRITE
28
                CPI 9
29
                JZ C_WRITESTR
30
DONE:           POP PSW
31
                RET
32
 
33
C_WRITE:        MOV A, E
34
                OUT 00H
35
                JMP DONE
36
 
37
C_WRITESTR:     LDAX D
38
                CPI '$'
39
                JZ DONE
40
                OUT 00H
41
                INX D
42
                JMP C_WRITESTR
43
 
44
INIT:           LXI H, 0000H
45
                DCX H
46
                SPHL
47
                EI
48
                JMP CPU
49
;
50
;
51
 
52
                ORG     00100H
53
;
54
;
55
;
56
        JMP     CPU     ;JUMP TO 8080 CPU DIAGNOSTIC
57
;
58
;
59
;
60
        DB      'MICROCOSM ASSOCIATES 8080/8085 CPU DIAGNOSTIC'
61
        DB      ' VERSION 1.0  (C) 1980'
62
;
63
;
64
;
65
 
66
;
67
;
68
;
69
;MESSAGE OUTPUT ROUTINE
70
;
71
MSG:    PUSH    D       ;EXILE D REG.
72
        XCHG            ;SWAP H&L REGS. TO D&E REGS.
73
        MVI     C,9     ;LET BDOS KNOW WE WANT TO SEND A MESSAGE
74
        CALL    BDOS
75
        POP     D       ;BACK FROM EXILE
76
        RET
77
;
78
;
79
;
80
;CHARACTER OUTPUT ROUTINE
81
;
82
PCHAR:  MVI     C,2
83
        CALL    BDOS
84
        RET
85
;
86
;
87
;
88
BYTEO:  PUSH    PSW
89
        CALL    BYTO1
90
        MOV     E,A
91
        CALL    PCHAR
92
        POP     PSW
93
        CALL    BYTO2
94
        MOV     E,A
95
        JMP     PCHAR
96
BYTO1:  RRC
97
        RRC
98
        RRC
99
        RRC
100
BYTO2:  ANI     0FH
101
        CPI     0AH
102
        JM      BYTO3
103
        ADI     7
104
BYTO3:  ADI     30H
105
        RET
106
;
107
;
108
;
109
;************************************************************
110
;           MESSAGE TABLE FOR OPERATIONAL CPU TEST
111
;************************************************************
112
;
113
OKCPU:  DB      0CH,0DH,0AH,' CPU IS OPERATIONAL$'
114
;
115
NGCPU:  DB      0CH,0DH,0AH,' CPU HAS FAILED!    ERROR EXIT=$'
116
;
117
;
118
;
119
;************************************************************
120
;                8080/8085 CPU TEST/DIAGNOSTIC
121
;************************************************************
122
;
123
;NOTE: (1) PROGRAM ASSUMES "CALL",AND "LXI SP" INSTRUCTIONS WORK!
124
;
125
;      (2) INSTRUCTIONS NOT TESTED ARE "HLT","DI","EI","RIM","SIM",
126
;          AND "RST 0" THRU "RST 7"
127
;
128
;
129
;
130
;TEST JUMP INSTRUCTIONS AND FLAGS
131
;
132
CPU:    LXI     SP,STACK        ;SET THE STACK POINTER
133
        ANI     0        ;INITIALIZE A REG. AND CLEAR ALL FLAGS
134
        JZ      J010    ;TEST "JZ"
135
        CALL    CPUER
136
J010:   JNC     J020    ;TEST "JNC"
137
        CALL    CPUER
138
J020:   JPE     J030    ;TEST "JPE"
139
        CALL    CPUER
140
J030:   JP      J040    ;TEST "JP"
141
        CALL    CPUER
142
J040:   JNZ     J050    ;TEST "JNZ"
143
        JC      J050    ;TEST "JC"
144
        JPO     J050    ;TEST "JPO"
145
        JM      J050    ;TEST "JM"
146
        JMP     J060    ;TEST "JMP" (IT'S A LITTLE LATE,BUT WHAT THE HELL!
147
J050:   CALL    CPUER
148
J060:   ADI     6       ;A=6,C=0,P=1,S=0,Z=0
149
        JNZ     J070    ;TEST "JNZ"
150
        CALL    CPUER
151
J070:   JC      J080    ;TEST "JC"
152
        JPO     J080    ;TEST "JPO"
153
        JP      J090    ;TEST "JP"
154
J080:   CALL    CPUER
155
J090:   ADI     070H    ;A=76H,C=0,P=0,S=0,Z=0
156
        JPO     J100    ;TEST "JPO"
157
        CALL    CPUER
158
J100:   JM      J110    ;TEST "JM"
159
        JZ      J110    ;TEST "JZ"
160
        JNC     J120    ;TEST "JNC"
161
J110:   CALL    CPUER
162
J120:   ADI     081H    ;A=F7H,C=0,P=0,S=1,Z=0
163
        JM      J130    ;TEST "JM"
164
        CALL    CPUER
165
J130:   JZ      J140    ;TEST "JZ"
166
        JC      J140    ;TEST "JC"
167
        JPO     J150    ;TEST "JPO"
168
J140:   CALL    CPUER
169
J150:   ADI     0FEH    ;A=F5H,C=1,P=1,S=1,Z=0
170
        JC      J160    ;TEST "JC"
171
        CALL    CPUER
172
J160:   JZ      J170    ;TEST "JZ"
173
        JPO     J170    ;TEST "JPO"
174
        JM      AIMM    ;TEST "JM"
175
J170:   CALL    CPUER
176
;
177
;
178
;
179
;TEST ACCUMULATOR IMMEDIATE INSTRUCTIONS
180
;
181
AIMM:   CPI     0        ;A=F5H,C=0,Z=0
182
        JC      CPIE    ;TEST "CPI" FOR RE-SET CARRY
183
        JZ      CPIE    ;TEST "CPI" FOR RE-SET ZERO
184
        CPI     0F5H    ;A=F5H,C=0,Z=1
185
        JC      CPIE    ;TEST "CPI" FOR RE-SET CARRY ("ADI")
186
        JNZ     CPIE    ;TEST "CPI" FOR RE-SET ZERO
187
        CPI     0FFH    ;A=F5H,C=1,Z=0
188
        JZ      CPIE    ;TEST "CPI" FOR RE-SET ZERO
189
        JC      ACII    ;TEST "CPI" FOR SET CARRY
190
CPIE:   CALL    CPUER
191
ACII:   ACI     00AH    ;A=F5H+0AH+CARRY(1)=0,C=1
192
        ACI     00AH    ;A=0+0AH+CARRY(0)=0BH,C=0
193
        CPI     00BH
194
        JZ      SUII    ;TEST "ACI"
195
        CALL    CPUER
196
SUII:   SUI     00CH    ;A=FFH,C=0
197
        SUI     00FH    ;A=F0H,C=1
198
        CPI     0F0H
199
        JZ      SBII    ;TEST "SUI"
200
        CALL    CPUER
201
SBII:   SBI     0F1H    ;A=F0H-0F1H-CARRY(0)=FFH,C=1
202
        SBI     00EH    ;A=FFH-OEH-CARRY(1)=F0H,C=0
203
        CPI     0F0H
204
        JZ      ANII    ;TEST "SBI"
205
        CALL    CPUER
206
ANII:   ANI     055H    ;A=F0H55H=50H,C=0,P=1,S=0,Z=0
207
        CPI     050H
208
        JZ      ORII    ;TEST "ANI"
209
        CALL    CPUER
210
ORII:   ORI     03AH    ;A=50H3AH=7AH,C=0,P=0,S=0,Z=0
211
        CPI     07AH
212
        JZ      XRII    ;TEST "ORI"
213
        CALL    CPUER
214
XRII:   XRI     00FH    ;A=7AH0FH=75H,C=0,P=0,S=0,Z=0
215
        CPI     075H
216
        JZ      C010    ;TEST "XRI"
217
        CALL    CPUER
218
;
219
;
220
;
221
;TEST CALLS AND RETURNS
222
;
223
C010:   ANI     000H    ;A=0,C=0,P=1,S=0,Z=1
224
        CC      CPUER   ;TEST "CC"
225
        CPO     CPUER   ;TEST "CPO"
226
        CM      CPUER   ;TEST "CM"
227
        CNZ     CPUER   ;TEST "CNZ"
228
        CPI     000H
229
        JZ      C020    ;A=0,C=0,P=0,S=0,Z=1
230
        CALL    CPUER
231
C020:   SUI     077H    ;A=89H,C=1,P=0,S=1,Z=0
232
        CNC     CPUER   ;TEST "CNC"
233
        CPE     CPUER   ;TEST "CPE"
234
        CP      CPUER   ;TEST "CP"
235
        CZ      CPUER   ;TEST "CZ"
236
        CPI     089H
237
        JZ      C030    ;TEST FOR "CALLS" TAKING BRANCH
238
        CALL    CPUER
239
C030:   ANI     0FFH    ;SET FLAGS BACK!
240
        CPO     CPOI    ;TEST "CPO"
241
        CPI     0D9H
242
        JZ      MOVI    ;TEST "CALL" SEQUENCE SUCCESS
243
        CALL    CPUER
244
CPOI:   RPE             ;TEST "RPE"
245
        ADI     010H    ;A=99H,C=0,P=0,S=1,Z=0
246
        CPE     CPEI    ;TEST "CPE"
247
        ADI     002H    ;A=D9H,C=0,P=0,S=1,Z=0
248
        RPO             ;TEST "RPO"
249
        CALL    CPUER
250
CPEI:   RPO             ;TEST "RPO"
251
        ADI     020H    ;A=B9H,C=0,P=0,S=1,Z=0
252
        CM      CMI     ;TEST "CM"
253
        ADI     004H    ;A=D7H,C=0,P=1,S=1,Z=0
254
        RPE             ;TEST "RPE"
255
        CALL    CPUER
256
CMI:    RP              ;TEST "RP"
257
        ADI     080H    ;A=39H,C=1,P=1,S=0,Z=0
258
        CP      TCPI    ;TEST "CP"
259
        ADI     080H    ;A=D3H,C=0,P=0,S=1,Z=0
260
        RM              ;TEST "RM"
261
        CALL    CPUER
262
TCPI:   RM              ;TEST "RM"
263
        ADI     040H    ;A=79H,C=0,P=0,S=0,Z=0
264
        CNC     CNCI    ;TEST "CNC"
265
        ADI     040H    ;A=53H,C=0,P=1,S=0,Z=0
266
        RP              ;TEST "RP"
267
        CALL    CPUER
268
CNCI:   RC              ;TEST "RC"
269
        ADI     08FH    ;A=08H,C=1,P=0,S=0,Z=0
270
        CC      CCI     ;TEST "CC"
271
        SUI     002H    ;A=13H,C=0,P=0,S=0,Z=0
272
        RNC             ;TEST "RNC"
273
        CALL    CPUER
274
CCI:    RNC             ;TEST "RNC"
275
        ADI     0F7H    ;A=FFH,C=0,P=1,S=1,Z=0
276
        CNZ     CNZI    ;TEST "CNZ"
277
        ADI     0FEH    ;A=15H,C=1,P=0,S=0,Z=0
278
        RC              ;TEST "RC"
279
        CALL    CPUER
280
CNZI:   RZ              ;TEST "RZ"
281
        ADI     001H    ;A=00H,C=1,P=1,S=0,Z=1
282
        CZ      CZI     ;TEST "CZ"
283
        ADI     0D0H    ;A=17H,C=1,P=1,S=0,Z=0
284
        RNZ             ;TEST "RNZ"
285
        CALL    CPUER
286
CZI:    RNZ             ;TEST "RNZ"
287
        ADI     047H    ;A=47H,C=0,P=1,S=0,Z=0
288
        CPI     047H    ;A=47H,C=0,P=1,S=0,Z=1
289
        RZ              ;TEST "RZ"
290
        CALL    CPUER
291
;
292
;
293
;
294
;TEST "MOV","INR",AND "DCR" INSTRUCTIONS
295
;
296
MOVI:   MVI     A,077H
297
        INR     A
298
        MOV     B,A
299
        INR     B
300
        MOV     C,B
301
        DCR     C
302
        MOV     D,C
303
        MOV     E,D
304
        MOV     H,E
305
        MOV     L,H
306
        MOV     A,L     ;TEST "MOV" A,L,H,E,D,C,B,A
307
        DCR     A
308
        MOV     C,A
309
        MOV     E,C
310
        MOV     L,E
311
        MOV     B,L
312
        MOV     D,B
313
        MOV     H,D
314
        MOV     A,H     ;TEST "MOV" A,H,D,B,L,E,C,A
315
        MOV     D,A
316
        INR     D
317
        MOV     L,D
318
        MOV     C,L
319
        INR     C
320
        MOV     H,C
321
        MOV     B,H
322
        DCR     B
323
        MOV     E,B
324
        MOV     A,E     ;TEST "MOV" A,E,B,H,C,L,D,A
325
        MOV     E,A
326
        INR     E
327
        MOV     B,E
328
        MOV     H,B
329
        INR     H
330
        MOV     C,H
331
        MOV     L,C
332
        MOV     D,L
333
        DCR     D
334
        MOV     A,D     ;TEST "MOV" A,D,L,C,H,B,E,A
335
        MOV     H,A
336
        DCR     H
337
        MOV     D,H
338
        MOV     B,D
339
        MOV     L,B
340
        INR     L
341
        MOV     E,L
342
        DCR     E
343
        MOV     C,E
344
        MOV     A,C     ;TEST "MOV" A,C,E,L,B,D,H,A
345
        MOV     L,A
346
        DCR     L
347
        MOV     H,L
348
        MOV     E,H
349
        MOV     D,E
350
        MOV     C,D
351
        MOV     B,C
352
        MOV     A,B
353
        CPI     077H
354
        CNZ     CPUER   ;TEST "MOV" A,B,C,D,E,H,L,A
355
;
356
;
357
;
358
;TEST ARITHMETIC AND LOGIC INSTRUCTIONS
359
;
360
        XRA     A
361
        MVI     B,001H
362
        MVI     C,003H
363
        MVI     D,007H
364
        MVI     E,00FH
365
        MVI     H,01FH
366
        MVI     L,03FH
367
        ADD     B
368
        ADD     C
369
        ADD     D
370
        ADD     E
371
        ADD     H
372
        ADD     L
373
        ADD     A
374
        CPI     0F0H
375
        CNZ     CPUER   ;TEST "ADD" B,C,D,E,H,L,A
376
        SUB     B
377
        SUB     C
378
        SUB     D
379
        SUB     E
380
        SUB     H
381
        SUB     L
382
        CPI     078H
383
        CNZ     CPUER   ;TEST "SUB" B,C,D,E,H,L
384
        SUB     A
385
        CNZ     CPUER   ;TEST "SUB" A
386
        MVI     A,080H
387
        ADD     A
388
        MVI     B,001H
389
        MVI     C,002H
390
        MVI     D,003H
391
        MVI     E,004H
392
        MVI     H,005H
393
        MVI     L,006H
394
        ADC     B
395
        MVI     B,080H
396
        ADD     B
397
        ADD     B
398
        ADC     C
399
        ADD     B
400
        ADD     B
401
        ADC     D
402
        ADD     B
403
        ADD     B
404
        ADC     E
405
        ADD     B
406
        ADD     B
407
        ADC     H
408
        ADD     B
409
        ADD     B
410
        ADC     L
411
        ADD     B
412
        ADD     B
413
        ADC     A
414
        CPI     037H
415
        CNZ     CPUER   ;TEST "ADC" B,C,D,E,H,L,A
416
        MVI     A,080H
417
        ADD     A
418
        MVI     B,001H
419
        SBB     B
420
        MVI     B,0FFH
421
        ADD     B
422
        SBB     C
423
        ADD     B
424
        SBB     D
425
        ADD     B
426
        SBB     E
427
        ADD     B
428
        SBB     H
429
        ADD     B
430
        SBB     L
431
        CPI     0E0H
432
        CNZ     CPUER   ;TEST "SBB" B,C,D,E,H,L
433
        MVI     A,080H
434
        ADD     A
435
        SBB     A
436
        CPI     0FFH
437
        CNZ     CPUER   ;TEST "SBB" A
438
        MVI     A,0FFH
439
        MVI     B,0FEH
440
        MVI     C,0FCH
441
        MVI     D,0EFH
442
        MVI     E,07FH
443
        MVI     H,0F4H
444
        MVI     L,0BFH
445
        ANA     A
446
        ANA     C
447
        ANA     D
448
        ANA     E
449
        ANA     H
450
        ANA     L
451
        ANA     A
452
        CPI     024H
453
        CNZ     CPUER   ;TEST "ANA" B,C,D,E,H,L,A
454
        XRA     A
455
        MVI     B,001H
456
        MVI     C,002H
457
        MVI     D,004H
458
        MVI     E,008H
459
        MVI     H,010H
460
        MVI     L,020H
461
        ORA     B
462
        ORA     C
463
        ORA     D
464
        ORA     E
465
        ORA     H
466
        ORA     L
467
        ORA     A
468
        CPI     03FH
469
        CNZ     CPUER   ;TEST "ORA" B,C,D,E,H,L,A
470
        MVI     A,000H
471
        MVI     H,08FH
472
        MVI     L,04FH
473
        XRA     B
474
        XRA     C
475
        XRA     D
476
        XRA     E
477
        XRA     H
478
        XRA     L
479
        CPI     0CFH
480
        CNZ     CPUER   ;TEST "XRA" B,C,D,E,H,L
481
        XRA     A
482
        CNZ     CPUER   ;TEST "XRA" A
483
        MVI     B,044H
484
        MVI     C,045H
485
        MVI     D,046H
486
        MVI     E,047H
487
        ;MVI    H,(TEMP0 / 0FFH)        ;HIGH BYTE OF TEST MEMORY LOCATION
488
        MVI     H,(TEMP0 >> 8)          ;HIGH BYTE OF TEST MEMORY LOCATION
489
        MVI     L,(TEMP0 AND 0FFH)      ;LOW BYTE OF TEST MEMORY LOCATION
490
        MOV     M,B
491
        MVI     B,000H
492
        MOV     B,M
493
        MVI     A,044H
494
        CMP     B
495
        CNZ     CPUER   ;TEST "MOV" M,B AND B,M
496
        MOV     M,D
497
        MVI     D,000H
498
        MOV     D,M
499
        MVI     A,046H
500
        CMP     D
501
        CNZ     CPUER   ;TEST "MOV" M,D AND D,M
502
        MOV     M,E
503
        MVI     E,000H
504
        MOV     E,M
505
        MVI     A,047H
506
        CMP     E
507
        CNZ     CPUER   ;TEST "MOV" M,E AND E,M
508
        MOV     M,H
509
        ;MVI    H,(TEMP0 / 0FFH)
510
        MVI     H,(TEMP0 >> 8)
511
        MVI     L,(TEMP0 AND 0FFH)
512
        MOV     H,M
513
        ;MVI    A,(TEMP0 / 0FFH)
514
        MVI     A,(TEMP0 >> 8)
515
        CMP     H
516
        CNZ     CPUER   ;TEST "MOV" M,H AND H,M
517
        MOV     M,L
518
        ;MVI    H,(TEMP0 / 0FFH)
519
        MVI     H,(TEMP0 >> 8)
520
        MVI     L,(TEMP0 AND 0FFH)
521
        MOV     L,M
522
        MVI     A,(TEMP0 AND 0FFH)
523
        CMP     L
524
        CNZ     CPUER   ;TEST "MOV" M,L AND L,M
525
        ;MVI    H,(TEMP0 / 0FFH)
526
        MVI     H,(TEMP0 >> 8)
527
        MVI     L,(TEMP0 AND 0FFH)
528
        MVI     A,032H
529
        MOV     M,A
530
        CMP     M
531
        CNZ     CPUER   ;TEST "MOV" M,A
532
        ADD     M
533
        CPI     064H
534
        CNZ     CPUER   ;TEST "ADD" M
535
        XRA     A
536
        MOV     A,M
537
        CPI     032H
538
        CNZ     CPUER   ;TEST "MOV" A,M
539
        ;MVI    H,(TEMP0 / 0FFH)
540
        MVI     H,(TEMP0 >> 8)
541
        MVI     L,(TEMP0 AND 0FFH)
542
        MOV     A,M
543
        SUB     M
544
        CNZ     CPUER   ;TEST "SUB" M
545
        MVI     A,080H
546
        ADD     A
547
        ADC     M
548
        CPI     033H
549
        CNZ     CPUER   ;TEST "ADC" M
550
        MVI     A,080H
551
        ADD     A
552
        SBB     M
553
        CPI     0CDH
554
        CNZ     CPUER   ;TEST "SBB" M
555
        ANA     M
556
        CNZ     CPUER   ;TEST "ANA" M
557
        MVI     A,025H
558
        ORA     M
559
        CPI     037H
560
        CNZ     CPUER   ;TEST "ORA" M
561
        XRA     M
562
        CPI     005H
563
        CNZ     CPUER   ;TEST "XRA" M
564
        MVI     M,055H
565
        INR     M
566
        DCR     M
567
        ADD     M
568
        CPI     05AH
569
        CNZ     CPUER   ;TEST "INR","DCR",AND "MVI" M
570
        LXI     B,12FFH
571
        LXI     D,12FFH
572
        LXI     H,12FFH
573
        INX     B
574
        INX     D
575
        INX     H
576
        MVI     A,013H
577
        CMP     B
578
        CNZ     CPUER   ;TEST "LXI" AND "INX" B
579
        CMP     D
580
        CNZ     CPUER   ;TEST "LXI" AND "INX" D
581
        CMP     H
582
        CNZ     CPUER   ;TEST "LXI" AND "INX" H
583
        MVI     A,000H
584
        CMP     C
585
        CNZ     CPUER   ;TEST "LXI" AND "INX" B
586
        CMP     E
587
        CNZ     CPUER   ;TEST "LXI" AND "INX" D
588
        CMP     L
589
        CNZ     CPUER   ;TEST "LXI" AND "INX" H
590
        DCX     B
591
        DCX     D
592
        DCX     H
593
        MVI     A,012H
594
        CMP     B
595
        CNZ     CPUER   ;TEST "DCX" B
596
        CMP     D
597
        CNZ     CPUER   ;TEST "DCX" D
598
        CMP     H
599
        CNZ     CPUER   ;TEST "DCX" H
600
        MVI     A,0FFH
601
        CMP     C
602
        CNZ     CPUER   ;TEST "DCX" B
603
        CMP     E
604
        CNZ     CPUER   ;TEST "DCX" D
605
        CMP     L
606
        CNZ     CPUER   ;TEST "DCX" H
607
        STA     TEMP0
608
        XRA     A
609
        LDA     TEMP0
610
        CPI     0FFH
611
        CNZ     CPUER   ;TEST "LDA" AND "STA"
612
        LHLD    TEMPP
613
        SHLD    TEMP0
614
        LDA     TEMPP
615
        MOV     B,A
616
        LDA     TEMP0
617
        CMP     B
618
        CNZ     CPUER   ;TEST "LHLD" AND "SHLD"
619
        LDA     TEMPP+1
620
        MOV     B,A
621
        LDA     TEMP0+1
622
        CMP     B
623
        CNZ     CPUER   ;TEST "LHLD" AND "SHLD"
624
        MVI     A,0AAH
625
        STA     TEMP0
626
        MOV     B,H
627
        MOV     C,L
628
        XRA     A
629
        LDAX    B
630
        CPI     0AAH
631
        CNZ     CPUER   ;TEST "LDAX" B
632
        INR     A
633
        STAX    B
634
        LDA     TEMP0
635
        CPI     0ABH
636
        CNZ     CPUER   ;TEST "STAX" B
637
        MVI     A,077H
638
        STA     TEMP0
639
        LHLD    TEMPP
640
        LXI     D,00000H
641
        XCHG
642
        XRA     A
643
        LDAX    D
644
        CPI     077H
645
        CNZ     CPUER   ;TEST "LDAX" D AND "XCHG"
646
        XRA     A
647
        ADD     H
648
        ADD     L
649
        CNZ     CPUER   ;TEST "XCHG"
650
        MVI     A,0CCH
651
        STAX    D
652
        LDA     TEMP0
653
        CPI     0CCH
654
        STAX    D
655
        LDA     TEMP0
656
        CPI     0CCH
657
        CNZ     CPUER   ;TEST "STAX" D
658
        LXI     H,07777H
659
        DAD     H
660
        MVI     A,0EEH
661
        CMP     H
662
        CNZ     CPUER   ;TEST "DAD" H
663
        CMP     L
664
        CNZ     CPUER   ;TEST "DAD" H
665
        LXI     H,05555H
666
        LXI     B,0FFFFH
667
        DAD     B
668
        MVI     A,055H
669
        CNC     CPUER   ;TEST "DAD" B
670
        CMP     H
671
        CNZ     CPUER   ;TEST "DAD" B
672
        MVI     A,054H
673
        CMP     L
674
        CNZ     CPUER   ;TEST "DAD" B
675
        LXI     H,0AAAAH
676
        LXI     D,03333H
677
        DAD     D
678
        MVI     A,0DDH
679
        CMP     H
680
        CNZ     CPUER   ;TEST "DAD" D
681
        CMP     L
682
        CNZ     CPUER   ;TEST "DAD" B
683
        STC
684
        CNC     CPUER   ;TEST "STC"
685
        CMC
686
        CC      CPUER   ;TEST "CMC
687
        MVI     A,0AAH
688
        CMA
689
        CPI     055H
690
        CNZ     CPUER   ;TEST "CMA"
691
        ORA     A       ;RE-SET AUXILIARY CARRY
692
        DAA
693
        CPI     055H
694
        CNZ     CPUER   ;TEST "DAA"
695
        MVI     A,088H
696
        ADD     A
697
        DAA
698
        CPI     076H
699
        CNZ     CPUER   ;TEST "DAA"
700
        XRA     A
701
        MVI     A,0AAH
702
        DAA
703
        CNC     CPUER   ;TEST "DAA"
704
        CPI     010H
705
        CNZ     CPUER   ;TEST "DAA"
706
        XRA     A
707
        MVI     A,09AH
708
        DAA
709
        CNC     CPUER   ;TEST "DAA"
710
        CNZ     CPUER   ;TEST "DAA"
711
        STC
712
        MVI     A,042H
713
        RLC
714
        CC      CPUER   ;TEST "RLC" FOR RE-SET CARRY
715
        RLC
716
        CNC     CPUER   ;TEST "RLC" FOR SET CARRY
717
        CPI     009H
718
        CNZ     CPUER   ;TEST "RLC" FOR ROTATION
719
        RRC
720
        CNC     CPUER   ;TEST "RRC" FOR SET CARRY
721
        RRC
722
        CPI     042H
723
        CNZ     CPUER   ;TEST "RRC" FOR ROTATION
724
        RAL
725
        RAL
726
        CNC     CPUER   ;TEST "RAL" FOR SET CARRY
727
        CPI     008H
728
        CNZ     CPUER   ;TEST "RAL" FOR ROTATION
729
        RAR
730
        RAR
731
        CC      CPUER   ;TEST "RAR" FOR RE-SET CARRY
732
        CPI     002H
733
        CNZ     CPUER   ;TEST "RAR" FOR ROTATION
734
        LXI     B,01234H
735
        LXI     D,0AAAAH
736
        LXI     H,05555H
737
        XRA     A
738
        PUSH    B
739
        PUSH    D
740
        PUSH    H
741
        PUSH    PSW
742
        LXI     B,00000H
743
        LXI     D,00000H
744
        LXI     H,00000H
745
        MVI     A,0C0H
746
        ADI     0F0H
747
        POP     PSW
748
        POP     H
749
        POP     D
750
        POP     B
751
        CC      CPUER   ;TEST "PUSH PSW" AND "POP PSW"
752
        CNZ     CPUER   ;TEST "PUSH PSW" AND "POP PSW"
753
        CPO     CPUER   ;TEST "PUSH PSW" AND "POP PSW"
754
        CM      CPUER   ;TEST "PUSH PSW" AND "POP PSW"
755
        MVI     A,012H
756
        CMP     B
757
        CNZ     CPUER   ;TEST "PUSH B" AND "POP B"
758
        MVI     A,034H
759
        CMP     C
760
        CNZ     CPUER   ;TEST "PUSH B" AND "POP B"
761
        MVI     A,0AAH
762
        CMP     D
763
        CNZ     CPUER   ;TEST "PUSH D" AND "POP D"
764
        CMP     E
765
        CNZ     CPUER   ;TEST "PUSH D" AND "POP D"
766
        MVI     A,055H
767
        CMP     H
768
        CNZ     CPUER   ;TEST "PUSH H" AND "POP H"
769
        CMP     L
770
        CNZ     CPUER   ;TEST "PUSH H" AND "POP H"
771
        LXI     H,00000H
772
        DAD     SP
773
        SHLD    SAVSTK  ;SAVE THE "OLD" STACK-POINTER!
774
        LXI     SP,TEMP4
775
        DCX     SP
776
        DCX     SP
777
        INX     SP
778
        DCX     SP
779
        MVI     A,055H
780
        STA     TEMP2
781
        CMA
782
        STA     TEMP3
783
        POP     B
784
        CMP     B
785
        CNZ     CPUER   ;TEST "LXI","DAD","INX",AND "DCX" SP
786
        CMA
787
        CMP     C
788
        CNZ     CPUER   ;TEST "LXI","DAD","INX", AND "DCX" SP
789
        LXI     H,TEMP4
790
        SPHL
791
        LXI     H,07733H
792
        DCX     SP
793
        DCX     SP
794
        XTHL
795
        LDA     TEMP3
796
        CPI     077H
797
        CNZ     CPUER   ;TEST "SPHL" AND "XTHL"
798
        LDA     TEMP2
799
        CPI     033H
800
        CNZ     CPUER   ;TEST "SPHL" AND "XTHL"
801
        MVI     A,055H
802
        CMP     L
803
        CNZ     CPUER   ;TEST "SPHL" AND "XTHL"
804
        CMA
805
        CMP     H
806
        CNZ     CPUER   ;TEST "SPHL" AND "XTHL"
807
        LHLD    SAVSTK  ;RESTORE THE "OLD" STACK-POINTER
808
        SPHL
809
        LXI     H,CPUOK
810
        PCHL            ;TEST "PCHL"
811
;
812
;
813
;
814
CPUER:  LXI     H,NGCPU ;OUTPUT "CPU HAS FAILED    ERROR EXIT=" TO CONSOLE
815
        CALL    MSG
816
        XTHL
817
        MOV     A,H
818
        CALL    BYTEO   ;SHOW ERROR EXIT ADDRESS HIGH BYTE
819
        MOV     A,L
820
        CALL    BYTEO   ;SHOW ERROR EXIT ADDRESS LOW BYTE
821
        JMP     WBOOT   ;EXIT TO CP/M WARM BOOT
822
;
823
;
824
;
825
CPUOK:  LXI     H,OKCPU ;OUTPUT "CPU IS OPERATIONAL" TO CONSOLE
826
        CALL    MSG
827
        JMP     WBOOT   ;EXIT TO CP/M WARM BOOT
828
;
829
; -------- RAM is implemented in top 256 bytes of the address space -------
830
        ORG 0FF00H
831
;
832
TEMPP:  DW      TEMP0   ;POINTER USED TO TEST "LHLD","SHLD",
833
                        ; AND "LDAX" INSTRUCTIONS
834
;
835
TEMP0:  DS      1       ;TEMPORARY STORAGE FOR CPU TEST MEMORY LOCATIONS
836
TEMP1:  DS      1       ;TEMPORARY STORAGE FOR CPU TEST MEMORY LOCATIONS
837
TEMP2   DS      1       ;TEMPORARY STORAGE FOR CPU TEST MEMORY LOCATIONS
838
TEMP3:  DS      1       ;TEMPORARY STORAGE FOR CPU TEST MEMORY LOCATIONS
839
TEMP4:  DS      1       ;TEMPORARY STORAGE FOR CPU TEST MEMORY LOCATIONS
840
SAVSTK: DS      2       ;TEMPORARY STACK-POINTER STORAGE LOCATION
841
;
842
;
843
;
844
STACK   EQU     TEMPP+128       ;DE-BUG STACK POINTER STORAGE AREA
845
;
846
;
847
;
848
        END
849
;
850
;
851
;

powered by: WebSVN 2.1.0

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