Пример #1
0
t_stat my_load (FILE *fileref, char *cptr, char *fnam)
{
	char line[150], *c;
	int iaddr = -1, runaddr = -1, val, nwords;

	while (fgets(line, sizeof(line), fileref) != NULL) {
		for (c = line; *c && *c <= ' '; c++)			/* find first nonblank */
			;

		if (*c == '\0' || *c == '#' || *c == '/' || *c == ';')
			continue;									/* empty line or comment */

		if (*c == '@') {								/* set load address */
			if (sscanf(c+1, "%x", &iaddr) != 1)
				return SCPE_FMT;
		}
		else if (*c == '=') {
			if (sscanf(c+1, "%x", &runaddr) != 1)
				return SCPE_FMT;
		}
		else if (*c == 's' || *c == 'S') {
			if (sscanf(c+1, "%x", &val) != 1)
				return SCPE_FMT;

			CES = val & 0xFFFF;							/*preload console entry switches */
		}
		else if (*c == 'z' || *c == 'Z') {
			if (sscanf(c+1, "%x", &nwords) != 1)
				return SCPE_FMT;

			if (iaddr == -1)
				return SCPE_FMT;

			while (--nwords >= 0) {
				WriteW(iaddr, 0);
				iaddr++;
			}
		}
		else if (strchr("0123456789abcdefABCDEF", *c) != NULL) {
			if (sscanf(c, "%x", &val) != 1)
				return SCPE_FMT;

			if (iaddr == -1)
				return SCPE_FMT;

			WriteW(iaddr, val);							/*store data */
			iaddr++;
		}
		else
			return SCPE_FMT;							/*unexpected data */
	}

	if (runaddr != -1)
		IAR = runaddr;

	return SCPE_OK;
}
Пример #2
0
t_stat vax780_fload (int32 flag, char *cptr)
{
char gbuf[CBUFSIZE];
uint16 file_name[3], blkbuf[BLK_SIZE];
t_stat r;
uint32 i, j, start, size, origin;

if ((fl_unit.flags & UNIT_ATT) == 0)                    /* floppy attached? */
    return SCPE_UNATT;
if (*cptr == 0)
    return SCPE_2FARG;
cptr = get_glyph (cptr, gbuf, 0);                       /* get file name */
if (!rtfile_parse (gbuf, file_name))                    /* legal file name? */
    return SCPE_ARG;
if ((size = rtfile_lookup (file_name, &start)) == 0)    /* file on floppy? */
    return SCPE_ARG;
if (*cptr) {                                            /* origin? */
    origin = (uint32) get_uint (cptr, 16, MEMSIZE, &r);
    if ((r != SCPE_OK) || (origin & 1))                 /* must be even */
        return SCPE_ARG;
    }
else origin = 512;                                      /* no, use default */

for (i = 0; i < size; i++) {                            /* loop thru blocks */
    if (!rtfile_read (start + i, 1, blkbuf))            /* read block */
        return SCPE_FMT;
    for (j = 0; j < BLK_SIZE; j++) {                    /* loop thru words */
        if (ADDR_IS_MEM (origin))
            WriteW (origin, blkbuf[j]);
        else return SCPE_NXM;
        origin = origin + 2;
        }
    }
return SCPE_OK;
}
Пример #3
0
bool OutStream::WriteAggregateW (int numElements, const Vector3f* data)
{
    return WriteW(3*numElements, (const float*)data);
}
Пример #4
0
bool OutStream::WriteAggregateW (int numElements, const HQuaternion* data)
{
    return WriteW(4*numElements, (const float*)data);
}
Пример #5
0
bool OutStream::WriteAggregateW (int numElements, const HMatrix* data)
{
    return WriteW(16*numElements, (const float*)data);
}
Пример #6
0
bool OutStream::WriteAggregateW (int numElements, const Float2* data)
{
    return WriteW(2*numElements, (const float*)data);
}