Chris Owen | 28 Nov 06:44 2013

Fix for Mac OSX 10.8/9 emu drawing issue

Hi, I'm new here, so excuse me if I'm missing some protocol. I've been playing with inferno for a couple of weeks and got annoyed by the drawing issues in emu on Mac OSX reported here:

Anyway, it was a simple fix (for some reason getting an imageref with the whole image rect was giving black). Here is the patch, which seems to work for me:

--- a/emu/MacOSX/win.c Mon Nov 11 15:00:50 2013 +0000
+++ b/emu/MacOSX/win.c Thu Nov 28 06:06:47 2013 +0100
<at> <at> -573,10 +573,12 <at> <at>
  QDBeginCGContext(GetWindowPort(theWindow), &context);
  // The sub-image is relative to our whole screen image.
- CGImageRef subimg = CGImageCreateWithImageInRect(fullScreenImage, rbounds);
+ CGImageRef subimg = CGRectEqualToRect(rbounds, bounds) ?
+ CGImageCreateCopy(fullScreenImage) :
+ CGImageCreateWithImageInRect(fullScreenImage, rbounds);
  // Drawing the sub-image is relative to the window.
- rbounds.origin.y = winRect.bottom - - r.min.y - rbounds.size.height;
+ rbounds.origin.y = winRect.bottom - - rbounds.origin.y - rbounds.size.height;
  CGContextDrawImage(context, rbounds, subimg);
  QDEndCGContext(GetWindowPort(theWindow), &context);
Oleksandr Iakovliev | 20 Nov 20:31 2013

Rpi, dwcusb

Hi Inferno folks,
Have a question for Richard Miller (man with unknown email :) ) regarding dwcusb.
Looks like that I have compiled-in it into native inferno without problems, it looks starting OK on boot (some messages),
but due to much of code, I am not sure how trace/debug and prove that it is really working in some way.
Can you provide some guidance?
Dmitry Novikov | 6 Nov 17:04 2013

Fwd: Delivery Status Notification (Delay)

Anybody's here..?

2013/11/6 Mail Delivery Subsystem <mailer-daemon-gM/>
This is an automatically generated Delivery Status Notification



Delivery to the following recipient has been delayed:

     inferno-list <at>

Message will be retried for 1 more day(s)

Technical details of temporary failure:
The recipient server did not accept our requests to connect. Learn more at
[(10) []:25: Connection timed out]

----- Original message -----

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20120113;
X-Received: by with SMTP id sf6mr1866046lbb.29.1383574367326;
        Mon, 04 Nov 2013 06:12:47 -0800 (PST)
Return-Path: <>
Received: from [] ([])
        by with ESMTPSA id vs11sm22979245lac.3.2013.
        for <>
        (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128);
        Mon, 04 Nov 2013 06:12:46 -0800 (PST)
Message-ID: <>
Date: Mon, 04 Nov 2013 18:12:45 +0400
From: "dmitry.a.novikov <at>" <>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.1.0
MIME-Version: 1.0
To: inferno-list-VZPH4yCFGSzSCDK34cm6iQ@public.gmane.orgm
Subject: Acme UI bug?
References: <e252ea54-be28-4de7-a3b9-7d1d09aeca6c-/> <418ab30a-bfd5-42f3-9204-a43137dfa20f-/>
In-Reply-To: <418ab30a-bfd5-42f3-9204-a43137dfa20f-/>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Hi all,

I've just started learning Inferno and met this issue...
Acme 'Snarf's only the first symbol of those are selected. If I copy
from host (Win7 x64) and 'Paste' into Acme then it works as expected.

Has anyone also met it?
Can anyone provide any help with this issue?

Thanks in advance!

Alexandre Esteves | 24 Sep 00:53 2013

Fwd: dis interpreter report 11 (final)

Segunda-feira, 23 de Setembro de 2013 23:50:26 UTC+1, Alexandre Esteves escreveu:
So, GSOC ended. More importantly, summer is ending, as is my suffering at the hands of 3XºC temperatures.

I expected to have more things done by this point. 
This is mostly my fault for starting work without a proper understanding of the existent code/vm.

Still, a mostly functional single-threaded interpreter is working.
On tests/assembly.dart there's some simple examples for printing factorials or ellapsed time.

The large majority of the Sys module isn't implemented, neither are multiplexing and channels. Modules/linkage also aren't finished.
I'll keep going until at least all these are done, albeit at a lower pace.

The part of the code that's used to simulate C primitives/structs could probably make for a self-contained library, after I do some major improvements and cleanup. Should be useful for emulators and similar things.

For the curious, there's two .txt files on the repository root.
- todo.txt   : list of future improvements is on the repository 
- errata.txt : list of things incorrect/missing on the current documentation

