Просмотр картинки .scr

 

Изменил часть кода и добавил расчет смещения на экране в зависимости от координаты Y. Часто в программах встречается всевозможные способы подсчета адреса, даже внесенные в таблицу адреса.

*m=AllocateMemory(6912)
ReadFile(0,"esprit.scr")
ReadData(0,*m,6912)
CloseFile(0)
Procedure.l zxcol(zxv)
  If zxv&8
    w=255
  Else
    w=191
  EndIf
  If zxv&1
    bb=w
  Else
    bb=0
  EndIf
  If zxv&2
    rr=w
  Else
    rr=0
  EndIf
  If zxv&4
    gg=w
  Else
    gg=0
  EndIf
  ProcedureReturn RGB(rr,gg,bb)
EndProcedure
If OpenWindow(0, 0, 0, 512, 384, "ZX Screen", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    CanvasGadget(0, 0, 0, 512, 384)
    If StartDrawing(CanvasOutput(0))
      For y=0 To 191
        disp=Int(y/64)*2048+(y&7)*256+((y>>3)&7)*32
        For x=0 To 31
          zxa=PeekA(*m+6144+x+32*Int(y/8))
          If zxa&64
            inkc=zxcol(zxa&7+8)
          Else
            inkc=zxcol(zxa&7)
          EndIf
          papc=zxcol((zxa>>3)&15)
          a.a=PeekA(*m+disp+x)
          b.a=128
          For i=0 To 7
            If b&a
              putc=inkc
            Else
              putc=papc
            EndIf
            Box((x*8+i)*2,y*2,2,2,putc)
            b=b>>1
          Next i
        Next x
      Next y
            StopDrawing()
          EndIf
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
  EndIf
FreeMemory(*m)

Комментарии