Lang = BASIC [TINY SPACE MOUSE]

この記事はSRA Advent Calendar 2016の15日目の記事です。

そのうち纏めようと思っていた大昔作ったBASICゲームをコードと共に晒しておきます

■ターゲット=松下電器産業 JR-100

■JR-100の詳細、下記コード実行のためのエミュレータは以下参照で。

http://asamomiji.jp/contents/jr-100-emulator

■ソースコード


10 REM \8E\8E TINY SPACE MOUSE \8E\8E
20 POKE18,$2F:POKE19,$FF:OPTIONCMODE1:GOTO250
30 REM —-MAIN
40 PICKK:BEEP1:BEEP0:IFK=0GOTO80
50 IFK=$47 GOSUB120:GOTO80
60 X1=(K=$42)-(K=$56):P=PEEK(X+X1):IFP>$83GOSUB220
70 POKEX,$80:X=X+X1:POKEX,$4A
80 Z=RND(20):POKE$3F07,Z:U=USR($306D):IFRND(N)=0POKE$C103+Z,$88
85 U=USR($320A):W=W-(W>0):IF(W>1)*(W<5) POKE1,$70
90 T=T+1:LOCATET/83,0:PRINT" ";:IF(PEEK($3FF0)=1)+(T>1750)GOTO440
100 A=(A=0)*(RND(50)=0)*($C103+RND(20))+(A<>0)*A:IFA=XGOSUB240
105 POKEA,$86
110 FORI=1TO30:NEXT:GOTO40
115 REM —- FLOOR UP
120 P=PEEK(X-32):IF(F>249)+(P=$84)*(W<1)RET
130 FORI=1TO2:P=PEEK(X-32):Z=RND(20):POKE$3F07,Z:IFF>241 POKE$3F03,2
140 POKE$305B,Z:POKE$3055,RND(20):POKE$3057,RND(20):POKE$3059,RND(20)
145 IF(F=242)*(I=2) BEEP1:GOSUB530
150 BEEP0:BEEP1:P=PEEK(X-32):IFP>$83GOSUB220
160 IFA<>0 A=A+32:IFA>$C3BF POKEA-32,$80:A=0
170 U=USR($3000,X):U=USR($306D):U=USR($320A):IFA=XGOSUB240
175 Z=RND(20):POKE$3F07,Z:IFRND(N)=0POKE$C103+Z,$88
180 NEXTI:F=F+1:LOCATE12,25:PRINTF;:S=S+R:LOCATE9,25:PRINTS;"0";
190 W=W-2*(W>0):N=13-R*3/2+1-F/30:T=T+2:IFN<1N=1
200 RET
210 REM —- TOUCH
220 IFP=$84 X1=0:RET
230 IF(P>$86)+(P=$85)POKE$3FF0,1:RET
240 POKEX,$4A:POKE1,$40:BEEP:POKE1,$AA:BEEP:POKE1,$D0:BEEP1
245 W=50:S=S+20*R:LOCATE9,25:PRINTS;"0":A=0:RET
250 RESTORE670:FORI=$C020TO$C04F:READI$:I$="$"+I$:POKEI,VAL(I$):NEXT
260 FORI=$C000TO$C007:POKEI,0:NEXT:IFPEEK($3010)=$80GOTO280
270 FORI=$3000TO$3284:READI$:I$="$"+I$:POKEI,VAL(I$):NEXT
280 GOSUB550
290 S=0:M=5:R=1:H$=CHR$(17)+CHR$(20)+CHR$(20)+CHR$(20)
300 F=1:A=0:GOSUB330:N=13-R*3/2+1:IFN<1N=1
310 U=USR($31E8):W=0:T=83:POKE$3FF0,0:GOSUB420:X=$C30D:POKEX,$4A
320 POKE1,$70: POKE$3F03,1:GOTO30
330 REM —-SCREEN
340 U=USR($3158):FORI=0TO17STEP2:LOCATEI,2:PRINTFLD(1);"$";SPC(20);"$"
350 LOCATEI+1,2:PRINTFLD(1);"$$$$$$$$$$$$$$$$$$$$$$";:FORJ=1TO4
360 LOCATEI+1,RND(20)+3:PRINTFLD(1);" ";:NEXT:NEXT
370 FORI=17TO22:LOCATEI,2:PRINTFLD(1);"$$$$$$$$$$$$$$$$$$$$$$";:NEXT
380 LOCATE0,25:PRINT"\E4\EE\EE\EE\EE\EE\E6":LOCATE1,25:PRINT"\F2SPACE\E8":LOCATE2,25
390 PRINT"\F2MOUSE\E8":LOCATE3,25:PRINT"\E3\94\94\94\94\94\F6":RESTORE
400 FORI=5TO17STEP3:READI$:LOCATEI,25:PRINTI$:NEXT:LOCATE6,25:PRINTH;"0"
410 LOCATE9,25:PRINTS;"0":LOCATE12,25:PRINTF:LOCATE15,25:PRINTR:RET
420 LOCATE18,25:PRINTM-1:FORI=2TO22:LOCATEI,0:PRINT"\F2";:NEXT:RET
430 DATA HISCORE,SCORE,FLOOR,ROUND,LEFT
435 REM —-DEAD
440 IFP=$85POKE1,$70:BEEP:POKE1,$AA:BEEP:POKE1,$50:BEEP:GOTO500
450 POKE1,$AA:FORI=1TO4:POKEX,$4A:BEEP:POKEX,$4B:BEEP:NEXT
455 M=M-1:IFM>0 POKEX,$80:GOTO310
460 LOCATE9,7:PRINT"[GAME OVER]":LOCATE19,6:PRINT"PUSH [S] KEY!";
470 H=H*(H>S)+S*(S>=H):PICKK:IFK<>83GOTO470
480 POKE1,$70:GOTO290
490 REM —-CLEAR
500 GOSUB610:LOCATE9,7:PRINT"\8ECLEAR !\8E";R:S=S+1750-T:R=R+1
510 FORI=$FFTO5STEP-5:POKE1,I:BEEP:NEXT:GOTO300
520 REM —-UFO
530 LOCATE0,2:PRINTFLD(1);" %%%";H$;"% %":POKE$C117,$80:RET
540 REM —-DEMO
550 CLS:PRINT" [TINY SPACE MOUSE]":LOCATE4,13:PRINT"[G]"
555 LOCATE5,14:PRINT"\88"
560 LOCATE6,10:PRINT"[V]\86\8A\89[B]":LOCATE15,8:PRINT"PUSH [S] KEY !"
570 LOCATE17,4:PRINT"(P)1985 BY HEART LAND"
580 PICKK:IFK<>83GOTO580
590 BEEP:RET
600 REM —-CLEAR 2
610 LOCATE16,3:PRINTFLD(1);"% %":POKE1,$FF:FORI=1TO250:BEEP1:BEEP0:NEXT
620 FORI=14TO0STEP-1:LOCATEI,3:PRINTFLD(1);"%%%";H$;"% %";H$;" ";
630 POKE1,I*9:BEEP:NEXT:LOCATE0,3:PRINT" ";H$;" ":RET
660 REM —-DATAS
670 DATAAA,00,AA,24,24,AA,00,AA,EF,EF,C7,C7,EF,EF,EF,EF
680 DATA3C,7E,E3,ED,E3,6E,3C,00,00,01,32,49,5D,FD,FE,00
690 DATA1C,20,38,D6,BA,FE,38,10,00,40,9C,92,BA,BF,7F,00
700 DATAFF,3F,00,86,80,A7,00,CE,C3,C0,09,A6,00,B7,3F,02,80,7F
710 DATA25,05,B6,3F,02,A7,20,8C,C1,02,26,EC,FE,3F,00,86,4A,A7
720 DATA00,BD,30,2B,39,00,00,CE,C1,03,B6,3F,03,80,02,25,10,86
730 DATA80,A7,00,08,8C,C1,17,26,F6,86,01,B7,3F,03,39,86,84,A7
740 DATA00,08,8C,C1,17,26,F8,CE,C1,03,86,80,A7,03,A7,13,A7,0E
750 DATAA7,0E,86,02,B7,3F,03,39,00,00,00,00,00,00,00,00,00,00
760 DATA00,CE,C3,F7,BD,30,7D,00,00,00,09,8C,C0,E1,26,F4,39,BD
770 DATA31,40,A6,00,FF,3F,04,B7,3F,06,80,87,25,1B,B6,3F,06,80
780 DATA88,26,26,86,20,B7,30,F5,86,88,B7,30,F3,A6,20,80,83,25
790 DATA24,80,03,20,01,39,B6,3F,07,80,0A,25,05,86,87,A7,00,39
800 DATA86,89,A7,00,39,BD,30,F8,A6,00,80,83,25,05,86,88,A7,00
810 DATA39,8B,39,26,06,86,01,B7,3F,F0,39,8B,4A,26,05,86,80,A7
820 DATA00,39,B6,3F,06,80,88,27,0D,A6,20,80,84,25,02,20,05,86
830 DATA88,B7,30,F3,86,80,A7,00,86,88,A7,20,39,00,00,00,25,16
840 DATAB7,30,BD,B7,30,F5,86,21,B7,30,E2,86,88,B7,30,C3,86,89
850 DATAB7,30,F3,39,86,00,B7,30,BD,B7,30,F5,86,20,B7,30,E2,86
860 DATA88,B7,30,C3,86,87,B7,30,F3,86,01,B7,30,C5,B7,30,D8,B7
870 DATA30,F1,09,39,00,00,00,00,00,00,00,00,00,00,86,00,B7,30
880 DATAC5,B7,30,D8,B7,30,F1,39,00,00,00,00,00,00,00,00,00,00
890 DATA00,00,86,00,CE,C3,FF,A7,00,09,8C,C0,FF,26,F8,39,00,00
900 DATA00,00,00,00,00,00,00,00,86,17,B7,3F,0A,09,FF,3F,08,B6
910 DATA3F,0A,80,01,27,12,B7,3F,0A,00,00,80,86,26,EC,86,80,A7
920 DATA00,BD,31,98,20,E3,39,00,00,00,00,00,86,00,B7,3F,0C,09
930 DATAA6,00,80,80,26,05,86,01,B7,3F,0C,08,08,A6,00,80,80,26
940 DATA07,B6,3F,0C,8B,02,B7,3F,0C,B6,3F,0C,80,00,00,00,27,12
950 DATA80,01,27,0D,80,01,27,0B,00,00,B6,3F,07,80,0A,25,02,09
960 DATA09,86,86,A7,00,39,00,00,00,00,00,00,00,00,00,00,00,00
970 DATA00,00,CE,C0,E0,A6,00,B7,3F,0D,80,83,26,04,86,84,20,09
980 DATAB6,3F,0D,80,87,25,04,86,80,A7,00,08,8C,C4,00,26,E2,39
990 DATADE,82,8C,00,00,26,01,39,86,80,A7,00,B6,3E,00,80,02,26
1000 DATA05,08,C6,01,20,1C,8B,01,26,05,09,C6,02,20,13,86,20,08
1010 DATA80,01,26,FB,96,B5,80,0A,25,04,C6,01,20,02,C6,02,A6,00
1020 DATABD,32,72,80,00,26,0C,DE,82,86,80,A7,00,CE,00,00,DF,82
1030 DATA39,80,02,26,05,F7,3E,00,DE,82,DF,82,86,86,A7,00,A6,20
1040 DATABD,32,72,80,02,27,05,C6,00,F7,3E,00,39,00,80,00,26,01
1050 DATA39,80,8A,24,04,8B,07,24,03,86,02,39,86,01,39
1060 REM (C)1985 FUKUOKA

