atari-home.de - Foren

Software => Coding => Thema gestartet von: guest3744 am Sa 19.09.2015, 12:51:16

Titel: Wie kann man bitte ein rcall.inl an GfaBasic übergeben.
Beitrag von: guest3744 am Sa 19.09.2015, 12:51:16
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
Titel: Re: Wie kann man bitte ein rcall.inl an GfaBasic übergeben.
Beitrag von: laufkopf 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
Titel: Re: Wie kann man bitte ein rcall.inl an GfaBasic übergeben.
Beitrag von: laufkopf 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.
Titel: Re: Wie kann man bitte ein rcall.inl an GfaBasic übergeben.
Beitrag von: guest3744 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
Titel: Re: Wie kann man bitte ein rcall.inl an GfaBasic übergeben.
Beitrag von: guest3744 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
Titel: Re: Wie kann man bitte ein rcall.inl an GfaBasic übergeben.
Beitrag von: laufkopf 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.
Titel: Re: Wie kann man bitte ein rcall.inl an GfaBasic übergeben.
Beitrag von: simonsunnyboy 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.


Titel: Re: Wie kann man bitte ein rcall.inl an GfaBasic übergeben.
Beitrag von: guest3744 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
Titel: Re: Wie kann man bitte ein rcall.inl an GfaBasic übergeben.
Beitrag von: laufkopf am So 20.09.2015, 11:52:22
ok, jetzt funktioniert auch mein beispiel unter singletos