Thanks to Charles, my mentor, and random people on irc that helped me with installing inferno and other annoying stuff.

See you soon

Alexandre Esteves | 18 Sep 16:41 2013

Fwd: dis interpreter report 10

---------- Forwarded message ----------
From: Alexandre Esteves <>
Date: 2013/9/18
Subject: dis interpreter report 10
To: plan9-gsoc-/

So, college started, and time's been tighter. Still working on modules/links. 
An annoying obstacle is that there's zero documentation for pseudo instructions, so I need to rely on the assembler code and output to try and make sense of it all. 
As soon as it's working, I'll implement some Sys module functions to allow running some actual limbo code so people can see things working.
As for channels, they probably won't make it by the 23rd.

You received this message because you are subscribed to a topic in the Google Groups "Plan 9 Google Summer of Code" group.
To unsubscribe from this topic, visit
To unsubscribe from this group and all its topics, send an email to plan9-gsoc+unsubscribe-/
To post to this group, send email to plan9-gsoc-/
Visit this group at
For more options, visit

Alexandre Esteves | 11 Sep 02:15 2013

Fwd: dis interpreter report 9

Quarta-feira, 11 de Setembro de 2013 1:14:21 UTC+1, Alexandre Esteves escreveu:
Been tying up some loose ends related to memory management.
Memory allocation now supports several pools. Each pool uses a splay tree for free blocks and another for used blocks. 
I tried to encapsulate address-pool memory mapping inside a VirtualAddress class. Since Dart doesn't allow subclassing int, and my pointer classes are kind of crappy atm, it's been difficult to work that in, so that functionality is pretty scattered for now.

I'm currently working on module(s) loading.
Rather than a list of instructions, a full module should be loaded, complete with code,data,type descriptors,etc.
There's some preliminary scheduling/channels code in place, but nothing will really work withouth proper modules.
Alexandre Esteves | 5 Sep 16:36 2013

Fwd: dis interpreter report 8

Quinta-feira, 5 de Setembro de 2013 15:05:59 UTC+1, Alexandre Esteves escreveu:
Bit of a slow week, what with the vacation and the airplanes and what not.
I've fixed some bugs with array creating/indexing and some with pointers, both seem to be working okay now.
Need to do some more testing on strings to be sure, but I think it's working with both ascii & runes.

Again, dart reflection is lacking. I cooked up a noSuchMethod for structs/unions that removes the need to tediously add getters/setters. 
Technically, it works, but it floods the entire codebase with warnings. I've googled a bit and it seems the dart team is still discussing how to work around it, so for now I'll keep the getters/setters.

I've also ported the structs and defines of the Sys module, mostly because I was bored and tired and wanted something simple to do.

Alexandre Esteves | 14 Aug 03:16 2013

Fwd: dis interpreter - report 5

---------- Forwarded message ----------
From: <>
Date: 2013/8/14
Subject: dis interpreter - report 5
To: plan9-gsoc-/

Reference types (List, Heap, Reg, Instruction) now work very much like C struct/unions, that is, by accessing their fields, one automagically reads/writes to Dis VM memory. This is very useful for dealing with those objects that absolutely must be in memory addressable by Dis.

I finally have some solid ground to work with. My project loads assembly into proper Inst structures in memory and then, when interpreting, computes/provides an address for each operand from whatever addressing, including the blasphemous immediate addressing. 

The getters/setters used by the implementation functions now correctly return the specified type (either some primitive or a typed pointer). Since the actual operations are done via polymorphism and operator overloading, several instructions ended up with equal implementations in generated code (e.g. andb vs andw vs andl, lenc vs lena vs lens), only different specifications.

As for this week, I should be able to implement most GC related stuff. Currently, when debugging, well, anything, I console-output the memory array as a 16-column grid of bytes in base-16 (poor man's hex editor). This turns very annoying the task of visually tracking double indirect operands and struct/field boundaries. One solution would be to color cells according to the containing type. Dart doesn't seem to support text colors on console yet, so I might end up using a webpage with a <table> for that. I kinda made one way back in week 1, but it stopped working for some reason.

Alexandre Esteves | 7 Aug 00:29 2013

Dis interpreter - report 4

---------- Forwarded message ----------
From: <>
Date: 2013/8/6
Subject: dis interpreter - report 4
To: plan9-gsoc-/

Hello again

There's been a lot of head-banging against my desk this week. Apparently half my stuff is inadequate for one reason or another when faced with GC or even some supposedly trivial nuances. Many low-level things that are straight-forward in C, like the address-of operator (&), or really, most memory-based functionalities heavily conflict with the abstraction layer I'm trying to work with. As a result, my project is following more and more the existing interpreter.

Rather than interpret/execute assembly or object code, I need to first build a Dart representation of the code segment from whichever source, and give it a memory interface for the Dis code. I wanted to do it directly, but it has lead to very ugly code, and horrible program structure.

Technically, the assembler currently works for all instructions and addressing modes, but it will need to be adapted a bit to follow the new design.

The generated functions now get their operands much like the C code, by accessing fields on the R variable. Now they're simpler, and I gained an abstraction level as a bonus, thanks to Dart's getters/setters. An additional file is now generated from the DSL, that creates an object representing each Dis instruction's argument order & type.

You received this message because you are subscribed to a topic in the Google Groups "Plan 9 Google Summer of Code" group.
To unsubscribe from this topic, visit
To unsubscribe from this group and all its topics, send an email to plan9-gsoc+unsubscribe-/
To post to this group, send email to plan9-gsoc-/
Visit this group at
For more options, visit

Jason Catena | 27 Jun 02:19 2013

Goth - Inferno in Go

Go doesn't seem to have an operating system project to prove out its worthiness as a systems language.  At the same time, I would rather write Go than Limbo. And since I use Inferno everyday I would like it to be more lively. But I can't write an operating system alone. So I wondered whether there was community interest in rewriting Inferno in Go, to create a virtualized cross-platform OS layer in Go, and with an extension language also in Go. I was thinking of calling it Goth (Go to Hell), to honor both Go and Inferno. (Seriously, not a joke like gofy).  I would think the first thing to write would be a Go version of emu, but someone might have a better idea.

You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/
For more options, visit
sqweek | 20 Jun 11:56 2013

Floating point exception trying to build 32-bit inferno on 64-bit host

Hey guys,

I'm hitting this problem in hg tip as soon as the build starts trying to run limbo for libinterp:

rm -f runt.h && limbo -a -I../module ../module/runt.m > runt.h
sh: line 1:  7817 Floating point exception(core dumped) limbo -a -I../module ../module/runt.m > $target

I've had a poke around in gdb, and it looks like the exception is happening while evaluating the NaN constant in module/math.m:

NaN: con 0./0.;

I guess it's fair enough for this to raise a floating point exception, the question is why it manifests as a fatal signal rather than the "usual" limbo way, whatever that is. I'm not very familiar with FPE handling, does anyone know the expected chain of events that return NaN for 0./0.?


PS. my diagnosis of the failing expression is based on this info from gdb:

Program received signal SIGFPE, Arithmetic exception.
0x0805b2d9 in foldr (n=n <at> entry=0x81216c0) at nodes.c:1009
1009 rv = left->rval / right->rval;
(gdb) print right->rval
$1 = 0
(gdb) print left->rval
$2 = 0
(gdb) bt
#0  0x0805b2d9 in foldr (n=n <at> entry=0x81216c0) at nodes.c:1009
#1  0x0805c588 in efold (n=n <at> entry=0x81216c0) at nodes.c:591
#2  0x0805c5ea in fold (n=0x81216c0) at nodes.c:353
#3  0x0805c627 in varcom (v=v <at> entry=0x80e8f50) at nodes.c:119
#4  0x0806697b in concheck (n=n <at> entry=0x80e9098, isglobal=isglobal <at> entry=1) at typecheck.c:859
#5  0x080683d0 in gcheck (n=0x80e9098, fns=fns <at> entry=0x0, nfns=nfns <at> entry=0) at typecheck.c:475
#6  0x080682d6 in gcheck (n=0x80e9448, fns=fns <at> entry=0x0, nfns=nfns <at> entry=0) at typecheck.c:444
#7  0x08068362 in gcheck (n=0x80fa390, fns=fns <at> entry=0x8119208, nfns=nfns <at> entry=0) at typecheck.c:464
#8  0x080682d6 in gcheck (n=0x8102eb0, fns=0x8119208, nfns=0) at typecheck.c:444
#9  0x08068a40 in typecheck (checkimp=checkimp <at> entry=0) at typecheck.c:215
#10 0x08074f77 in translate (in=0xffffdb40 "../module/runt.m", out=out <at> entry=0x8097e28 "runt.m.dis", dbg=0x8097e38 "runt.m.sbl") at limbo.y:1889
#11 0x080756e4 in main (argc=1, argv=0xffffd990) at limbo.y:1818

(gdb) frame 4
#4  0x0806697b in concheck (n=n <at> entry=0x80e9098, isglobal=isglobal <at> entry=1) at typecheck.c:859
859 if(!varcom(ids))
(gdb) print *ids->sym
$14 = {token = 57384, name = 0x80e8f40 "NaN", len = 3, hash = 289, next = 0x0, decl = 0x80e8f50, unbound = 0x0}