OK, turing.

<- leave blank

Mon Mar 16 00:24:06 EDT 2026

diff 85b89f574397db1e192a4bd25066cb2c587647f5 uncommitted
--- a/sys/src/games/md/md.c
+++ b/sys/src/games/md/md.c
@@ -149,14 +149,17 @@
		usage();
	loadrom(*argv);
	initemu(320, 224, 4, XRGB32, 1, nil);
- regkey("a", 'c', 1<<5);
- regkey("b", 'x', 1<<4);
- regkey("y", 'z', 1<<12);
+ regkey("a", 'c', 0x200020);
+ regkey("b", 'x', 0x100010);
+ regkey("c", 'z', 1<<12);
	regkey("start", '\n', 1<<13);
	regkey("up", Kup, 0x101);
	regkey("down", Kdown, 0x202);
	regkey("left", Kleft, 1<<2);
	regkey("right", Kright, 1<<3);
+ regkey("x", 'a', 1<<18);
+ regkey("y", 's', 1<<17);
+ regkey("z", 'd', 1<<16);
	cpureset();
	vdpmode();
	ymreset();
@@ -202,9 +205,12 @@
	}
 }

+extern int cticker;
+
 void
 flush(void)
 {
+ cticker = 0;
	flushmouse(1);
	flushscreen();
	flushaudio(audioout);
--- a/sys/src/games/md/mem.c
+++ b/sys/src/games/md/mem.c
@@ -25,6 +25,8 @@
 /* virtual → physical 512K page */
 u16int ssfpage[8] = {0, 1, 2, 3, 4, 5, 6, 7};

+int cticker;
+
 //#define vramdebug(a, s, a1, a2, a3) if((a & ~1) == 0xe7a0) print(s, a1, a2,
 a3);
 #define vramdebug(a, s, a1, a2, a3)

@@ -31,16 +33,21 @@
 u8int
 regread(u16int a)
 {
- u16int v;
+ u32int v;

	switch(a | 1){
	case 0x0001: return 0xa0;
	case 0x0003:
- v = ~(keys & 0xffff);
+ ++cticker;
+ v = ~(keys & 0xffffff);
		if((ctl[0] & 0x40) == 0){
			v >>= 8;
- v &= ~(0b1100);
- }
+ if(cticker == 6)
+ v &= ~(0b1111);
+ else
+ v &= ~(0b1100);
+ } else if(cticker == 7)
+ v >>= 16;
		return ctl[0] & 0xc0 | v & 0x3f;
	case 0x0005:
	case 0x0007:


Sun Mar 15 17:11:57 EDT 2026
Hi,

I came across your website while browsing Google and noticed there may be an
opportunity to improve your search visibility with a few relevant, high-DA
backlinks.  Sometimes small changes in off-page SEO can make a big difference in
rankings and traffic.

I identified a couple of backlink opportunities related to your site so you can
see what stronger off-page SEO could look like.

You can review them here:
https://tinyurl.com/Randy-backlink

Best,
Randy


Sun Mar 15 16:52:01 EDT 2026
diff 065359bd89b8d6ddd9ebdee732f37ec0ae992b59 uncommitted
--- a/sys/src/cmd/gdbfs/main.c
+++ b/sys/src/cmd/gdbfs/main.c
@@ -250,7 +250,16 @@
	}
 }

