#11 Article 3382 Posted at 1989/07/29 17:50:51 by BOSS (MAP386) [PRG.ML1]

Subject: とにかく動いてしまったML1.BAS

今度は最後までチェックしています。デコードはできているはず
です。MSX2ではANNIN.ML1が35分かかって出てきました。

 その他MSX用の命令・関数がいくつかあるかも知れませんので
質問どうぞ。

10 ' ML1 for MS-BASIC
20 ' ml1_pass() ヨリ
30 '
40   BP=0
41   X=0:Y=0
42 BD=0
50 BF=&H80
60 DIM RV(159,99),PA(127),PI(127),OV(5)
70 OV(0)=0
80 OV(1)=1
90 OV(2)=-1
100 OV(3)=2
110 OV(4)=-2
120 OV(5)=3
1000 ' MAIN
1010 OPEN "b:TEST.ML1" AS#1 LEN=1
1020 FIELD #1,1 AS BD$
1015 ' ウエハ ランダムアクセス デ レコードチョウ 1 ヲ シテイ シテイマス。 MSXヨウナノデ テキトウニ カエテ クダサイ。
1030 MF=LOF(1)
1070 BI=2:GOSUB 2000:CM=N
1080 ON CM+1 GOTO 1100,1140,1200
1100     FOR I=0 TO 127
1110         BI=10:GOSUB 2000:PA(I)=N
1120     NEXT I
1130     GOTO 1270
1140     BI=7:GOSUB 2000:CN=N+1
1150     FOR I=0 TO CN-1
1160         BI=7:GOSUB 2000:J=N
1170         BI=10:GOSUB 2000:PA(J)=N
1180     NEXT I
1190     GOTO 1270
1200     BI=7:GOSUB 2000:CN=N+1
1210     FOR I=0 TO CN-1
1220         BI=7:GOSUB 2000:PI(I)=N
1230         BI=10:GOSUB 2000:PA(PI(I))=N
1240     NEXT I
1250     GOTO 1270
1260 '
1270 GOTO 1360
1280     LE=LE+1
1290     IF CM=2 THEN GOSUB 3000:CO=PI(N) ELSE BI=7:GOSUB 2000:CO=N
1300     RV(X,Y)=CO OR &H80
1310 '
1320     BI=1:GOSUB 2000:IF N THEN GOSUB 4000
1330     X=X+LE
1340     Y=Y+INT(X/160)
1350     X=X MOD 160
1360 GOSUB 3000:LE=N:IF BP+&H61=MF THEN 1390 ELSE 1280
1370 ' ガメン ヒョウジ
1380 'FOR I=0 TO 127
1390     ' パレット・・・  カラーコード I = (R:INT(PA(I)/81),G:(INT(PA(I)/9) MOD 9),B:(PA(I) MOD 81)
1400 'nEXT I
1410     ' ココデハ パレットノ セッテイヲ スルガ キシュイゾンスル ブブンナノデ シキ ノミヲ アゲテオク。
1420 '
1430 FOR Y=0 TO 99
1440     FOR X=0 TO 159
1450         IF RV(X,Y) AND &H80 THEN CO=RV(X,Y) AND &H7F
1470         '
1480         ' ココデ ML1ノ ザヒョウデ (X,Y)ニ カラーコード VR(X,Y) ヲ セット
1490         'キシュ イゾン ブブント ナルノデ ショウリャク シマス。
1500         '
1510     NEXT X
1520 NEXT Y
1530 END
1540 '
1541 GOTO 1541
2000 ' int restore_bit_data( int )
2010 ' BIニ ビットチョウヲ シテイ シテ CALL スルト Nデ カエス。
2020 '
2030 N=0
2040 FOR I1=0 TO BI-1
2050    N=N*2
2060    GET #1,BP+&H61
2070    IF ASC(BD$) AND BF THEN N=N+1
2080    BF=INT(BF/2):IF BF=0 THEN BP=BP+1:BF=&H80
2090 NEXT I1
2100 RETURN
2110 '
3000 ' int resore_wyle (void)
3010 ' color_mode==2 ノ トキノ wyleホウニヨル ビットノ チュウシュツ。
3020 ' call スルト Nヲ カエス。
3030 '
3040 L=1
3050 BI=1:GOSUB 2000:IF N THEN L=L+1:GOTO 3050
3060 BI=L:GOSUB 2000:N=N+2^(L)-2
3070 RETURN
3080 '
4000 ' void release_v_link(x,y,color)
4010 ' ヘンカテンノ シタノ レンサヲ ヘンカテントスルタメニ vram[y+1][x+offset_value[offset]]ノ ダイ 7ビットヲ セット。
4020 '
4030 X1=X:Y1=Y
4040 BI=1:GOSUB 2000:OS=N
4050 IF OS<>1 THEN 4100
4060 BI=2:GOSUB 2000:OS=N+1
4070 IF OS=3 THEN OS=5
4080 IF OS=4 THEN BI=1:GOSUB 2000:IF N=0 THEN OS=3 ELSE OS=4
4090 '
4100 IF OS=5 THEN RETURN
4110 X1=X1+OV(OS)
4120 Y1=Y1+1
4130 RV(X,Y)=CO OR &H80
4140 '
4150 ' オリジナルハ ココデモ POINT SETスルガ ケッカトシテ カワラナイノデ ショウリャクスル。
4160 ' ダス バアイハ COノ ダイ7ビットヲ リセットシタモノヲ カラーコードトスル。
4170 '
4180 GOSUB 4040
4190 RETURN

 ま、今回はただのCtoBですのでメモリを考えてないものです。
ここから先は努力と工夫で立ち向かってくださいませ。

 そのうちMSX2でBASIC版が出せるとは思いますが
MX1もつくんなくっちゃいけないのね。