-
Notifications
You must be signed in to change notification settings - Fork 25
/
fkabd0.mac
2311 lines (2305 loc) · 66.3 KB
/
fkabd0.mac
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
; Originally was compiled by macy-11, an assembler running on the PDP-10.
; The source is adapted to be translated by regular macro-11.
;
; IDENTIFICATION
; --------------
;
;
; Product Code: AC-8045d-MC
; Product Name: CFKABD0 11/34 TRAPS TST
; Product Date: 03-Apr-77
; Maintainer: Diagnostic Engineering
;
;
; The information in this document is subject to change without notice
; and should not be construed as a commitment by Digital Equipment
; Corporation. Digital Equipment Corporation assumes no responsibility
; for any errors that may appear in this document.
;
; No responsibility is assumed for the use or reliability of software
; on equipment that is not supplied by Digital or its affiliated companies
;
; Copyright (C) 1973, 1979 by Digital Equipment Corporation
; The following are trademarks of Digital Equipment Corporation:
;
; Digital PDP UNIBUS MASSBUS
; DEC DECUS DECTAPE
;_____________________________________________________________________________
;
; act11 hooks
; aptmailbox-etable
; apt parameter block
;
; T1 test auto increment and decrement of SP for word and bytes
; T2 test transfer of byte using SP
; T3 test byte operation with sequential odd-even address
; T4 test the cc bits
; T5 test that a trap occurs on a reserved instruction
; T6 test decrement of stack pointer on a trap operation
; T7 test that proper PC is saved
; T10 test that "old" cc and priority are placed on stack
; T11 test that "new" status is correct
; T12 test that a trap occurs for a "trap" instruction
; T13 test decrement of stack pointer on a trap operation
; T14 test that proper PC is saved
; T15 test that "old" cc and priority are placed on stack
; T16 test that "new" status is correct
; T17 test that all combination of "trap" will cause a trap
; T20 test that a trap occures on an "iot" instruction
; T21 test decrement of stack pointer on a trap operation
; T22 test that proper PC is saved
; T23 test that "old" cc and priority are placed on stack
; T24 test that "new" status is correct
; T25 test that a trap occurs on an emt instruction
; T26 test decrement of stack pointer on a trap operation
; T27 test that proper PC is saved
; T30 test that "old" cc and priority are placed on stack
; T31 test that "new" status is correct
; T32 test that all combination of emt will cause a trap
; T33 test that a trap occures on an "trace-trt" instruction
; T34 test decrement of stack pointer on a trap operation
; T35 test that proper PC is saved
; T36 test that "old" cc and priority are placed on stack
; T37 test that "new" status is correct
; T40 test that a trap occurs on an illegal instruction
; T41 test decrement of stack pointer on a trap operation
; T42 test that proper PC is saved
; T43 test that "old" cc and priority are placed on stack
; T44 test that "new" status is correct
; T45 test that a trap occures on all illegal instructor
; T46 test decrement of stack pointer on a trap operation
; T47 test that proper PC is saved
; T50 test that "old" cc and priority are placed on stack
; T51 test that "new" status is correct
; T52 test that a trap occures on an illegal address
; T53 test decrement of stack pointer on a trap operation
; T54 test that proper PC is saved
; T55 test that "old" cc and priority are placed on stack
; T56 test that "new" status is correct
; T57 test that decrement SP to a value less than 400 traps
; T60 test for decrement of SP on overflow trap
; T61 test different types of overflow
; T62 test that an 7 causes an overflow trap
; T63 test that an iot causes an overflow trap
; T64 test that an emt causes an overflow trap
; T65 test that an trap causes an overflow trap
; T66 test that an trt causes an overflow trap
; T67 test that an illa causes an overflow trap
; T70 test that an illb causes an overflow trap
; T71 test for false overflow trap
; T72 test that bit 4 psw will cause a trap to 14
; T73 test stack pointer decrements
; T74 test for proper PC on stack
; T75 test that rtt pops T-bit
; T76 test that rtt allows one inst. before trap
; T77 test that rti does not allow 1 inst.
; T100 does the processor trap when PC is odd?
; T101 test trap on trap that trace bit traps are inhibited on trap inst
; T102 test that the trace bit is saved in the stack
; T103 test non-existent address traps
; T104 test that a tty interrupt causes an overflow trap
; T105 test that a pending interrupt occurs before trap
; T106 test that a pending interrupt, interrupts between traps
; T107 test that "reset" goes to outside world
; T110 test that reset has no effect on the trace trap
; T111 test that when tty interrupts it pops new status
; T112 test the "wait" instruction
; T113 test that all reserved instructions trap
;
; All instructions that are reserved should trap to location 10,
; and the PC that points to the trapping instruction should be
; placed on the stack
;_____________________________________________________________________________
;
HOEP = 0 ; halt on end-of-pass
MEMLIM = 000000 ; 0 for original, 100000 to limit
VM3FIX = 0 ; not 0 for VM3 test fixes
SKIP = 0 ; skip final prints
;_____________________________________________________________________________
;
.asect ;
. = 0 ; loop on test
.title CFKABD0 11/34 TRAPS TST
.nlist cnd, mc, md
.list me ;
;
tab = R3 ;
last = R1 ;
first = R5 ;
hlt = halt ;
trt = 3 ;
itrap5 = 4 ;
rtrap5 = 4 ; reserved inst and illegal addresses
rtrap4 = 14 ; for trace trap
rtrap3 = 30 ; for emulator trap
rtrap2 = 20 ; for iot trap
rtrap1 = 34 ; for trap inst
ttcsr = 177564 ;
trcsr = 177560 ;
tps = 177564 ;
tpb = 177566 ;
bell = 240 ;
nop = 240 ;
status = 177776 ;
trapa = 7 ;
rtrap = 10 ;
illa = 004700 ;
illb = 100 ;
cc = 177776 ;
;_____________________________________________________________________________
;
.macro vect, offset, adr, val ;
. = offset ;
.if nb, <adr> ;
.word adr ;
.iff ;
.word .+2 ;
.endc ;
.if nb, <val> ;
.word val ;
.iff ;
.word 0 ;
.endc ;
.endm ;
;_____________________________________________________________________________
;
; All unused locations from 4-776 contain a ".+2, halt"
; sequence to catch illegal traps and interrupts
; location 0 contains 0 to catch improperly loaded vectors
;
.sbttl "TRAP CATCHER"
.nlist ;
vect 0, 2 ;
vect 4, 6 ;
vect 10, 12 ;
vect 14, 16 ;
vect 20, 22 ;
vect 24, 200 ; for apt start up
vect 30, 32 ;
vect 34, 36 ;
vect 40, 42 ; hooks required by act-11
vect 44, $apthd, $endad ; set loc.46 to address of $endad in .seop
.list ;
;_____________________________________________________________________________
;
.sbttl "ACT11 HOOKS"
.nlist ;
vect 50, 52 ; set loc.52 to zero
vect 54, 56 ;
vect 60, 62 ;
vect 64, 66 ;
vect 70, 72 ;
vect 74, 76 ;
vect 100, 102 ;
vect 104, 106 ;
vect 110, 112 ;
vect 114, 116 ;
vect 120, 122 ;
vect 124, 126 ;
vect 130, 132 ;
vect 134, 136 ;
vect 140, 142 ;
vect 144, 146 ;
vect 150, 152 ;
vect 154, 156 ;
vect 160, 162 ;
vect 164, 166 ;
vect 170, 172 ;
vect 174, 176 ;
.list ;
;_____________________________________________________________________________
;
.sbttl "STARTING ADDRESS(ES)"
. = 200 ;
jmp begin ;
vect 204, 206 ;
;
. = 210 ;
clr @#$pass ;
jmp begin ;
;
vect 220, 222 ;
vect 224, 226 ;
vect 230, 232 ;
vect 234, 236 ;
vect 240, 242 ;
vect 244, 246 ;
vect 250, 252 ;
vect 254, 256 ;
vect 260, 262 ;
vect 264, 266 ;
vect 270, 272 ;
vect 274, 276 ;
;_____________________________________________________________________________
;
.sbttl "APT MAILBOX-ETABLE"
. = 300
$mail: ; apt mailbox
$msgty: .word 0 ; amsgty - message type code
$fatal: .word 0 ; afatal - fatal error number
$testn: .word 0 ; atestn - test number
$pass: .word 0 ; apass - pass count
$devct: .word 0 ; adevct - device count
$unit: .word 0 ; aunit - i/o unit number
$msgad: .word 0 ; amsgad - message address
$msglg: .word 0 ; amsglg - message length
$etable: ; apt environment table
$env: .byte 0 ; aenv - environment byte
$envm: .byte 0 ; aenvm - environment mode bits
$swreg: .word 0 ; aswreg - apt switch register
$uswr: .word 0 ; auswr - user switches
$cpuop: .word 0 ; acpuop - cpu type, options
$etend:
;_____________________________________________________________________________
;
; Setup apt parameter block as defined in the apt-pdp11 diagnostic interface spec,
;
$apthd:
$hibts: .word 0 ; two high bits of 18 bit mailbox addr.
$mbadr: .word $mail ; address of apt mailbox (bits 0-15)
$tstm: .word 2 ; run tim of longest test
$pastm: .word 2 ; run time in secs. of 1st pass on 1 unit (quick verify)
$unitm: .word 0 ; additional run time (secs) of a pass for each additional unit
.word $etend-$mail/2 ; length mailbox-etable(words)
;
vect 344, 346 ;
vect 350, 352 ;
vect 354, 356 ;
vect 360, 362 ;
vect 364, 366 ;
vect 370, 372 ;
vect 374, 376 ;
;_____________________________________________________________________________
;
. = 500 ;
buff: .word 0 ;
sr0: .word 177572 ;
sr0h: .word 177573 ;
sr1: .word 177574 ;
sr2: .word 177576 ;
ktvec: .word 250 ;
ktsta: .word 252 ;
;
adrtab: ;
updr0: .word 177600 ; user page descriptor registers
updr1: .word 177602 ;
updr2: .word 177604 ;
updr3: .word 177606 ;
updr4: .word 177610 ;
updr5: .word 177612 ;
updr6: .word 177614 ;
updr7: .word 177616 ;
;
upar0: .word 177640 ; user page address registers
upar1: .word 177642 ;
upar2: .word 177644 ;
upar3: .word 177646 ;
upar4: .word 177650 ;
upar5: .word 177652 ;
upar6: .word 177654 ;
upar7: .word 177656 ;
;
kpdr0: .word 172300 ; kernel page descriptor registers
kpdr1: .word 172302 ;
kpdr2: .word 172304 ;
kpdr3: .word 172306 ;
kpdr4: .word 172310 ;
kpdr5: .word 172312 ;
kpdr6: .word 172314 ;
kpdr7: .word 172316 ;
;
kpar0: .word 172340 ; kernel page address registers
kpar1: .word 172342 ;
kpar2: .word 172344 ;
kpar3: .word 172346 ;
kpar4: .word 172350 ;
;
kpar5: .word 172352 ;
kpar6: .word 172354 ;
kpar7: .word 172356 ;
adrend: .word .-2 ;
;_____________________________________________________________________________
;
begin: mov #-1, @#passpt ; clear the iteration counter
mov #msg1, R0 ; get title adrs
1$: tstb tps ; tty ready
bpl 1$ ; no wait
movb (R0)+, tpb ; print character
bne 1$ ; next if not done
2$: tstb tps ;
bpl 2$ ;
;
restrt: clr $msgty ;
mov #pwrdwn, 24 ; set up the power down vector
mov #340, 26 ; set up power down priority
clr $testn ;
clr $fatal ;
mov #$msgty,R2 ;
;
; Special case of odd; .even .byte and register 6 (SP)
;
here = 0 ;
jmp tst1 ;
k1: .word 0 ;
k2: .word 0 ;
k3: .word 0 ;
k4: .word 0 ;
k5: .word 0 ;
k6: .word 0 ;
k7: .word 052525 ;
k10: .word 052400 ;
k11: .word 0 ;
k12: .word 0 ;
;_____________________________________________________________________________
;
.macro $err, num ;
mov #num, @#$fatal ;
inc (R2) ;
halt ;
.endm ;
;_____________________________________________________________________________
;
; Test 1 - test auto increment and decrement of SP for word and bytes
;
tst1: inc @#$testn ;
cmp #1, @#$testn ;
bne tst2-12 ;
clr SP ;
movb (SP)+, here ; six should increment by two
cmp SP, #2 ;
beq br1 ;
$err 1 ;
;
br1: mov #1000, SP ;
movb -(SP), #here ; should decrement by two
cmp SP, #776 ;
beq br2 ;
$err 2 ;
;
br2: clr SP ;
movb (SP)+, (SP)+ ; doubles auto increment of SP
cmp SP, #4 ;
beq br3 ;
$err 3 ;
;
br3: clr SP ;
clr R4 ;
cmpb (SP)+, (R4)+ ; test increment of SP
cmp SP, #2 ;
beq br4 ;
$err 4 ;
;
br4: clr SP ;
clr R4 ;
cmpb (R4)+, (SP)+ ; test increment of SP
cmp SP, #2 ;
beq br5 ;
$err 5 ;
;
br5: clr SP ;
clr R4 ;
cmpb (SP)+, (R4)+ ; test increment of R4
cmp R4, #1 ;
beq br6 ;
$err 6 ;
;
br6: clr SP ;
clr R4 ;
cmpb (R4)+, (SP)+ ; test increment of SP
cmp SP, #2 ;
beq br7 ;
$err 7 ;
;
br7: clr SP ;
clr R4 ;
cmpb (R4)+, (SP)+ ; test increment of R4
;
cmp R4, #1 ;
beq br10 ;
$err 10 ;
;
br10: mov #1000, SP ;
cmpb -(SP), #here ; test decrement of SP
cmp #776, SP ;
beq tst2 ;
$err 11 ;
;_____________________________________________________________________________
;
; Test 2 - test transfer of byte using SP
;
tst2: inc @#$testn ;
cmp #2, @#$testn ;
bne tst3-12 ;
mov #123456, k5 ;
mov #050505, k1 ;
mov #k1, R5 ;
mov #k5, SP ;
movb (SP)+, (R5)+ ; low byte of SP to R5
cmp #050456, k1 ;
beq br11 ;
$err 12 ;
;
br11: mov #123456, k5 ;
mov #050505, k1 ;
mov #k1, R5 ;
mov #k6, SP ;
movb -(SP), (R5)+ ; low .byte of SP to R5 (decrement)
cmp k1, #050456 ;
beq br12 ;
$err 13 ;
;
br12: mov #123456, k1 ;
mov #050505, k5 ;
mov #k1, R5 ; (123456)
mov #k5, SP ; (050505)
movb (R5)+, (SP)+ ; low of R5 to low of SP
cmp #050456, k5 ;
beq br13 ;
$err 14 ;
;
br13: mov #123456, k1 ;
mov #050505, k5 ;
mov #k1+1, R5 ; 123456
mov #k5, SP ; 050505
movb (R5)+, (SP)+ ; high of R5 to low of SP
cmp k5, #050647 ;
beq br14 ;
$err 15 ;
;
br14: mov #123456, k1 ;
mov #050505, k5 ;
mov #k1+1, R5 ; R5=123456 - odd address
mov #k5, SP ; SP=050505 - even address
movb (SP)+, (R5)+ ; low of SP to high of R5
cmp #042456, k1 ;
beq tst3 ;
$err 16 ;
;_____________________________________________________________________________
;
; Test 3 - test byte operation with sequential odd-even address
;
tst3: inc @#$testn ; update test number
cmp #3, @#$testn ; sequence error?
bne tst4-12 ; br to error halt on seq error
cmpb k7, k7+1 ; same .word low to high
beq br15 ;
$err 17 ;
;
br15: cmpb k7+1, k7 ; compare odd to .even same .word
beq br16 ;
$err 20 ;
;
br16: cmpb k10+1, k7 ; sequential .bytes
beq br17 ;
$err 21 ;
;
br17: cmpb k10, k6 ;
beq br20 ;
$err 22 ;
;
br20: cmpb k7+1, k10+1 ;
beq br21 ;
$err 23 ;
;
br21: cmpb k10, k10+1 ;
bne br22 ;
$err 24 ;
;
br22: cmpb k10+1, k10+1 ;
beq br23 ;
$err 25 ;
;
br23: cmpb k10, k7+1 ;
bne tst4 ;
$err 26 ;
;_____________________________________________________________________________
;
; Test 4 - test the cc bits
;
tst4: inc @#$testn ; update test number
cmp #4, @#$testn ; sequence error?
bne tst5-12 ; br to error halt on seq error
scc ; set status
clr status ; clear status
bcc br33 ;
$err 27 ;
;
br33: bvc br34 ;
$err 30 ;
br34: bne br35 ;
$err 31 ;
br35: bpl br36 ;
$err 32 ;
;
br36: ccc ; clear condition codes
bis #17, status ; set status to ones
bcs br37 ;
$err 33 ;
br37: bvs br40 ;
$err 34 ;
br40: beq br41 ;
$err 35 ;
br41: bmi tst5 ;
$err 36 ;
;_____________________________________________________________________________
;
; Test 5 - test that a trap occurs on a reserved instruction
;
tst5: inc @#$testn ;
cmp #5, @#$testn ;
bne reta ;
mov #buff, SP ; stack pointer setup
mov #retah, rtrap ; return location
trapa ; reserved instruction, should trap
reta: $err 37 ;
retah: ;
;_____________________________________________________________________________
;
; Test 6 - test decrement of stack pointer on a trap operation
;
tst6: inc @#$testn ; update test number
cmp #6, @#$testn ; sequence error?
bne tst7-12 ; br to error halt on seq error
mov #buff, SP ; stack pointer setup
mov #retb, rtrap ; return pointer
trapa ; reserved instruction
retb: cmp SP, #buff-4 ; test decrement of SP
beq tst7 ;
$err 40 ;
;_____________________________________________________________________________
;
; Test 7 - test that proper PC is saved
;
tst7: inc @#$testn ; update test number
cmp #7, @#$testn ; sequence error?
bne tst10-12 ; br to error halt on seq error
mov #buff, SP ; stack pointer setup
mov #retc, rtrap ; return from trap pointer
instc: trapa ; trap on this instruction
retc: cmp #.,buff-4 ; check for incremented PC
beq tst10 ;
$err 41 ;
;_____________________________________________________________________________
;
; test 10 - test that "old" cc and priority are placed on stack
;
tst10: inc @#$testn ; update test number
cmp #10, @#$testn ; sequence error?
bne tst11-12 ; br to error halt on seq error
mov #buff, SP ; set up
mov #retd, rtrap ; set up
clr cc ; clear cc and priority
ccc ;
trapa ; trap
retd: cmp buff-2, #0 ; test that old status went to stack
beq 1$ ;
$err 42 ;
;
1$: mov #buff, SP ;
mov #rete, rtrap ;
mov #357, cc ; set priority
scc ; set cc
trapa ; trap
rete: cmp buff-2, #357 ; compares status on stack
beq tst11 ;
$err 43 ;
;_____________________________________________________________________________
;
; Test 11 - test that "new" status is correct
;
tst11: inc @#$testn ; update test number
cmp #11, @#$testn ; sequence error?
bne stpp ; br to error halt on seq error
mov #buff, SP ;
mov #retf, rtrap ;
clr rtrap+2 ; clear future priority and cc
trapa ;
retf: bpl 1$ ; test for "C" cleared
$err 44 ;
1$: bne 2$ ;
$err 45 ;
2$: bvc 3$ ;
$err 46 ;
3$: bcc 4$ ;
$err 47 ;
4$: bit #340, cc ; test priority
beq 5$ ;
$err 50 ;
5$: mov #buff, SP ;
mov #retg, rtrap ;
mov #357, rtrap+2 ; set new "cc" and priority
trapa ; trap here
retg: bmi 1$ ;
$err 51 ;
1$: beq 2$ ;
$err 52 ;
2$: bvs 3$ ;
$err 53 ;
3$: bcs 4$ ;
$err 54 ;
4$: mov cc, SP ;
bic #17, SP ;
cmp #340, SP ;
beq stppa ;
stpp: $err 55 ;
stppa: mov #12, 10 ;
clr 12 ;
;_____________________________________________________________________________
;
; Test 12 - test that a trap occurs for a "trap" instruction
;
tst12: inc @#$testn ;
cmp #12, @#$testn ; sequence error?
bne tst13-12 ; br to error halt on seq error
mov #12, 10 ;
clr 12 ;
mov #buff, SP ; stack pointer setup
mov #reta1, rtrap1 ; return location
trap ; reserved instruction, should trap
$err 56 ;
reta1: ;
;_____________________________________________________________________________
;
; Test 13 - test decrement of stack pointer on a trap operation
;
tst13: inc @#$testn ; update test number
cmp #13, @#$testn ; sequence error?
bne tst14-12 ; br to error halt on seq error
mov #buff, SP ; stack pointer setup
mov #retr1, rtrap1 ; return pointer
trap ; reserved instruction
retr1: cmp SP, #buff-4 ; test decrement of SP
beq tst14 ;
$err 57 ;
;_____________________________________________________________________________
;
; Test 14 - test that proper PC is saved
;
tst14: inc @#$testn ; update test number
cmp #14, @#$testn ; sequence error?
bne tst15-12 ; br to error halt on seq error
mov #buff, SP ; stack pointer setup
mov #retc1, rtrap1 ; return from trap pointer
trap ; trap on this instruction
retc1: cmp #., buff-4 ; check incremented PC
beq tst15 ;
$err 60 ;
;_____________________________________________________________________________
;
; Test 15 - test that "old" cc and priority are placed on stack
;
tst15: inc @#$testn ; update test number
cmp #15, @#$testn ; sequence error?
bne tst16-12 ; br to error halt on seq error
mov #buff, SP ; set up
mov #retd1, rtrap1 ; set up
clr cc ; clear cc and priority
ccc ;
trap ; trap
;
retd1: cmp buff-2, #0 ; test that old status went to stack
beq 1$ ;
$err 61 ;
;
1$: mov #buff, SP ; set up
mov #rete1, rtrap1 ; set up
mov #357, cc ; set priority
trap ; set cc
rete1: cmp buff-2, #357 ; compares status on stack
beq tst16 ;
$err 62 ;
;_____________________________________________________________________________
;
; Test 16 - test that "new" status is correct
;
tst16: inc @#$testn ; update test number
cmp #16, @#$testn ; sequence error?
bne tst17-12 ; br to error halt on seq error
mov #buff, SP ;
mov #retf1, rtrap1 ;
clr rtrap1+2 ; clear future priority and cc
trap ;
;
retf1: bpl 1$ ; test for "c" cleared
$err 63 ;
1$: bne 2$ ;
$err 64 ;
2$: bvc 3$ ;
$err 65 ;
3$: bcc 4$ ;
$err 66 ;
4$: bit #340, cc ; test priority
beq 5$ ;
$err 67 ;
5$: mov #buff, SP ;
mov #retg1, rtrap1 ;
mov #357, rtrap1+2 ; set new "cc" and priority
trap ; trap here
retg1: bmi 1$ ;
$err 70 ;
1$: beq 2$ ;
$err 71 ;
2$: bvs 3$ ;
$err 72 ;
3$: bcs 4$ ;
$err 73 ;
4$: mov cc, SP ;
bic #17, SP ;
cmp #340, SP ;
beq tst17 ;
$err 74 ;
;_____________________________________________________________________________
;
; Test 17 - test that all combination of "trap" will cause a trap
;
tst17: inc @#$testn ; update test number
cmp #17, @#$testn ; sequence error?
bne br45 ; br to error halt on seq error
mov #trap,rb1 ; initialize base trap instruction
;
mov #ra1, 34 ; return from trap to ra1
rc1: mov #buff, SP ; set up stack pointer
rb1: trap ; trap inst will be modified to trap+377
br45: $err 75 ;
;
ra1: inc rb1 ; increment trap instruction
cmp #104777, rb1 ; trap+377 to upper limit
bhis rc1 ; have we tested all
mov #36, 34 ;
clr 36 ;
;_____________________________________________________________________________
;
; Test 20 - test that a trap occures on an "iot" instruction
;
tst20: inc @#$testn ; update test number
cmp #20, @#$testn ; sequence error?
bne tst21-12 ; br to error halt on seq error
mov #buff, SP ; stack pointer setup
mov #reta2, rtrap2 ; return location
iot ; reserve instruction, should trap
$err 76 ;
reta2: ;
;_____________________________________________________________________________
;
; Test 21 - test decrement of stack pointer on a trap operation
;
tst21: inc @#$testn ; update test number
cmp #21, @#$testn ; sequence error?
bne tst22-12 ; br to error halt on seq error
mov #buff, SP ; stack pointer setup
mov #retb2, rtrap2 ; return pointer
iot ; reserved instruction
;
retb2: cmp SP, #buff-4 ; test decrement of SP
beq tst22 ;
$err 77 ;
;_____________________________________________________________________________
;
; Test 22 - test that proper PC is saved
;
tst22: inc @#$testn ; update test number
cmp #22, @#$testn ; sequence error?
bne tst23-12 ; br to error halt on seq error
mov #buff, SP ; stack pointer setup
mov #retc2, rtrap2 ; return from trap pointer
iot ; trap on this instruction
retc2: cmp #., buff-4 ; check for incremented PC
beq tst23 ;
$err 100 ;
;_____________________________________________________________________________
;
; Test 23 - test that "old" cc and priority are placed on stack
;
tst23: inc @#$testn ; update test number
cmp #23, @#$testn ; sequence error?
bne tst24-12 ; br to error halt on seq error
mov #buff, SP ; set up
mov #retd2, rtrap2 ; set up
clr cc ; clear cc and priority
ccc ;
iot ; trap
retd2: cmp buff-2,#0 ; test that old status went to stack
beq 1$ ;
$err 101 ;
;
1$: mov #buff, SP ; set up
mov #rete2, rtrap2 ; set up
mov #357, cc ; set priority
scc ; set cc
iot ; trap
rete2: cmp buff-2,#357 ; compares status on stack
beq tst24 ;
$err 102 ;
;_____________________________________________________________________________
;
; Test 24 - test that "new" status is correct
;
tst24: inc @#$testn ; update test number
cmp #24, @#$testn ; sequence error?
bne br46 ; br to error halt on seq error
mov #buff, SP ;
mov #retf2, rtrap2 ;
clr rtrap2+2 ; clear future priority and cc
iot ;
;
retf2: bpl 1$ ; test for "c" cleared
$err 103 ;
1$: bne 2$ ;
$err 104 ;
2$: bvc 3$ ;
$err 105 ;
3$: bcc 4$ ;
$err 106 ;
4$: bit #340, cc ; test priority
beq 5$ ;
$err 107 ;
5$: mov #buff, SP ;
mov #retg2, rtrap2 ;
mov #357, rtrap2+2 ; set new "cc" and priority
iot ; trap here
;
retg2: bmi 1$ ;
$err 110 ;
1$: beq 2$ ;
$err 111 ;
2$: bvs 3$ ;
$err 112 ;
3$: bcs 4$ ;
$err 113 ;
4$: mov cc, SP ;
bic #17, SP ;
cmp #340, SP ;
beq br46a ;
br46: $err 114 ;
;
br46a: mov #22, 20 ; .+2
clr 22 ; halt
;_____________________________________________________________________________
;
; Test 25 - test that a trap occurs on an emt instruction
;
tst25: inc @#$testn ; update test number
cmp #25, @#$testn ; sequence error?
bne tst26-12 ; br to error halt on seq error
mov #buff, SP ; stack pointer setup
mov #reta3, rtrap3 ; return location
emt ; reserve instruction, should trap
$err 115 ;
reta3: ;
;_____________________________________________________________________________
;
; Test 26 - test decrement of stack pointer on a trap operation
;
tst26: inc @#$testn ; update test number
cmp #26, @#$testn ; sequence error?
bne tst27-12 ; br to error halt on seq error
mov #buff, SP ; stack pointer setup
mov #retb3, rtrap3 ; return pointer
emt ; reserved instruction
retb3: cmp SP, #buff-4 ; test decrement of SP
beq tst27 ;
$err 116 ;
;_____________________________________________________________________________
;
; Test 27 - test that proper PC is saved
;
tst27: inc @#$testn ; update test number
cmp #27, @#$testn ; sequence error?
bne tst30-12 ; br to error halt on seq error
mov #buff, SP ; stack pointer setup
mov #retc3, rtrap3 ; return from trap pointer
emt ; trap on this instriction
retc3: cmp #., buff-4 ; check for incremented PC
beq tst30 ;
$err 117 ;
;_____________________________________________________________________________
;
; Test 30 - test that "old" cc and priority are placed on stack
;
tst30: inc @#$testn ; update test number
cmp #30, @#$testn ; sequence error?
bne tst31-12 ; br to error halt on seq error
mov #buff, SP ; set up
mov #retd3, rtrap3 ; set up
clr cc ; clear cc and priority
ccc ;
emt ; trap
retd3: cmp buff-2, #0 ; test that old status went to stack
beq 1$ ;
$err 120 ;
;
1$: mov #buff, SP ; set up
mov #rete3, rtrap3 ; set up
mov #357, cc ; set priority
scc ; set cc
emt ; trap
rete3: cmp buff-2, #357 ; compares status on stack
beq tst31 ;
$err 121 ;
;_____________________________________________________________________________
;
; Test 31 - test that "new" status is correct
;
tst31: inc @#$testn ; update test number
cmp #31, @#$testn ; sequence error?
bne tst32-12 ; br to error halt on seq error
mov #buff, SP ;
mov #retf3, rtrap3 ;
clr rtrap3+2 ; clear future priority and cc
emt ;
;
retf3: bpl 1$ ; test for "c" cleared
$err 122 ;
1$: bne 2$ ;
$err 123 ;
2$: bvc 3$ ;
$err 124 ;
3$: bcc 4$ ;
$err 125 ;
4$: bit #340, cc ; test priority
beq 5$ ;
$err 126 ;
5$: mov #buff, SP ;
mov #retg3, rtrap3 ;
mov #357, rtrap3+2 ; set new "cc" and priority
emt ; trap hfre
retg3: bmi 1$ ;
$err 127 ;
1$: beq 2$ ;
$err 130 ;
2$: bvs 3$ ;
$err 131 ;
3$: bcs 4$ ;
$err 132 ;
4$: ccc ;
cmp #340, cc ;
beq tst32 ;
$err 133 ;
;_____________________________________________________________________________
;
; Test 32 - test that all combination of emt will cause a trap
;
tst32: inc @#$testn ; update test number
cmp #32, @#$testn ; sequence error?
bne br47 ; br to error halt on seq error
mov #emt, rb ; initialize base emt instruction
mov #ra, 30 ; return from trap to ra
rc: mov #buff, SP ; set up stack pointer
rb: emt ; trap inst. will be modified to emt+377
br47: $err 134 ;
;
ra: inc rb ; increment trap instruction
cmp #104377, rb ; emt+377 to emt?
bhis rc ; have we tested all?
mov #32, 30 ; /.+
clr 32 ; halt