[Tiptoi] tt-homebrew - tttool binary roundtrip

Florian tttool at florian.rgrplay.de
Di Okt 29 12:55:35 CET 2024


Hallo,

> Oder paar Stunden warten, ich glaube, ich weiß, wo ich suchen muss.

Habe das Update gepusht. Es ist nun möglich, die GME-Register zu 
speichern und das Game-Binary zu beenden (einfach $0 auf nicht 4 setzen).


Mit cachix baut das tttool ohne Probleme, alles funktioniert. Bin 
aktuell am überlegen, wie man tttool und tt-homebrew am besten 
kombinieren könnte. Also falls jemand Ideen hat, bin ich offen.


> Hallo,
>
> als eigentlich stiller aber interessierter Mitleser muss ich jetzt 
> doch mal nachfragen: versteh ich das richtig dass ich, wenn ich ne 
> Sprache habe, die Arm64-Binaries (< 64k)erzeugen kann, ich praktisch 
> auch diese verwenden kann? Denn bislang hat mich dabei abgeschreckt 
> das ich C bzw C++ lernen müsste. Ich bin eigentlich Pascal-"Freak"... 
> Und speziell Lazarus (wahrscheinlich geht es auch direkt in der 
> Freepascal-IDE) kann mit etwas Vorarbeit und Konfiguration auch ARM64.

Im Prinzip ja, aber C zu lernen wird der einfachere Weg sein, da man 
keine Standartbibliothek lernen muss, sondern nur den Syntax. Für eine 
andere Programmiersprache müsste man die ganzen C Funktionen wrappen, 
was aktuell die api.h macht. Zudem gibt es auf dem TipToi keinen stdout, 
wodurch ein einfaches Hello World nicht klappt. Aber man könnte es in 
das tt-homebrew Repo hinzufügen, man müsste nur die Makefile ändern.


Ps. Es ist arm32 kein arm64



Mit freundlichen Grüßen,

Florian


On 29.10.24 09:09, Florian via tiptoi wrote:
>
> Hallo,
>
> solange das Spiel läuft, wird die Main-Funktion 10 mal in der Sekunde 
> aufgerufen. Der Code in  if (api->fpAkOidPara[First_time_exec] == 0) 
> {} wird einmal ausgeführt. Beim 2.mal Ausführen wird done niemals auf 
> true gesetzt, und die Binary loopt für immer. Das erkennt ein Watchdog 
> und resetet den TipToi.
>
> Wichtig: Die Main-Funktion muss innerhalb von weniger als einer 
> Sekunde returnen, sonst crasht der Stift. (Hätte ich vllt irgendwo in 
> die Readme schreiben sollen)
>
>> Wie wahrscheinlich ist es, dass eine der tbd Positionen in der Api ein
>> terminate oder exit Funktion ist?
> 100%, das machen die ganzen Spiele so. Es ist auch möglich, von einer 
> Binary eine andere zu Starten.
>
> Fürs erste würde ich ein playSoundNow() nehmen, was den Spieler 
> auffordert, auf eine Oid zu tippen, welche "|FAFF| (written |C|): 
> Cancel game mode." enthält. Oder paar Stunden warten, ich glaube, ich 
> weiß, wo ich suchen muss.
>
>
> Mit freundlichen Grüßen,
>
> Florian
>
>
>
> On 29.10.24 08:35, Jens Georg via tiptoi wrote:
>> Hallo Florian und Joachim,
>>
>> schon mal vielen Dank für eure Arbeit.
>>
>> Das kombinieren von eigenen yaml Files und binaries mit der neuen
>> tttool rewrite Funktion klappt super ;-).
>>
>> Ich habe eine kleines tiptoi "spiel" geschrieben um die
>> save_gme_registers binary aus dem tt-homebrew repo zu testen. Das
>> Speichern klappt schon mal ;-). Das Problem ist, wie von dir
>> befürchtet, das Terminieren des "subgames". Zum Testen habe ich den
>> Loop nach dem Speichern mit einem Boolean terminiert (siehe unten).Das
>> hat aber nur den Effekt, das sich der Stift nach dem Speichern selbst
>> ausschaltet.
>>
>> Wie wahrscheinlich ist es, dass eine der tbd Positionen in der Api ein
>> terminate oder exit Funktion ist?
>>
>> VG Jens
>>
>> #include "api.h"
>> #include "sdk.c"
>> #include <stdbool.h>
>>
>> void main(system_api *apiPara) {
>>      initTT(apiPara);
>>      bool done = false;
>>
>>      while (!done) {
>>          if (api->fpAkOidPara[First_time_exec] == 0) {
>>              api->fpAkOidPara[First_time_exec] = 1;
>>              
>>              if (api->gme_registers[5] == 0) {
>>                  // Load game
>>                  int file = api->open(L"B:/tt-homebrew.save", 0, 0);
>>                  api->read(file, api->gme_registers,
>> *api->gme_register_count * 2);
>>                  api->close(file);
>>                  done = true;
>>              } else if (api->gme_registers[5] == 1) {
>>                  // Save game
>>                  int file = api->open(L"B:/tt-homebrew.save", 1, 1);
>>                  api->write(file, api->gme_registers,
>> *api->gme_register_count * 2);
>>                  api->close(file);
>>
>>                  // Set flag to end loop
>>                  done = true;
>>              }
>>          }
>>      }
>> }
>>
>>
>>
>>
>
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <https://lists.nomeata.de/pipermail/tiptoi/attachments/20241029/870b9354/attachment.htm>


Mehr Informationen über die Mailingliste tiptoi