|
NKC Forum |
| Author | Topic: Dateiaustausch PC <--> NKC68k |
|---|---|
|
smed Stammgast ![]() ![]() ID # 114 ![]() |
Posted on April 02, 2021 10:48 AM (#41)
Quote
PM E-mail
Hallo Jens,
>man GP-Aufrufe am einfachsten programmiert Klar, das das Deine erste Mission ist ![]() Erst kommt eine lange Antwort, dann der Verweis auf wie Thorsten das in seiner CLIB geloest hat... Da habe ich ganz schoen rumprobiert, eine wirklich perfekte Loesung habe ich nicht wirklich, ist aber natuerlich machbar. Das Problem ist so kompliziert wie es trivial ist: Wie kriegt man gcc dazu Funktions- Uebergabewerte (garantiert) in entsprechenden Register zu schreiben? Das Keyword hierfuer ist ABI und geht ins gcc Eingemachte ! Google mal "gcc m68k ABI" https://bumbershootsoft.wordpress.com/2018/03/10/variations-on-the-68000-abi/ Schau dir mal das Assembler Listing von einem einfachen Funktionsaufruf an: typedef unsigned char byte; // .b typedef unsigned short word; // .w word hello(byte a, byte b) { return a + b; } int result; void _start() { // _start ist default start, nicht main() result = hello(10, 20); } In welches Register a und b geladen werden und wo der Rueckgabewert ist, beschreibt die gcc ABI, und die sieht (wenn ich mich jetzt recht erinnere) beim gcc m68k Wertuebergabe per Stack vor. Um Werte in Register zu zwingen, kann der inline Assembler helfen, allerdings braucht man die Funktionen des "GCC extended asm". https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html Der (moegliche) clash kommt bei der Optimierung, die moechte die Lufthoheit ueber Registervergabe haben, das mach ja einen groessen Teil der Optimierung aus. Wenn man die Optimierung abschaltet (-O weglassen) bekommt man besser vorhersehbare Registerzuweisungen, aber auch nicht garantiert. Den extended gcc asm kann ich nicht wirklich empfehlen. Thorsten hat GP Aufrufe in seiner CLIB geloesst und eine library in GNU Assembler geschrieben die dann einfach dazugelinkt wird, das file ist: NKC-CLIB-master\nkc\llnkc.S Er hat einen wrapper um jeden GP Aufruf (per TRAP) die die Werte vom Stack in die Register umschaufelt und dann den Trap ausloesst. Das funktioniert sicher. Da ich fuer meine Spiele keine GP Aufrufe brauche habe ich das nicht weiterverfolgt. Das ist auch viel zu langsam fuer mich, vom Stack in Register, dann noch der TRAP...zu lagsam fuer Spiele. Fur JADOS etc natuerlich kein Problem. BTW, Thorsten hat auch die entsprechended routinen fuer malloc() usw. geschrieben. Fuer SpaceInvaders & Co brauchte ich das aber nicht. Ich hoffe das ist einigermassen verstaendlich, ist alles 1 Jahr her, als die Shamus Demo fertig war, habe ich den NKC auseinadergebaut und eingemottet - kann also nicht mal schnell ausprobieren. Gruss smed ----------------------- NKC'ler seit 1984 (Pause zw. 1988-2017) CPU68k,CPU68000,4xROA64,6xIOE,6xGDP,GDPHS,8xSBC2/3,HEXIO,6xKEY,UHR3,PROMER,CENT,SER,SOUND,CAS,6xBUS2,4xBUS3,3xPOW5V,2xTAST..und einen ArduinoMEGA mit auf dem BUS, und eine selbstgebastelte MEM960k und eine FPGA-GDP. NKC - OpenSource since 1983 |
Posts: 308 | Member since: January 2011 | IP address: not saved | |
|
smed Stammgast ![]() ![]() ID # 114 ![]() |
Posted on April 02, 2021 01:11 PM (#42)
Quote
PM E-mail
...noch ein Tipp, wie gesagt es wird nix von gcc mit eingelinkt, also auch nicht sowas sinnvolles wie eine startup sequenz die zB das RAM an den Stellen wo das erwartet wird auf 0 setzt, daher hier etwas Nuetzliches:
int volatile initMemory() { //clear BSS section int *text_sta = &_text_sta; //siehe Linkserscript int *bss_start = &_bss_sta; int *bss_end = &_bss_end; int size = bss_end - bss_start; memset(bss_start, 0x00, size); //memset code kommt von gcc automatisch dazu, okay... //Speicherinhalt aufsummieren, ergibt das wirklich 0 ? //int checksum = 0; //for (int i=(int)&_bss_sta; i < (int)&_bss_end; i++) { //int val = LONG_AT(i); //checksum += val; //} //bss //DebugPrintPos(0, 110, "tex start: $", (int)&_text_sta, HEX); //DebugPrintPos(0, 100, "bss start: $", (int)&_bss_sta, HEX); //DebugPrintPos |
Posts: 308 | Member since: January 2011 | IP address: not saved | |
|
cerker68k Kennt sich schon aus ![]() ![]() ID # 219 |
Posted on May 25, 2022 11:19 AM (#43)
Quote
PM E-mail
Ich hänge das mal hier an, das Forum ist ja nicht soo aktiv dass es verloren geht ...
.. hat jemand diese NKC-CLIB schonmal verwendet? Ist das eine "vollständige" libc, also dass Sachen wie printf etc. gehen? Gruß, Christian |
Posts: 71 | Member since: October 2021 | IP address: not saved | |
|
cerker68k Kennt sich schon aus ![]() ![]() ID # 219 |
Posted on June 04, 2022 08:33 PM (#44)
Quote
PM E-mail
So, jetzt hab ich auch ne SD-Karte mit MTOOLS am NKC.
Aber .. dummes Windows 10! ![]() Hab hier ne 128MB-SD-Karte bekommen und man kann sie zwar in FAT16 formatieren, aber dann machts FAT16B mit Partitionstyp $0E welches die MTOOLS nicht fressen .. und natürlich kann ichs nicht einstellen weil ich als dummer (L)User ja zu dumm bin und das nicht zu wollen habe. Wenn ich nicht noch regelmäßig am PC zocken würde, wäre ich bald bei Linux .. |
Posts: 71 | Member since: October 2021 | IP address: not saved |
| https://nkcforum.de | Board rules | Privacy policy
Tritanium Bulletin Board 1.8
© 2010–2021 Tritanium Scripts
Site created in 0.038228 seconds
Processed 15 files
gzip compression enabled
2222.14 KiB memory usage





Posted on April 02, 2021



