SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

パンチカードJam PCB

以前作った「パンチカードJam」のその後です。
有志の方にPCB(プリント基板)をデザインしていただいて、スイッチサイエンスPCBで発注。それを使ってコンパクトな一体型にしてみました。

プレイ動画はこちら。

発注したPCB基板。

全体をタッパーのふたにくっつけたので、タッパー本体をかぶせればそのまま持ち歩けます。

画面もちゃんとシステムっぽく表示するようにしました。

カードを読み込むと、そのプログラム行を表示します。

「やってみる」(RUN)カードで、プログラムを実行します。実行中の行を順番に表示します。

「やめる」(ESC)カードで、プログラムが停止します。

「けす」(CLS)カードで、画面がクリアされます。

「みる」(LIST)カードで、プログラムリストを表示します。

「プログラムをぜんぶけす」(NEW)カードで、プログラムを消去します。
LISTやRUNをしても、何も起きなくなります。

命令表の改訂版。LISTとCLSコマンドを追加しました。
やっぱりLISTが表示されると、プログラミングしている気分になりますね(^_^)

システムプログラムはこちら。容量が増えたので2スロットに分けました。

●本体プログラム(スロット0)

1 CLS:?"***Punch Card Jam***"
2 CLV:FORP=1TO6:OUTP,-1:NEXT:BEEP
3 '@RESET
4 OUT0:Z=0:L=0
5 '@OK
6 ?CHR$(8);:?"OK":?CHR$(1);
7 IF!IN(11)CONT
8 '@ICARD
9 R=1:GSB41
10 IFC=0&&O=0GOTO8
11 ?CHR$(8);:IF!CGOTO23
12 IFTGSB21 ELSEGSB18
13 FORB=1TOZ:BEEP20,5:WAIT20:NEXT
14 GOTO34
15 '@ICARDEND
16 IF!IN(11)CONT
17 ?CHR$(1);:GOTO8
18 '@ICARDN
19 Z=Z+1:[Z]=C*16+O:IFC=8L=L+1:[80+L]=Z
20 ?"read> ";Z*10;" ";:RTN
21 '@ICARDT
22 [Z]=[Z]|((C*16+O)<<8):T=0:RTN
23 '@COM
24 BEEP30,30:IFO=1?"RUN":R=0:GOTO29
25 IFO=2?"LIST":R=2:GOTO29
26 IFO=3?"NEW":GOTO3
27 IFO=4CLS:GOTO5
28 GOTO8
29 '@GO
30 A=0
31 '@GLOOP
32 A=A+1:IFA>ZGOTO5
33 C=[A]&#F0/16:O=[A]&15:?CHR$(8);A*10;" ";
34 '@GDO
35 IFC=15&&O=15LRUN1,150
36 LRUN1,C*10
37 '@GLOOPEND
38 IFT&&(R!=1)C=([A]&#F000)>>12:O=([A]&#F00)>>8:T=0:GOTO34
39 GSB41:IFC=15&&O=15BEEP30,30:?"ESC":GOTO5
40 ?CHR$(1);:GOTO31
41 '@RCARD
42 C=0:O=0:IFIN(11)RTNELSECLT
43 '@RCARD1
44 IFIN(11)RTN
45 IFTICK()<120GOTO43
46 FORP=1TO4:C=C*2+IN(P):O=O*2+IN(P+4):NEXT:RTN
●コマンド解析ルーチン(スロット1)
1 '*Punch Card Jam(1)
10 @LED
11 ?"LED ";O:IFR=1LRUN0,15
12 IFR=2LRUN0,37
13 LEDO:LRUN0,37
20 @WAIT
21 ?"WAIT ";O*60:IFR=1LRUN0,15
22 IFR=2LRUN0,37
23 WAITO*60:LRUN0,37
30 @BEEP
31 ?"BEEP":IFR=1LRUN0,15
32 IFR=2LRUN0,37
33 BEEP:LRUN0,37
80 @LABEL
81 ?"@";O:IFR=1LRUN0,15
82 LRUN0,37
90 @GOTOL
91 ?"GOTO @";O:IFR=1LRUN0,15
92 IFR=2LRUN0,37
93 A=[80+O]-1:LRUN0,37
100 @IFBTN
101 ?"IF BTN()=";O;" THEN ";:T=1:IFR=1LRUN0,15
102 IFR=2LRUN0,37
103 T=(BTN()=O):IF!T?
104 LRUN0,37
120 @FOR
121 ?"FOR I=1 TO ";O:IFR=1LRUN0,15
122 IFR=2LRUN0,37
123 I=1:J=O:S=A:LRUN0,37
130 @NEXT
131 ?"NEXT":IFR=1LRUN0,15
132 IFR=2LRUN0,37
133 I=I+1:IFI<=JA=S
134 LRUN0,37
150 @END
151 ?"END":IFR=1LRUN0,15
152 IFR=2LRUN0,37
153 A=Z:LRUN0,37