view raw

gistfile1.txt

hosted with ❤ by GitHub

BASIC + MC6800のマシン語です。

文字間をひどく詰めて書いているのは、コードサイズの節約+紙面の都合、そう、コーディング規約だったと記憶

■最近のBASICたち

・プチコンBIG (2016/12/14発売)  … http://www.inside-games.jp/article/2016/12/07/103982.html

・こどもパソコン IchigoJam … http://ichigojam.net/

 

量産型2号機:キーボード一体型IchigoJam

前回、キーボード一体型IchigoJamを作りましたが、2台目を作るにあたり少し手順を省略した量産機としてみました。

1
初号機との違いは、ビデオ出力ピンとSOUND出力ピンのケーブルを追加で引き出していて、給電用のUSBケーブルとは別ケーブルになっています。(ケーブル加工の工程を削減したかったので・・・。以降、ちょこちょこサボるために初号機から変更を加えています)
Firmを書き込むためのシリアル接続用ピンソケットは必須なのでつけています。

aitendo_batcase.png
aitendoのミニキーボード(US配列)の電池用の空洞にピッタリ収まるIchigoJamキット(DIP化最小構成マイコンキット [K-FDH28])が同じくaitendoで売っていたので採用することにしました。395円(税別)で安価なのも魅力。空中結線せず基盤にハンダ付けできるので少し安心。

