[Openmcl-devel] Challenge: CCL port to the RPi Pico (RP2040)

Ron Garret ron at flownet.com
Sun Jul 28 10:11:35 PDT 2024


1.  Obtain a tool chain for the Pico and get hello-world running.

2.  Use that tool chain to compile the CCL sources using the Arm32 Makefile.

3.  Write stubs for all the undefined symbols.  The stubs should all be breakpoints.

4  Recompile.

5.  Run the resulting binary and see what happens.   If you're lucky, you will hit a breakpoint in one of your stubs.  Write a functional version of that stub.

6.  Goto 4.

My guess is that the biggest challenge you're going to face is that the ARM Cortex M0 doesn't have an MMU.  AFAIK, the modern CCL GC depends on that.

rg

> On Jul 28, 2024, at 8:37 AM, Jon Boone <ipmonger at delamancha.org> wrote:
> 
> For those who might be interested in such a project, where would one start?  
> 
> — jb
> On Jul 28, 2024 at 10:54 -0400, Tim McNerney <mc at media.mit.edu>, wrote:
>> The popular Raspberry Pi Pico chip (RP2040) is a remarkable microprocessor with memory resources not dissimilar from the Mac 512k, CCL’s debut target. Here are some quick facts. 
>> Dual ARM Cortex-M0+ @ 133MHz
>> 
>> 264kB on-chip SRAM in six independent banks
>> 
>> Support for up to 16MB of off-chip Flash memory via dedicated QSPI bus
>> 
>> Some might argue it’s not comparable to a Mac 512. I claim it is: consider that the RAM would only used for the heap, stack(s), and housekeeping? It is the off-chip flash support that makes all the difference. That’s where you can store static code and data segments that make up the bulk of a CCL image. 
>> 
>> My big questions:
>> 
>> 1) Could this chip run CCL?
>> 
>> 2) Would it be worth the effort?
>> 
>> I think yes on both fronts. A lot of embedded code is truly modest, so a small heap is useful enough. This is the arena where microPython shines—itself sporting a garbage collector. 
>> 
>> 3) Does anyone want to try?
>> 
>> CCL already has 32-bit ARM support. There is no OS interfacing work to do here (only work to make up for the lack of OS). 
>> 
>> This could be a fun little project that would a great way to become familiar with CCL internals without a lot of distractions from OS and GUI issues. First get it working from a serial port console (over Bluetooth maybe?) and focus on embedded applications. Slash and burn the rest, at least for starters. 
>> 
>> --Tim
>> 
>>> On Jul 28, 2024, at 01:32, R. Matthew Emerson <rme at clozure.com> wrote:
>>> 
>>> 
>>> 
>>>> On Jul 27, 2024, at 8:23 PM, Grégory Vanuxem <g.vanuxem at gmail.com> wrote:
>>>> 
>>>> In FriCAS  built on top of Clozure CL I obtain this output in a terminal (WSL2)
>>>> 
>>>> (gamma(x) âÃÂàreals && Re(x) > 0) || (x âÃÂàintegers &&
>>>> gamma(x) âÃÂàreals)
>>>> 
>>>> instead of (SBCL)
>>>> 
>>>> (gamma(x) ∈ reals && Re(x) > 0) || (x ∉ integers && gamma(x) ∈ reals)
>>>> 
>>>> if I (print ...) a string with, for example, ∈, in a pure Clozure CL
>>>> (recently git cloned) this is correctly printed, no problem.
>>>> 
>>>> So I wonder if I have to modify the output stream character encoding
>>>> or the output routine.
>>> 
>>> Check that the external format of the FriCAS output stream is what you expect. In other words, if you pass an explicit :external-format argument to cl:open, make sure it matches what your terminal requires.
>>> 
>>> Doing (describe *terminal-io*) might show something interesting. Here’s what it shows for me:
>>> 
>>> ? (describe *terminal-io*)      
>>> #<ECHOING-TWO-WAY-STREAM input #<BASIC-CHARACTER-INPUT-STREAM UTF-8 (TTY/0) #x1824C7D6>, output #<BASIC-CHARACTER-OUTPUT-STREAM UTF-8 (TTY/1) #x1824C2A6> #x1825FBE6>
>>> Class: #<STANDARD-CLASS ECHOING-TWO-WAY-STREAM>
>>> Wrapper: #<CLASS-WRAPPER ECHOING-TWO-WAY-STREAM #x18039A16>
>>> Instance slots
>>> SHARED-RESOURCE: NIL
>>> OPEN-P: T
>>> INPUT-STREAM: #<BASIC-CHARACTER-INPUT-STREAM UTF-8 (TTY/0) #x1824C7D6>
>>> OUTPUT-STREAM: #<BASIC-CHARACTER-OUTPUT-STREAM UTF-8 (TTY/1) #x1824C2A6>
>>> 
>>> The default external format has been #<EXTERNAL-FORMAT :UTF-8/:UNIX #x18249C6E> for quite a long time now.
>>> 
>>> https://ccl.clozure.com/docs/ccl.html#characters-and-external-formats
>>> 
>>> 
>>>> 
>>>> And more importantly, how can I achieve that?
>>>> 
>>>> - Greg
>>>> 
>>>> PS:
>>>> (1) -> )lisp CCL:*DEFAULT-EXTERNAL-FORMAT*
>>>> Value = :UNIX
>>> 
>>> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.clozure.com/pipermail/openmcl-devel/attachments/20240728/df9b029b/attachment.htm>


More information about the Openmcl-devel mailing list