From 2b0e05d28752bc832f2e000d251cf36e11b45fd3 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Mon, 7 Mar 1994 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1994-03-07 --- carrera/fns.h | 11 +++++++++++ carrera/io.h | 2 +- carrera/l.s | 19 +++++++++++++++++++ carrera/main.c | 2 +- carrera/trap.c | 12 +++++++----- 5 files changed, 39 insertions(+), 7 deletions(-) diff --git a/carrera/fns.h b/carrera/fns.h index b9941256e840910eecd9343e417846244a3844ed..f2e75484974cc9bea5faff1e43cd74c50530f0c5 100644 --- a/carrera/fns.h +++ b/carrera/fns.h @@ -97,6 +97,8 @@ void vector0(void); void vector100(void); void vector180(void); void vmereset(void); +void uvst(void*, void*); +void uvld(void*, void*); void wbflush(void); void wrcompare(ulong); void Xdelay(int); @@ -115,3 +117,12 @@ void enetaddr(uchar*); #define KADDR(a) ((void*)((ulong)(a)|KSEG0)) #define KADDR1(a) ((void*)((ulong)(a)|KSEG1)) #define PADDR(a) ((ulong)(a)&~KSEGM) + +#define hnputl(p, v) ((*(ulong*)p) = v) +#define hnputs(p, v) ((*(ushort*)p) = v) +#define nhgetl(p) ((*(ulong*)p)) +#define nhgets(p) ((*(ushrt*)p)) + +void ifwrite(void*, Block*); +void* ifinit(int); +void fiberint(int); diff --git a/carrera/io.h b/carrera/io.h index 977decef3dbd1cd1b1058278a4cc7c9aa0d00355..33caf3486656e904ca213d25d445e7c4304ee296 100644 --- a/carrera/io.h +++ b/carrera/io.h @@ -55,7 +55,7 @@ enum Keybint = (1<<6), Scsiint = (1<<5), Etherint = (1<<4), - Videoint = (1<<3), + Fiberint = (1<<3), Soundint = (1<<2), Floppyint = (1<<1), Parallelint = (1<<0), diff --git a/carrera/l.s b/carrera/l.s index 657c298997beea498dfae8391a0302fbdc1645d4..de6bb18ccf4e869f1eee37db1147dcd7505682a1 100644 --- a/carrera/l.s +++ b/carrera/l.s @@ -840,3 +840,22 @@ uvputuna: MOVW R2, 0(R3) MOVW R1, 4(R3) RET + +TEXT uvld(SB), $-4 /* uvld(address, dst) */ + MOVV 0(R1), R5 + MOVW 4(FP), R2 + MOVW R5, 4(R2) + DSRA (16,5,5) + DSRA (16,5,5) + MOVW R5, 0(R2) + RET + +TEXT uvst(SB), $-4 /* uvst(address, src) */ + MOVW 4(FP), R2 + MOVW 0(R2), R5 + DSLL (16,5,5) + DSLL (16,5,5) + MOVW 4(R2), R2 + OR R2, R5 + MOVV R5, 0(R1) + RET diff --git a/carrera/main.c b/carrera/main.c index 2083da173cbb0c99d46bd301d821abc61ca019d8..e532b37b2ca5931009716a99a47da23294ba5395 100644 --- a/carrera/main.c +++ b/carrera/main.c @@ -251,7 +251,7 @@ ioinit(int mapeisa) */ /* enable all PC interrupts except the clock */ - int0mask &= ~((1<<2)|(1<<5)); + int0mask = 0; int0mask |= 1<<(Clockvec&7); EISAOUTB(Int0aux, int0mask); diff --git a/carrera/trap.c b/carrera/trap.c index 5b6ce03d65ebeb35a99aeef5eba6b2def6d9080d..81c4547d3f0a1df809b471686d0e9d29db2925f8 100644 --- a/carrera/trap.c +++ b/carrera/trap.c @@ -305,6 +305,9 @@ intr(Ureg *ur) case 0x24: /* Serial 2 */ NS16552intr(1); break; + case 0x10: + fiberint(0); + break; case 0x14: etherintr(); break; @@ -319,10 +322,6 @@ intr(Ureg *ur) } if(cause & INTR2) { isr = IO(ulong, R4030Isr); - if(isr & (1<<5)) { - audiodmaintr(); - isr &= ~(1<<5); - } if(isr) { iprint("R4030 Interrupt\n"); iprint(" ISR #%lux\n", IO(ulong, R4030Isr)); @@ -346,9 +345,12 @@ intr(Ureg *ur) default: iprint("i386ACK #%lux\n", devint); break; - case 5: + case 7: audiosbintr(); break; + case 13: + audiodmaintr(); + break; } cause &= ~INTR4; }