buhin.png
材料
ミニキーボード(USキー配置)
– 抵抗(470Ω、130Ω) 1本ずつ
– ビデオケーブル(黄、白)
– 三端子レギュレータ ME6209  3.3V(ME6209A33TG-7333-A)
– 14ピンソケット (組立後のFirm更新のための外部接続用。今回は5ピンだけ使用)
– リード線
– DIP化最小構成マイコンキット [K-FDH28]
      ( — K-FDH28構成部品 (写真の赤枠内) —
        — 表面実装1206サイズ抵抗(R1):330Ω(x1)    ※未使用
        — 表面実装1206サイズコンデンサ(C3、C4):104(x2)
        — 表面実装1206サイズコンデンサ(C1、C2):15〜22pF(x2)
        — 3mm LED:赤(x1)                                       ※未使用
        — タクトスイッチ:3×6(x1)                           ※未使用
        — クリスタル(HC49S):12.000MHz(x1)
        — 2.54mmピッチ単列ピンヘッダ:40P(x1) ※未使用
        — 2.54mmピッチ2Pジャンパー(x1)                ※未使用
        — チップIC :LPC1114FDH28(x1)
        — 基板:(x1))
 ai 版 USB-シリアルモジュール (Firmの書き込みに使います。無ければ入手)

さぼったところ
初号機キーボード一体型IchigoJamから省略した実装は以下のとおり。
・LED表示省略
・Reset用タクトスイッチ省略
・USB給電+Video+Soundの一体型ケーブル省略

