Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Optiboot/Arduino compatibility #1

Open
sbridger opened this issue Sep 7, 2021 · 5 comments
Open

Optiboot/Arduino compatibility #1

sbridger opened this issue Sep 7, 2021 · 5 comments

Comments

@sbridger
Copy link

sbridger commented Sep 7, 2021

Hi,

This is very much what I wanted some time ago. As they say, "Great minds..." or "fools seldom differ"

I'm not sure if you have just implemented an optiboot-like bootloader for flashforth, or if you have made an optiboot+arduino-compatible bootloader that can load both arduino sketches and optiforth binaries

What I was wanting to achieve is:

  • Make a FF+Optiboot default factory rom for arduinos that runs FF out of the box, but is still fully arduino usable i.e you can load arduino sketches into it. (perhaps/probably losing FF when you do)

  • a FF binary that is loadable into an optiboot/optiforth arduino from the arduino environment without needing an AVR programmer, and without rendering the AVR incompatible with arduino. Once flashed with Optiboot or Optiforth, FF becomes an option for an arduino user to try, without sacrificing arduino compatibility

The endgame is being able to buy an OptibootFlashForth ready to run off aliexpress

Initial discussion about using Optiboot in FF

Optiboot ref to writing flash

@bitflipser
Copy link
Owner

Hi,

I've implemented an Optiboot-LIKE bootloader for my FlashForth-derivate. It's capable of burning Arduino-sketches, but won't start it correctly, because it's left by jumping to the OptiForth-warm-start-vector (in the very last word preceeding the bootloader), instead of jumping to FLASH address 0x0000 to start an Arduino-application.
Furthermore it contains the interrupt-vector-table. Thereby the Do_Spm-vector of actual Optiboot configurations conflicts with the INT0-vector in the OptiForth environment.

Both issues need to be solved to make it an universal Arduino-/OptiForth-bootloader (but there is not a byte left in the bootloader section)

Greets bitflipser

@bitflipser
Copy link
Owner

Hi,

I've implemented an Optiboot-LIKE bootloader for my FlashForth-derivate. It's capable of burning Arduino-sketches, but won't start it correctly, because it's left by jumping to the OptiForth-warm-start-vector (in the very last word preceeding the bootloader), instead of jumping to FLASH address 0x0000 to start an Arduino-application.
(Furthermore it contains the interrupt-vector-table. Thereby the Do_Spm-vector of actual Optiboot configurations conflicts with the INT0-vector in the OptiForth environment.)
Correction:
The Do-Spm-vector resides in the upper word of the Reset-vector. So that's NOT an issue.

(Both issues need) Only this issue needs to be solved to make it an universal Arduino-/OptiForth-bootloader (but there is not a byte left in the bootloader section).

Ideas?

Greets bitflipser

@bitflipser
Copy link
Owner

bitflipser commented Sep 9, 2021

Done! ... in terms of loading and running Arduino sketches the same way Optiboot does, or loading OptiForth5.6d as simple as an Arduino sketch and running it from the 'empty' state (user dictionary empty).

But it's not possible to load FF, OptiForth52 or FF-/OptiForth-binaries! Works with OptiForth56d ONLY.

Try 'OptiForth56d_boot_beta.hex' rsp. 'OptiForth56d_beta.hex'.

Greets bitflipser

@sbridger
Copy link
Author

sbridger commented Sep 10, 2021

Very exciting! I wish I was able to try it at the moment (tools locked-down out of reach)
I see this must be based on your other asmoptiboot project.
I assume that that does not work with the newer parts eg attiny3216 that have different selfwrite flash?
Will optiforth work with Optiboot as is? (given there are optiboots for all variants of avr)
Come to think of it, parhaps it was only the mcudude variants that supported flashwrite, and mainline optiboot doesn't?
Are the changes from Flashforth mainline significant or trivial?

@bitflipser
Copy link
Owner

After some month of trying and testing:
It's not possible to modify OptiForth to work with Optiboot itself, because Optiboot does not contain the interrupt-vector-table, which is essential for OptiForth to function.
So far OptiForth is written and tested for ATmega328/P only. It is optimized for this controller and does not run on other parts of the AVR-family without changes. This is one of the reasons it does not fit to the Flashforth mainline.
And: the changes in code, memory usage and data structure are really significant ... again: it does not fit to the Flashforth mainline.
I now released version 5.6d with fully Optiboot-compatible bootloader.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants