Thread Rating:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Introducing PICL Oberon!
20-01-2016, 07:13 AM,
Introducing PICL Oberon!
The Penguino is a neat project! I ran across it from some posts at the Lazarus forum. I am quite interested in these mini-mcu's. Mainly because I found Professor Wirth's little language called PICL (PIC Language), which is a trimmed down version of Oberon which targets the PIC16c84, specifically.

The entire language is less than 750 lines of code, including the flashing/programmer! Less than 5 pages for a complete language built from the ground up (like it should be) from the inventor of Pascal, no less. The documentation is amazing, like all of Prof Wirth's works. There is also a full featured tutorial which is quite amazing. Simply work through it in a couple of days easily, and you are all set.

PICL is truly "Pascal for MCU's". This is building from scratch vs. forcing a high level language like FPC to target these little mcu's. At some point we are just clobbering a high level language, made for complex multitasking OS's when we need a more ground-up-made-for-single-tasking compiler language. I have only been playing around with it yet in an emulated version of ProjectOberon with no flashing/uploading hardware setup but it seems to be working nicely. The actual system runs on the Oberon RISC5 processor core which runs on an FPGA. ProjectOberon is another exciting story altogether!

It shouldn't be too hard to get PICL to target the PIC18 of the Penguino.

I hope you find this interesting.

The Files:

The Documentation:

The full "Manual"
A Microcontroller System for Experimentation 

The concise EBNF definition of PICL
PICL: A Programming Language for the Microcontroller PIC

The PICL Implementation Details
The Language PICL and its Implementation


PROCEDURE DAConversion(INT d);
 INT i, x;
  BEGIN !~B.1; x := d;
   i := 8;
  REPEAT !~B.1;
  IF d.7 THEN !B.0 ELSE !~B.0 END ;
   !B.1; ROL d; DEC i
  UNTIL i = 0;
   i := 4;
  REPEAT !~B.1; ROL d; !B.1; DEC i
  UNTIL i = 0;
  B := x
END DAConversion

Forum Jump:

Users browsing this thread: 1 Guest(s)