つくりかた
1. ミニキーボードの裏蓋(電池BOXのような部分)を外す(+ドライバーでねじ3本)
2. DIP化最小構成マイコンキット [K-FDH28]を普通に組み立てる(ただし下記の部品は実装しない)
・ 14ピンヘッダ左右
・ISPの2ピンヘッダ
・LED
・LED用抵抗(R1)
・タクトスイッチ

before
[切取り加工前]
after
[加工後]
3. 電池ボックスの端の方をカッターナイフ(できればPカッター併用)で、IchigoJam基盤をはめ込む場所を作る(基盤で現物合わせ。およそ幅36mm、深さ4mm)
4. 電池ボックスの中央の方をカッターナイフで切り取り、14ピンソケットを両面テープで固定できるように場所を作る
tori
[Video,Soundのケーブルはこんな感じで取り回す]
gnd
5. 黄色ビデオケーブル(Video用)と白色ビデオケーブル(Sound用)をカットし、それぞれGNDの途中を少し剥いてGND同士をつなぎ合わせる
6. つなぎあわせたケーブルの途中部分を14ピンソケットのGND(右から3つ目と4つ目)にはんだづけ
reg
7. キーボード基盤Cにつながっている緑線を外す
8. キーボード基盤CとIchigoJam基盤のKBD1をリード線でつなぐ
9. キーボード基盤Dにつながっている白線を外す
10. キーボード基盤DとIchigoJam基盤のKBD2をリード線でつなぐ
11. キーボード基盤vcc 5V、GNDに三端子レギュレータをはんだづけ
12. 三端子レギュレータ3.3V出力をIchigoJam基盤のVCC(右)へリード線でつなぐ
13. 14ピンソケットGNDにつないだ2本のビデオケーブルGNDリード線のうち1本をキーボード基盤GNDへはんだづけ。もう1本をIchigoJam基盤のGND(右)へはんだづけ
zentai
14. IchigoJam基盤のRX,TX,ISPを14ピンソケットにリード線でつなぐ。14ピンソケット右からRX,TX,(GND,GND),ISPとした (※GNDは前の手順で接続済み)
15. IchigoJam基盤のVIDEO1に470Ω、VIDEO2に130Ωをはんだづけして反対の両端をつなぐ
16. 黄色ビデオケーブルの信号線(Video)をつないだ抵抗の先へはんだづけ
17. 白色ビデオケーブルの信号線(Sound)をIchigoJam基盤のSOUNDへはんだづけ
18. キーボードの裏蓋を現物合わせで 14ピンソケット用に切り込む
19. キーボードの裏蓋を現物合わせで ビデオケーブル用に切り込む
20. IchigoJam基盤をはめ込み、14ピンソケットを両面テープで固定し、キーボードの裏蓋を戻す

