#11 Article 494 Posted at 1987/10/13 21:20:14 by Ami (MAP404) [PRG.SHI]

Subject: シノブ ローダ for FM-11/OS-9

PROCEDURE Sloader
(* SHINOBU Loader(sloader) by メイプルタウン
(* Convert for OS-9/Basic09 by Ami
(* 1987/10/13

BASE 0

DIM D(8):INTEGER
DIM x,y,bf,c1,cm,c2:INTEGER
DIM x2,y2:INTEGER
DIM d1,d2:INTEGER
DIM f,color:INTEGER
DIM ta:STRING[256]
DIM filename:STRING[32]
DIM ipath:INTEGER

ON ERROR GOTO 999

PRINT "     *** SHONOBU Loader ***"
PRINT "               by SHINOBU"
PRINT "               Convert for OS-9 Ami"
PRINT 
INPUT "file name :",filename
OPEN #ipath,filename:READ
RUN CLS
RUN LOCATE(0,0,0)
D(0):=0
D(1):=$4000
D(2):=$4040
D(3):=$4510
D(4):=$4545
D(5):=$B1B1
D(6):=$DEF6
D(7):=$FFFE
f:=0
color:=7

FOR x:=0 TO 159 STEP 5
 REPEAT 
  RUN I_Readln(ipath,256,ta)
 UNTIL ta<>""
 FOR bf:=0 TO 4
  FOR y:=0 TO 95 STEP 2
   cm:=ASC(MID$(ta,bf*48+INT(y/2)+12,1))-$20
   c1:=cm/8
   c2:=MOD(cm,8)
   x2:=(x+bf)*4
   y2:=y*4
   d1:=D(c1)
   d2:=D(c2)
   RUN PutBlock1(x2,y2,x2+3,y2+3,d1,f,color)
   RUN PutBlock1(x2,y2+4,x2+3,y2+7,d2,f,color)
  NEXT y
 NEXT bf
NEXT x
GET #0,ta
CLOSE #ipath
999
RUN LOCATE(0,0,1)
END 

PROCEDURE PutBlock1
(* 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:INTEGER; ETX:BYTE

DIM Header:HD
DIM Outdat:OUTRCB

Header.Head:=$14
Header.InOut:=$0E
Header.Outsize:=18

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:=4
Outdat.Patt1:=pdat
Outdat.Patt2:=pdat
Outdat.ETX:=3

PUT #1,Header
PUT #1,Outdat
END 


PROCEDURE I_ReadLn
(* Line input           *)
(* 85/02/25             *)
(* SysCall use 85/05/12 *)
(* by S.HARA            *)

PARAM IPath:INTEGER
PARAM Length:INTEGER
PARAM Text(256):BYTE

TYPE Reg=CC,A,B,DP:BYTE; X,Y,U:INTEGER
DIM R:Reg
DIM Readln:INTEGER
DIM MaxSize:INTEGER

Text(1):=$FF
MaxSize:=Length
(* I$Readln call *)
Readln:=$8B
R.X=ADDR(Text)
R.Y:=MaxSize+1
R.A:=IPath
(* Input 1 Line *)
RUN syscall(Readln,R)
Length:=R.Y-1
Text(Length+1):=$FF
END