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?

TRS-80 エミュレータ on macOS

Posted at

↑ 以前の記事の続きです。

macOS でネイティブに実行できる TRS-80エミュレータ trs80gp を試してみたので、使い方をまとめました。

1. ダウンロード

公式サイトの「Download」をクリックする。

URL:http://48k.ca/trs80gp-2.5.5.zip

tt1.png

zipを解凍すると、次のフォルダ構成となっていて、macOS 以外に、Winows や Linux、Raspberry Pi 向けバイナリーも含んでいる。

~ % tree -L2 trs80gp-2
trs80gp-2
├── linux-32
│   └── trs80gp
├── linux-64
│   └── trs80gp
├── mac
│   └── trs80gp.app
├── rpi-32
│   └── trs80gp
├── rpi-64
│   └── trs80gp
└── windows
    └── trs80gp.exe

2. trs80gp を起動する

  • ターミナルを開き、カレントディレクトをtrs80gp-2/macに移動する
~ % cd trs80gp-2/mac
mac % ls
trs80gp.app/
mac % open trs80gp.app
  • コマンドopen trs80gp.appで起動すると、次の警告ダイアログが表示される
t1.png
  • 一旦「完了」で閉じた後に、「システム設定」→「プライバシーとセキュリティ」にある「このまま開く」をクリック
t2.png
  • 次に表示される警告ダイアログには「このまま開く」が追加されるので、それをクリック
t3.png
  • 本当に開いてよいなら、パスワードを入力して「OK」をクリック
    (自己責任で判断願います)
t4.png t5.png

TRSDOS が起動され、コマンド入力待ちになっています。

3. BASIC を起動する

  • BASICとタイプし、エンターキーを押す
t6-0.png
  • 「How Many Files?」と「Memory Size?」の問いには、空エンター
image.png
  • Disk BASIC Rev 1.3 が起動します
t6.png

4. Black Boxで遊ぶ

  • 次のコードをコピーして、trs80エミュレータにペーストする
50 DIM B(9,9)
100 PRINT TAB(25);"BLACKBOX"
110 PRINT TAB(20);"CREATIVE COMPUTING"
120 PRINT TAB(18);"MORRISTOWN, NEW JERSEY"
130 PRINT:PRINT:PRINT
140 DEF FNR(Z)=INT(8*RND(0)+1)
150 PRINT "NO. OF ATOMS";: INPUT N
160 FOR J=0 TO 9: FOR I=0 TO 9: B(I,J)=0: NEXT I,J
170 FOR I=1 TO N
180 X=FNR(1): Y=FNR(1): IF B(X,Y)<>0 THEN 180
190 B(X,Y)=1: NEXT I
200 S=0:C=0
210 PRINT "RAY";: INPUT R: IF R<1 THEN 480
220 ON (R-1)/8+1 GOTO 240,250,260,270
230 PRINT "ERROR": GOTO 210
240 X=0: Y=R: U=1: V=0: GOTO 280
250 X=R-8: Y=9: U=0: V=-1: GOTO 280
260 X=9: Y=25-R: U=-1: V=0: GOTO 280
270 X=33-R: Y=0: U=0: V=1
280 X1=X+U: Y1=Y+V
290 IF U=0 THEN X2=X1-1: X3=X1+1: Y2=Y1: Y3=Y1: GOTO 310
300 Y2=Y1-1: Y3=Y1+1: X2=X1: X3=X1
310 ON 8*B(X1,Y1)+B(X2,Y2)+2*B(X3,Y3)+1 GOTO 330,340,350,340
320 PRINT "ABSORBED":S=S+1: GOTO 210
330 X=X1: Y=Y1: GOTO 380
340 Z=1: GOTO 360
350 Z=-1
360 IF U=0 THEN U=Z: V=0: GOTO 380
370 U=0: V=Z
380 ON (X+15)/8 GOTO 420,400,430
390 STOP
400 ON (Y+15)/8 GOTO 440,280,450
410 STOP
420 Z=Y: GOTO 460
430 Z=25-Y: GOTO 460
440 Z=33-X: GOTO 460
450 Z=8+X
460 IF Z=R THEN PRINT "REFLECTED":S=S+1: GOTO 210
470 PRINT "TO";Z:S=S+2: GOTO 210
480 PRINT "NOW TELL ME, WHERE DO YOU THINK THE ATOMS ARE?"
490 PRINT "(IN ROW,COLUMN FORMAT PLEASE.)"
500 FOR Q=1 TO N
510 PRINT "ATOM # ";Q;
520 INPUT I,J
530 IF B(J,I)<>1 THEN S=S+5:GOTO 540
532 B(J,I)=2
535 C=C+1
540 NEXT Q
550 PRINT: FOR J=1 TO 8: FOR I=1 TO 8
560 IF B(I,J)=0 THEN PRINT " .";: GOTO 580
570 PRINT " *";
580 NEXT I: PRINT: NEXT J: PRINT:
590 PRINT " YOU GUESSED ";C;" OUT OF ";N;" ATOMS CORRECTLY!!"
600 PRINT " YOUR SCORE FOR THIS ROUND WAS ";S;" POINTS."
610 INPUT " CARE TO TRY AGAIN";A$
620 IF LEFT$(A$,1)="Y" THEN PRINT:GOTO 150
  • RUNエンターで実行