つくりかたは以上です。LED表示はあきらめたのでパターンカットと330Ω抵抗のはんだづけ無し、ケーブル加工は最小限にしたので熱収縮チューブも不要。穴あけ面倒だったのでRESETスイッチ取り付けなし。と有効にサボりを入れたつもり。

Firm書き込み
このキット(DIP化最小構成マイコンキット [K-FDH28])はFirmが書き込まれていないので、IchigoJamとPC/MACとをUSBシリアル経由で接続してFirmを書き込む
1. Firmを入手(USキーボード用が必要)
20160703210757_p149.jpg
2. 14ピンソケットにリード線でつなぐ(写真左からRX,TX,GND,GND,ISPとした)

  1. Firmを書き込み

$ lpc21isp  ./ichigojam-xtal-us.hex   /dev/cu.SLAB_USBtoUART   115200   1200

 

動作確認
最初、VIDEO2の抵抗は100Ωとしていたが背景が白っぽいので、130Ωに変更した。この辺個体差があるかもしれません。(130Ω〜160Ωなら良さそうでした)
gy.png
変更前(VIDEO2の抵抗は100Ω)
bk.png
変更後(VIDEO2の抵抗を130Ωで試してみる)

このキーボード一体型IchigoJamは子供たちに使ってもらいやすいんじゃないでしょうか。
キーボード付きでこの価格で遊べるとは、、、良いですねー。
・USキーボード:795円
・DIP化最小構成マイコンキット:395円
・ビデオケーブル(黄、白):100円
・三端子レギュレータ:30円
・14ピンソケット:50円程度
・抵抗2本:10円程度
合計:1,380円(税別)

参考
キーボード一体型「IchigoJam X」の作り方&落ちゲーCLMS

キーボード一体型IchigoJam

福野さんの製作記事、キーボード一体型「IchigoJam X」の作り方&落ちゲーCLMSを読んで、テレビのUSBから電源をとってVideo/Soundもテレビに出力するキーボード一体型IchigoJamを作ってみました。

20160703210756_p146.jpg
福野さんのオリジナルと同じくIchigoJamはキーボードの内部に収め、ビデオ出力ピンとSOUND出力ピンをUSBケーブルのリード線2本を流用して筐体から引き出しています。
機器の取扱いがシンプルになって子供の雑な扱いにも対応できそう。
・追加でFirmを書き込むためのシリアル接続用ピンソケットをつけています。

aitendo_batcase.png
aitendoのミニキーボード(US配列)の電池用の空洞にピッタリ収まるIchigoJamキット(DIP化最小構成マイコンキット [K-FDH28])が同じくaitendoで売っていたので採用することにしました。395円(税別)で安価なのも魅力。空中結線せず基盤にハンダ付けできるので少し安心。

buhin.png
材料
ミニキーボード(USキー配置)
– 抵抗(470Ω、130Ω) 1本ずつ
– ビデオケーブル(黄、白)
– 三端子レギュレータ ME6209  3.3V(ME6209A33TG-7333-A)
– 14ピンソケット (組立後のFirm更新のための外部接続用。今回は5ピンだけ使用)
– リード線
– DIP化最小構成マイコンキット [K-FDH28]
      ( — K-FDH28構成部品 (写真の赤枠内) —
        — 表面実装1206サイズ抵抗(R1):330Ω(x1)
        — 表面実装1206サイズコンデンサ(C3、C4):104(x2)
        — 表面実装1206サイズコンデンサ(C1、C2):15〜22pF(x2)
        — 3mm LED:赤(x1)                          ※未使用
        — タクトスイッチ:3×6(x1)
        — クリスタル(HC49S):12.000MHz(x1)
        — 2.54mmピッチ単列ピンヘッダ:40P(x1) ※未使用
        — 2.54mmピッチ2Pジャンパー(x1)                ※未使用
        — チップIC :LPC1114FDH28(x1)
        — 基板:(x1))
 ai 版 USB-シリアルモジュール (Firmの書き込みに使います。無ければ入手)

