SOURCE : BMP.IVOS ." noPC BITMAP IMAGE DISPLAY" ; : VFLIP OFF DISPLAY 160d 0 DO I 96d * 0 VREG @ + 159d I - 96d * 0 VREG @ + 96d CMOVE LOOP ON DISPLAY ; : BFLIP 4000.8000h 0 VREG @ DO I C@ BITFLIP I C! LOOP ; CREATE BWTBL h DB 07,01,02,03,04,05,06,00 : BW 4000.8000h 0 VREG @ DO I C@ 07 AND BWTBL + C@ I C@ 4 SHR BWTBL + C@ 4 SHL OR I C! LOOP ; : !V ON VIDEO 4000.3C00h DUP 0 VREG D! ; : VXOR 4 2 VREG ! ; : VREP 2 2 VREG ! ; : VOR 0 2 VREG ! ; : CS CLRSCR ; : S ON DISPLAY ; : H OFF DISPLAY ; 4000.3000h VP ! variable bmp variable width variable height variable image variable size variable pixel variable xpos variable rgb 1024d bytes palette : @BMP bmp @ + ; : bmSize ( -- size ) 2 @BMP X@ ; : bmOffset ( -- ptr2 ) 0A @BMP X@ ; : bmHdsize ( -- size ) 0E @BMP X@ ; : bmWidth ( -- width ) 12h @BMP X@ ; : bmHeight ( -- height ) 16h @BMP X@ ; : bmPlanes ( -- planes ) 1Ah @BMP XH@ ; : bmBits ( -- bits ) 1Ch @BMP XH@ ; : bmComp ( -- comp ) 1Eh @BMP X@ ; : bmImgSize ( -- size ) 22h @BMP X@ ; : bmColors ( -- colors ) 2Eh @BMP X@ ; : bmClrImp ( -- colors ) 32h @BMP X@ ; : bmRGB ( -- colors ) 36h @BMP ; : bmImage ( -- ptr ) bmOffset @BMP ; : RGB! rgb ! ; : !RGB bmRGB palette 400h 0 DO OVER I + XC@ OVER I + C! LOOP 2DROP ; : BMP! bmp ! bmHeight height ! bmWidth width ! bmImage image ! bmSize bmOffset - size ! ; variable xstart variable ystart variable ypos : DPLOT ( pixel -- ) palette RGB FG! I xstart @ + ypos @ ystart @ + PLOT ; : DRAWLINE4 ( adr cnt imgptr -- ) // 2 pixels/byte I 2/ - width @ 2/ - width @ 192d MIN 0 DO DUP I 2/ + XC@ I 1 AND IF 0F AND ELSE 4 SHR THEN DPLOT LOOP DROP 1 ypos +! ; : DRAWBMP4 ( adr cnt imgptr -- ) // 1 pixel/byte size @ DUP image @ + ( end of image data ) SWAP 2* 0 DO DUP DRAWLINE4 width @ +LOOP DROP ; : DRAWLINE8 I - width @ - // Point to start of line working from end of bmp width @ 192d MIN // clamp width 0 DO DUP I + XC@ DPLOT LOOP DROP 1 ypos +! ; : DRAWBMP8 ( adr cnt imgptr -- ) // 1 pixel/byte size @ DUP image @ + ( end of image data ) SWAP 0 DO DUP DRAWLINE8 width @ +LOOP DROP ; : DRAWBMP: 4 CASE DRAWBMP4 ENDCASE 8 CASE DRAWBMP8 ENDCASE DROP 2DROP ; : BMP BMP! 0 VREG @ pixel ! 0 xpos ! 0 ypos ! !RGB bmBits DRAWBMP: ; : JPG DROP ; : GIF DROP ; : VIEW: 4D42h CASE BMP ENDCASE 4947h CASE GIF ENDCASE D8FFh CASE JPG ENDCASE DROP ; : GXY ystart ! xstart ! ; : REFRESH DIM fileptr @ DUP XH@ VIEW: BRIGHT ; : R REFRESH ; : VIEW OPEN: REFRESH ; : QVIEW OFF DISPLAY OPEN: REFRESH ON DISPLAY ; : @V 0E SHL ; : V OFF DISPLAY @V 4000.4000h 4000h CMOVE ON DISPLAY ; : V! 4000.4000h SWAP 0E SHL 4000h PROGRAM ; : ShowPalette VREP 100h 0 DO I palette RGB FG! I 0F AND 8 * I 4 SHR 8 * 8 8 RFILL LOOP 100h 0 DO WHITE FG! I 0F AND 8 * I 4 SHR 8 * 8 8 RECT BLACK FG! I 0F AND 8 * 1+ I 4 SHR 8 * 1+ 6 6 RECT LOOP ; // : MAIN ON VIDEO CLRSCR VREP CR BMP.FTH MOUNT ; // ' MAIN AUTO ! FINIS