ACTION! Problem bei I/O mit externer Runtime


ACTION! Problem bei I/O mit externer Runtime

von Jac » Sa 14. Apr 2012, 00:14
Hi,

Ich habe eine Kleine BLOAD Routine geschrieben. Solange die Runtime des Module verwendet wird, ist alles in Butter. Wenn ich die Runtime von Disk nehme, geht's nach dem 2-5 BGET in die Hose. Erstrichtig (ROM), dann falsch (Disk).

Error-BLOAD-Rom.png
OK
Error-BLOAD-Rom.png (7.33 KiB) 1674-mal betrachtet
Error-BLOAD-Runtime.png
Nicht OK
Error-BLOAD-Runtime.png (7.51 KiB) 1674-mal betrachtet

Code: Alles auswählen
; GET A BLOCK OF DATA
PROC BGET(BYTE CHANNEL, BYTE ARRAY ADR, CARD LEN)
  BYTE OFFSET


  PRINTF("%I %H %H%E",CHANNEL,ADR,LEN)

  OFFSET=CHANNEL LSH 4
  POKE($342+OFFSET,7)
  POKEC($344+OFFSET,ADR)
  POKEC($348+OFFSET,LEN)
  CIOV2(0,OFFSET)
RETURN


PROC BLOAD_ERROR_EOF(BYTE ERROR_CODE)
  ERROR=BLOAD_ERROR
; IF ERROR_CODE=136 THEN
  BLOAD_DONE=1
; FI 
RETURN

; GET A BLOCK OF DATA     
PROC BLOAD(BYTE CHANNEL)
  BYTE OFFSET
  BYTE STATUS
  BYTE ARRAY BLOAD_BUFFER=$400
  BYTE ARRAY BLOAD_BUFFER2=$402
  CARD BLOAD_START=$400
  CARD BLOAD_END=$402

  OFFSET=CHANNEL LSH 4
  BLOAD_ERROR=ERROR
  BLOAD_DONE=0
  DO
    ERROR=BLOAD_ERROR_EOF
    BGET(CHANNEL,BLOAD_BUFFER,2)
    STATUS=PEEK($343+OFFSET)
    ERROR=BLOAD_ERROR
    IF STATUS=1 THEN
      IF (BLOAD_BUFFER(0)=$FF AND BLOAD_BUFFER(1)=$FF) THEN
        BGET(CHANNEL,BLOAD_BUFFER,4)
      ELSE
        BGET(CHANNEL,BLOAD_BUFFER2,2)
      FI
      BGET(CHANNEL,BLOAD_START,BLOAD_END-BLOAD_START+1)
    FI

  UNTIL STATUS<>1 OR BLOAD_DONE=1
  OD
  IF STATUS<>1 AND STATUS<>136 THEN
    PRINTBE(STATUS)
    DO
    OD
  FI   
RETURN


Ratlosigkeit.... :?

Re: ACTION! Problem bei I/O mit externer Runtime

von eda70 » Sa 14. Apr 2012, 08:56
Welche Runtime nimmst du denn?

Edit: Ah, die Finzel -cas -Version
Ich bin mir nicht sicher, ob die 100% entfehlert ist. Auf jeden Fall ist sie stellenweise deutlich langsamer als die originale Runtime.
Das es mit der Cart geht und ohne nicht spricht m.E. auch dafür, dass es an der RT liegt...

Re: ACTION! Problem bei I/O mit externer Runtime

von FlorianD » Sa 14. Apr 2012, 23:12
ich bin mir nicht ganz sicher, aber ich glaube,
UNTIL mit komplexen Ausdrücken (z.B. A=1 AND B=0) geht nicht immer. UNTIL kann nur einen Ausdruck sicher auswerten.
Workaround: vorher mit IF ... THEN einen einfachen ausdruck basteln.

ausserdem sehe ich in Deinem Code nicht,wo BLOAD_ERROR definiert wird. Fehlen da noch Code-Teile?