t11.png
  • 「NO. OF ATOMS?」に 3〜5を入力して、エンター
t11-1.png
  • 後は好きに遊ぶ
t11-1.png

3つとも当てましたが、メモが必須です。

t12-1.png



  1. Black Box V2.0で遊ぶ

Black Box V2.0は、グラフィカルなUIとなっているので、メモがなくても答えることができます。

t13.png t14.png
  • NEWエンターで、プログラムをクリア

  • 次のコードをコピー、エミュレータにペースト

10 CLS:PRINT:PRINT"BLACK BOX  VERSION 2.0":PRINT"BY  MORRIS JONES":  REM 533 SUTTER ST #1206, SF CA 94102
11 CLEAR200
12 DIMN1$(32),B%(9,9),N2$(16),G%(9,9),N3$(16)
13 DEFSTRN,Y:DEFINTA-M,O-X,Z:RANDOM
14 PRINT@99,"INITIALIZING";:VI=15360:SC=0:IM=1:W=0:GF=0
15 FORI=1TO8:FORJ=1TO8:B(I,J)=0:G(I,J)=0:NEXTJ,I
16 FORI=1TO32:N1(I)=RIGHT$(STR$(I),2):NEXT
17 FORI=1TO7:N2(I)=STRING$(2,CHR$(64+I)):NEXT: FORI=8TO16:N2(I)=STRING$(2,CHR$(65+I)):NEXT
18 FORI=1TO8:N3(I)=STR$(I):NEXT: FORI=9TO16:N3(I)=CHR$(56+I)+" ":NEXT
19 IFCTHEN23
20 PRINT@227,"DO YOU NEED INSTRUCTIONS? ";
21 Y=INKEY$:IFY<>"Y"ANDY<>"N"THEN21
22 IFY="Y"THENC=-1:GOSUB60:IFGFTHEN14
23 C=0:CLS
24 FORVV=1TO8:FORHV=1TO8:D=VI+65+64*VV+3*HV:POKED,143:POKED+1,143:NEXTHV,VV:GOSUB51
25 PRINT@99,"CHOOSE:";:PRINT@163,"DEGREE OF DIFFICULTY,";:PRINT@227,"NUMBER OF BALLS (3-5)";
26 R=VAL(INKEY$):IFR<3ORR>5THEN26:ELSEPRINT@34,R"BALLS";
27 FORI=1TOR: H=RND(8):V=RND(8): IFB(H,V)THENI=I-1:NEXT::ELSEB(H,V)=-1: NEXT
28 GOSUB72
29 PRINT@99,"CHOOSE:";:PRINT@163,"1) STOP & SCORE";:PRINT@227,"2) PROBE";:PRINT@291,"3) PLACE GUESS";:PRINT@355,"4) REMOVE GUESS";:PRINT@419,"5) REDRAW BOX";:PRINT@773,"POINTS USED:";SC;:PRINT@803,STRING$(34," "):PRINT@803,"CHOICE?";
30 X0=VAL(INKEY$):IFX0<1ORX0>5THEN30:ELSEPRINTX0;: ONX0GOSUB32,42,52,54,56
31 IFENTHENEND:ELSEIFGFTHEN14:ELSE28
32 FORI=1TO8:FORJ=1TO8:IFG(I,J)THENW=W+1:NEXTJ,I::ELSENEXTJ,I
33 IFW>RTHENPRINT@803,"TOO MANY GUESSES";:GOTO34 :ELSEIFW<RTHENPRINT@803,"TOO FEW GUESSES";:GOTO34 :ELSEGOTO35
34 W=0:FORI=1TO700:NEXT:RETURN
35 GOSUB72:GI=-1
36 FORI=1TO8:FORJ=1TO8: IFG(I,J)ANDNOTB(I,J)THEND=VI+65+64*I+3*J:GI=0::ELSE38
37 PRINT@803,STRING$(29," ");:PRINT@803,"WRONG GUESS";: FORL=1TO5:   POKED,143:POKED+1,143:FORK=1TO250:NEXT:             POKED,133:POKED+1,138:FORK=1TO250:NEXT:   NEXTL: POKED,143:POKED+1,143:SC=SC+5: PRINT@773,"POINTS USED";SC;:GOTO39
38 IFB(I,J)ANDNOTG(I,J)THEND=VI+65+64*I+3*J:ELSE39: PRINT@803,STRING$(29," ");:PRINT@803,"RIGHT GUESS";: FORL=1TO5:   POKED,133:POKED+1,138:FORK=1TO250:NEXT: POKED,143:POKED+1,143:FORK=1TO250:NEXT:   NEXTL: POKED,133:POKED+1,138
39 NEXTJ,I: GOSUB72:IFGITHENPRINT@739,"ALL CORRECT"; 
40 PRINT@803,"PLAY AGAIN?"; :Y0=INKEY$:IFY0<>"Y"ANDY0<>"N"THEN40
41 IFY0="Y"THENCLS:C=-1:GF=-1:RETURN::ELSEEN=-1:RETURN
42 GOSUB72:PRINT@99,"FIRE RAY";:PRINT@227,"M RETURNS TO MENU";:PRINT@786,SC;:PRINT@803,STRING$(28," ");:PRINT@803,"CHOOSE VECTOR (01-32)";:INPUTX1$:X1=VAL(X1$):IFX1$="M"THENRETURN:ELSEIFX1>32THEN42
43 IFX1<9THENE=1:H=0:V=X1:GOTO44: :ELSEIFX1<17THENE=2:H=X1-8:V=9:GOTO44: :ELSEIFX1<25THENE=3:H=9:V=-X1+25:GOTO44: :ELSE:E=4:H=-X1+33:V=0
44 IFB(H,V)THEN50:ELSE IFCTHEND=VI+65+64*H+3*V:POKED,133:POKED+1,138:FORI=1TO50: NEXT:POKED,143:POKED+1,143:PRINT@483,"H";H;"V";V;"E";E;
45 IFE=1IFH=9X2=25-V:GOTO49::ELSEIFV=0ORV=9X2=X1:GOTO49: :ELSEIFB(H+1,V+1)E=2:GOTO44::ELSEIFB(H+1,V-1)E=4:GOTO44: :ELSEH=H+1:GOTO44
46 IFE=2IFV=0X2=33-H:GOTO49::ELSEIFH=0ORH=9X2=X1:GOTO49: :ELSEIFB(H-1,V-1)E=1:GOTO44::ELSEIFB(H+1,V-1)E=3:GOTO44: :ELSEV=V-1:GOTO44
47 IFE=3IFH=0X2=V:GOTO49::ELSEIFV=0ORV=9X2=X1:GOTO49: :ELSEIFB(H-1,V+1)E=2:GOTO44::ELSEIFB(H-1,V-1)E=4:GOTO44: :ELSEH=H-1:GOTO44
48 IFE=4IFV=9X2=8+H:GOTO49::ELSEIFH=0ORH=9X2=X1:GOTO49: :ELSEIFB(H-1,V+1)E=1:GOTO44::ELSEIFB(H+1,V+1)E=3:GOTO44: :ELSEV=V+1:GOTO44
49 IFX2<>X1THENN1(X1)=N2(IM):N1(X2)=N2(IM):SC=SC+2:IM=IM+1: GOSUB51:IF(IN)THENRETURN:ELSE42 :ELSEN1(X1)="R ":SC=SC+1:GOSUB51:IF(IN)THENRETURN:ELSE42
50 N1(X1)="H ":SC=SC+1:GOSUB51:IF(IN)THENRETURN:ELSE42
51 FORI=1TO8:PRINT@65+3*I,N1(I);:NEXT: FORI=9TO16:PRINT@156+64*(I-9),N1(I);:NEXT: FORI=17TO24:PRINT@665-3*(I-17),N1(I);:NEXT: FORI=25TO32:PRINT@577-64*(I-25),N1(I);:NEXT:RETURN
52 GOSUB72: PRINT@99,"PLACE A GUESS";:PRINT@227,"M RETURNS TO MENU";
53 GOSUB57:IFY0="M"THENRETURN:ELSE G(H,V)=-1:D=VI+65+64*H+3*V:POKED,133:POKED+1,138:GOTO53
54 GOSUB72: PRINT@99,"REMOVE A GUESS";:PRINT@227,"M RETURNS TO MENU";
55 GOSUB57:IFY0="M"THENRETURN:ELSE G(H,V)=0:D=VI+65+64*H+3*V:POKED,143:POKED+1,143:GOTO55
56 CLS:FORI=1TO8:FORJ=1TO8: D=VI+65+64*I+3*J:POKED,143:POKED+1,143: IFG(I,J)THENPOKED,133:POKED+1,138:NEXTJ,I:  :ELSENEXTJ,I: PRINT@34,H;"BALLS";:GOSUB51:RETURN
57 FORI=1TO8:PRINT@1+3*I,I;:PRINT@94+I*64," ";CHR$(64+I);:NEXT
58 PRINT@803,"ENTER GUESS (EX: E6) ";:INPUTY2: IFLEN(Y2)>2THEN58:ELSE Y0=LEFT$(Y2,1):Y1=RIGHT$(Y2,1):IFY0="M"THEN59:ELSE IFASC(Y0)<65ORASC(Y0)>72THEN58:ELSE IFVAL(Y1)<1ORVAL(Y2)>8THEN58:ELSE H=ASC(Y0)-64:V=VAL(Y1)
59 FORI=1TO8:PRINT@1+3*I,"   ";:PRINT@94+I*64,"   ";:NEXT: RETURN
60 IN=-1:CLS:PRINT@89,"BLACK BOX":PRINT@195,"THE OBJECT OF THE GAME IS TO LOCATE THREE, FOUR, OR FIVE RAN-DOMLY HIDDEN BALLS IN AN EIGHT BY EIGHT FIELD.  YOU WILL LOCATE THEM BY SENDING RAYS INTO THE FIELD FROM THE SIDES.  A BALL WILL";
61 PRINT"ABSORB A RAY THAT STRIKES IT DIRECTLY AND DEFLECT A RAY THAT    COMES WITHIN ONE SQUARE DIAGONALLY.                                FOLLOWING ARE SEVERAL EXAMPLES OF HOW RAYS WILL ACT WHEN "
62 PRINT"LAUNCHED INTO THE FIELD.  a RAY WILL EITHER HIT AND BE ABSORBED,OR BE DEFLECTED/REFLECTED AND LEAVE THE MATRIX AT ANOTHER POINT.   FOR THE NEXT EXAMPLE, PRESS ENTER.";:GOSUB73
63 CLS:B(2,5)=-1:B(4,5)=-1:B(6,8)=-1:G(2,5)=-1:G(4,5)=-1:G(6,8)=-1:GOSUB56
64 PRINT@99,"HERE IS A TYPICAL BALL";:PRINT@163,"ARRANGEMENT. A RAY SENT IN";:PRINT@227,"FROM 31 WOULD BE A HIT.";:GOSUB73:X1=31:GOSUB43:GOSUB73:GOSUB72
65 PRINT@99,"A RAY FROM 28 WOULD";:PRINT@163,"DEFLECT TO 21, AND";:PRINT@227,"THE COMPUTER WOULD GIVE";:PRINT@291,"BOTH NUMBERS A DOUBLE";:PRINT@355,"LETTER MARKER.";:GOSUB73:X1=28:GOSUB43:GOSUB73:GOSUB72
66 PRINT@99,"A RAY FROM 30 WOULD BE";:PRINT@163,"REFLECTED BACK TO 30,";:PRINT@227,"AND MARKED WITH AN 'R'.";:GOSUB73:X1=30:GOSUB43:GOSUB73:GOSUB72
67 PRINT@99,"RAYS SENT IN FROM 13 AND";:PRINT@163,"15 WOULD ALSO BE";:PRINT@227,"REFLECTIONS, AND MARKED";:PRINT@291,"WITH AN 'R'.";:GOSUB73:X1=13:GOSUB43:X1=15:GOSUB43:X1=14:GOSUB43:GOSUB73:GOSUB72
68 PRINT@99,"A RAY FROM 7 WOULD";:PRINT@163,"BE DEFLECTED TWICE,";:PRINT@227,"AND MARKED WITH A";:PRINT@291,"DIFFERENT DOUBLE LETTER.";:PRINT@355,"(WATCH THIS ONE.)";:GOSUB73:X1=7:GOSUB43:GOSUB73:GOSUB72
69 PRINT@99,"RAYS ENTERED AT 1, 2,";:PRINT@163,"OR 3 WOULD GO ALL THE";:PRINT@227,"WAY THROUGH.  HERE IS 2";:PRINT@291,"FOR EXAMPLE.";:GOSUB73:X1=2:GOSUB43:GOSUB73:GOSUB72
70 PRINT:CLS:PRINT"   YOUR SCORE IS THE TOTAL NUMBER OF MARKERS THAT YOU USE TO    LOCATE THE BALLS.  THE OBJECT IS TO HAVE THE LOWEST SCORE."
71 PRINT:PRINT"   YOU MAY PLACE OR REMOVE GUESSES OF BALL POSITIONS AT ANY     TIME.  WHEN YOU THINK YOU HAVE THE CORRECT POSITIONS, STOP AND  SCORE.  AN INCORRECT POSITION GUESS COSTS FIVE (5) POINTS.";:GOSUB73:CLS:GF=-1:IN=0:RETURN
72 FORI=1TO12:PRINT@35+I*64,STRING$(29," ");:NEXT:RETURN
73 PRINT@803,"PRESS ENTER";:INPUTY:RETURN
  • RUNエンターで実行

以下、省略します。お好きに遊んでみてください。

t8.png

予告

次回は、TRS-80 Color ComputerOS-9を動作させてみたいと思います。



以上

0
0
0

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?