|
English
BAS: <- file header for the emulator CpcAlive MEMORY &8FFF ScreenMode=1:MODE ScreenMode ImgName$="IMAGE.BMP":' <<<<<<<<<<<<< IMAGE NAME HERE >>>>>> ximg=0:yimg=0:' image coordinates BackGround=-1:' not transparent background FirstInk=0:' first ink use in palette gosub BMPDISPLAY:' ** DISPLAY BMP IMAGES 16/256 COLORS NOT COMPRESSED ** end /**************************************************** AFFICHE IMAGES AU FORMAT BMP NON COMPRESSE 16/256 COULEURS DISPLAY BMP IMAGES 16/256 COLORS NOT COMPRESSED <ImgName$ = nom image image name ScreenMode = mode ecran screen mode FirstInk = numero 1er crayon pour images 16 couleurs first ink use in palette for 16 colors images BackGround = crayon de fond (-1 si non transparent) background pen (-1 if not transparent) ****************************************************/ BMPDISPLAY: er%=0:adr=himem+1:'buffer |INPUT,ImgName$+":D,&500,0,&"+HEX$(adr),@er%:'block_lenght,adr_block_source_in_file,adr_in_Cpc_memory,@error_code if er%<>0 then FileInputEr adrline=PEEK(adr+&A)+256*PEEK(adr+&B):'adresse ligne a traiter dans fichier/adr img line in file adrimg=adr+adrline:'adresse image dans fichier/adr img in file largeur=PEEK(adr+&12)+256*PEEK(adr+&13):'largeur/with image IF PEEK(adr+&E)+256*PEEK(adr+&F)<>12 THEN READ_BITMAPFILEHEADER:'header type //** READ BITMAPCOREHEADER ** x=PEEK(adr+&18)+256*PEEK(adr+&19):'nbr bits/pixel hauteur=PEEK(adr+&14)+256*PEEK(adr+&15):'hauteur/hight image IF x=8 THEN BITMAPCOREHEADER_256:'256 couleurs/colors IF x<>4 THEN MODE 2:PRINT"16 or 256 colors in image only accepted.":END //** DISPLAY IMAGE 16 COULEURS/COLORS ** GOSUB cpc_inks_ordering x=FirstInk:'1er crayon/first pen in color palette FOR i=0 TO 15*3 STEP 3 |INK,x,PEEK(adr+&1C+i),PEEK(adr+&1B+i),PEEK(adr+&1A+i) x=x+1 NEXT DISPLAY16: reste=largeur MOD 2:x=INT(largeur/2)+reste WHILE x MOD 4 <> 0 x=x+1 WEND larbloc=x incry=2 if ScreenMode=0 then incrx=4 \ else if ScreenMode=1 then incrx=2 \ else incrx=1 FOR i=0 TO hauteur*incry STEP incry x=0 |INPUT,ImgName$+":D,&"+HEX$(larbloc)+","+DEC$(adrline,"########")+",&"+HEX$(adr) FOR j=adr TO adr+INT(largeur/2) pencil=FirstInk+(PEEK(j) AND &F0)/16:gosub PLOT_STEP:'plot with step pencil=FirstInk+(PEEK(j) AND &F):gosub PLOT_STEP:'plot with step NEXT j adrline=adrline+larbloc NEXT i RETURN //** READ BITMAPFILEHEADER 16 COLORS ** BITMAPFILEHEADER_16: GOSUB cpc_inks_ordering x=FirstInk:'1er crayon/first pen in color palette FOR i=0 TO 15*4 STEP 4 |INK,x,PEEK(adr+&38+i),PEEK(adr+&37+i),PEEK(adr+&36+i):x=x+1 NEXT GOTO DISPLAY16 //** BITMAPCOREHEADER 256 COULEURS/COLORS ** BITMAPCOREHEADER_256: x=0 FOR i=0 TO 255*3 STEP 3 |INK,x,PEEK(adr+&1C+i),PEEK(adr+&1B+i),PEEK(adr+&1A+i):x=x+1 NEXT GOTO DISPLAY256 //** BITMAPFILEHEADER ** READ_BITMAPFILEHEADER: hauteur=PEEK(adr+&16)+256*PEEK(adr+&17) IF PEEK(adr+&E)+256*PEEK(adr+&F)<>40 THEN MODE 2:PRINT"Bitmap header error":END IF PEEK(adr+&1E)+256*PEEK(adr+&1F)<>0 THEN MODE 2:PRINT"Uncompressed bitmap only accepted":END IF PEEK(adr+&1C)+256*PEEK(adr+&1D)=4 THEN BITMAPFILEHEADER_16 IF PEEK(adr+&1C)+256*PEEK(adr+&1D)<>8 THEN MODE 2:PRINT"256 or 16 colors only accepted":END //** BITMAPFILEHEADER 256 COLORS ** GOSUB cpc_inks_ordering x=0 FOR i=0 TO 255*4 STEP 4 |INK,x,PEEK(adr+&38+i),PEEK(adr+&37+i),PEEK(adr+&36+i):x=x+1 NEXT DISPLAY256: IF largeur MOD 4<>0 THEN larbloc=largeur+(4-(largeur MOD 4)) ELSE larbloc=largeur incry=2:incrx=2:' (MODE 1) FOR i=0 TO hauteur*incry STEP incry x=0 |INPUT,ImgName$+":D,&"+HEX$(larbloc)+","+DEC$(adrline,"########")+",&"+HEX$(adr) FOR j=adr TO adr+largeur-1 pencil=PEEK(j):gosub PLOT_STEP:'plot with step NEXT j adrline=adrline+larbloc NEXT i RETURN //** PLOT WITH STEP ** if BackGround<>-1 then transparent background PLOT_STEP: if BackGround=-1 or pencil-FirstInk<>BackGround THEN PLOT ximg+x,yimg+i,pencil x=x+incrx RETURN //** cpc inks ordering ** cpc_inks_ordering: FOR i=0 TO 15 poke i+&B7D5,i:poke i+&B7E6,i NEXT RETURN FileInputEr: mode 2 if er%=1 then ? "|INPUT:"+ImgName$+" parameters error":end if er%=2 then ? ImgName$+" not found":end ? "|INPUT:"+ImgName$+" error":end
|