From: David R. <da...@ry...> - 2013-07-02 00:33:17
|
"Pascal J. Bourguignon" <pj...@in...> writes: > David Rysdam <da...@ry...> writes: > >> "Pascal J. Bourguignon" <pj...@in...> writes: >>> David Rysdam <da...@ry...> writes: >>> >>>> This is rube goldbergian. I know there are a 100 better ways to solve >>>> this "problem" but my son wants to do it a particular way and I think we >>>> are pretty close. >>>> >>>> We've got a Raspberry Pi. He wants to write a program to run on it in >>>> lisp. But he doesn't want to have to install Linux and run in >>>> userspace. He wants his program to be the operating system, or at least >>>> the only thing running (as another project he wants to boot right into a >>>> game written in lisp). >>> >>> AFAIK, it won't be simple to make clisp run on bare metal. >>> Also, I don't remember anybody working on this problem. >> >> I hadn't even considered booting to CL. That could also be cool. Thanks >> for the ton of info on that idea. > > Oh, so you meant to write a kernel, but not necessarily to include CL in > that kernel? Right. > But since you get the whole CL implementation, you must re-implement the > parts that depend on linux, since you won't have linux. Instead of > using write(2) to print bytes to the terminal, you must call the > function that will output the characters to the device you use to show > text (it can be a serial chip, a USB device, a frame buffer bit map, > whatever). Since you don't have open(2) to open files, you need to > write the function and the device driver that will read data from the > sdcard, or a UBS disk, etc. Yes, this is what I was envisioning. I had gotten as far as realizing I'd need to implement (a small subset of) glibc but hadn't really realized that I'd have to either do this outside of lisp OR modify my lisp. Actually, wait. If there was the equivalent of inline ASM, that would work. Make a (write)/(open)/etc that are just thin lisp wrappers around some inline ARM and call those. > I would advise you to try out Movitz, and see how it's organized. OK. >> I can do this with a native x86 gcc producing arm binaries. But I don't >> know how clisp produces it's binaries. By calling CC? Or does it do it >> itself? > > clisp is written in C, hence the "c" in "clisp". > > So indeed, it runs the compiler referenced in the environment variable > CC, when there's one, or some other default (cc or gcc) otherwise. > > > clisp has an interpreter (written in C), and it has a virtual machine > (written in C) that interprets a lisp-friendly byte-code, and it has a > lisp compiler (written in lisp) that generates this lisp-friendly > byte-code (you can see that with CL:DISASSEMBLE or in the .fas files). > > ccl has native compilers for various processors (x86, ppc, arm). It is > written almost entirely in lisp, plus some assembler and some C. In that case, I think this is what I want. I think I have enough information to take a few stabs at it, fail miserably and then come crawling back to ask more intelligent questions. :) Thanks! |