+static int rfd = 0, wfd = 1;
+
+static void
+start(Srv*)
+{
+ gdbinit(rfd, wfd);
+}
+
 Srv fs = {
+ .start = start,
	.open = fsopen,
	.read = fsread,
	.write = fswrite,
@@ -262,7 +271,7 @@
 void
 threadmain(int argc, char *argv[])
 {
- int i, rfd, wfd;
+ int i;
	File *dir;
	Fhdr hdr;
	char *textfile, *arch;
@@ -304,11 +313,9 @@
	} else
		sysfatal("-t or -m required");

- rfd = 0;
- wfd = 1;
	switch(argc){
	case 1:
- rfd = dial(argv[0], nil, nil, nil);
+ rfd = dial(netmkaddr(argv[0], "tcp", "1234"), nil, nil, nil);
		if(rfd == -1)
			sysfatal("dial %s: %r", argv[1]);
		wfd = rfd;
@@ -319,7 +326,6 @@
		usage();
	}

- gdbinit(rfd, wfd);
	fs.tree = alloctree("gdbfs", "gdbfs", DMDIR|0555, nil);
	dir = createfile(fs.tree->root, procname, "gdbfs", DMDIR|0555, 0);
	for(i = 0; i < nelem(tab); i++)


Sun Mar 15 16:39:26 EDT 2026
-8-> Rread tag 21 count 8 '2c7d2580 ffffffff'
<-8- Twrite tag 21 fid 512 offset 0 count 9 'startstop'
→ $c#63
← +
<-8- Tflush tag 24 oldtag 21
→ \x03
-8-> Rerror tag 21 ename interrupted
-8-> Rflush tag 24
← T02thread:01;


Sun Mar 15 15:36:48 EDT 2026
Do you require top-quality Proxy tools for Okturing Com?

In case you need top-tier speed, this is the ideal solution.  You will benefit
from unlimited bandwidth, quick access, and excellent value with 99.9% uptime.

Access the website here: https://fas.st/t/4Sd3661X

Cheers, Elida

Sun Mar 15 13:46:59 EDT 2026
Information about the closure of Myrient

Hello everyone,

I have decided to shut down Myrient on 31 March 2026.  Until then, the site will
continue to remain available in its current state.  Please download any content
you find important, as you have around one month to do so.

There are several reasons for the closure:
- Insufficient funding
As traffic continued to increase last year, the amount of funding from donations
remained the same.  I have been paying more than $6000 out of pocket every month
in order to cover the difference which is not sustainable.

- Paywalled download managers
In the past several months, many specialized download managers were created that
completely bypassed the site, donation messages, and download protections.  Some
of these download managers locked certain features behind a paywall that required
users to pay in order to gain access.  The use of Myrient for commercial,
for-profit purposes has always been strictly forbidden.  Such egregious and
abusive usage of the site cannot be tolerated anymore.

- Rising RAM, SSD, and HDD prices
Since last September, RAM, SSD, and HDD prices have surged dramatically and
continue to rise due to the ongoing extreme demand for AI datacenters.  This has
caused Myrient's hosting expenses to go up as well.  Necessary upgrades to the
storage and caching infrastructure only exacerbated the problem.  With a large
number of servers and the aforementioned existing monthly deficit in excess of
$6000 out of pocket, there is no way to pay for the increased hosting and hardware
upgrade costs.

There are still many other smaller reasons, I could go on and on about them, but
nobody would want to read it.

In short, I can no longer afford to run the site.

If you have any comments, you can send them to support@erista.me (I will read all
of them and might respond to a few).

Thanks for using Myrient over the years.

Sun Mar 15 12:16:19 EDT 2026
diff cd434df700c9136aba260c6b2467a46056db4281 uncommitted
--- a/sys/src/9/pc/ether82563.c
+++ b/sys/src/9/pc/ether82563.c
@@ -1245,6 +1245,11 @@
	while(waserror())
		procerror(c, &c->lproc);

+ /* wait 1.5s after first link up to avoid wedged phy */
+ while((csr32r(c, Status) & Lu) == 0)
+ lsleep(c, Lsc);
+ tsleep(&up->sleep, return0, 0, 1500);
+
	while((phyno = phyprobe(c, 3<<1)) == ~0)
		lsleep(c, Lsc);

@@ -1496,6 +1501,9 @@
	r = csr32r(ctlr, Ctrl);
	r &= ~(Frcspd|Frcdplx); /* dont force */
	csr32w(ctlr, Ctrl, Slu|r);
+
+ /* link is down until linkproc sets it up */
+ ethersetlink(edev, 0);

	snprint(name, sizeof name, "#l%dl", edev->ctlrno);
	if(csr32r(ctlr, Status) & Tbimode)
--- a/sys/src/9/port/devether.c
+++ b/sys/src/9/port/devether.c
@@ -24,6 +24,12 @@
 static int etheroqsize(Ether*);
 static int etheriqsize(Ether*);

+static void
+drop(void*, Block *b)
+{
+ freeb(b);
+}
+
 Chan*
 etherattach(char* spec)
 {
@@ -98,6 +104,7 @@
		if(f->bridge || f->bypass)
			memset(ether->mactab, 0, sizeof(ether->mactab));
		if(f->bypass){
+ qsetbypass(ether->oq, ether->link?  nil: drop);
			qsetlimit(ether->oq, etheroqsize(ether));
			netifsetlimit(ether, etheriqsize(ether));
		}
@@ -307,9 +314,11 @@
	if(NETTYPE(chan->qid.path) != Ndataqid) {
		nn = netifwrite(ether, chan, buf, n);
		if(nn >= 0){
- /* ignore mbps and use large input queue size when bypassed */
+ /* got bypassed?  */
			if(ether->f[NETID(chan->qid.path)]->bypass){
- qflush(ether->oq);
+ /* flush and bypass output queue */
+ qsetbypass(ether->oq, drop);
+ /* ignore mbps and use large input queue size */
				netifsetlimit(ether, MB);
			}
			return nn;
@@ -431,7 +440,7 @@
	ether->irq = -1;
	ether->ctlrno = ctlrno;
	ether->mbps = 10;
- ether->link = 0;
+ ether->link = -1; /* unknown state */
	ether->minmtu = ETHERMINTU;
	ether->maxmtu = ETHERMAXTU;

@@ -497,19 +506,22 @@
 }

 void
-ethersetlink(Ether *ether, int link)
+ethersetlink(Ether *ether, int new)
 {
- link = !!link;
- if(!!ether->link == link)
+ int old = ether->link;
+
+ new = !!new;
+ if(old == new)
		return;
- ether->link = link;
+ ether->link = new;
	if(ether->f == nil || ether->bypass)
		return;
	memset(ether->mactab, 0, sizeof(ether->mactab));
- if(link)
+ qsetbypass(ether->oq, ether->link?  nil: drop);
+ if(ether->link)
		print("#l%d: %s: link up: %dMbps\n",
			ether->ctlrno, ether->type, ether->mbps);
- else
+ else if(old > 0)
		print("#l%d: %s: link down\n",
			ether->ctlrno, ether->type);
 }


Sun Mar 15 11:36:05 EDT 2026
diff d695590dcbf447bee5b1a5c31ead95bc6412621c uncommitted
--- a/sys/src/cmd/gdbfs/gdb.c
+++ b/sys/src/cmd/gdbfs/gdb.c
@@ -11,7 +11,6 @@
 #include "dat.h"

 static char Ebadctl[] = "bad process or channel control request";
-static char Erunning[] = "target is running";
 static char hex[] = "0123456789abcdef";

 /* /proc/$pid/[k]regs holds a Ureg structure for the target platform.
@@ -207,7 +206,7 @@
	if(err != nil){
		werrstr("%s", err);
		free(err);
- chanfree(rc);
+ chanclose(rc);
		return nil;
	}
	return rc;
@@ -249,7 +248,7 @@
		chanclose(rc);
		return nil;
	}
- chanfree(rc);
+ chanclose(rc);

	if(*rsp == 'E'){
		werrstr("%s", rsp);
@@ -280,11 +279,10 @@
	R ← G ack (nil) or err (char*)
	if !err:
		R ← G reply (char*) or err ("E...")
- R ← G close
+ R → G close()

- R may free the channel after the final message.
- R may close the channel if it is interrupted.
- G may free the channel if send() or recv() fail.
+ R closes channel when it goes out of scope
+ G frees channel after receiving close
 */
 static void
 gdbproc(void *)
@@ -295,17 +293,14 @@

	memset(sum, 0, sizeof sum);
	while(rc = recvp(gdb.c)){
- if(recv(rc, &req) < 0){
- chanfree(rc);
- continue;
- }
+ if(recv(rc, &req) < 0)
+ goto next;
+
		tries = 5;
		do{
			dbg("→ %s\n", req);
- if(fprint(gdb.wfd, "%s", req) < 0){
- chanprint(rc, "E.%r");
- goto next;
- }
+ if(fprint(gdb.wfd, "%s", req) < 0)
+ sysfatal("gdbproc send req: %r");
			c = Bgetc(gdb.rb);
			dbg("← %c\n", c);
		} while(c == '-' && tries --> 0);
@@ -324,10 +319,9 @@
		/* Skip notification packets.  These are unsolicited,
		   and must not contain the start-of-packet marker '$' */
		if(Brdline(gdb.rb, '$') == nil
- || Blinelen(gdb.rb) > 0 && fprint(gdb.wfd, "+") < 0)
+ || Blinelen(gdb.rb) > 1 && fprint(gdb.wfd, "+") < 0)
		{
- chanprint(rc, "E.%r");
- goto next;
+ sysfatal("gdbproc scan '$': %r");
		}

		rsp = Brdstr(gdb.rb, '#', 1);
@@ -347,12 +341,11 @@
			free(rsp);
			rsp = smprint("E.ack %r");
		}
- if(sendp(rc, rsp) < 0){
- chanfree(rc);
+ if(sendp(rc, rsp) < 0)
			free(rsp);
- continue;
- }
-next: chanclose(rc);
+next:
+ recv(rc, nil);
+ chanfree(rc);
	}
	chanclose(gdb.c);
 }


Sun Mar 15 11:36:00 EDT 2026


Sun Mar 15 10:49:22 EDT 2026
0 86 '\
1 86 '|
2 86 '



Sun Mar 15 01:05:24 EDT 2026
diff 85b89f574397db1e192a4bd25066cb2c587647f5 uncommitted
--- a/sys/src/cmd/riow.c
+++ b/sys/src/cmd/riow.c
@@ -420,13 +414,19 @@
			break;
		}

- if((mod & Mmod4) == 0 || keyevent(*s, r) != 0){
+ /* FIXME: riow filters everything with mod4; instead we ought
+ * to pass all events incl mod4 itself unless they are caught
+ * as a shortcut, and that includes filtering K counterparts;
+ * compare to raw kbdfs output */
+ if(((mod & Mmod4) == 0 || keyevent(*s, r) != 0) && r != Kmod4){
			memmove(b+o, p, n);
			o += n;
		}
	}
+ if(*s != 'K' && o == 1)
+ return 0;
	b[o++] = 0;
- return (o > 1 && write(1, b, o) <= 0) ? -1 : 0;
+ return write(1, b, o) != o ? -1 : 0;
 }

 static void


next