|
|
DataMuseum.dkPresents historical artifacts from the history of: Commodore CBM-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Commodore CBM-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 1924 (0x784)
Types: TextFile
Notes: UNIX file
Names: »hrterm1.c«
└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
└─⟦f4b8d8c84⟧ UNIX Filesystem
└─⟦this⟧ »hrtty/src/hrterm1.c«
#ifdef FAKEINPUT
#define FAKEIN ('c'<<8|13)
#endif
/*
** Device dependant driver routines for the hi-res tty driver
*/
#include <coherent.h>
#include <con.h>
#include <errno.h>
#include <stat.h>
#include <tty.h>
#include <uproc.h>
#include <signal.h>
#define NMINOR 1
#define MAJOR 8
int htstart();
/*
** Terminal Structure
*/
TTY hrtty = {
{0},{0},0,htstart,NULL,0,0
};
v0load()
{
/*
SET KEYBOARD INT HERE!!
*/
outb(0x414,0xff);
portst(); /* Init MMU EELCECH !! */
ricoload(); /* Clear Screen, etc. */
}
v0uload()
{
/*
RESET KEYBOARD INT HERE!
*/
}
v0open(dev, mode)
dev_t dev;
{
register int s;
/*
** Make sure it's a legitimate devivce no. only 0 is supported
*/
if(minor(dev) >= NMINOR) {
u.u_error = ENXIO;
return;
}
if ((hrtty.t_flags&T_EXCL) != 0 && super() == 0) {
u.u_error = ENODEV;
return;
}
ttsetgrp(&hrtty, dev);
s = sphi();
if(hrtty.t_open++ == 0)
ttopen(&hrtty);
spl(s);
}
v0close(dev, mode)
{
register int s;
s = sphi();
if (--hrtty.t_open == 0)
ttclose(&hrtty);
spl(s);
}
v0read(dev, iop)
dev_t dev;
IO *iop;
{
ttread(&hrtty, iop, SFCW);
}
v0write(dev, iop)
dev_t dev;
IO *iop;
{
ttwrite(&hrtty, iop, SFCW);
}
v0ioctl(dev, com, vec)
dev_t dev;
struct sgttyb *vec;
{
register int s;
#ifdef FAKEINPUT
struct sgttyb fc;
if(com == FAKEIN) {
s = sphi();
ukcopy(vec, &fc, sizeof(struct sgttyb));
ttin(&hrtty, fc.sg_ispeed); /* convention with faker */
spl(s);
return;
}
#endif
s = sphi();
ttioctl(&hrtty, com, vec);
spl(s);
}
v0in(c)
char c;
{
ttin(&hrtty, c);
}
htcopy(cp)
register char *cp;
{
register int s;
while(*cp) {
s = sphi();
ttin(&hrtty, *cp++);
spl(s);
}
}
/*
** Start the Output Stream.
** Called from `ttywrite'
** This calls the rico vt50 subroutines
*/
htstart(tp)
register TTY *tp;
{
register int c;
cursor();
while(( c=ttout(tp)) >= 0) {
rico(c);
if((tp->t_flags&T_STOP) != 0)
break;
}
cursor();
}