Potrzebuję porady od praktyków.
Muszę umożliwić w Tomku flashowanie pamieci programu z poziomu Atari. I to na dwa sposoby:
1. Zmiana calego firmware
2. Umieszczenie w pamieci flash programu obiektow binarnych (np. bitmap) do wykorzystania w grze.
Punkt 2 jest wzglednie latwy, gorzej z pkt 1.
Problem w tym, ze nietypowy interfejs Atar <--> PIC jakiego uzywam wymusza programową obsluge komunikacji. Mowiac inaczej: PIC musi odebrac od Atari rozkaz "zaprogramuj X bajtow od adresu Y", nastepnie odebrac X bajtow i wywolac sekwencje self-programowania.
I tu pojawia sie problem: co jesli bede chcial upgradowac procedurę programującą? :) Nie moze nadpisac sama siebie, bo sie w pewnym momencie zwiesi :P PIC nie ma niestety mozliwosci przepisania fragmentu kodu do RAM'u i wykonania go stamtad.
Przychodzi mi do glowy takie rozwiazanie: procedura startowa (wektor RESET) zawsze musi byc pod jednym niezmienym adresie w wydzielonym miejscu pamieci programu. Tam umieszcze procedure czekającą na inicjację komunikacji ze strony Atari. Jesli Atari wysle standardową sekwencję inicjującą to procedura skoczy do programu glownego i PIC bedzie czekal na rozkazy. Ale jesli Atari wysle sekwencję oznaczającą programowanie firmware to ta procedura wykona cala operacje odbioru danych i flashowania, a nastepnie skoczy do programu glownego (juz upgradowanego).
Natomiast w programie glownym bedzie obslugiwany rozkaz "flashuj procedure resetu", ktory pozwoli na upgrade powyzszej procedury.
Czy to ma sens? Czy nie mozna prosciej?
Nigdy czegos takiego nie musialem kodowac, wiec wole spytac praktykow zanim sie niepotrzebnie narobie.