X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ijackson/git?a=blobdiff_plain;f=hostside%2Fstartup.c;h=f6a318ce030eac1a77b4b8600a12bf037e6b32a0;hb=45e93e31a0ede2462dfe6b04b2ebd86d80c3b254;hp=2e9ed335067b290c5cd6b13de13f3530d428e11b;hpb=7377f129bada98de87f06de15044ceb85e7a5d44;p=trains.git diff --git a/hostside/startup.c b/hostside/startup.c index 2e9ed33..f6a318c 100644 --- a/hostside/startup.c +++ b/hostside/startup.c @@ -207,10 +207,23 @@ void on_pic_spurious(const PicInsnInfo *pii, const PicInsn *pi, int objnum) { " detection interrupts\"", objnum); } -void on_pic_detect1(const PicInsnInfo *pii, const PicInsn *pi, int segn) { - Segment *seg; - if (segn >= NUM_SEGMENTS) die("PIC sent detect @#%#x out of range",segn); +static SegmentNum on_pic_detect_prep(int detyn, int objnum) { + SegmentNum segn; + + if (objnum >= info_segmentmaplen || + (segn= info_segmentmap[objnum]) < 0) + die("PIC sent detect%d @#%#x not in map",detyn,objnum); + oprintf(UPO,"picio in detect%d %s\n",detyn,info_segments[segn].pname); + + return segn; +} + +void on_pic_detect1(const PicInsnInfo *pii, const PicInsn *pi, int objnum) { + SegmentNum segn; + Segment *seg; + + segn= on_pic_detect_prep(1,objnum); seg= &segments[segn]; switch (sta_state) { @@ -239,6 +252,7 @@ void on_pic_nmradone(const PicInsnInfo *pii, const PicInsn *pi, int objnum) { } void on_pic_detect0(const PicInsnInfo *pii, const PicInsn *pi, int objnum) { + on_pic_detect_prep(0,objnum); } void choreographers_all_abandon(void) { }