@@ -112,6 +112,7 @@ int32 mt_rwtime = 10000; /* rewind latency */
112
112
int32 mt_ctime = 100 ; /* command latency */
113
113
int32 mt_time = 10 ; /* record latency */
114
114
uint32 mt_rwi = 0 ; /* rewind interrupts */
115
+ uint32 mt_atn = 0 ; /* attention interrupt */
115
116
t_mtrlnt mt_bptr ;
116
117
t_mtrlnt mt_blim ;
117
118
uint8 mt_xb [MT_MAXFR ]; /* transfer buffer */
@@ -152,6 +153,8 @@ t_stat mt_map_err (UNIT *uptr, t_stat r);
152
153
int32 mt_clr_int (uint32 dva );
153
154
void mt_set_rwi (uint32 un );
154
155
void mt_clr_rwi (uint32 un );
156
+ void mt_set_atn (uint32 un );
157
+ void mt_clr_atn (uint32 un );
155
158
156
159
/* MT data structures
157
160
@@ -631,6 +634,10 @@ for (iu = 0; iu < MT_NUMDR; iu++) { /* rewind int? */
631
634
mt_clr_rwi ((uint32 ) iu );
632
635
return (iu | MTAI_INT );
633
636
}
637
+ if (mt_atn & (1u << iu )) {
638
+ mt_clr_atn ((uint32 ) iu );
639
+ return (iu | MTAI_INT );
640
+ }
634
641
}
635
642
return 0 ;
636
643
}
@@ -644,6 +651,15 @@ chan_set_dvi (mt_dib.dva); /* set INP */
644
651
return ;
645
652
}
646
653
654
+ /* Set ATN interrupt */
655
+
656
+ void mt_set_atn (uint32 un )
657
+ {
658
+ mt_atn |= (1u << un );
659
+ chan_set_dvi (mt_dib .dva ); /* set INP */
660
+ return ;
661
+ }
662
+
647
663
/* Clear rewind interrupt */
648
664
649
665
void mt_clr_rwi (uint32 un )
@@ -656,6 +672,16 @@ else if (chan_chk_chi (mt_dib.dva) < 0) /* any int? */
656
672
return ;
657
673
}
658
674
675
+ void mt_clr_atn (uint32 un )
676
+ {
677
+ mt_atn &= ~(1u << un );
678
+ if (mt_atn != 0 ) /* more? */
679
+ chan_set_dvi (mt_dib .dva );
680
+ else if (chan_chk_chi (mt_dib .dva ) < 0 ) /* any int? */
681
+ chan_clr_chi (mt_dib .dva ); /* clr INP */
682
+ return ;
683
+ }
684
+
659
685
/* Reset routine */
660
686
661
687
t_stat mt_reset (DEVICE * dptr )
@@ -684,11 +710,14 @@ return SCPE_OK;
684
710
t_stat mt_attach (UNIT * uptr , CONST char * cptr )
685
711
{
686
712
t_stat r ;
713
+ uint32 un = uptr - mt_unit ;
687
714
688
715
r = sim_tape_attach (uptr , cptr );
689
716
if (r != SCPE_OK )
690
717
return r ;
691
718
uptr -> UST = MTDV_BOT ;
719
+ if (sim_switches & SWMASK ('A' ))
720
+ mt_set_atn (un );
692
721
return r ;
693
722
}
694
723
0 commit comments