つくりかた
1. ミニキーボードの裏蓋(電池BOXのような部分)を外す(+ドライバーでねじ3本)
2. DIP化最小構成マイコンキット [K-FDH28]を普通に組み立てる(ただし右記の部品は実装しない→ 14ピンヘッダ左右、ISPの2ピンヘッダ、LED)
20160703224422_p154.jpg
3. 電池ボックスの端の方をカッターナイフ(できればPカッター併用)で、IchigoJam基盤をはめ込む場所を作る(基盤で現物合わせ。およそ幅36mm、深さ4mm)
20160703224833_p155.jpg
4. 電池ボックスの中央の方をカッターナイフで切り取り、14ピンソケットを両面テープで固定できるように場所を作る
5. IchigoJam基盤のRX,TX,GND,ISPを14ピンソケットにリード線でつなぐ(写真右からRX,TX,GND,GND,ISPとした)
6. IchigoJam基盤のVIDEO1に470Ω、VIDEO2に130Ωをはんだづけして反対の両端をつなぐ
20160703210754_p142.jpg
7. キーボード基盤Cにつながっている緑線を外す
8. キーボード基盤Cと基盤のKBD1をリード線でつなぐ
9. キーボード基盤Dにつながっている白線を外す
10. キーボード基盤DとIchigoJam基盤のKBD2をリード線でつなぐ
11.  USBケーブル側の緑線をIchigoJam基盤のVIDEO1+2につけた抵抗へはんだづけ
12. USBケーブル側の白線をIchigoJam基盤のSOUNDへはんだづけ
13. キーボード基盤vcc 5V、GNDに三端子レギュレータをはんだづけ
14. 三端子レギュレータ3.3V出力をIchigoJam基盤のVCC(右)へリード線でつなぐ
15.キーボード基盤GNDをIchigoJam基盤のGND(右)へリード線でつなぐ
16. キーボード基盤CAPS LOCKのLEDの+側、GND側をパターンカット
17. キーボード基盤CAPS LOCKのLEDの+,GNDをIchigoJam基盤のLED+,GNDへリード線でつなぐ
reset.png
18. キーボードの裏蓋に現物合わせでRESETボタン用の穴を開ける
19. キーボードの裏蓋を現物合わせで 14ピンソケット用に切り込む
done.png
20. IchigoJam基盤をはめ込み、キーボードの裏蓋を戻す
21. USBの先端5cmあたりでカット
cable.png
22. 黄色ビデオケーブルをカットし、信号線をUSBケーブルキーボード側の緑と接続(熱収縮チューブが便利)
23. 白色ビデオケーブルをカットし、信号線をUSBケーブルキーボード側の白と接続
24. USBケーブルキーボード側の青、プラグ側の青、ビデオケーブル2本のGNDを接続
25. USBケーブルキーボード側とプラグ側のオレンジ(vcc 5V)同士を接続

Firm書き込み
このキット(DIP化最小構成マイコンキット [K-FDH28])はFirmが書き込まれていないので、IchigoJamとPC/MACとをUSBシリアル経由で接続してFirmを書き込む
1. Firmを入手(USキーボード用が必要)
20160703210757_p149.jpg
2. 14ピンソケットにリード線でつなぐ(写真左からRX,TX,GND,GND,ISPとした)
3. Firmを書き込み

動作確認
最初、VIDEO2の抵抗は100Ωとしていたが背景が白っぽいので、130Ω(130Ω〜160Ωくらいなら良さげ)に変更した。この辺個体差があるかもしれません。
gy.png
変更前(VIDEO2の抵抗は100Ω)
bk.png
変更後(VIDEO2の抵抗は130Ω)

このキーボード一体型IchigoJamは子供たちに使ってもらいやすいんじゃないでしょうか。
キーボード付きでこの価格で遊べるとは、、、良いですねー。
・USキーボード:795円
・DIP化最小構成マイコンキット:395円
・ビデオケーブル(黄、白):100円
・三端子レギュレータ:30円
・14ピンソケット:50円程度
・抵抗2本:10円程度
合計:1,380円(税別)