Autor Thema: Wie kann man bitte ein rcall.inl an GfaBasic übergeben.  (Gelesen 8093 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

guest3744

  • Gast
Hallo, guten Tag.
Ich habe aus eine rcall.src eine rcall.inl erstellt mit einem Assembler für GfaBasic.

Mit welchen Befehl kann ich die dort jetzt einlesen?


Danke.
Gruss

Offline laufkopf

  • Benutzer
  • Beiträge: 346
Re: Wie kann man bitte ein rcall.inl an GfaBasic übergeben.
« Antwort #1 am: Sa 19.09.2015, 13:02:58 »
Ich hab mal was angehängt (hallo_c.zip.pdf in hallo_c.zip umbenennen und dann auspacken)

GFA-Basic
'
hallo%=GEMDOS(72,100)          ! Malloc, Fuer "Hallo Welt"
CHAR{hallo%}=""+CHR$(0)
'
fn$="hw.o"+CHR$(0)
fname%=V:fn$
fhandle&=GEMDOS(61,L:fname%,0) ! Fopen, Datei oeffnen
IF fhandle&>0
  '
  len%=GEMDOS(66,L:0,fhandle&,2)            ! Fseek, laenge
  ~GEMDOS(66,L:0,fhandle&,0)                ! ermitteln
  ' ~FORM_ALERT(1,"[0][ len: "+STR$(len%)+" ][ OK ]")
  '
  objekt%=GEMDOS(72,L:len%)        ! Malloc, speicher fuer das file
  ~GEMDOS(63,fhandle&,L:len%,L:objekt%) ! Fread, und laden
  ~GEMDOS(62,fhandle&)         ! Fclose, Datei schliessen
  '
  ' asm$=MKI$(&H4E75)
  ' asm%=V:asm$
  ' ~C:asm%()
  '
  r%=C:objekt%(L:hallo%)         ! aufrufen
  ~GEMDOS(73,objekt%)
  hallo$=CHAR{hallo%}
  '
  ~FORM_ALERT(1,"[0][ "+hallo$+" ][ ja Hallo ]")
ELSE
  ' ~FORM_ALERT(1,"[0][fhandle: "+STR$(fhandle&)+"|fn: "+fn$+"][ oh ]")
ENDIF
~FORM_ALERT(1,"[0][ Programmende ][ OK ]")
~GEMDOS(73,hallo%)
'
END

Assembler
move.l 4(sp),a1 ; Bufferadresse

lea.l hi(pc),a2 ; Stringadresse nach a2
loop:
move.b (a2)+,(a1)+ ; Byteweise kopieren
tst.b (a2) ; bis 0
bne.s loop

move.l #0,d0 ; Rueckgabewert

rts ; und ende
*********
hi: dc.b "Hallo Welt!",0

Offline laufkopf

  • Benutzer
  • Beiträge: 346
Re: Wie kann man bitte ein rcall.inl an GfaBasic übergeben.
« Antwort #2 am: Sa 19.09.2015, 16:35:20 »
Leider funktioniert das bei mir nur mit Aranym. Unter Hatari und NoSTalgia konnte ich es nicht starten. Warum auch immer.

guest3744

  • Gast
Re: Wie kann man bitte ein rcall.inl an GfaBasic übergeben.
« Antwort #3 am: Sa 19.09.2015, 16:41:14 »
Was macht dieses Programm genau?
Woher ist die Datei mit der Endung "o".
Das Turboasm macht bei mir eine inl-datei

Danke.

Gruss

guest3744

  • Gast
Re: Wie kann man bitte ein rcall.inl an GfaBasic übergeben.
« Antwort #4 am: Sa 19.09.2015, 16:55:59 »
Ich habe es mir erstmal leichter gemacht.

Diese Demo : asm.src habe ich mit Turboasm 1.77 in eine "inl" compiliert (Grafikbalken wandern vertical)
       sub     d0,d1     ; Number of lines to invert
       mulu    #20,d1   ; Number of bytes to invert
       subq    #1,d1     ; Number of bytes to invert
       mulu    #80,d0   ; Number bytes not to be inverted
       add.l   d0,a0      ; Address of first byte to be inverted
loop:                         ; Loop start
       not.l  (a0)+         ; Long (4-byte) inversion, also a0=a0+4
       dbra    d1,loop   ; Decrement byte count and loop round
       rts                      ; Return to GFA BASIC

Dann habe ich mit meinen Purebasicprogramm diese Binäre  "inl" in DATA-Zeilen umgewandelt in eine Textdatei:
DATA  37440,49916,20,21313,49404
DATA  80,53696,18072,20937,65532
DATA  20085,-1
und im Programm RCALL.LST reinkopiert.

Eine Demo für GFA-Basic mit RCall :
CLS
DO
  READ a%
  EXIT IF a%=-1
  a$=a$+MKI$(a%)
LOOP
DATA  37440,49916,20,21313,49404
DATA  80,53696,18072,20937,65532
DATA  20085,-1
'
DIM r%(16)
xb2%=XBIOS(2)
HIDEM
FOR j%=1 TO 10
  FOR i%=0 TO 190 STEP 10
    r%(0)=i%
    r%(1)=399-i%
    r%(8)=xb2%
    RCALL V:a$,r%()
  NEXT i%
NEXT j%

Ich finde diesen Befehl RCALL-Befehl sehr stark, weil man auch den Registern Werte übergeben kann.

Jetzt habe ich endlich ein starkes Team.... :)  , GFA-Basic mit Turboasm , ohne eure Hilfe wäre ich nicht so schnell am Ziel.

Nächstes Ziel:
Wie kann man die Binäre inl-Datei in GFA-Basic einlesen und die Daten so übergeben an  a% , das es funktionsfähig ist ohne diese Datazeilen? Wer kann das bitte einmal in der obigen Datei reinbringen  ?

Die RCALL.inl ist im Anhang (die Endung "pdf" bitte entfernen).

Die Werte enstehen in den Datas  so:
1. Bytewert einlesen , den x 256 , dann den 2. Bytewert addieren  :  1, Data
3. Bytewert einlesen , den x 256 , dann den 4. bytewert addieren  :  2. Data usw...:

Danke.
Gruss

Offline laufkopf

  • Benutzer
  • Beiträge: 346
Re: Wie kann man bitte ein rcall.inl an GfaBasic übergeben.
« Antwort #5 am: Sa 19.09.2015, 17:56:01 »
Ich lade die Objektdatei direkt ein und rufe diese mit C: auf und übergebe dabei die Adresse eines buffers, in den die Objektdatei dann den Satz "Hallo Welt!" kopiert. Anschließend wird der Satz in einer Alertbox ausgegeben.

Offline simonsunnyboy

  • Moderator
  • *****
  • Beiträge: 1.807
  • Rock'n'Roll is the thing - Jerry Lee is the king!
Re: Wie kann man bitte ein rcall.inl an GfaBasic übergeben.
« Antwort #6 am: Sa 19.09.2015, 18:16:58 »
Das. INL gehört auch in ein Inline. mit GFABASIC 3.x brauchst du keinen Datazeilenmurks.

In deinem Basicprogramm eine Zeile INLINE routine%,<laenge des files>
Auf der Zeile HELP drücken und die *.INl datei darein laden und direkt aufrufen.
Alternativ mit BLOAD oder dgl in den Speicher in einen String oder dgl reinladen.


Paradize - ST Offline Tournament
Stay cool, stay Atari!
1x2600jr, 1x1040STFm, 1x1040STE 4MB+TOS2.06+SatanDisk, 1xF030 14MB+FPU+NetUS-Bee

guest3744

  • Gast
Re: Wie kann man bitte ein rcall.inl an GfaBasic übergeben.
« Antwort #7 am: Sa 19.09.2015, 19:36:10 »
Hallo, danke.

INLINE ADDR%,22
BLOAD "RCALL.INL",ADDR%
DIM R%(16)
XB2%=XBIOS(2)
HIDEM
FOR J%=1 TO 10
  FOR I%=0 TO 190 STEP 10
    R%(0)=I%
    R%(1)=399-I%
    R%(8)=XB2%
    RCALL ADDR%,R%()
  NEXT I%
NEXT J%

Danke.
Gruss

Offline laufkopf

  • Benutzer
  • Beiträge: 346
Re: Wie kann man bitte ein rcall.inl an GfaBasic übergeben.
« Antwort #8 am: So 20.09.2015, 11:52:22 »
ok, jetzt funktioniert auch mein beispiel unter singletos