Seite 1 von 1

Hilfe Bytezugriff

Verfasst: 24.12.2004 11:35
von Joshua
Hallo Leute,

komme hier mit einem Zugriff auf ein Memoryfeld nicht klar.

Wenn ich die Software richtig habe soll ein lesbares Muster zu sehen sein.

leider kommt bei dem PeekB immer null raus.
Anschliessend mal der Quell.


Das dazugehörige Datenfile habe ich unter
http://db0noe.dyndns.org/DL6SH1.DAT abgelegt.

Gruß Thomas

Code: Alles auswählen

;
; ------------------------------------------------------------
;
;   Logo Anzeige  Thomas Kalmeier DG5MPQ
;
;    (c) 2004 - Joshua Soft & Hard
;
; ------------------------------------------------------------
;

*daten = AllocateMemory (32768) 

count.l = 0 



If OpenWindow(0, 10, 200, 773, 390,  #PB_Window_SystemMenu | #PB_Window_TitleBar , "DAT to Logo")

  If ReadFile (0,"DL6SH1.dat")
   Anzahl =  ReadData(*daten,32768)
   If Anzahl <> 32768 
      MessageRequester ("Error","Anzahl <> 32768")
   EndIf  
  Else 
   MessageRequester ("Error","Fehler open File")
  EndIf 
  CloseFile (0)
        
  
;----- Hauptprogram --------------------------------

   Repeat

    Repeat
      EventID.l = WaitWindowEvent()
    Until EventID <> 0

    If EventID = #PB_EventRepaint  
      Gosub Logo
    EndIf

  Until EventID = #PB_EventCloseWindow 
  
;----- Hauptprogram --------------------------------


 EndIf
End   
;------- SUBS --------------------------------------
Logo:

  StartDrawing(WindowOutput())
  

  count.l = 0                           ; den Counter erst mal auf null

  For i = 1 To 127 Step 2              ; Hier schreiben wir die ungeraden Zeilen 
   For t = 1 To 256 
    ;Debug = PeekB(*daten+count)       
     If PeekB(*daten + count ) > 0 
      Box(t * 3,i *  3,2,2, RGB(255,255,255)) 
     Else  
      Box(t * 3,i * 3,2,2, RGB(0,0,0)) 
     EndIf 
     count = count + 1 
    Next t 
  Next i

  For i = 2 To 128 Step 2             ; Hier schreiben wir die ungeraden Zeilen 
   For t = 1 To 256 
    ;Debug = PeekB(*daten+count)       
     If PeekB(*daten + count ) > 0 
      Box(t * 3,i *  3,2,2, RGB(255,255,255)) 
     Else  
      Box(t * 3,i * 3,2,2, RGB(0,0,0)) 
     EndIf 
     count = count + 1 
    Next t 
  Next i

  StopDrawing()

Return
edit redacid: Code-Tags gesetzt und URL richtig eingetragen

Verfasst: 24.12.2004 11:59
von MARTIN
Es gibt einen kleinen Fehler nach der Logo: Sprungmarke, schau dir die if Abfragen an.

Code: Alles auswählen

Logo:
StartDrawing(WindowOutput())
 

count.l = 0                           ; den Counter erst mal auf null

For i = 1 To 127 Step 2              ; Hier schreiben wir die ungeraden Zeilen
  For t = 1 To 256
    ;Debug = PeekB(*daten+count)       
    If PeekB(daten.l + count ) < 0 ; <-HIER, ES MUSS EINMAL < UND WEITER UNTEN > SEIN ODER ANDERRUM
      Box(t * 3,i *  3,2,2, RGB(255,255,255))
    Else 
      Box(t * 3,i * 3,2,2, RGB(0,0,0))
    EndIf
    count = count + 1
  Next t
Next i

For i = 2 To 128 Step 2             ; Hier schreiben wir die ungeraden Zeilen
  For t = 1 To 256
    ;Debug = PeekB(*daten+count)       
    If PeekB(daten + count ) > 0 ;HIER DANN ENTSPERECHEND WAS ANDERES ALS IN DER SCHLEIFE OBEN
      Box(t * 3,i *  3,2,2, RGB(255,255,255))
    Else 
      Box(t * 3,i * 3,2,2, RGB(0,0,0))
    EndIf
    count = count + 1
  Next t
Next i

StopDrawing()

Return 
 
Wahrscheinlich hast du dich nur vertippt.

leider nein....

Verfasst: 24.12.2004 12:44
von Joshua
Hallo Martin,

leider nein.. Schau mal: Jede If Abfrage hat auch ein ELSE
Der Unterschied ist in der For next Schleife GERADE/UNGERADE

Aber das Problem besteht weiterhin.

Gruß Thomas

Verfasst: 24.12.2004 12:48
von MVXA
Bytes sind in PB usigned. D.h. dass sie einen Wert von -128 bis +128 haben. Einfach bei jeder Funktion, die einen Bytewert zurück gibt &$FF verwenden.

Verfasst: 24.12.2004 13:01
von MARTIN
Oh, dann habe ich das Problem nicht verstanden.
Das Logo ist ja zu sehen?

Verfasst: 24.12.2004 13:47
von Joshua
Danke an LittleFurz

Des war der Fehler jetzt futzt es....

Muss einfach drann denken, dass hier alles mit signed VARS ist....

Jetzt gehts...
Danke noch mal .....

Gruß Thomas