I7094: Reorganize BUF REGisters to avoid dynamic buffer allocation
This allows building with dynamic runtime register definition checking
This commit is contained in:
parent
b8bf4de34d
commit
93aa0de425
1 changed files with 9 additions and 18 deletions
|
@ -41,7 +41,7 @@
|
||||||
#define QCHRONO(c,u) ((cpu_model & I_CT) && \
|
#define QCHRONO(c,u) ((cpu_model & I_CT) && \
|
||||||
((c) == CHRONO_CH) && ((u) == CHRONO_UNIT))
|
((c) == CHRONO_CH) && ((u) == CHRONO_UNIT))
|
||||||
|
|
||||||
uint8 *mtxb[NUM_CHAN] = { NULL }; /* xfer buffer */
|
uint8 mtxb[NUM_CHAN][MT_MAXFR + 6]; /* xfer buffer */
|
||||||
uint32 mt_unit[NUM_CHAN]; /* unit */
|
uint32 mt_unit[NUM_CHAN]; /* unit */
|
||||||
uint32 mt_bptr[NUM_CHAN];
|
uint32 mt_bptr[NUM_CHAN];
|
||||||
uint32 mt_blnt[NUM_CHAN];
|
uint32 mt_blnt[NUM_CHAN];
|
||||||
|
@ -125,7 +125,7 @@ REG mta_reg[] = {
|
||||||
{ FLDATA (CHOBV, mt_chob_v[0], 0) },
|
{ FLDATA (CHOBV, mt_chob_v[0], 0) },
|
||||||
{ DRDATA (BPTR, mt_bptr[0], 16), PV_LEFT },
|
{ DRDATA (BPTR, mt_bptr[0], 16), PV_LEFT },
|
||||||
{ DRDATA (BLNT, mt_blnt[0], 16), PV_LEFT },
|
{ DRDATA (BLNT, mt_blnt[0], 16), PV_LEFT },
|
||||||
{ BRDATA (BUF, NULL, 8, 7, MT_MAXFR) },
|
{ BRDATA (BUF, mtxb[0], 8, 7, MT_MAXFR) },
|
||||||
{ DRDATA (TWEF, mt_twef, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TWEF, mt_twef, 24), REG_NZ + PV_LEFT },
|
||||||
{ DRDATA (TSHORT, mt_tshort, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TSHORT, mt_tshort, 24), REG_NZ + PV_LEFT },
|
||||||
{ DRDATA (TSTART, mt_tstart, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TSTART, mt_tstart, 24), REG_NZ + PV_LEFT },
|
||||||
|
@ -157,7 +157,7 @@ REG mtb_reg[] = {
|
||||||
{ FLDATA (CHOBV, mt_chob_v[1], 0) },
|
{ FLDATA (CHOBV, mt_chob_v[1], 0) },
|
||||||
{ DRDATA (BPTR, mt_bptr[1], 16), PV_LEFT },
|
{ DRDATA (BPTR, mt_bptr[1], 16), PV_LEFT },
|
||||||
{ DRDATA (BLNT, mt_blnt[1], 16), PV_LEFT },
|
{ DRDATA (BLNT, mt_blnt[1], 16), PV_LEFT },
|
||||||
{ BRDATA (BUF, NULL, 8, 7, MT_MAXFR) },
|
{ BRDATA (BUF, mtxb[1], 8, 7, MT_MAXFR) },
|
||||||
{ DRDATA (TWEF, mt_twef, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TWEF, mt_twef, 24), REG_NZ + PV_LEFT },
|
||||||
{ DRDATA (TSHORT, mt_tshort, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TSHORT, mt_tshort, 24), REG_NZ + PV_LEFT },
|
||||||
{ DRDATA (TSTART, mt_tstart, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TSTART, mt_tstart, 24), REG_NZ + PV_LEFT },
|
||||||
|
@ -189,7 +189,7 @@ REG mtc_reg[] = {
|
||||||
{ FLDATA (CHOBV, mt_chob_v[2], 0) },
|
{ FLDATA (CHOBV, mt_chob_v[2], 0) },
|
||||||
{ DRDATA (BPTR, mt_bptr[2], 16), PV_LEFT },
|
{ DRDATA (BPTR, mt_bptr[2], 16), PV_LEFT },
|
||||||
{ DRDATA (BLNT, mt_blnt[2], 16), PV_LEFT },
|
{ DRDATA (BLNT, mt_blnt[2], 16), PV_LEFT },
|
||||||
{ BRDATA (BUF, NULL, 8, 7, MT_MAXFR) },
|
{ BRDATA (BUF, mtxb[2], 8, 7, MT_MAXFR) },
|
||||||
{ DRDATA (TWEF, mt_twef, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TWEF, mt_twef, 24), REG_NZ + PV_LEFT },
|
||||||
{ DRDATA (TSHORT, mt_tshort, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TSHORT, mt_tshort, 24), REG_NZ + PV_LEFT },
|
||||||
{ DRDATA (TSTART, mt_tstart, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TSTART, mt_tstart, 24), REG_NZ + PV_LEFT },
|
||||||
|
@ -221,7 +221,7 @@ REG mtd_reg[] = {
|
||||||
{ FLDATA (CHOBV, mt_chob_v[3], 0) },
|
{ FLDATA (CHOBV, mt_chob_v[3], 0) },
|
||||||
{ DRDATA (BPTR, mt_bptr[3], 16), PV_LEFT },
|
{ DRDATA (BPTR, mt_bptr[3], 16), PV_LEFT },
|
||||||
{ DRDATA (BLNT, mt_blnt[3], 16), PV_LEFT },
|
{ DRDATA (BLNT, mt_blnt[3], 16), PV_LEFT },
|
||||||
{ BRDATA (BUF, NULL, 8, 7, MT_MAXFR) },
|
{ BRDATA (BUF, mtxb[3], 8, 7, MT_MAXFR) },
|
||||||
{ DRDATA (TWEF, mt_twef, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TWEF, mt_twef, 24), REG_NZ + PV_LEFT },
|
||||||
{ DRDATA (TSHORT, mt_tshort, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TSHORT, mt_tshort, 24), REG_NZ + PV_LEFT },
|
||||||
{ DRDATA (TSTART, mt_tstart, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TSTART, mt_tstart, 24), REG_NZ + PV_LEFT },
|
||||||
|
@ -253,7 +253,7 @@ REG mte_reg[] = {
|
||||||
{ FLDATA (CHOBV, mt_chob_v[4], 0) },
|
{ FLDATA (CHOBV, mt_chob_v[4], 0) },
|
||||||
{ DRDATA (BPTR, mt_bptr[4], 16), PV_LEFT },
|
{ DRDATA (BPTR, mt_bptr[4], 16), PV_LEFT },
|
||||||
{ DRDATA (BLNT, mt_blnt[4], 16), PV_LEFT },
|
{ DRDATA (BLNT, mt_blnt[4], 16), PV_LEFT },
|
||||||
{ BRDATA (BUF, NULL, 8, 7, MT_MAXFR) },
|
{ BRDATA (BUF, mtxb[4], 8, 7, MT_MAXFR) },
|
||||||
{ DRDATA (TWEF, mt_twef, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TWEF, mt_twef, 24), REG_NZ + PV_LEFT },
|
||||||
{ DRDATA (TSHORT, mt_tshort, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TSHORT, mt_tshort, 24), REG_NZ + PV_LEFT },
|
||||||
{ DRDATA (TSTART, mt_tstart, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TSTART, mt_tstart, 24), REG_NZ + PV_LEFT },
|
||||||
|
@ -285,7 +285,7 @@ REG mtf_reg[] = {
|
||||||
{ FLDATA (CHOBV, mt_chob_v[5], 0) },
|
{ FLDATA (CHOBV, mt_chob_v[5], 0) },
|
||||||
{ DRDATA (BPTR, mt_bptr[5], 16), PV_LEFT },
|
{ DRDATA (BPTR, mt_bptr[5], 16), PV_LEFT },
|
||||||
{ DRDATA (BLNT, mt_blnt[5], 16), PV_LEFT },
|
{ DRDATA (BLNT, mt_blnt[5], 16), PV_LEFT },
|
||||||
{ BRDATA (BUF, NULL, 8, 7, MT_MAXFR) },
|
{ BRDATA (BUF, mtxb[5], 8, 7, MT_MAXFR) },
|
||||||
{ DRDATA (TWEF, mt_twef, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TWEF, mt_twef, 24), REG_NZ + PV_LEFT },
|
||||||
{ DRDATA (TSHORT, mt_tshort, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TSHORT, mt_tshort, 24), REG_NZ + PV_LEFT },
|
||||||
{ DRDATA (TSTART, mt_tstart, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TSTART, mt_tstart, 24), REG_NZ + PV_LEFT },
|
||||||
|
@ -317,7 +317,7 @@ REG mtg_reg[] = {
|
||||||
{ FLDATA (CHOBV, mt_chob_v[6], 0) },
|
{ FLDATA (CHOBV, mt_chob_v[6], 0) },
|
||||||
{ DRDATA (BPTR, mt_bptr[6], 16), PV_LEFT },
|
{ DRDATA (BPTR, mt_bptr[6], 16), PV_LEFT },
|
||||||
{ DRDATA (BLNT, mt_blnt[6], 16), PV_LEFT },
|
{ DRDATA (BLNT, mt_blnt[6], 16), PV_LEFT },
|
||||||
{ BRDATA (BUF, NULL, 8, 7, MT_MAXFR) },
|
{ BRDATA (BUF, mtxb[6], 8, 7, MT_MAXFR) },
|
||||||
{ DRDATA (TWEF, mt_twef, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TWEF, mt_twef, 24), REG_NZ + PV_LEFT },
|
||||||
{ DRDATA (TSHORT, mt_tshort, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TSHORT, mt_tshort, 24), REG_NZ + PV_LEFT },
|
||||||
{ DRDATA (TSTART, mt_tstart, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TSTART, mt_tstart, 24), REG_NZ + PV_LEFT },
|
||||||
|
@ -349,7 +349,7 @@ REG mth_reg[] = {
|
||||||
{ FLDATA (CHOBV, mt_chob_v[7], 0) },
|
{ FLDATA (CHOBV, mt_chob_v[7], 0) },
|
||||||
{ DRDATA (BPTR, mt_bptr[7], 16), PV_LEFT },
|
{ DRDATA (BPTR, mt_bptr[7], 16), PV_LEFT },
|
||||||
{ DRDATA (BLNT, mt_blnt[7], 16), PV_LEFT },
|
{ DRDATA (BLNT, mt_blnt[7], 16), PV_LEFT },
|
||||||
{ BRDATA (BUF, NULL, 8, 7, MT_MAXFR) },
|
{ BRDATA (BUF, mtxb[7], 8, 7, MT_MAXFR) },
|
||||||
{ DRDATA (TWEF, mt_twef, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TWEF, mt_twef, 24), REG_NZ + PV_LEFT },
|
||||||
{ DRDATA (TSHORT, mt_tshort, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TSHORT, mt_tshort, 24), REG_NZ + PV_LEFT },
|
||||||
{ DRDATA (TSTART, mt_tstart, 24), REG_NZ + PV_LEFT },
|
{ DRDATA (TSTART, mt_tstart, 24), REG_NZ + PV_LEFT },
|
||||||
|
@ -806,17 +806,8 @@ t_stat mt_reset (DEVICE *dptr)
|
||||||
{
|
{
|
||||||
uint32 ch = dptr - &mt_dev[0];
|
uint32 ch = dptr - &mt_dev[0];
|
||||||
uint32 j;
|
uint32 j;
|
||||||
REG *rptr;
|
|
||||||
UNIT *uptr;
|
UNIT *uptr;
|
||||||
|
|
||||||
if (mtxb[ch] == NULL)
|
|
||||||
mtxb[ch] = (uint8 *) calloc (MT_MAXFR + 6, sizeof (uint8));
|
|
||||||
if (mtxb[ch] == NULL) /* allocate buffer */
|
|
||||||
return SCPE_MEM;
|
|
||||||
rptr = find_reg ("BUF", NULL, dptr); /* update reg ptr */
|
|
||||||
if (rptr == NULL)
|
|
||||||
return SCPE_IERR;
|
|
||||||
rptr->loc = (void *) mtxb[ch];
|
|
||||||
mt_unit[ch] = 0; /* clear busy */
|
mt_unit[ch] = 0; /* clear busy */
|
||||||
mt_bptr[ch] = 0; /* clear buf ptrs */
|
mt_bptr[ch] = 0; /* clear buf ptrs */
|
||||||
mt_blnt[ch] = 0;
|
mt_blnt[ch] = 0;
|
||||||
|
|
Loading…
Add table
Reference in a new issue