M carrera/fns.h => carrera/fns.h +11 -0
@@ 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);
M carrera/io.h => carrera/io.h +1 -1
@@ 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),
M carrera/l.s => carrera/l.s +19 -0
@@ 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
M carrera/main.c => carrera/main.c +1 -1
@@ 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);
M carrera/trap.c => carrera/trap.c +7 -5
@@ 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;
}