32V/usr/src/standalone/iosrc.a
e conio.c J # include "CON.h"
putstr(csp)
register char *csp ;
{
if (putcon(csp)) return(-1) ;
return(0) ;
}
/* */
putlin(sptr)
register char *sptr ;
{
if (putcon(sptr)) return(-1) ;
if (putnl()) return(-1) ;
return(0) ;
}
/* */
putnl()
{
if (putcon("\r\n")) return(-1) ;
return(0) ;
}
/* */
putcon(csp)
register char *csp ;
{
/*
* Function to output null-terminated string pointed to
* by 'csp' to the VAX LSI terminal.
*/
register c ;
c = 0 ;
while (c = (*csp++)) putc(c) ;
return(0) ;
}
/* */
putc(c)
{
/* wait for LSI printer to be ready */
while ((mfpr(TXCS) & TXCS_RDY) == 0) ;
/* output character */
mtpr(TXDB,c&0177) ;
}
/* */
getcon(cs)
register char *cs ;
{
/*
* Function to return char's from VAX LSI keyboard to
* char array 'cs' - input stops when CR or LF received -
* null char appended to end of input
*/
register int c , c2 ;
int getc() ;
char *ocs;
ocs=cs;
inloop :
c = getc() ; /* get 1 char from terminal */
putc(c) ; /* echo char */
if (c==CDEL) { cs--; goto inloop; }
if (c==LDEL) {putc(CR);putc(0);putc(NL);cs=ocs;goto inloop;}
if ((c == NL) || (c == CR)) {
putc(CR) ;
putc(0) ;
putc(NL) ;
(*cs++) = '\0' ;
return(0) ;
}
else {
(*cs++) = c ;
goto inloop ;
}
}
/* */
getc()
{
/*
* Return char from VAX LSI terminal char buffer
*/
int mfpr() ;
/* Wait for receiver done (user entered char)
*/
while ((mfpr(RXCS) & RXCS_DONE) == 0) ;
return (mfpr(RXDB) & 0177) ; /* return char from receiver buffer */
}
/* */
mtpr(regno,value)
{
asm(" mtpr 8(ap),4(ap)") ;
}
/* */
mfpr(regno)
{
asm(" mfpr 4(ap),r0") ;
}
/* */
getval(sp)
char *sp ;
{
/*
* Print prompt string 'sp' on console.
* Return decimal value of user response.
*/
char ctmp[130] ;
putstr(sp) ;
putstr(" : ") ;
getcon(ctmp) ;
return(a2l(ctmp)) ;
}
/* */
pdstr(sp,ival)
char *sp ;
{
/*
* Convert integer 'ival' to ascii base 10 and print on
* console.
* Then print string 'sp' on console.
*/
char ctmp[130] ;
l2a(ival,ctmp) ;
putstr(ctmp) ;
putlin(sp) ;
}
sdio.c sn D # include "RP.h"
dwait(dptr)
register int *dptr ;
{
/*
* Function to wait MBA 0 RP06 disc unit to be ready.
*/
while ((*(dptr+RP_sr)&RP_DRY) == 0) ;
}
/* */
derror(dptr)
register int *dptr ;
{
/*
* Function to check for MBA 0 RP06 error.
*/
if (*(dptr+RP_sr) & RP_ERR) return(*(dptr+RP_er1) & 0177777) ;
return(0) ;
}
tapio.c |Cv N # include "TM.h"
taprew(tp)
register int *tp ;
{
/*
* Function to rewind TM2/TE16 drive
*/
*(tp+TM_cs1) = TM_RWND | TM_GO ;
twait(tp) ;
if (terror(tp)) return(-1) ;
return(0) ;
}
/* */
tapfil(tp,nf)
int *tp ;
{
/*
* Space forward 'nf' files on TM02 unit whose MBA register
* set is pointed to by 'tp'.
*/
register int i ;
while (nf--) {
loop :
if (tapfsp(tp,1)) return(-1) ;
if ((i = tapstat(tp))&TM_TM) { /* tape mark */
continue ;
}
if (i&TM_EOT) {
TMS_print(i) ; /* end of tape */
return(-1) ;
}
goto loop ;
}
return(0) ;
}
/* */
tapfsp(tp,fblk)
register int *tp ;
{
/*
* Function to space forward 'fblk' blocks on TM2/TE16 drive
*/
if (fblk) {
*(tp+TM_fc) = (-fblk) ; /* no. blocks */
*(tp+TM_cs1) = TM_SFWD | TM_GO ; /* space forward */
twait(tp) ;
if (terror(tp)) return(-1) ;
}
return(0) ;
}
/* */
twait(tp)
register int *tp ;
{
/*
* Function to wait until TM2/TE16 is not busy
*/
while ((*(tp+TM_ds) & TM_DRDY) == 0) ;
}
/* */
terror(tp)
register int *tp ;
{
/*
* Function to check for TM2 error
* Return error reg if error,
* else return (0).
*/
if (*(tp+TM_ds) & TM_ERR) return(*(tp+TM_er)&0xffff) ;
return(0) ;
}
/* */
tapstat(t)
int *t ;
{
/*
* Return TM02 status for unit pointed to by MBA reg set
* pointer 't'.
*/
return(*(t+TM_ds)&0xffff) ;
}
/* */
tapbsp(tp,fblk)
register int *tp ;
{
/*
* Function to space backward 'fblk' blocks on TM2/TE16 drive
*/
if (fblk) {
*(tp+TM_fc) = (-fblk) ; /* no. blocks */
*(tp+TM_cs1) = TM_SREV | TM_GO ; /* space backward */
twait(tp) ;
if (terror(tp)) return(-1) ;
}
return(0) ;
}
flio.c ,4 g # include "FL.h"
# include "CON.h"
fltwait()
{
/* Wait for TXCS ready on floppy function. */
while (!(mfpr(TXCS) & TXCS_RDY)) ;
}
/* */
flrwait() {
/* Wait for RXCS done on floppy data transfer */
while (!(mfpr(RXCS) & RXCS_DONE)) ;
}
/* */
fldone()
{
register int j ;
/* check for floppy function complete & check errors */
flrwait() ;
j = mfpr(RXDB) ;
if ((j & 0xfff) == FL_PERR) {
return(-1) ; /* protocol error */
}
if ((j & 0xf00) != FL_FFC) {
return(-1) ;
}
if (j & FL_ERR) return(-1) ; /* error */
return(0) ;
}
/* */
flrs(blk,bp)
int blk ;
char *bp ;
{
/*
* Read 128-byte block from floppy into buffer 'bp[]'.
* First convert logical 128-byte block no.(starts at 0)
* to floppy track and sector.
* Return (-1) for error, else return (0) .
*/
register int j , s , t ;
/* compute start track & sector from logical block 'blk'. */
t = blk/RXSTRK ; /* track no. */
s = blk%RXSTRK + 1 ; /* sector */
fltwait() ;
mtpr(TXDB,FL_RS) ; /* Floppy Read Sector command */
fltwait() ;
mtpr(TXDB,s|FL_DATA) ; /* supply sector no. to floppy interface */
fltwait() ;
mtpr(TXDB,t|FL_DATA) ; /* track no. */
/* wait for read to complete */
if (fldone()) return(-1) ;
/* loop to read sector bytes from interface */
for (j = 0 ; j < RXBYSEC ; j++) {
flrwait() ; /* wait till ready */
(*bp++) = mfpr(RXDB) ; /*get data byte-assume from floppy*/
}
return(0) ;
}
kerrcod.c dr # # include "EMES.h"
RPE_print(ereg)
{
/*
* Print meaningful RP06 error reg values from error
* register argument.
*/
putstr("RP06 err reg : ") ;
diag16(RPemes,ereg) ;
}
/* */
MBAS_print(sreg)
{
/*
* Print meaningful MBA status reg values from status
* register argument.
*/
putstr("MBA status : ") ;
diag32(MBAsmes,sreg) ;
}
/* */
TME_print(ereg)
{
/* TM02 error reg message */
putstr("TM02 err reg : ") ;
diag16(TMemes,ereg) ;
}
/* */
TMS_print(e)
{
/* TM02 status reg */
putstr("TM02 status : ") ;
diag16(TMsmes,e) ;
}
/* */
diag16(sp,err)
char *sp[] ;
{
register int i ;
for (i=0;i<16;i++,err=err>>1)
if (err&01)
putstr(sp[i]) ;
putnl() ;
}
/* */
diag32(sp,err)
char *sp[] ;
{
register int i ;
for (i=0;i<32;i++,err=err>>1)
if (err&1)
putstr(sp[i]) ;
putnl() ;
}
B