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

ASM Problem

Hilfe beim Programmieren mit dem Prizm SDK.

ASM Problem

Beitragvon Smashmaster » Mo 16. Apr 2012, 01:13

Hallo alle zusammen! :)
Ich wollte dieser Funktion in einem meiner Programme benützen, dieser Funktion wurde von cemetech entwickelt:
Code: Alles auswählen
void overclock(int mult)
{
   asm ("mov r4, r0\n"
       "and #0x3F, r0\n"
       "shll16 r0\n"
       "shll8 r0\n"
       "mov.l frqcr, r1\n"
       "mov.l pll_mask, r3\n"
       "mov.l @r1, r2\n"
       "and r3, r2\n"
       "or r0, r2\n"
       "mov.l r2, @r1\n"
       "mov.l frqcr_kick_bit, r0\n"
       "mov.l @r1, r2\n"
       "or r0, r2\n"
       "rts\n"
       "mov.l r2, @r1\n"
       ".align 4\n"
       "frqcr_kick_bit: .long 0x80000000\n"
       "pll_mask: .long 0xC0FFFFFF\n"
       "frqcr: .long 0xA4150000");
}
Aber wenn ich diese Funktion in meine Programm integrieren gibt es ein menge Kompilation Problemen.
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(6) : C2225 (E) Undeclared name "__asm"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(6) : C2500 (E) Illegal token "{"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(6) : C2225 (E) Undeclared name "mov"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(6) : C2500 (E) Illegal token "r4"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(6) : C2225 (E) Undeclared name "r4"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(7) : C2225 (E) Undeclared name "r0"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(7) : C2500 (E) Illegal token "and"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(7) : C2400 (E) Illegal character "#"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(7) : C2225 (E) Undeclared name "and"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(7) : C2500 (E) Illegal token "0x3F"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(8) : C2500 (E) Illegal token "shll16"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(8) : C2225 (E) Undeclared name "shll16"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(8) : C2500 (E) Illegal token "r0"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(9) : C2500 (E) Illegal token "shll8"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(9) : C2225 (E) Undeclared name "shll8"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(9) : C2500 (E) Illegal token "r0"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(10) : C2500 (E) Illegal token "mov"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(10) : C2203 (E) Illegal member reference for "."
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(10) : C2500 (E) Illegal token "frqcr"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(10) : C2225 (E) Undeclared name "frqcr"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(11) : C2225 (E) Undeclared name "r1"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(11) : C2500 (E) Illegal token "mov"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(11) : C2203 (E) Illegal member reference for "."
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(11) : C2500 (E) Illegal token "pll_mask"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(11) : C2225 (E) Undeclared name "pll_mask"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(12) : C2225 (E) Undeclared name "r3"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(12) : C2500 (E) Illegal token "mov"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(12) : C2203 (E) Illegal member reference for "."
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(12) : C2400 (E) Illegal character "@"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(12) : C2500 (E) Illegal token "r1"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(13) : C2225 (E) Undeclared name "r2"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(13) : C2500 (E) Illegal token "and"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(13) : C2500 (E) Illegal token "r3"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(14) : C2500 (E) Illegal token "or"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(14) : C2225 (E) Undeclared name "or"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(14) : C2500 (E) Illegal token "r0"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(15) : C2500 (E) Illegal token "mov"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(15) : C2203 (E) Illegal member reference for "."
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(15) : C2500 (E) Illegal token "r2"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(15) : C2400 (E) Illegal character "@"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(16) : C2500 (E) Illegal token "mov"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(16) : C2203 (E) Illegal member reference for "."
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(16) : C2500 (E) Illegal token "frqcr_kick_bit"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(16) : C2225 (E) Undeclared name "frqcr_kick_bit"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(17) : C2500 (E) Illegal token "mov"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(17) : C2203 (E) Illegal member reference for "."
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(17) : C2400 (E) Illegal character "@"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(17) : C2500 (E) Illegal token "r1"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(18) : C2500 (E) Illegal token "or"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(18) : C2500 (E) Illegal token "r0"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(19) : C2500 (E) Illegal token "rts"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(20) : C2225 (E) Undeclared name "rts"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(20) : C2500 (E) Illegal token "mov"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(20) : C2203 (E) Illegal member reference for "."
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(20) : C2500 (E) Illegal token "r2"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(20) : C2400 (E) Illegal character "@"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(21) : C2203 (E) Illegal member reference for "."
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(21) : C2500 (E) Illegal token "4"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(22) : C2500 (E) Illegal token "frqcr_kick_bit"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(22) : C2500 (E) Illegal token "."
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(23) : C2500 (E) Illegal token "pll_mask"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(23) : C2500 (E) Illegal token "."
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(24) : C2500 (E) Illegal token "frqcr"
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(24) : C2500 (E) Illegal token "."
C:\Users\Pascal standard\Desktop\casio\M-SDK\projects\ZELDA\overclock.c(24) : C2500 (E) Illegal token "}"



Ich benutze den Mini-SdK-Kompilator.

Kann mir jemand helfen?

Vielen Dank :).
Smashmaster
 
