9390 *PAL_INI:IF SCM=1 THEN RETURN ELSE IF SCM=2 THEN 9410
9400 RESTORE 9420:FOR A=0 TO 15:READ PAL&(A):NEXT:FOR A=16 TO 255:PAL&(A)=0:NEXT:A&=16:RETURN
9410 A=0:FOR G=0 TO 7:FOR R=0 TO 7:FOR B=0 TO 3:PAL&(A)=(G*32+31*SGN(G))*65536+(R*32+31*SGN(R))*256+(B*64+63*SGN(B)):A=A+1:NEXT:NEXT:NEXT:A&=256:RETURN
9420 DATA 0,128,32768,32896,8388608,8388736,8421376,8421504,4210752,255,65280,65535,16711680,16711935,16776960,16777215
9470 *CALC_LLN:IF BIT=4 THEN LLN=((X+7)\8)*4:RETURN
9480 IF BIT=8 THEN LLN=X:RETURN
9490 IF BIT=16 THEN LLN=X*2:RETURN
9500 *PALETTE_CHANGE:IF PALM=0 THEN *PAL_INI ELSE GOSUB *PAL_GET
9510 FOR A=0 TO DL:PALETTE A,[(PAL&(A) AND 16711680)\65536,(PAL&(A) AND 65280)\256,PAL&(A) AND 255]:NEXT:RETURN
9520 *PAL_GET:IF SCM=2 THEN 9540
9530 FOR A=0 TO 15:A$=INPUT$(1,1):B$=INPUT$(1,1):PAL&(A)=((ASC(A$)*65536)+(ASC(B$) AND &HF0)*16+(ASC(B$) AND 15))*16:NEXT:DL=15:HEL&=HEL&+(DL+1)*2:RETURN
9540 FOR A=0 TO 255:A$=CHR$(0)+INPUT$(3,1):PAL&(A)=CVL(A$):NEXT:DL=255:HEL&=HEL&+(DL+1)*3:RETURN