#11 Article 1027 Posted at 1988/02/03 07:48:22 by Ami (MAP404) [PRG.NL3]

Subject: N3Loader for FM-11 OS-9

n3loaderを以前OS-9/Basic09に移植したのですが,色の再現
性が悪いものでした。今回Ami-Netの会員の方が色の再現性を改善し
さらにほぼ640*400のサイズで表示するように修正されましたので
再度uploadします。
  このPgmで響子さんを表示しましたが,とてもきれいで感動しました。
これからもよい絵をupしてくださーい。

PROCEDURE n3loader
(* N3Loader 
(* メイプルタウン ネットワーク
(* 1987/10/13
(* 1988/02/01 
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
NEXT i
FOR i=0 TO 8
READ c(i)
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*4,y*4,x*4+3,y*4+3,c(r(cl)),2,2)
RUN PutBlock(x*4,y*4,x*4+3,y*4+3,c(g(cl)),2,1)
RUN PutBlock(x*4,y*4,x*4+3,y*4+3,c(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 

DATA $00,$8020,$A0A0,$A4A1,$A5A5,$E5B5,$F5F5,$FDF7,$FFFF

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