~ubuntu-branches/ubuntu/raring/simh/raring

« back to all changes in this revision

Viewing changes to PDP11/pdp11_rk.c

  • Committer: Bazaar Package Importer
  • Author(s): Vince Mulhollon
  • Date: 2007-04-13 20:16:15 UTC
  • mfrom: (1.1.7 upstream) (2.1.3 lenny)
  • Revision ID: james.westby@ubuntu.com-20070413201615-jiar46bgkrs0dw2h
Tags: 3.7.0-1
* New upstream released 03-Feb-2007
* i7094 added which emulates the IBM 7090/7094
* Upstream has converted almost entirely to pdf format for docs
* All manpages updated
* All docs are registered with the doc-base system

Show diffs side-by-side

added added

removed removed

Lines of Context:
75
75
#define RK_NUMTR        (RK_NUMCY * RK_NUMSF)           /* tracks/drive */
76
76
#define RK_NUMDR        8                               /* drives/controller */
77
77
#define RK_M_NUMDR      07
78
 
#define RK_SIZE (RK_NUMCY * RK_NUMSF * RK_NUMSC * RK_NUMWD)  /* words/drive */
 
78
#define RK_SIZE         (RK_NUMCY * RK_NUMSF * RK_NUMSC * RK_NUMWD)
 
79
                                                        /* words/drive */
79
80
#define RK_CTLI         1                               /* controller int */
80
81
#define RK_SCPI(x)      (2u << (x))                     /* drive int */
81
82
#define RK_MAXFR        (1 << 16)                       /* max transfer */
172
173
 
173
174
#define RKBA_IMP        0177776                         /* implemented */
174
175
 
175
 
#define RK_MIN 10
176
 
#define MAX(x,y) (((x) > (y))? (x): (y))
 
176
#define RK_MIN          10
 
177
#define MAX(x,y)        (((x) > (y))? (x): (y))
177
178
 
178
179
extern uint16 *M;                                       /* memory */
179
180
extern int32 int_req[IPL_HLVL];
297
298
        rkds = (rkds & RKDS_ID) | RKDS_RK05 | RKDS_SC_OK |
298
299
            (rand () % RK_NUMSC);                       /* random sector */
299
300
        uptr = rk_dev.units + GET_DRIVE (rkda);         /* selected unit */
300
 
        if (uptr->flags & UNIT_ATT) rkds = rkds | RKDS_RDY;     /* attached? */
301
 
        if (!sim_is_active (uptr)) rkds = rkds | RKDS_RWS;      /* idle? */
 
301
        if (uptr->flags & UNIT_ATT)                     /* attached? */
 
302
            rkds = rkds | RKDS_RDY;
 
303
        if (!sim_is_active (uptr))                      /* idle? */
 
304
            rkds = rkds | RKDS_RWS;
302
305
        if (uptr->flags & UNIT_WPRT) rkds = rkds | RKDS_WLK;
303
306
        if (GET_SECT (rkda) == (rkds & RKDS_SC)) rkds = rkds | RKDS_ON_SC;
304
307
        *data = rkds;
356
359
            SET_INT (RK);                               /* set int request */
357
360
            }
358
361
        rkcs = (rkcs & ~RKCS_RW) | (data & RKCS_RW);
359
 
        if ((rkcs & CSR_DONE) && (data & CSR_GO)) rk_go (); /* new function? */
 
362
        if ((rkcs & CSR_DONE) && (data & CSR_GO))       /* new function? */
 
363
            rk_go ();
360
364
        return SCPE_OK;
361
365
 
362
366
    case 3:                                             /* RKWC */
410
414
    rk_set_done (RKER_NXD);
411
415
    return;
412
416
    }
413
 
if (((uptr->flags & UNIT_ATT) == 0) || sim_is_active (uptr)) {
414
 
    rk_set_done (RKER_DRE);                             /* not att or busy */
 
417
if (((uptr->flags & UNIT_ATT) == 0) ||                  /* not att or busy? */
 
418
    sim_is_active (uptr)) {
 
419
    rk_set_done (RKER_DRE);
415
420
    return;
416
421
    }
417
422
if ((rkcs & RKCS_FMT) &&                                /* format and */
419
424
        rk_set_done (RKER_PGE);
420
425
        return;
421
426
        }
422
 
if ((func == RKCS_WRITE) && (uptr->flags & UNIT_WPRT)) {
423
 
    rk_set_done (RKER_WLK);                             /* write and locked? */
 
427
if ((func == RKCS_WRITE) &&                             /* write and locked? */
 
428
    (uptr->flags & UNIT_WPRT)) {
 
429
    rk_set_done (RKER_WLK);
424
430
    return;
425
431
    }
426
432
if (func == RKCS_WLK) {                                 /* write lock? */
530
536
            for ( ; i < wc; i++) rkxb[i] = 0;           /* fill buf */
531
537
            }
532
538
        if (rkcs & RKCS_INH) {                          /* incr inhibit? */
533
 
            if (t = Map_WriteW (ma, 2, &rkxb[wc - 1])) {        /* store last */
 
539
            if (t = Map_WriteW (ma, 2, &rkxb[wc - 1])) { /* store last */
534
540
                rker = rker | RKER_NXM;                 /* NXM? set flag */
535
541
                wc = 0;                                 /* no transfer */
536
542
                }
558
564
                }
559
565
            }
560
566
        if (wc) {                                       /* any xfer? */
561
 
            awc = (wc + (RK_NUMWD - 1)) & ~(RK_NUMWD - 1);      /* clr to */
 
567
            awc = (wc + (RK_NUMWD - 1)) & ~(RK_NUMWD - 1); /* clr to */
562
568
            for (i = wc; i < awc; i++) rkxb[i] = 0;     /* end of blk */
563
569
            fxwrite (rkxb, sizeof (int16), awc, uptr->fileref);
564
570
            err = ferror (uptr->fileref);