home *** CD-ROM | disk | FTP | other *** search
-
- /**************************************************
- UZI (Unix Z80 Implementation) Utilities: xmachdep.c
- ***************************************************/
-
-
- #include "unix.h"
- #include "extern.h"
-
-
- /* This is called at the very beginning to initialize everything. */
- /* It is the equivalent of main() */
-
- fs_init()
- {
- inint = 0;
- udata.u_euid = 0;
- udata.u_insys = 1;
- }
-
-
- /* This checks to see if a user-suppled address is legitimate */
- valadr(base,size)
- char *base;
- uint16 size;
- {
- return(1);
- }
-
-
- /* This adds two tick counts together.
- The t_time field holds up to one second of ticks,
- while the t_date field counts minutes */
-
- addtick(t1,t2)
- time_t *t1, *t2;
- {
-
- t1->t_time += t2->t_time;
- t1->t_date += t2->t_date;
- if (t1->t_time >= 60*TICKSPERSEC)
- {
- t1->t_time -= 60*TICKSPERSEC;
- ++t1->t_date;
- }
- }
-
- incrtick(t)
- time_t *t;
- {
- if (++t->t_time == 60*TICKSPERSEC)
- {
- t->t_time = 0;
- ++t->t_date;
- }
- }
-
-
-
- stkreset()
- {
- #asm 8080
- POP H
- LXI SP,udata?-2
- PCHL
- #endasm
- }
-
-
- /* Port addresses of clock chip registers. */
-
- #define SECS 0xe2
- #define MINS 0xe3
- #define HRS 0xe4
- #define DAY 0xe6
- #define MON 0xe7
- #define YEAR 86
-
- sttime()
- {
- panic("Calling sttime");
- }
-
-
- rdtime(tloc)
- time_t *tloc;
- {
- tloc->t_time = (tread(SECS)>>1) | (tread(MINS)<<5) | (tread(HRS)<<11);
- tloc->t_date = tread(DAY) | (tread(MON)<<5) | (YEAR<<9);
- }
-
-
- /* Update global time of day */
- rdtod()
- {
- tod.t_time = (tread(SECS)>>1) | (tread(MINS)<<5) | (tread(HRS)<<11);
- tod.t_date = tread(DAY) | (tread(MON)<<5) | (YEAR<<9);
- }
-
-
- /* Read BCD clock register, convert to binary. */
- tread(port)
- uint16 port;
- {
- int n;
-
- n = in(port);
- return ( 10*((n>>4)&0x0f) + (n&0x0f) );
- }
-
-
- /* Disable interrupts */
- di()
- {
- #asm 8080
- DI ;disable interrupts
- #endasm
- }
-
- /* Enable interrupts if we are not in service routine */
- ei()
- {
- if (inint)
- return;
- ; /* Empty statement necessary to fool compiler */
-
- #asm 8080
- EI ;disable interrupts
- #endasm
- }
-
-
-
- /* This shifts an unsigned int right 8 places. */
-
- shift8()
- {
- #asm 8080
- POP D ;ret addr
- POP H
- MOV L,H
- MVI H,0
- MOV A,L
- ANA A ;set Z flag on result
- PUSH H
- PUSH D ;restore stack
- #endasm
- }
-
-
- /* This prints an error message and dies. */
-
- panic(s)
- char *s;
- {
- inint = 1;
- kprintf("PANIC: %s\n",s);
- idump();
- abort();
- }
-
-
- warning(s)
- char *s;
- {
- kprintf("WARNING: %s\n",s);
- }
-
-
- kputs(s)
- char *s;
- {
- while (*s)
- kputchar(*(s++));
- }
-
- kputchar(c)
- int c;
- {
- if (c == '\n')
- _putc('\r');
- _putc(c);
- }
-
-
-
- idump()
- {
- inoptr ip;
- ptptr pp;
- extern struct cinode i_tab[];
- bufptr j;
-
- kprintf(
- " MAGIC DEV NUM MODE NLINK (DEV) REFS DIRTY err %d root %d\n",
- udata.u_error, root - i_tab);
-
- for (ip=i_tab; ip < i_tab+ITABSIZE; ++ip)
- {
- kprintf("%d %d %d %u 0%o %d %d %d %d\n",
- ip-i_tab, ip->c_magic,ip->c_dev, ip->c_num,
- ip->c_node.i_mode,ip->c_node.i_nlink,ip->c_node.i_addr[0],
- ip->c_refs,ip->c_dirty);
- ifnot (ip->c_magic)
- break;
- }
-
- kprintf("\n STAT WAIT PID PPTR ALARM PENDING IGNORED\n");
- for (pp=ptab; pp < ptab+PTABSIZE; ++pp)
- {
- kprintf("%d %d 0x%x %d %d %d 0x%x 0x%x\n",
- pp-ptab, pp->p_status, pp->p_wait, pp->p_pid,
- pp->p_pptr-ptab, pp->p_alarm, pp->p_pending,
- pp->p_ignored);
- ifnot(pp->p_pptr)
- break;
- }
-
- kprintf("\ndev blk drty bsy\n");
- for (j=bufpool; j < bufpool+NBUFS; ++j)
- kprintf("%d %u %d %d\n",j->bf_dev,j->bf_blk,j->bf_dirty,j->bf_busy);
-
- kprintf("\ninsys %d ptab %d call %d cwd %d sp 0x%x\n",
- udata.u_insys,udata.u_ptab-ptab, udata.u_callno, udata.u_cwd-i_tab,
- udata.u_sp);
- }
-
-
-
- /* Short version of printf to save space */
- kprintf(nargs)
- {
- register char **arg, *fmt;
- register c, base;
- char s[7], *itob();
-
- arg = (char **)&nargs + nargs;
- fmt = *arg;
- while (c = *fmt++) {
- if (c != '%') {
- kputchar(c);
- continue;
- }
- switch (c = *fmt++) {
- case 'c':
- kputchar(*--arg);
- continue;
- case 'd':
- base = -10;
- goto prt;
- case 'o':
- base = 8;
- goto prt;
- case 'u':
- base = 10;
- goto prt;
- case 'x':
- base = 16;
- prt:
- kputs(itob(*--arg, s, base));
- continue;
- case 's':
- kputs(*--arg);
- continue;
- default:
- kputchar(c);
- continue;
- }
- }
- }