1
0
mirror of https://github.com/simh/simh.git synced 2026-04-26 03:57:11 +00:00

imds-224, isys80xx: Rework attach routines to leverage SCP provided functionality

This commit is contained in:
Bill Beech
2017-04-27 11:20:12 -07:00
parent 0586d34f16
commit 357910dfb9
21 changed files with 412 additions and 2392 deletions

View File

@@ -40,6 +40,8 @@
#include "system_defs.h"
#define DEBUG 0
/* function prototypes */
t_stat EPROM_attach (UNIT *uptr, CONST char *cptr);
@@ -48,13 +50,13 @@ uint8 EPROM_get_mbyte(uint16 addr);
/* external function prototypes */
extern uint8 i8255_C[4]; //port c byte I/O
//extern uint8 i8255_C[4]; //port c byte I/O
extern uint8 xack; /* XACK signal */
/* SIMH EPROM Standard I/O Data Structures */
UNIT EPROM_unit = {
UDATA (NULL, UNIT_ATTABLE+UNIT_BINK+UNIT_ROABLE+UNIT_RO, 0), 0
UDATA (NULL, UNIT_ATTABLE+UNIT_BINK+UNIT_ROABLE+UNIT_RO+UNIT_BUFABLE+UNIT_MUSTBUF, 0), 0
};
DEBTAB EPROM_debug[] = {
@@ -88,8 +90,7 @@ DEVICE EPROM_dev = {
NULL, //detach
NULL, //ctxt
DEV_DEBUG, //flags
DEBUG_flow + DEBUG_read + DEBUG_write, //dctrl
// 0, //dctrl
0, //dctrl
EPROM_debug, //debflags
NULL, //msize
NULL //lname
@@ -99,54 +100,6 @@ DEVICE EPROM_dev = {
/* EPROM functions */
/* EPROM attach */
t_stat EPROM_attach (UNIT *uptr, CONST char *cptr)
{
uint16 j;
int c;
FILE *fp;
t_stat r;
sim_debug (DEBUG_flow, &EPROM_dev, "EPROM_attach: cptr=%s\n", cptr);
if ((r = attach_unit (uptr, cptr)) != SCPE_OK) {
sim_debug (DEBUG_flow, &EPROM_dev, "EPROM_attach: Error\n");
return r;
}
sim_debug (DEBUG_read, &EPROM_dev, "\tAllocate buffer\n");
if (EPROM_unit.filebuf == NULL) { /* no buffer allocated */
EPROM_unit.filebuf = malloc(EPROM_unit.capac); /* allocate EPROM buffer */
if (EPROM_unit.filebuf == NULL) {
sim_debug (DEBUG_flow, &EPROM_dev, "EPROM_attach: Malloc error\n");
return SCPE_MEM;
}
}
sim_debug (DEBUG_read, &EPROM_dev, "\tOpen file %s\n", EPROM_unit.filename);
fp = fopen(EPROM_unit.filename, "rb"); /* open EPROM file */
if (fp == NULL) {
sim_printf("EPROM: Unable to open ROM file %s\n", EPROM_unit.filename);
sim_printf("\tNo ROM image loaded!!!\n");
return SCPE_OK;
}
sim_debug (DEBUG_read, &EPROM_dev, "\tRead file\n");
j = 0; /* load EPROM file */
c = fgetc(fp);
while (c != EOF) {
*((uint8 *)EPROM_unit.filebuf + j++) = c & 0xFF;
c = fgetc(fp);
if (j >= EPROM_unit.capac) {
sim_printf("\tImage is too large - Load truncated!!!\n");
break;
}
}
sim_debug (DEBUG_read, &EPROM_dev, "\tClose file\n");
fclose(fp);
sim_printf(" EPROM: Configured %d bytes, Attached to %s\n",
EPROM_unit.capac, EPROM_unit.filename);
sim_debug (DEBUG_flow, &EPROM_dev, "EPROM_attach: Done\n");
return SCPE_OK;
}
/* EPROM reset */
t_stat EPROM_reset (DEVICE *dptr, uint16 size)
@@ -164,6 +117,24 @@ t_stat EPROM_reset (DEVICE *dptr, uint16 size)
return SCPE_OK;
}
/* EPROM attach */
t_stat EPROM_attach (UNIT *uptr, CONST char *cptr)
{
t_stat r;
sim_debug (DEBUG_flow, &EPROM_dev, "EPROM_attach: cptr=%s\n", cptr);
if ((r = attach_unit (uptr, cptr)) != SCPE_OK) {
sim_debug (DEBUG_flow, &EPROM_dev, "EPROM_attach: Error\n");
return r;
}
sim_debug (DEBUG_read, &EPROM_dev, "\tClose file\n");
sim_printf(" EPROM: Configured %d bytes, Attached to %s\n",
EPROM_unit.capac, EPROM_unit.filename);
sim_debug (DEBUG_flow, &EPROM_dev, "EPROM_attach: Done\n");
return SCPE_OK;
}
/* get a byte from memory */
uint8 EPROM_get_mbyte(uint16 addr)