#11 Article 4141 Posted at 1990/03/27 01:31:42 by きつねりす (MAP542) [PRG.MX1]
Subject: N88BASIC用のMX1デコーダーだよん
MX1のデコーダーを書いてみました
久しぶりに誰も使うことがないだろうN88BASICで書いてみました。
移植するにもいろんな言語でUPされてるほうが移植する方もらくだと思っ
たからでありあす。
そのためエラー処理など機種依存部分はほとんど必要な部分以外設定していません
いちおうBUG付きですができましたのでUPさせてもらいます。
未熟な私の書いたPROGRAMですからアルゴリズムの結構いいかげんです
もっと効率のいい(はやくなる)アルゴリズムをおしえてください。(マジデ オネガイシマス)
1 'MX1 DECODER for N88BASIC
2 DIM DAT(256), D(10), DD(60) :D$="d:\" 'd$は展開するドライブ
3 FOR I = 0 TO 256: DAT(I) = 0: NEXT
4 FOR I = 0 TO 127: READ A$: DAT(VAL("&H" + A$)) = I: NEXT 'テーブルノ セッテイ
10 INPUT "LOGFILE=", A$
20 OPEN A$ FOR INPUT AS #1
30 IF EOF(1)=1 THEN 340
40 LINE INPUT #1, I$
50 IF LEFT$(I$,3)<>"@@@" OR INSTR(5, I$, "@@@")=0 THEN 30 'タイトル ケンサク
60 BY = INSTR(I$, " by ")
80 TT = INSTR(I$, " : ")
90 TE = INSTR(I$, " (")
100 NAM$ = MID$(I$, 5, BY - 5): GOSUB 1000:PRINT "Filename is "; NAM$
110 HANDLE$ = MID$(I$, BY + 4, TT - BY - 4): PRINT "Painted by "; HANDLE$
120 TITLE$ = MID$(I$, TT + 3, TE - TT - 3): PRINT "Title 「"; TITLE$; "」"
130 OPEN D$+NAM$ FOR OUTPUT AS #2
140 EF = 0
150 WHILE EF = 0
160 I = 0
170 WHILE I < 8 '8モジヅツ ニュウリョクスル 170-220
180 I = I + 1
190 IN$ = INPUT$(1, #1)
200 IF IN$=CHR$(10) OR IN$=CHR$(13) THEN 190 'cr,lf ハ pass
210 IF IN$="@" THEN FOR J=I TO 8: D(J)=0:NEXT:I=8:EF=1 ELSE D(I)=DAT(ASC(IN$))
220 WEND '@デ シュウリョウスル
240 FOR I = 1 TO 56
250 DD(I)=(D((I-1) \ 7+1) AND 2^(6-(I-1) MOD 7))/2^(6-(I-1) MOD 7)
260 NEXT
270 FOR I = 1 TO 7
280 PRINT #2, CHR$(128 * (DD(8 * I - 7)) + 64 * (DD(8 * I - 6)) + 32 * (DD(8 * I - 5)) + 16 * (DD(8 * I - 4)) + 8 * (DD(8 * I - 3)) + 4 * (DD(8 * I - 2)) + 2 * (DD(8 * I - 1)) + 1 * (DD(8 * I)));
290 NEXT
300 WEND
310 CLOSE #2
320 LINE INPUT #1,I$
330 GOTO 50
340 CLOSE
350 END
503 DATA 21,23,24,25,26,28,29,2A,2B,2D,2E,2F,30,31,32,33
504 DATA 34,35,36,37,38,39,3A,3B,3C,3D,3E,3F,41,42,43,44
505 DATA 45,46,47,48,49,4A,4B,4C,4D,4E,4F,50,51,52,53,54
506 DATA 55,56,57,58,59,5A,5B,5D,5E,5F,61,62,63,64,65,66
507 DATA 67,68,69,6A,6B,6C,6D,6E,6F,70,71,72,73,74,75,76
508 DATA 77,78,79,7A,7B,7C,7D,7E,A1,A2,A3,A4,A5,A6,A7,A8
509 DATA A9,AA,AB,AC,AD,AE,AF,B0,B1,B2,B3,B4,B5,B6,B7,B8
510 DATA B9,BA,BB,BC,BD,BE,BF,C0,C1,C2,C3,C4,C5,C6,C7,C8
1000 'make name sub
1010 X=INSTR(NAM$,":")
1020 IF X<0 THEN NAM$=MID$(NAM$,X+1)
1030 Y=INSTR(NAM$,"\")
1040 IF Y=0 THEN 1090
1050 NAM$=MID$(NAM$,Y+1)
1060 GOTO 1030
1090 RETURN
けっこう短いですよね・・・でも遅いですよ。
きつねりす