LWPM Comfort Module/Tworzenie akcji: Różnice pomiędzy wersjami
Linia 42: | Linia 42: | ||
===== Format informacji ===== | ===== Format informacji ===== | ||
− | <code> | + | ;:<code><dane> = <rozmiar> <index> <flagi> <start> <stop> <instrukcja>*</code> |
− | <dane> = <rozmiar> <index> <flagi> <start> <stop> <instrukcja>* | ||
− | </code> | ||
− | <code><rozmiar></code> | + | ;<code><rozmiar></code>: rozmiar danych (1 bajt) w bajtach, tj od pola <code><index></code> do końca ostatniej instrukcji |
− | <code><index></code> | + | ;<code><index></code>: miejsce zapisu o aktualnym stanie akcji. |
− | Dostępne są 4 takie miejsca (<code>00</code> - <code>03</code>). | + | :Dostępne są 4 takie miejsca (<code>00</code> - <code>03</code>). |
− | Każda akcja warunkowa powinna być wykonywana we własnym miejscu (każda powinna mieć inną wartość <code><index></code>) aby akcje ze sobą nie interferowały. Oczywiście akcje będą działały na tym samym indeksie, jednak może być trudno zapanować nad | + | :Każda akcja warunkowa powinna być wykonywana we własnym miejscu (każda powinna mieć inną wartość <code><index></code>) aby akcje ze sobą nie interferowały. Oczywiście akcje będą działały na tym samym indeksie, jednak może być trudno zapanować nad poprawności warunków. |
− | <code><flagi></code> | + | ;<code><flagi></code>: flagi zmieniające zachowanie kalkulatora wyliczającego warunek. |
− | Domyślna wartość to <code>00</code>. | + | :Domyślna wartość to <code>00</code>. |
+ | :Dostępne są następujące flagi: | ||
+ | :;<code>01</code>: w przypadku jakiegokolwiek błędu odczytu któregokolwiek parametru pracy modułu, obliczenia zostaną uznane za poprawne - wynik obliczeń będzie prawidłowo, a wiec może dojść do uruchomienia akcji. Domyślnie jakikolwiek błąd w obliczeniach powoduje, że akcja zostanie przerwana lub się nie uruchomi. | ||
− | + | ;<code><start></code>: określa ilość prawidłowych obliczeń jaka jest wymagana by akcja się uruchomiła. W przypadku gdy wartość jest równa <code>00</code> - akcja wykona się zawsze (wartość ta w zasadzie nie ma większego sensu) | |
− | <code> | + | ;<code><stop></code>: określa ilość prawidłowych obliczeń jaka jest wymagana by akcja się zakończyła. W przypadku gdy wartość jest równa <code>00</code> - akcja zakończy się zawsze (wartość ta w zasadzie nie ma większego sensu) |
− | + | ;<code><instrukcja>*</code>: ciąg instrukcji dla kalkulatora | |
− | |||
− | |||
− | |||
− | <code><instrukcja>*</code> | ||
===== Zasada działania kalkulatora ===== | ===== Zasada działania kalkulatora ===== |
Wersja z 11:07, 28 wrz 2020
Moduł daje możliwość wykonania dowolnej akcji.
W tym miejscu opisany jest format akcji oraz możliwości i polecenia jakie mogą być zawarte w akcji.
Wszystkie liczby i wartości są podane w formacie szesnastkowym (HEX).
Spis treści
Format akcji
Ogólny format akcji przedstawia się następująco:
<informacje o akcji> <ilość powtórzeń> <początek akcji> <koniec akcji> <pętla>
Informacje o akcji
Informacje o akcji zawierają bardziej szczegółowe informacje na temat akcji opisujące przede wszystkim sposób wykonania akcji. Przykładowo można tutaj określić szczegółowo warunki uruchomienia akcji, a także w tym miejscu możesz zdefiniować jak mają wykonywać się poszczególne etapy pętli.
Format danych
<informacje o akcji> = <długość informacji> <informacje>*
<długość informacji>
określa długość wszystkich informacji w bajtach
<informacje>
to szczegółowy opis zachowania akcji. Takich informacji może być kilka dla każdej akcji, przy czym każda musi być innego typu.
Każda informacja jest zapisana w ten sam sposób:
<informacje> = <typ informacji> <długość danych> <dane>
Pierwszym polem jest <typ danych>
(1 bajt) następnie podana jest <długość danych>
w bajtach (1 bajt). Następnie są <dane>
, których format zależy od typu danych.
Informacje o etapach wykonania pętli
<typ informacji> == 1
TODO:
Informacje o warunkach wykonania akcji
<typ informacji> == 2
Ten typ informacji określa szczegółowo, jakie muszą zajść warunki by akcja została uruchomiona.
Format informacji
<dane> = <rozmiar> <index> <flagi> <start> <stop> <instrukcja>*
<rozmiar>
- rozmiar danych (1 bajt) w bajtach, tj od pola
<index>
do końca ostatniej instrukcji
<index>
- miejsce zapisu o aktualnym stanie akcji.
- Dostępne są 4 takie miejsca (
00
-03
). - Każda akcja warunkowa powinna być wykonywana we własnym miejscu (każda powinna mieć inną wartość
<index>
) aby akcje ze sobą nie interferowały. Oczywiście akcje będą działały na tym samym indeksie, jednak może być trudno zapanować nad poprawności warunków.
<flagi>
- flagi zmieniające zachowanie kalkulatora wyliczającego warunek.
- Domyślna wartość to
00
. - Dostępne są następujące flagi:
01
- w przypadku jakiegokolwiek błędu odczytu któregokolwiek parametru pracy modułu, obliczenia zostaną uznane za poprawne - wynik obliczeń będzie prawidłowo, a wiec może dojść do uruchomienia akcji. Domyślnie jakikolwiek błąd w obliczeniach powoduje, że akcja zostanie przerwana lub się nie uruchomi.
<start>
- określa ilość prawidłowych obliczeń jaka jest wymagana by akcja się uruchomiła. W przypadku gdy wartość jest równa
00
- akcja wykona się zawsze (wartość ta w zasadzie nie ma większego sensu)
<stop>
- określa ilość prawidłowych obliczeń jaka jest wymagana by akcja się zakończyła. W przypadku gdy wartość jest równa
00
- akcja zakończy się zawsze (wartość ta w zasadzie nie ma większego sensu)
<instrukcja>*
- ciąg instrukcji dla kalkulatora
Zasada działania kalkulatora
Obliczenia warunku są wykonywane na zasadzie zbliżonej do kalkulatora działającego na zasadzie RPN (odwrócona polska notacja). Tj: najpierw podajemy argumenty instrukcji, następnie operacje jaką chcemy na tych argumentach wykonać. Wynikiem kalkulatora jest wartość 0
jeśli warunek jest niespełniony, lub wartość różna od 0
jeśli warunek jest prawdziwy i kalkulator możesz przejść do uruchomienia akcji (po określonej ilości poprawnych obliczeń).
Kalkulator posiada następujące rejestry:
a
- rejestr 32-bitowy (liczba ze znakiem)
b
- rejestr 32-bitowy (liczba ze znakiem)
save[x]
- 4 elementowa tablica 32-bitowych liczb ze znakiem. Do tymczasowego przechowywania danych. Na tych liczbach nie można wykonywać bezpośrednio operacji - należy je najpierw przenieść do rejestrów a
lub b
.
Dostępne instrukcje
W kalkulatorze dostępnych jest szereg instrukcji które są wykorzystywane do wykonywania obliczeń. W poniższej tabeli jest zestawienie tych instrukcji.