#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もつくんなくっちゃいけないのね。