Beiträge: 5
Registriert: Mi 4. Apr 2012, 21:00
Taschenrechner: CG-20, G100+, G65

Re: ASM Problem

Beitragvon SimonLothar » Di 17. Apr 2012, 06:57

Der Hitachi-Compiler des alten fx9860-SDK kann asm(...) wohl nicht.
Selbst das im SHC-Manual dokumentierte pragma inline_asm ist nur unter Nebenbedingungen einsetzbar, die mich ziemlich stören.
Wenn ich Assembler-Teile benötige, brauche ich meistens vollständige, präzise Kontrolle über den resultierenden Code, d. h. ich muss manchmal aufs Byte genau positionieren.
Deshalb erstelle ich Assembler-Module immer als ASMSH-Source.
Mein mini-SDK ist auf solche Anforderungen zugeschnitten und eher ein "Forschungs"-SDK.
Man hat also jetzt zwei Möglichkeiten:
man erstellt ein ASMSH-kompatibles Source-Modul (das kann auch das mini-SDK verarbeiten) oder man steigt auf das Cemetech-SDK um.
Ich kenn mich mit dem Cemetech-SDK allerdings nicht aus.
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: ASM Problem

Beitragvon Smashmaster » Di 17. Apr 2012, 23:34

Vielen Dank für deine Antwort :).

SimonLothar hat geschrieben: erstelle ich Assembler-Module immer als ASMSH-Source
Da ich noch nie ASM gemacht haben Weiß ich nicht, wie man es machen kann, kannst du mir erklären, wie man es macht? (Falls es nicht zu schwierig ist)
Smashmaster
 
Beiträge: 5
Registriert: Mi 4. Apr 2012, 21:00
Taschenrechner: CG-20, G100+, G65

Re: ASM Problem

Beitragvon SimonLothar » Mi 18. Apr 2012, 05:59

Smashmaster hat geschrieben:Da ich noch nie ASM gemacht haben Weiß ich nicht, wie man es machen kann, kannst du mir erklären, wie man es macht? (Falls es nicht zu schwierig ist)
Jup. Ich werde mal das overclock-Teil in eine mini-SDK-kompatible Form bringen.
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: ASM Problem

Beitragvon SimonLothar » Do 19. Apr 2012, 07:25

Smashmaster hat geschrieben:Da ich noch nie ASM gemacht haben Weiß ich nicht, wie man es machen kann, kannst du mir erklären, wie man es macht?


Das folgende Codestück musst Du als Datei overclock.src im mini-SDK-Verzeichnis LIB\SOURCE abspeichern.
Code: Alles auswählen
   .export _overclock
   .SECTION P,CODE,ALIGN=4

; void overclock( unsigned int P1 );
; 000101: × 12
; 000111: × 16
; 001011: × 24
; 001110: × 30
; 001111: × 32 (Prizm's default)
; 010001: × 36
; 010111: × 48
; Other settings are prohibited

FRQCRA      .EQU h'A4150000
FRQCRA_STC_CLR   .EQU h'C0FFFFFF
FRQCRA_KICK   .EQU h'80000000

_overclock:
   mov      r4, r0
   and      #h'3F, r0      
   shll16   r0
   shll8   r0
   mov.l   #FRQCRA, r1
   mov.l   #FRQCRA_STC_CLR, r3
   mov.l   @r1, r2
   and   r3, r2
   or   r0, r2
   mov.l   r2, @r1     ; (*1)
   mov.l   #FRQCRA_KICK, r0
   mov.l   @r1, r2     ; (*1)
   or   r0, r2
   rts
   mov.l   r2, @r1

   .END
; (*1): statements could be omitted


Dann musst Du im mini-SDK mit dem Menüpunkt "File/Full Setup" unter dem Tab "Tools-Library" eine neue Zeile einfügen (einfach mit dem Cursor nach unten gehen) und in der Spalte "value"

void overclock( int frqcra_stc );$(MISC_H);

eintragen.
Die Zahl in der Spalte Key ist nicht von Bedeutung. Muss nur eindeutig sein.
Zuletzt das Fullsetup sichern und mit F9 das Projekt compilieren.

Im Programmteil, in dem Du overclock(...) benutzt, muss der header "misc_tools.h" includiert sein.
Hinweis:
diese Version von overclock prüft nicht auf unzulässige Bit-Kombinationen. Habe einfach Deinen Beispielcode übertragen.
EDIT: Die beiden Anweisungen, die ich im vorgegebenen Code mit (*1) gekennzeichnet habe, kann man eigentlich weglassen.
Zuletzt geändert von SimonLothar am Sa 21. Apr 2012, 10:24, insgesamt 2-mal geändert.
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: ASM Problem

Beitragvon Smashmaster » Do 19. Apr 2012, 22:14

Danke schön SimonLothar : D, es funktioniert einwandfrei :).
Smashmaster
 
Beiträge: 5
Registriert: Mi 4. Apr 2012, 21:00
Taschenrechner: CG-20, G100+, G65


Zurück zu Prizm SDK (Alle fx-CG Modelle)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast