Software > Coding

Wie kann man bitte ein rcall.inl an GfaBasic übergeben.

(1/2) > >>

guest3744:
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

laufkopf:
Ich hab mal was angehängt (hallo_c.zip.pdf in hallo_c.zip umbenennen und dann auspacken)

GFA-Basic

--- Code: ---'
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
--- Ende Code ---

Assembler

--- Code: --- 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
--- Ende Code ---

laufkopf:
Leider funktioniert das bei mir nur mit Aranym. Unter Hatari und NoSTalgia konnte ich es nicht starten. Warum auch immer.

guest3744:
Was macht dieses Programm genau?
Woher ist die Datei mit der Endung "o".
Das Turboasm macht bei mir eine inl-datei

Danke.

Gruss

guest3744:
Ich habe es mir erstmal leichter gemacht.

Diese Demo : asm.src habe ich mit Turboasm 1.77 in eine "inl" compiliert (Grafikbalken wandern vertical)

--- Code: ---       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

--- Ende Code ---

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 :

--- Code: ---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%

--- Ende Code ---

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

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln