Das Deutsche Casio-Taschenrechner Forum wurde zum 31.12.2013 geschlossen und kann weiterhin als Nachschlagewerk verwendet werden.
Wer mehr erfahren möchte: Ein sehr guter Beitrag von Elias

Syscalls mit GCC

Hilfe beim Programmieren mit dem fx-9860G SDK.

Syscalls mit GCC

Beitragvon afxi » Mi 25. Jan 2012, 23:48

[AC/ON]
Hi! [DISP]
Hab mich letztens mal dran gesetzt, mir ein Cross-SDK auf GCC-Basis zu erstellen, hänge aber noch an einigen Dingen:

1. hab ich bis jetzt noch keine funktionierende Methode für "Dummies" gefunden, wie ich Syscalls mit dem Assembler von GCC verwenden kann - der Code in diesem Thread im UCF funktoniert nicht, scheint für den Hitachi-Compiler des SDK's zu sein, bsp. steht dort .export zur Exportierung von Funktionen nach C, laut dem Handbuch der Kpit-Gnu-SH-Tools müsst es jedoch .global lauten.
Jedoch gibt es dann immer noch einen Fehler bei der Zeile mov.l "mov.l #h'80010070, r2" : "Error: invalid operands for opcode"
(hab allgemein keine Ahnung von Asm - weiß also nicht, was ich ändern muss :-))

2. ist zwar das meiste aus der fx9860-library des offiziellen SDK's mithilfe von libfxsys (in der aktuellen Ansicht der Seite von fxSDK fehlt die Seite, deswegen der Link zum Web-Archiv) [Download] für GCC verfügbar, jedoch fehlt mir zumindest noch die Möglichkeit der Verwendung von Timern/Interrupts (ansonsten kann ich meinen Mauszeiger nicht so wirklich nutzen :P).

Danke schonmal im Vorraus!
mfg
afxi

PS.: Wenn das dann auch noch klappt, kann ich bei Interesse das Komplettpaket dann irgendwo uploaden (vielleicht erstell ich mir mal einen Dropbox Account oder so...). Ist allerdings für Linux, für Windows müsst ich es nochmal neu kompilieren, dürft aber nicht allzu aufwendig werden.
GCC hat u.a. den Vorteil besserer Optimierung des fertigen Programms (-> kleiner, schneller).

[SHIFT] + [AC/ON]
Benutzeravatar
afxi
 
Beiträge: 58
Registriert: Mi 10. Dez 2008, 09:42
Taschenrechner: .
AFX 2.0 Plus Rom 1.05
fx 9860 G Rom 2.0

Re: Syscalls mit GCC

Beitragvon SimonLothar » Sa 28. Jan 2012, 05:59

Ersetze
"mov.l #h'80010070, r2"
mal durch
"mov.l #0x80010070, r2"

edit:

allerdings würde ich den code
Code: Alles auswählen
.export _syscall
_syscall:
  mov.l #h'80010070, r2
  mov r4, r0
  mov r5, r4
  mov r6, r5
  jmp @r2
  nop
nicht mehr verwenden, weil er nicht universell ist.

Besser ist mit
Code: Alles auswählen
        .export syscall_name
syscall_name:
        mov.l   syscall_number, r0
        mov.l   #h'80010070, r2  ; ggf. 0x80010070
        jmp     @r2
        nop

für jedes einzelne Syscall ein separates Modul zu implementieren und dann in einer Library zusammenzufassen.
Ggf. muss im Assembler-Modul dem syscall_namen ein Unterstrich vorgesetzt werden. Das Hitachi-System will das so. Der Unterstrich wird dann beim Aufruf aus C nicht mehr angegeben.
syscall_name muss dann immer durch den konkreten Namen der Funktion ersetzt werden, z. B. Bfile_OpenFile.
SimonLothar
 
Beiträge: 228
Registriert: Mi 27. Mai 2009, 10:51
Taschenrechner: fx-9860G, fx-9860G slim, fx-9860G SD, fx-9860GII SD, fx-9750GII, fx-7400GII, fx-CG20, fx-9860GII-2 SD, fx-9750GII-2, fx-7400GII-2, fx-CP330+, fx-CP400

Re: Syscalls mit GCC

Beitragvon afxi » Mo 26. Nov 2012, 22:07

Inzwischen hab ich das Problem schon längst gelöst. Für den Fall das noch jemand danach suchen sollte:
Code: Alles auswählen
   .text;
   .align 2;
   .global _Print;
_Print: mov.l sc_addr, r2 ;
      mov.l 1f, r0 ;
      jmp @r2 ;
      nop ;
   1: .long 0x808 ;
   sc_addr: .long 0x80010070

Das Beispiel für die Print-Funktion ist aus der libfxsys von Andreas Bertheussen.
Für einen anderen Syscall einfach 0x808 durch die Nummer und Print durch den Namen des Syscalls ersetzen.
Alternativ geht auch die Instant-Syscall-Implementation von Simon:
Code: Alles auswählen
#define SCA 0xD201D002
#define SCB 0x422B0009
#define SCE 0x80010070
typedef void(*sc_vpuc)(unsigned char*);

#define Print (*(sc_vpuc)sc808)
const unsigned int sc808[] = { SCA, SCB, SCE, 0x808 };
//entspricht void Print(unsigned char *);

Dank noch an Simon für seine Hilfe :-)
mfg,
afxi
Benutzeravatar
afxi
 
Beiträge: 58
Registriert: Mi 10. Dez 2008, 09:42
Taschenrechner: .
AFX 2.0 Plus Rom 1.05
fx 9860 G Rom 2.0


Zurück zu fx-9860G SDK (Alle fx-9860G Modelle)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron