|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T m
Length: 4136 (0x1028)
Types: TextFile
Names: »move.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
└─⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z«
└─⟦2109abc41⟧
└─⟦this⟧ »./X.V10R4/libvs100/move.c«
/* $Header: move.c,v 10.3 86/02/01 15:47:04 tony Rel $ */
/* move.c Routines to move data into and out of the workstation
*
* MoveObjectDownRom Use rom version to move an object down
* MoveObjectDown Move data into the workstation
* MoveBufferDown Move buffer into the workstation
* MoveBufferUp Move date out of the workstation
* SendToPeripheral Send data to peripheral
*
* MoveObjectDownRom should be used to download the firmware into the
* workstation; after that MoveObjectDown and MoveBufferDown should be used.
*
*/
/****************************************************************************
* *
* Copyright (c) 1983, 1984 by *
* DIGITAL EQUIPMENT CORPORATION, Maynard, Massachusetts. *
* All rights reserved. *
* *
* This software is furnished on an as-is basis and may be used and copied *
* only with inclusion of the above copyright notice. This software or any *
* other copies thereof may be provided or otherwise made available to *
* others only for non-commercial purposes. No title to or ownership of *
* the software is hereby transferred. *
* *
* The information in this software is subject to change without notice *
* and should not be construed as a commitment by DIGITAL EQUIPMENT *
* CORPORATION. *
* *
* DIGITAL assumes no responsibility for the use or reliability of its *
* software on equipment which is not supplied by DIGITAL. *
* *
* *
****************************************************************************/
#include "vs100.h"
extern int VSReloc;
char *AllocateSpace();
/* Move size bytes from src to dst. If rom = 1, use the rom-code version.
* This only works for objects which are <= MAXSIZE bytes;
*/
MoveObjectDownRom (src, dst, size)
caddr_t src, dst;
int size;
{
return (MoveObject(src + VSReloc, dst, size, 1));
}
MoveObjectDown (src, dst, size)
caddr_t src, dst;
int size;
{
return (MoveObject(src + VSReloc, dst, size, 0));
}
MoveBufferDown (src, dst, size)
caddr_t src, dst;
int size;
{
register int len;
caddr_t buf;
while (len = size) {
if (len > VBUFSIZE) len = VBUFSIZE;
if ((buf = (caddr_t) AllocateSpace (len)) == NULL)
return (-1);
bcopy (src, buf, len);
if (MoveObject(buf + VSReloc, dst, len, 0))
return (-1);
src += len;
dst += len;
size -= len;
}
return (0);
}
MoveBufferUp (src, dst, size)
caddr_t src, dst;
int size;
{
register int len;
caddr_t buf;
while (len = size) {
if (len > VBUFSIZE) len = VBUFSIZE;
if ((buf = (caddr_t) AllocateSpace (len)) == NULL ||
MoveObject(src, buf + VSReloc, len, 0) ||
SynchWrites())
return (-1);
bcopy (buf, dst, len);
src += len;
dst += len;
size -= len;
}
return (0);
}
MoveObject (src, dst, size, rom)
caddr_t src, dst;
int size, rom;
{
register MoveObjectPacket *mop;
#define h ((PacketHeader *) mop->mop_head)
mop = (MoveObjectPacket *) AllocateSpace (sizeof (MoveObjectPacket));
if (mop == NULL) return (-1);
/* Make sure size is a multiple of 2 */
if (size & 0x1) size++;
/* Format the packet */
h->ph_modifier.emptymod = 0;
h->ph_opcode = (rom ? MOVE_OBJECT_ROM : MOVE_OBJECT);
*(long *) h->ph_next = NULL;
mop->mop_objectType = 1;
*(caddr_t *) mop->mop_source = src;
*(caddr_t *) mop->mop_dest = dst;
*(long *) mop->mop_objectSize = size;
return (WritePacket ((caddr_t) mop));
#undef h
}
SendToPeripheral (src, size, device)
char *src;
int size, device;
{
register MoveObjectPacket *mop;
#define h ((PacketHeader *) mop->mop_head)
mop = (MoveObjectPacket *) AllocateSpace (sizeof (MoveObjectPacket));
if (mop == NULL) return;
/* Make sure size is a multiple of 2 */
if (size & 0x1) size++;
/* Format the packet */
h->ph_modifier.emptymod = 0;
h->ph_opcode = MOVE_OBJECT;
*(long *) h->ph_next = NULL;
mop->mop_objectType = 2;
*(caddr_t *) mop->mop_source = src + VSReloc;
*(int *) mop->mop_dest = device;
*(long *) mop->mop_objectSize = size;
WritePacket ((caddr_t) mop);
#undef h
}