#11 Article 531 Posted at 1987/10/27 08:17:02 by Ami (MAP404) [PRG.NL3]
Subject: NL3loader for FM-11/OS-9
最近の主流Formatに対応した(と思う)loaderです。いちおう それらしい絵はでますが,色がなんとなく正確に再現されていないような気が してます。formatを説明したアーティクルもみたのですが,いまいち わからないところがあります。 できれば,format解説していただけませんか? ---------------------------------------------------------------------- PROCEDURE n3loader (* N3Loader (* メイプルタウン ネットワーク (* 1987/10/13 BASE 0 DIM c(64),r(64),g(64),b(64):INTEGER DIM x,y:INTEGER DIM ipath:INTEGER DIM filename:STRING[32] DIM tc:STRING[1] DIM cl,ch,cn,i,tflg:INTEGER PRINT " ** NL3 Loader **" PRINT " by Ami 1987/10/13" PRINT INPUT "filename :",filename RUN CLS RUN LOCATE(0,0,0) OPEN #ipath,filename:READ x:=0 \y:=0 FOR i:=0 TO 63 GOSUB 50 cl:=ASC(tc)-32 IF cl>=127 THEN cl:=cl-33 \ ENDIF GOSUB 50 ch:=ASC(tc)-32 IF ch>=127 THEN ch:=ch-33 \ ENDIF c(i):=ch*128+cl r(i):=c(i)/81 g(i):=(c(i)-r(i)*81)/9 b(i):=c(i)-r(i)*81-g(i)*9 r(i):=r(i)*3 \g(i):=g(i)*3 \b(i):=b(i)*3 NEXT i WHILE x<160 AND y<100 DO GOSUB 50 cl:=ASC(tc)-32 IF cl>=127 THEN cl:=cl-33 \ ENDIF tflg:=LAND(cl,$40) IF tflg<>0 THEN cl:=cl-$40 GOSUB 50 \cn:=ASC(tc)-32 IF cn>=127 THEN cn:=cn-33 \ ENDIF cn:=cn+2 ELSE cn:=1 ENDIF FOR i:=1 TO cn RUN PutBlock(x*3,y*3,x*3+3,y*3+4,r(cl),2,2) RUN PutBlock(x*3,y*3,x*3+3,y*3+4,g(cl),2,1) RUN PutBlock(x*3,y*3,x*3+3,y*3+4,b(cl),2,4) (* fill(x*3,y*4,x*3+2,y*4+3,rgb(r(cl),g(cl),b(cl))) y:=y+1 IF y=100 THEN y:=0 \x:=x+1 \ ENDIF NEXT i ENDWHILE CLOSE #ipath GET #0,tc RUN LOCATE(0,0,1) END 50 (* get 1 byte *) REPEAT GET #ipath,tc UNTIL ASC(tc)>=$20 RETURN PROCEDURE PutBlock (* Put block 1 sub system command (* PARAM px1,py1,px2,py2:INTEGER PARAM pdat:INTEGER PARAM pf:INTEGER PARAM pcl:INTEGER TYPE HD=Head,InOut,Insize,Outsize:BYTE TYPE OUTRCB=Dummy,cn,cmd:BYTE; X1,Y1,X2,Y2:INTEGER; CL,Func,Suu:BYTE; Patt1,Patt2,Patt3:INTEGER; ETX:BYTE DIM Header:HD DIM Outdat:OUTRCB Header.Head:=$14 Header.InOut:=$0E Header.Outsize:=20 Outdat.cn:=0 Outdat.cmd:=$1C Outdat.X1:=px1 Outdat.Y1:=py1 Outdat.X2:=px2 Outdat.Y2:=py2 Outdat.CL=pcl Outdat.Func:=pf Outdat.Suu:=6 Outdat.Patt1:=pdat Outdat.Patt2:=pdat Outdat.Patt3:=pdat Outdat.ETX:=3 PUT #1,Header PUT #1,Outdat END