mirror of
https://github.com/prirun/p50em.git
synced 2026-03-14 13:53:53 +00:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a5f30d1c98 | ||
|
|
81fc652d5e |
@@ -55,7 +55,7 @@ business unit ceased to exist. A reformatted copy is available
|
|||||||
A growing collection of Prime and related documentation is available
|
A growing collection of Prime and related documentation is available
|
||||||
at [sysovl.info](https://sysovl.info/reference_prime.html).
|
at [sysovl.info](https://sysovl.info/reference_prime.html).
|
||||||
A howto on installing PRIMOS in the emulator is
|
A howto on installing PRIMOS in the emulator is
|
||||||
[here](https://sysovl.info/reference_prime_drb_installoview.html).
|
[here](https://sysovl.info/reference_prime_drb_installing_primos.html).
|
||||||
Discussion of adapting these instructions to
|
Discussion of adapting these instructions to
|
||||||
22.1.4 has been occurring on the [cctalk mailing
|
22.1.4 has been occurring on the [cctalk mailing
|
||||||
list](http://classiccmp.org/pipermail/cctalk/2020-March/052126.html).
|
list](http://classiccmp.org/pipermail/cctalk/2020-March/052126.html).
|
||||||
|
|||||||
31
devamlc.h
31
devamlc.h
@@ -991,6 +991,7 @@ int devamlc (int class, int func, int device) {
|
|||||||
if (dc[dx].xmitenabled & BITMASK16(lx+1)) {
|
if (dc[dx].xmitenabled & BITMASK16(lx+1)) {
|
||||||
int n, maxn;
|
int n, maxn;
|
||||||
unsigned short qtop, qbot, qseg, qmask, qents;
|
unsigned short qtop, qbot, qseg, qmask, qents;
|
||||||
|
short hasiac; /* This buffer contains an escaped IAC */
|
||||||
ea_t qentea, qcbea;
|
ea_t qentea, qcbea;
|
||||||
n = 0;
|
n = 0;
|
||||||
qcbea = dc[dx].baseaddr + lx*4;
|
qcbea = dc[dx].baseaddr + lx*4;
|
||||||
@@ -1019,12 +1020,35 @@ int devamlc (int class, int func, int device) {
|
|||||||
precludes the use of TTY8BIT mode... */
|
precludes the use of TTY8BIT mode... */
|
||||||
|
|
||||||
n = 0;
|
n = 0;
|
||||||
|
hasiac = 0;
|
||||||
for (i=0; i < maxn; i++) {
|
for (i=0; i < maxn; i++) {
|
||||||
unsigned short utemp;
|
unsigned short utemp;
|
||||||
utemp = get16mem(qentea);
|
utemp = get16mem(qentea);
|
||||||
qentea = (qentea & ~qmask) | ((qentea+1) & qmask);
|
/* qentea = (qentea & ~qmask) | ((qentea+1) & qmask); */
|
||||||
//printf("Device %o, line %d, entry=%o (%c)\n", device, lx, utemp, utemp & 0x7f);
|
//printf("Device %o, line %d, entry=%o (%c)\n", device, lx, utemp, utemp & 0x7f);
|
||||||
|
#ifdef NOMASKAMLC
|
||||||
|
if (((utemp & 0xff) == 0xff) && (dc[dx].ctype[lx] != CT_SERIAL))
|
||||||
|
{
|
||||||
|
if (n != 0)
|
||||||
|
break; /* Clear the buffer before handling IAC */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buf[n++] = 0xFF;
|
||||||
|
buf[n++] = 0xFF;
|
||||||
|
hasiac = 1;
|
||||||
|
qentea = (qentea & ~qmask) | ((qentea+1) & qmask);
|
||||||
|
break; /* Now ship _just_ the IAC */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buf[n++] = utemp & 0xFF;
|
||||||
|
qentea = (qentea & ~qmask) | ((qentea+1) & qmask);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
/* None of the IAC handling matters if we splatter parity */
|
||||||
buf[n++] = utemp & 0x7F;
|
buf[n++] = utemp & 0x7F;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
@@ -1089,7 +1113,10 @@ int devamlc (int class, int func, int device) {
|
|||||||
used and Unix buffers get full so writes can't
|
used and Unix buffers get full so writes can't
|
||||||
complete */
|
complete */
|
||||||
|
|
||||||
qtop = (qtop & ~qmask) | ((qtop+nw) & qmask);
|
if (hasiac)
|
||||||
|
qtop = (qtop & ~qmask) | ((qtop+1) & qmask);
|
||||||
|
else
|
||||||
|
qtop = (qtop & ~qmask) | ((qtop+nw) & qmask);
|
||||||
put16io(qtop, qcbea);
|
put16io(qtop, qcbea);
|
||||||
if (nw > maxxmit)
|
if (nw > maxxmit)
|
||||||
maxxmit = nw;
|
maxxmit = nw;
|
||||||
|
|||||||
4
em.c
4
em.c
@@ -2384,8 +2384,8 @@ static ea_t apea(unsigned short *bitarg) {
|
|||||||
iwea = ea;
|
iwea = ea;
|
||||||
ea = ip;
|
ea = ip;
|
||||||
TRACE(T_EAAP, " After indirect, AP ea = %o/%o, bit=%d %s\n", ea>>16, ea & 0xFFFF, bit, searchloadmap(ea,' '));
|
TRACE(T_EAAP, " After indirect, AP ea = %o/%o, bit=%d %s\n", ea>>16, ea & 0xFFFF, bit, searchloadmap(ea,' '));
|
||||||
if (ea & 0x80000000)
|
// if (ea & 0x80000000)
|
||||||
fault(POINTERFAULT, ea>>16, iwea);
|
// fault(POINTERFAULT, ea>>16, iwea);
|
||||||
}
|
}
|
||||||
if (bitarg != NULL)
|
if (bitarg != NULL)
|
||||||
*bitarg = bit;
|
*bitarg = bit;
|
||||||
|
|||||||
9
makefile
9
makefile
@@ -33,7 +33,7 @@ trace: $(em_deps) $(all_deps)
|
|||||||
|
|
||||||
# the fixed clock rate build is useful for making problems reproduceable.
|
# the fixed clock rate build is useful for making problems reproduceable.
|
||||||
#
|
#
|
||||||
# If the emulator crashes on a specific program, run it at the end of
|
# If the emulator crashes on a specific program, run it at the end of
|
||||||
# PRIMOS.COMI to get a more consistent instruction count for the
|
# PRIMOS.COMI to get a more consistent instruction count for the
|
||||||
# failure, then enable tracing a little before that with -trace <IC - 100>
|
# failure, then enable tracing a little before that with -trace <IC - 100>
|
||||||
|
|
||||||
@@ -41,5 +41,12 @@ trace: $(em_deps) $(all_deps)
|
|||||||
fixed: $(em_deps) $(all_deps)
|
fixed: $(em_deps) $(all_deps)
|
||||||
$(CC) -DREV=\"${REV}\" ${CFLAGS} -DFIXEDCLOCK -DNOIDLE -DFAST -O em.c -o em
|
$(CC) -DREV=\"${REV}\" ${CFLAGS} -DFIXEDCLOCK -DNOIDLE -DFAST -O em.c -o em
|
||||||
|
|
||||||
|
# Experimental "don't mask off the high bit on amlc lines" build
|
||||||
|
#
|
||||||
|
# Let's see if this is breaking e.g. ymodem file transfers.
|
||||||
|
|
||||||
|
nomaskamlc: $(em_deps) $(all_deps)
|
||||||
|
$(CC) -DREV=\"${REV}\" -DNOMASKAMLC ${CFLAGS} -DNOTRACE -DFAST -O -Winline -Wno-return-type em.c -o em.nomaskamlc
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f $(em_objs)
|
rm -f $(em_objs)
|
||||||
|
|||||||
Reference in New Issue
Block a user