functional mcu programming
DESCRIPTION
Functional MCU programmingTRANSCRIPT
Functional MCU programmingFunctional MCU programmingFunctional MCU programmingFunctional MCU programmingFunctional MCU programming
Metasepi Project / Kiwamu OkabeMetasepi Project / Kiwamu OkabeMetasepi Project / Kiwamu OkabeMetasepi Project / Kiwamu OkabeMetasepi Project / Kiwamu Okabe
Who am I ?Who am I ?Who am I ?Who am I ?Who am I ?
☆ http://www.masterq.net/☆ http://www.masterq.net/☆ http://www.masterq.net/☆ http://www.masterq.net/☆ http://www.masterq.net/
☆ Twitter: @master_q☆ Twitter: @master_q☆ Twitter: @master_q☆ Twitter: @master_q☆ Twitter: @master_q
☆ Organizer of Metasepi Project☆ Organizer of Metasepi Project☆ Organizer of Metasepi Project☆ Organizer of Metasepi Project☆ Organizer of Metasepi Project
☆ A developer of Ajhc Haskell compiler☆ A developer of Ajhc Haskell compiler☆ A developer of Ajhc Haskell compiler☆ A developer of Ajhc Haskell compiler☆ A developer of Ajhc Haskell compiler
☆ A Debian Maintainer☆ A Debian Maintainer☆ A Debian Maintainer☆ A Debian Maintainer☆ A Debian Maintainer
☆ 10 years' experience in developing OS using NetBSD☆ 10 years' experience in developing OS using NetBSD☆ 10 years' experience in developing OS using NetBSD☆ 10 years' experience in developing OS using NetBSD☆ 10 years' experience in developing OS using NetBSD
Kick off workshop at Nagoya !Kick off workshop at Nagoya !Kick off workshop at Nagoya !Kick off workshop at Nagoya !Kick off workshop at Nagoya !
Functional MCU programing workshopFunctional MCU programing workshopFunctional MCU programing workshopFunctional MCU programing workshopFunctional MCU programing workshop
☆ At Nagoya☆ At Nagoya☆ At Nagoya☆ At Nagoya☆ At Nagoya
☆ Meeting minutes☆ Meeting minutes☆ Meeting minutes☆ Meeting minutes☆ Meeting minuteshttp://metasepi.org/posts/2014-01-05-mbed_fp_0.htmlhttp://metasepi.org/posts/2014-01-05-mbed_fp_0.htmlhttp://metasepi.org/posts/2014-01-05-mbed_fp_0.htmlhttp://metasepi.org/posts/2014-01-05-mbed_fp_0.htmlhttp://metasepi.org/posts/2014-01-05-mbed_fp_0.html
☆ Now planning the next workshop...☆ Now planning the next workshop...☆ Now planning the next workshop...☆ Now planning the next workshop...☆ Now planning the next workshop...
Why functional lang for MCU?Why functional lang for MCU?Why functional lang for MCU?Why functional lang for MCU?Why functional lang for MCU?
☆ Internet of Things (IoT)☆ Internet of Things (IoT)☆ Internet of Things (IoT)☆ Internet of Things (IoT)☆ Internet of Things (IoT)
☆ We will live in IoT world☆ We will live in IoT world☆ We will live in IoT world☆ We will live in IoT world☆ We will live in IoT world
☆ Can't debug IoT device on the field☆ Can't debug IoT device on the field☆ Can't debug IoT device on the field☆ Can't debug IoT device on the field☆ Can't debug IoT device on the field
☆ Should avoid runtime error☆ Should avoid runtime error☆ Should avoid runtime error☆ Should avoid runtime error☆ Should avoid runtime error
☆ We need strong type !☆ We need strong type !☆ We need strong type !☆ We need strong type !☆ We need strong type !
What is functional app?What is functional app?What is functional app?What is functional app?What is functional app?
Choice of cross compilerChoice of cross compilerChoice of cross compilerChoice of cross compilerChoice of cross compiler
Cross compiler: (A)jhcCross compiler: (A)jhcCross compiler: (A)jhcCross compiler: (A)jhcCross compiler: (A)jhc
http://ajhc.metasepi.org/http://ajhc.metasepi.org/http://ajhc.metasepi.org/http://ajhc.metasepi.org/http://ajhc.metasepi.org/
☆ Language: Haskell☆ Language: Haskell☆ Language: Haskell☆ Language: Haskell☆ Language: Haskell
☆ Haskell language is major !☆ Haskell language is major !☆ Haskell language is major !☆ Haskell language is major !☆ Haskell language is major !
☆ Need GC heap = Need more memory☆ Need GC heap = Need more memory☆ Need GC heap = Need more memory☆ Need GC heap = Need more memory☆ Need GC heap = Need more memory
☆ Experience running on MCU☆ Experience running on MCU☆ Experience running on MCU☆ Experience running on MCU☆ Experience running on MCUARM Cortex-Mhttps://github.com/ajhc/demo-cortex-m3ARM Cortex-Mhttps://github.com/ajhc/demo-cortex-m3ARM Cortex-Mhttps://github.com/ajhc/demo-cortex-m3ARM Cortex-Mhttps://github.com/ajhc/demo-cortex-m3ARM Cortex-Mhttps://github.com/ajhc/demo-cortex-m3
Cross compiler: ATSCross compiler: ATSCross compiler: ATSCross compiler: ATSCross compiler: ATS
http://www.ats-lang.org/http://www.ats-lang.org/http://www.ats-lang.org/http://www.ats-lang.org/http://www.ats-lang.org/
☆ Language: ML☆ Language: ML☆ Language: ML☆ Language: ML☆ Language: ML
☆ Optional GC = Need low memory☆ Optional GC = Need low memory☆ Optional GC = Need low memory☆ Optional GC = Need low memory☆ Optional GC = Need low memory
☆ No experience running on MCU☆ No experience running on MCU☆ No experience running on MCU☆ No experience running on MCU☆ No experience running on MCU
☆ Document translated into Japanese☆ Document translated into Japanese☆ Document translated into Japanese☆ Document translated into Japanese☆ Document translated into Japanese
http://jats-ug.metasepi.org/http://jats-ug.metasepi.org/http://jats-ug.metasepi.org/http://jats-ug.metasepi.org/http://jats-ug.metasepi.org/
Cross compiler: RustCross compiler: RustCross compiler: RustCross compiler: RustCross compiler: Rust
http://www.rust-lang.org/http://www.rust-lang.org/http://www.rust-lang.org/http://www.rust-lang.org/http://www.rust-lang.org/
☆ Language: Own syntax like C or JS☆ Language: Own syntax like C or JS☆ Language: Own syntax like C or JS☆ Language: Own syntax like C or JS☆ Language: Own syntax like C or JS
☆ Optional GC = Need low memory☆ Optional GC = Need low memory☆ Optional GC = Need low memory☆ Optional GC = Need low memory☆ Optional GC = Need low memory
☆ Experience running on MCU☆ Experience running on MCU☆ Experience running on MCU☆ Experience running on MCU☆ Experience running on MCUARM Cortex-Mhttps://github.com/neykov/armbootARM Cortex-Mhttps://github.com/neykov/armbootARM Cortex-Mhttps://github.com/neykov/armbootARM Cortex-Mhttps://github.com/neykov/armbootARM Cortex-Mhttps://github.com/neykov/armboot
☆ Developing by Mozilla☆ Developing by Mozilla☆ Developing by Mozilla☆ Developing by Mozilla☆ Developing by Mozilla
☆ @pirapira knows the detail of it☆ @pirapira knows the detail of it☆ @pirapira knows the detail of it☆ @pirapira knows the detail of it☆ @pirapira knows the detail of it
Choice of MCU boardChoice of MCU boardChoice of MCU boardChoice of MCU boardChoice of MCU board
Which MCU? Of course mbed!?Which MCU? Of course mbed!?Which MCU? Of course mbed!?Which MCU? Of course mbed!?Which MCU? Of course mbed!?
Why?Why?Why?Why?Why?
☆ Major☆ Major☆ Major☆ Major☆ Major
☆ 32bit☆ 32bit☆ 32bit☆ 32bit☆ 32bit
☆ Large memory size (> 20kB)☆ Large memory size (> 20kB)☆ Large memory size (> 20kB)☆ Large memory size (> 20kB)☆ Large memory size (> 20kB)
☆ Debugger☆ Debugger☆ Debugger☆ Debugger☆ Debugger
☆ Ethernet☆ Ethernet☆ Ethernet☆ Ethernet☆ Ethernet
Which board is good for us...Which board is good for us...Which board is good for us...Which board is good for us...Which board is good for us...
☆ mbed LPC1768 (¥5,200)☆ mbed LPC1768 (¥5,200)☆ mbed LPC1768 (¥5,200)☆ mbed LPC1768 (¥5,200)☆ mbed LPC1768 (¥5,200)RAM 32kB+32kBEthernethttps://mbed.org/platforms/mbed-LPC1768/
RAM 32kB+32kBEthernethttps://mbed.org/platforms/mbed-LPC1768/
RAM 32kB+32kBEthernethttps://mbed.org/platforms/mbed-LPC1768/
RAM 32kB+32kBEthernethttps://mbed.org/platforms/mbed-LPC1768/
RAM 32kB+32kBEthernethttps://mbed.org/platforms/mbed-LPC1768/
☆ Seeeduino Arch Pro ($43.41)☆ Seeeduino Arch Pro ($43.41)☆ Seeeduino Arch Pro ($43.41)☆ Seeeduino Arch Pro ($43.41)☆ Seeeduino Arch Pro ($43.41)RAM 32kB+32kBEthernethttp://www.seeedstudio.com/depot/arch-pro-p-1677.html
RAM 32kB+32kBEthernethttp://www.seeedstudio.com/depot/arch-pro-p-1677.html
RAM 32kB+32kBEthernethttp://www.seeedstudio.com/depot/arch-pro-p-1677.html
RAM 32kB+32kBEthernethttp://www.seeedstudio.com/depot/arch-pro-p-1677.html
RAM 32kB+32kBEthernethttp://www.seeedstudio.com/depot/arch-pro-p-1677.html
☆ FRDM-KL46Z (¥1,634)☆ FRDM-KL46Z (¥1,634)☆ FRDM-KL46Z (¥1,634)☆ FRDM-KL46Z (¥1,634)☆ FRDM-KL46Z (¥1,634)RAM 32kBNo Ethernethttp://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=FRDM-KL46Z
RAM 32kBNo Ethernethttp://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=FRDM-KL46Z
RAM 32kBNo Ethernethttp://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=FRDM-KL46Z
RAM 32kBNo Ethernethttp://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=FRDM-KL46Z
RAM 32kBNo Ethernethttp://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=FRDM-KL46Z
Choice of debuggerChoice of debuggerChoice of debuggerChoice of debuggerChoice of debugger
gdbserver: pyOCDgdbserver: pyOCDgdbserver: pyOCDgdbserver: pyOCDgdbserver: pyOCD
https://github.com/mbedmicro/pyOCDhttps://github.com/mbedmicro/pyOCDhttps://github.com/mbedmicro/pyOCDhttps://github.com/mbedmicro/pyOCDhttps://github.com/mbedmicro/pyOCD
☆ Only for MCU using CMSIS-DAP☆ Only for MCU using CMSIS-DAP☆ Only for MCU using CMSIS-DAP☆ Only for MCU using CMSIS-DAP☆ Only for MCU using CMSIS-DAP
☆ But now support only mbed LPC1768☆ But now support only mbed LPC1768☆ But now support only mbed LPC1768☆ But now support only mbed LPC1768☆ But now support only mbed LPC1768
☆ In future, support more board ?☆ In future, support more board ?☆ In future, support more board ?☆ In future, support more board ?☆ In future, support more board ?
gdbserver: OpenOCDgdbserver: OpenOCDgdbserver: OpenOCDgdbserver: OpenOCDgdbserver: OpenOCD
http://openocd.sourceforge.net/http://openocd.sourceforge.net/http://openocd.sourceforge.net/http://openocd.sourceforge.net/http://openocd.sourceforge.net/
☆ Comming CMSIS-DAP support!☆ Comming CMSIS-DAP support!☆ Comming CMSIS-DAP support!☆ Comming CMSIS-DAP support!☆ Comming CMSIS-DAP support!
☆ Need HIDAPI library☆ Need HIDAPI library☆ Need HIDAPI library☆ Need HIDAPI library☆ Need HIDAPI library
http://www.signal11.us/oss/hidapi/http://www.signal11.us/oss/hidapi/http://www.signal11.us/oss/hidapi/http://www.signal11.us/oss/hidapi/http://www.signal11.us/oss/hidapi/
OpenOCD enabling CMSIS-DAPOpenOCD enabling CMSIS-DAPOpenOCD enabling CMSIS-DAPOpenOCD enabling CMSIS-DAPOpenOCD enabling CMSIS-DAP$ git clone git://github.com/signal11/hidapi.git$ cd hidapi$ ./bootstrap$ ./configure$ make$ sudo make install
$ git clone git://github.com/signal11/hidapi.git$ cd hidapi$ ./bootstrap$ ./configure$ make$ sudo make install
$ git clone git://github.com/signal11/hidapi.git$ cd hidapi$ ./bootstrap$ ./configure$ make$ sudo make install
$ git clone git://github.com/signal11/hidapi.git$ cd hidapi$ ./bootstrap$ ./configure$ make$ sudo make install
$ git clone git://github.com/signal11/hidapi.git$ cd hidapi$ ./bootstrap$ ./configure$ make$ sudo make install
$ git clone https://github.com/master-q/openocd.git$ cd openocd$ git checkout masterq-mbedfest-201401$ ./bootstrap$ ./configure --enable-cmsis-dap--ship--Olimex ARM-JTAG-EW Programmer yes (auto)CMSIS-DAP Compliant Debugger yes$ make
$ git clone https://github.com/master-q/openocd.git$ cd openocd$ git checkout masterq-mbedfest-201401$ ./bootstrap$ ./configure --enable-cmsis-dap--ship--Olimex ARM-JTAG-EW Programmer yes (auto)CMSIS-DAP Compliant Debugger yes$ make
$ git clone https://github.com/master-q/openocd.git$ cd openocd$ git checkout masterq-mbedfest-201401$ ./bootstrap$ ./configure --enable-cmsis-dap--ship--Olimex ARM-JTAG-EW Programmer yes (auto)CMSIS-DAP Compliant Debugger yes$ make
$ git clone https://github.com/master-q/openocd.git$ cd openocd$ git checkout masterq-mbedfest-201401$ ./bootstrap$ ./configure --enable-cmsis-dap--ship--Olimex ARM-JTAG-EW Programmer yes (auto)CMSIS-DAP Compliant Debugger yes$ make
$ git clone https://github.com/master-q/openocd.git$ cd openocd$ git checkout masterq-mbedfest-201401$ ./bootstrap$ ./configure --enable-cmsis-dap--ship--Olimex ARM-JTAG-EW Programmer yes (auto)CMSIS-DAP Compliant Debugger yes$ make
Some time the following FRDM-KL46Z patch is useful.http://permalink.gmane.org/gmane.comp.debugging.openocd.devel/24258Some time the following FRDM-KL46Z patch is useful.http://permalink.gmane.org/gmane.comp.debugging.openocd.devel/24258Some time the following FRDM-KL46Z patch is useful.http://permalink.gmane.org/gmane.comp.debugging.openocd.devel/24258Some time the following FRDM-KL46Z patch is useful.http://permalink.gmane.org/gmane.comp.debugging.openocd.devel/24258Some time the following FRDM-KL46Z patch is useful.http://permalink.gmane.org/gmane.comp.debugging.openocd.devel/24258
On mbed LPC1768On mbed LPC1768On mbed LPC1768On mbed LPC1768On mbed LPC1768$ sudo ./src/openocd -f tcl/board/mbed-lpc1768.cfg$ sudo ./src/openocd -f tcl/board/mbed-lpc1768.cfg$ sudo ./src/openocd -f tcl/board/mbed-lpc1768.cfg$ sudo ./src/openocd -f tcl/board/mbed-lpc1768.cfg$ sudo ./src/openocd -f tcl/board/mbed-lpc1768.cfg
$ arm-none-eabi-gdb Blink.elf(gdb) target remote localhost:3333(gdb) monitor reset halt(gdb) load
$ arm-none-eabi-gdb Blink.elf(gdb) target remote localhost:3333(gdb) monitor reset halt(gdb) load
$ arm-none-eabi-gdb Blink.elf(gdb) target remote localhost:3333(gdb) monitor reset halt(gdb) load
$ arm-none-eabi-gdb Blink.elf(gdb) target remote localhost:3333(gdb) monitor reset halt(gdb) load
$ arm-none-eabi-gdb Blink.elf(gdb) target remote localhost:3333(gdb) monitor reset halt(gdb) load
Push hard rest button.Push hard rest button.Push hard rest button.Push hard rest button.Push hard rest button.(gdb) c(gdb) c(gdb) c(gdb) c(gdb) c
But too slow...But too slow...But too slow...But too slow...But too slow...Transfer rate: 50 bytes/sec, 3818 bytes/write.Transfer rate: 50 bytes/sec, 3818 bytes/write.Transfer rate: 50 bytes/sec, 3818 bytes/write.Transfer rate: 50 bytes/sec, 3818 bytes/write.Transfer rate: 50 bytes/sec, 3818 bytes/write.
:(:(:(:(:(
On Seeeduino Arch ProOn Seeeduino Arch ProOn Seeeduino Arch ProOn Seeeduino Arch ProOn Seeeduino Arch Pro
Same as mbed LPC1768.Same as mbed LPC1768.Same as mbed LPC1768.Same as mbed LPC1768.Same as mbed LPC1768.
On FRDM-KL46ZOn FRDM-KL46ZOn FRDM-KL46ZOn FRDM-KL46ZOn FRDM-KL46ZUse project at https://github.com/0xc0170/kinetis_klxx_gcc.Use project at https://github.com/0xc0170/kinetis_klxx_gcc.Use project at https://github.com/0xc0170/kinetis_klxx_gcc.Use project at https://github.com/0xc0170/kinetis_klxx_gcc.Use project at https://github.com/0xc0170/kinetis_klxx_gcc.
$ sudo ./src/openocd -f tcl/board/frdm-kl46z.cfg--snip--cortex_m reset_config sysresetreqInfo : CMSIS-DAP: FW Version = 1.0Info : SWCLK/TCK = 0 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1Info : DAP_SWJ Sequence (reset: 50+ '1' followed by 0)Info : CMSIS-DAP: Interface readyInfo : clock speed 100 kHzInfo : IDCODE 0x0bc11477Info : MKL46Z256VLL4.cpu: hardware has 2 breakpoints, 2 watchpointsInfo : accepting 'gdb' connection from 3333Warn : Cannot communicate... target not halted.Error: auto_probe failedError: Connect failed. Consider setting up a gdb-attach event for the target to prepare.Error: attempted 'gdb' connection rejected
$ sudo ./src/openocd -f tcl/board/frdm-kl46z.cfg--snip--cortex_m reset_config sysresetreqInfo : CMSIS-DAP: FW Version = 1.0Info : SWCLK/TCK = 0 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1Info : DAP_SWJ Sequence (reset: 50+ '1' followed by 0)Info : CMSIS-DAP: Interface readyInfo : clock speed 100 kHzInfo : IDCODE 0x0bc11477Info : MKL46Z256VLL4.cpu: hardware has 2 breakpoints, 2 watchpointsInfo : accepting 'gdb' connection from 3333Warn : Cannot communicate... target not halted.Error: auto_probe failedError: Connect failed. Consider setting up a gdb-attach event for the target to prepare.Error: attempted 'gdb' connection rejected
$ sudo ./src/openocd -f tcl/board/frdm-kl46z.cfg--snip--cortex_m reset_config sysresetreqInfo : CMSIS-DAP: FW Version = 1.0Info : SWCLK/TCK = 0 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1Info : DAP_SWJ Sequence (reset: 50+ '1' followed by 0)Info : CMSIS-DAP: Interface readyInfo : clock speed 100 kHzInfo : IDCODE 0x0bc11477Info : MKL46Z256VLL4.cpu: hardware has 2 breakpoints, 2 watchpointsInfo : accepting 'gdb' connection from 3333Warn : Cannot communicate... target not halted.Error: auto_probe failedError: Connect failed. Consider setting up a gdb-attach event for the target to prepare.Error: attempted 'gdb' connection rejected
$ sudo ./src/openocd -f tcl/board/frdm-kl46z.cfg--snip--cortex_m reset_config sysresetreqInfo : CMSIS-DAP: FW Version = 1.0Info : SWCLK/TCK = 0 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1Info : DAP_SWJ Sequence (reset: 50+ '1' followed by 0)Info : CMSIS-DAP: Interface readyInfo : clock speed 100 kHzInfo : IDCODE 0x0bc11477Info : MKL46Z256VLL4.cpu: hardware has 2 breakpoints, 2 watchpointsInfo : accepting 'gdb' connection from 3333Warn : Cannot communicate... target not halted.Error: auto_probe failedError: Connect failed. Consider setting up a gdb-attach event for the target to prepare.Error: attempted 'gdb' connection rejected
$ sudo ./src/openocd -f tcl/board/frdm-kl46z.cfg--snip--cortex_m reset_config sysresetreqInfo : CMSIS-DAP: FW Version = 1.0Info : SWCLK/TCK = 0 SWDIO/TMS = 1 TDI = 0 TDO = 0 nTRST = 0 nRESET = 1Info : DAP_SWJ Sequence (reset: 50+ '1' followed by 0)Info : CMSIS-DAP: Interface readyInfo : clock speed 100 kHzInfo : IDCODE 0x0bc11477Info : MKL46Z256VLL4.cpu: hardware has 2 breakpoints, 2 watchpointsInfo : accepting 'gdb' connection from 3333Warn : Cannot communicate... target not halted.Error: auto_probe failedError: Connect failed. Consider setting up a gdb-attach event for the target to prepare.Error: attempted 'gdb' connection rejected
X(X(X(X(X(
Be a hacker such as ねむいさんBe a hacker such as ねむいさんBe a hacker such as ねむいさんBe a hacker such as ねむいさんBe a hacker such as ねむいさん
http://nemuisan.blog.bai.ne.jp/http://nemuisan.blog.bai.ne.jp/http://nemuisan.blog.bai.ne.jp/http://nemuisan.blog.bai.ne.jp/http://nemuisan.blog.bai.ne.jp/
☆ OpenOCD hacker☆ OpenOCD hacker☆ OpenOCD hacker☆ OpenOCD hacker☆ OpenOCD hacker
☆ There is his patch at following URL☆ There is his patch at following URL☆ There is his patch at following URL☆ There is his patch at following URL☆ There is his patch at following URLhttp://nemuisan.blog.bai.ne.jp/?eid=192848#OPENOCDhttp://nemuisan.blog.bai.ne.jp/?eid=192848#OPENOCDhttp://nemuisan.blog.bai.ne.jp/?eid=192848#OPENOCDhttp://nemuisan.blog.bai.ne.jp/?eid=192848#OPENOCDhttp://nemuisan.blog.bai.ne.jp/?eid=192848#OPENOCD
Functional programming fanzineFunctional programming fanzineFunctional programming fanzineFunctional programming fanzineFunctional programming fanzine
☆ http://www.paraiso-lang.org/ikmsm/☆ http://www.paraiso-lang.org/ikmsm/☆ http://www.paraiso-lang.org/ikmsm/☆ http://www.paraiso-lang.org/ikmsm/☆ http://www.paraiso-lang.org/ikmsm/
☆ About Haskell or OCaml or . . .☆ About Haskell or OCaml or . . .☆ About Haskell or OCaml or . . .☆ About Haskell or OCaml or . . .☆ About Haskell or OCaml or . . .
☆ About Ajhc in C84 book☆ About Ajhc in C84 book☆ About Ajhc in C84 book☆ About Ajhc in C84 book☆ About Ajhc in C84 book
☆ About Android app with Haskell in C85 book☆ About Android app with Haskell in C85 book☆ About Android app with Haskell in C85 book☆ About Android app with Haskell in C85 book☆ About Android app with Haskell in C85 book
☆ Call me if you read it!☆ Call me if you read it!☆ Call me if you read it!☆ Call me if you read it!☆ Call me if you read it!http://www.paraiso-lang.org/ikmsm/books/c85.htmlhttp://www.paraiso-lang.org/ikmsm/books/c85.htmlhttp://www.paraiso-lang.org/ikmsm/books/c85.htmlhttp://www.paraiso-lang.org/ikmsm/books/c85.htmlhttp://www.paraiso-lang.org/ikmsm/books/c85.html