; DUCHOVIA V ACTION!›; 3.3.12, 20:43, W1K›BYTE PMMODE=0 ,HITCLR=$D01E››CARD PMBADR››BYTE ARRAY››HPOS(8)=0 0 0 0 0 0 0 0 ,›YPOS(8)= 0 0 0 0 0 0 0 0,›MMASK(4)= $FC $F3 $CF $3F,›PMHPOS(8)=$D000,PMSIZE(5)=$D008››CARD ARRAY›PMFIELD= 0 256 128 ,›PMEMPTY= 0 768 384››; ZAPNUTIE A VYPNUTIE DUCHOV››PROC PMGRAPHICS(BYTE MODE)››BYTE DMACTL=$22F, GTIACTL=$26F,›PMBASE=$D407,PMGRAF=$D00D››CARD MEMHI=$2E5,OLDMHI,APPMHI=$E››CARD ARRAY PMMASK= 0 $F800 $FC00,›PMMEM= 0 $800 $400››IF MODE > 2 THEN›MODE=0›FI›ZERO(PMHPOS,8)›ZERO(HPOS,8)›ZERO(YPOS,8)›ZERO(PMSIZE,5)›ZERO(PMGRAF,5)›IF PMMODE#0 THEN›MEMHI=OLDMHI›DMACTL=$22 GTIACTL=0›FI›IF MODE=0 THEN›DMACTL=$22 GTIACTL=0›ELSE›IF MODE=1 THEN›DMACTL=$3E›ELSE›DMACTL=$2E›FI›OLDMHI=MEMHI››PMADR=(MEMHI-PMMEM(MODE)-$80) PMMASK(MODE)›PMBASE=PMBASE RSH 8›IF PMADR(APPMHI THEN›DMACTL=$22 GTIACTL=0›RETURN›FI›MEMHI=PMBADR+PMEMPTY(MODE)›GTIACTL==$C0 1›FI›PMMODE=MODE›RETURN››; ZMENA FARBY DUCHA››PROC PMCOLOR(BYTE N,HUE,LUM)››BYTE ARRAY COLPM(4)=$2C0››N==3›COLPM(N)=(HUE LSH 4) (LUM $0F)›RETURN››; ADRESA UDAJOV DUCHA››CARD FUNC PMADR(BYTE N)›N==7›IF N>=4 THEN›N=0›ELSE›N==+1›FI›RETURN(PMADR+PMEPMTY(PMMODE)+(N*PMFIELD(PMMODE)))››; ZMAZANIE DUCHA››PROC PMCLR(BYTE N)››CARD CTR››BYTE ARRAY PLADR››N==7›PLADR=PMADR(N)›IF N<4 THEN›ZERO(PLADR,PMFIELD(PMMODE))›ELSE›N==-4›FOR CTR=0 TO PMFIELD(PMMODE)-1›DO›PLADR(CTR)==MMASK(N)›OD›FI›RETURN››; UMIESTNENIE DUCHA NA POZICIU X,Y››PROC PMMOVE(BYTE N,X,Y)››CARD I››BYTE OFFY,PLLEN,MASK1,MASK2››INT DY››BYTE ARRAY TEMP(256),PPTR››IF PMMODE=0 THEN RETURN FI›N==7›DY=Y-VPOS(N)›IF DY=0 THEN›PMHPOS(N)=X HPOS(N)=X RETURN›FI›PPTR=PMADR(N)›PLLEN=PMFIELD(PMMODE)›IF DY>=0 THEN›OFFY=DY›ELSE›OFFY=PLLEN+DY›FI›IF N<4 THEN›MASK1=255 MASK2=0›ELSE›MASK2=MMASK(N 3) MASK1=MASK2!$FF›FI››FOR I=0 TO PLLEN-1›DO›TEMP(I)=PPTR(I) MASK1›OD››FOR I=0 TO PLLEN-1›DO›PPTR(OFFY)==MASK2 TEMP(I)›OFFY==+1›IF OFFY>=PLLEN THEN›OFFY=0›FI›OD››VPOS(N)=Y PMHPOS(N)=X HPOS(N)=X›RETURN››; VYTVORENIE DUCHOV››PROC PMCREATE(BYTE N BYTE ARRAY PM›BYTE LEN,SIZE,X,Y)››BYTE I,MASK,TMP,TEMP,OLDSIZE=0››BYTE ARRAY PPTR,MSIZE=0 1 0 3››N==7›IF N<4 THEN›MASK=0›ELSE›TEMP=N 3 MASK=MMASK(TEMP)›FI›PPTR=PMADR(N)›FOR I=0 TO LEN-1›DO›PPTR(I+Y)==MASK PM(I)›OD›SIZE==-1›IF N<4 THEN›PMSIZE(N)=SIZE›ELSE›TMP=(MSIZE(SIZE) LSH (TEMP LSH 1))›OLDSIZE== MASK TMP›PMSIZE(4)=OLDSIZE›FI›PMHPOS(N)=X HPOS(N)=X VPOS(N)=Y›RETURN››; KOLIZIA››BYTE FUNC PMMIT(BYTE N,CN)››BYTE ARRAY PMPF(8)=$D000,PMPM(8)=$D008››N==7›IF N<4 THEN›N==+4›ELSE›N==-4›FI››IF CN<4 THEN›RETURN((PMPM(N) RSH CN) 1)›CN=0 3›RETURN((PMPF(N) RSH CN) 1)›FI›RETURN››; NOVA PROCEDURA GRAPHICS››PROC GRAPHICS(BYTE MODE)›CLOSE(6) PMGRAPHICS(0)›OPEN(6,"S:",(MODE $F0) ! $1C,MODE)›RETURN››