mirror of
https://github.com/rcornwell/sims.git
synced 2026-03-27 10:20:52 +00:00
KA10: Support for new interface to sim_card.
This commit is contained in:
@@ -112,7 +112,7 @@ DEVICE cp_dev = {
|
||||
|
||||
t_stat cp_devio(uint32 dev, uint64 *data) {
|
||||
UNIT *uptr = &cp_unit;
|
||||
struct _card_data *dp;
|
||||
uint16 *image = (uint16 *)(uptr->up7);
|
||||
|
||||
switch(dev & 3) {
|
||||
case CONI:
|
||||
@@ -162,8 +162,7 @@ t_stat cp_devio(uint32 dev, uint64 *data) {
|
||||
*data = 0;
|
||||
break;
|
||||
case DATAO:
|
||||
dp = (struct _card_data *)uptr->up7;
|
||||
dp->image[uptr->u4++] = *data & 0xfff;
|
||||
image[uptr->u4++] = *data & 0xfff;
|
||||
uptr->u3 &= ~DATA_REQ;
|
||||
clr_interrupt(dev);
|
||||
sim_debug(DEBUG_DATAIO, &cp_dev, "CP: DATAO %012llo %d\n", *data,
|
||||
@@ -179,6 +178,8 @@ t_stat
|
||||
cp_srv(UNIT *uptr) {
|
||||
|
||||
if (uptr->u3 & PUNCH_ON) {
|
||||
uint16 *image = (uint16 *)(uptr->up7);
|
||||
|
||||
uptr->u3 |= CARD_IN_PUNCH;
|
||||
if (uptr->u3 & DATA_REQ) {
|
||||
sim_activate(uptr, uptr->wait);
|
||||
@@ -195,7 +196,7 @@ cp_srv(UNIT *uptr) {
|
||||
uptr->u4 = 0;
|
||||
uptr->u3 &= ~(PUNCH_ON|CARD_IN_PUNCH);
|
||||
uptr->u3 |= END_CARD;
|
||||
switch(sim_punch_card(uptr, NULL)) {
|
||||
switch(sim_punch_card(uptr, NULL, image)) {
|
||||
case SCPE_EOF:
|
||||
case SCPE_UNATT:
|
||||
uptr->u3 |= PICK_FAIL|TROUBLE;
|
||||
@@ -224,16 +225,24 @@ cp_attach(UNIT * uptr, CONST char *file)
|
||||
|
||||
if ((r = sim_card_attach(uptr, file)) != SCPE_OK)
|
||||
return r;
|
||||
uptr->u3 = 0;
|
||||
uptr->u4 = 0;
|
||||
if (uptr->up7 == 0) {
|
||||
uptr->up7 = calloc(80, sizeof(uint16));
|
||||
uptr->u3 = 0;
|
||||
uptr->u4 = 0;
|
||||
}
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
t_stat
|
||||
cp_detach(UNIT * uptr)
|
||||
{
|
||||
uint16 *image = (uint16 *)(uptr->up7);
|
||||
|
||||
if (uptr->u3 & CARD_IN_PUNCH)
|
||||
sim_punch_card(uptr, NULL);
|
||||
sim_punch_card(uptr, NULL, image);
|
||||
if (uptr->up7 != 0)
|
||||
free(uptr->up7);
|
||||
uptr->up7 = 0;
|
||||
return sim_card_detach(uptr);
|
||||
}
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ MTAB cr_mod[] = {
|
||||
DEVICE cr_dev = {
|
||||
"CR", &cr_unit, NULL, cr_mod,
|
||||
NUM_DEVS_CR, 8, 15, 1, 8, 8,
|
||||
NULL, NULL, NULL, NULL, &cr_attach, &sim_card_detach,
|
||||
NULL, NULL, NULL, NULL, &cr_attach, &cr_detach,
|
||||
&cr_dib, DEV_DISABLE | DEV_DEBUG, 0, crd_debug,
|
||||
NULL, NULL, &cr_help, NULL, NULL, &cr_description
|
||||
};
|
||||
@@ -170,13 +170,11 @@ t_stat cr_devio(uint32 dev, uint64 *data) {
|
||||
/* Handle transfer of data for card reader */
|
||||
t_stat
|
||||
cr_srv(UNIT *uptr) {
|
||||
struct _card_data *data;
|
||||
|
||||
data = (struct _card_data *)uptr->up7;
|
||||
uint16 *image = (uint16 *)(uptr->up7);
|
||||
|
||||
/* Check if new card requested. */
|
||||
if ((uptr->u3 & (READING|CARD_IN_READ)) == READING) {
|
||||
switch(sim_read_card(uptr)) {
|
||||
switch(sim_read_card(uptr, image)) {
|
||||
case SCPE_EOF:
|
||||
uptr->u3 |= END_FILE;
|
||||
if (uptr->u3 & TROUBLE_EN)
|
||||
@@ -207,7 +205,7 @@ cr_srv(UNIT *uptr) {
|
||||
sim_activate(uptr, uptr->wait);
|
||||
return SCPE_OK;
|
||||
}
|
||||
uptr->u5 = data->image[uptr->u4++];
|
||||
uptr->u5 = image[uptr->u4++];
|
||||
if (uptr->u3 & DATA_RDY) {
|
||||
uptr->u3 |= DATA_MISS;
|
||||
}
|
||||
@@ -226,10 +224,22 @@ cr_attach(UNIT * uptr, CONST char *file)
|
||||
|
||||
if ((r = sim_card_attach(uptr, file)) != SCPE_OK)
|
||||
return r;
|
||||
uptr->u3 |= RDY_READ;
|
||||
if (uptr->up7 == 0) {
|
||||
uptr->up7 = malloc(sizeof(uint16)*80);
|
||||
uptr->u3 |= RDY_READ;
|
||||
}
|
||||
return SCPE_OK;
|
||||
}
|
||||
|
||||
t_stat
|
||||
cr_detach(UNIT * uptr)
|
||||
{
|
||||
if (uptr->up7 != 0)
|
||||
free(uptr->up7);
|
||||
uptr->up7 = 0;
|
||||
return sim_card_detach(uptr);
|
||||
}
|
||||
|
||||
t_stat
|
||||
cr_help(FILE *st, DEVICE *dptr, UNIT *uptr, int32 flag, const char *cptr)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user