' LR_64000.LST
' assign a colour value to each pixel
' of a 320*200 picture
' -----------------------
DIM n|(63999)
s$=SPACE$(32128)
BLOAD "a:\cheval.pic",V:s$
s$=RIGHT$(s$,32000)
SPUT s$
s%=V:s$
d%=V:n|(0)
'
ALERT 2,"Convert low-res pic|into colour values: |in GFA BASIC|orGFA ASSEMBLER?",1,"BASIC|Ass.",question%
t=TIMER
'
' GFA-Basic
IF question%=1
  z%=0
  FOR m%=s% TO s%+31999 STEP 8
    m1%=CARD{m%}
    m2%=CARD{m%+2}
    m3%=CARD{m%+4}
    m4%=CARD{m%+6}
    FOR p|=15 DOWNTO 0
      n|(z%)=SHL|(-BTST(m1%,p|),0)
      n|(z%)=n|(z%)+SHL|(-BTST(m2%,p|),1)
      n|(z%)=n|(z%)+SHL|(-BTST(m3%,p|),2)
      n|(z%)=n|(z%)+SHL|(-BTST(m4%,p|),3)
      INC z%
    NEXT p|
  NEXT m%
ENDIF
'
' GFA-Assembler
IF question%=2
  ' INLINE file "LR_64000.INL"
  INLINE lr_ass%,64
  ' Call assembler program, with
  ' s% and d% being the addresses of the graphics data
  VOID C:lr_ass%(L:s%,L:d%)
ENDIF
'
tt=(TIMER-t)/200
t$=STR$(tt)
IF question%=1
  ALERT 1,"Convert low-res pic|into colour values: |in GFA BASIC takes|"+t$+" seconds.",1," OK ",d%
ELSE
  ALERT 1,"Convert low-res pic|into colour values: |in GFA ASSEMBLER takes|"+t$+" seconds.",1," OK ",d%
ENDIF
'
ALERT 2,"|Save colour values |as 'CHEVAL.ZAL'?",1,"YES|NO",d%
IF d%=1
  BSAVE "cheval.zal",V:n|(0),64000
ENDIF
EDIT
