0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MSX BASICでbase64デコーダを実装

Posted at

はじめに

皆さんこんにちは。最近、MSX0を入手したので、昔触れたMSX BASICを思い出しながら、再学習しながらプログラミングをしています。
MSX0ですが、ありがたいことにIP ReachableでTeraTeamで接続して作業できるんですよね。Windows端末上でプログラム組んで、コピペでMSX0に流し込んで、runして動作確認。小規模のプログラム開発はこの方法で捗りそうですね。
とはいえ、ズボラな私はもうちょっと楽したくて、画像等々のバイナリファイルもWindows端末からコピペできると理想的ではと思い、勉強の題材にとまずはbase64のデコーダを作ってみました。

(現状ある程度実装が進んでいる状況から報告しておくと、転送速度が芳しくなく、SDカード抜き出してファイル転送したほうがおそらく早いことが見えてきています…)

デコーダ実装

以下実装コードです。

10 DIM I$, O$, B$
20 INPUT "Please input the text using base64:"; I$
30 GOSUB 100'CALL Base64 decoder (I$:Input Text, O$:Output Text, B$:Base64 table)
40 PRINT "Result:"; O$
50 END
100 'Base64 decoder (I$:Input Text, O$:Output Text, B$:Base64 table)
110 DIM B(4), OB(3)
120 DIM T$, C$
130 LET O$ = ""
140 LET B$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
150 FOR I = 1 TO LEN(I$) STEP 4
160   T$ = MID$(I$, I, 4)
170   EP = 4
180   IF I + 4 > LEN(I$) THEN IF INSTR(T$, "=") > 0 THEN EP = INSTR(T$, "=") - 1
190   FOR J = 1 TO 4
200     B(J) = 0
210   NEXT J
220   FOR J = 1 TO EP
230     B(J) = INSTR(B$, MID$(T$, J, 1)) - 1
240   NEXT J
250   OB(1) = B(1) * 4 + B(2) \ 16
260   OB(2) = (B(2) AND 15) * 16 + B(3) \ 4
270   OB(3) = (B(3) AND 3) * 64 + B(4)
280   FOR J = 1 TO 3
290     O$ = O$ + CHR$(OB(J))
300   NEXT J
310 NEXT I
320 LET O$ = LEFT$(O$, LEN(O$) - (LEN(T$) = 2) - (LEN(T$) = 1))
330 RETURN

実行結果

実行結果はTeraTeamの出力結果を採用しています。残念ながらMSX上はUNICODEは表示されませんので。

run
Please input the text using base64:? 5pys5pel44Gv5pm05aSp44Gq44KK
Result:本日は晴天なり
Ok

MSX0上の表示は以下のようになります。なにがなにやらですね。
image.png

MSX-BASICあれこれ

MSX-BASICの書籍を読み切れてないせいか、まだまだ疑問点多いですね。勉強せねば。
・配列の初期化、効率的な方法ないですかね
・シフト演算子は、、無いですよね
・FORループを途中で抜けるときは、GOTOとかで飛ばしちゃってよいものか

現場からは以上です!

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?