Casio Algebra fx-2.0에서 memory game

계산기 2022. 10. 21. 22:02 posted by tolkien

TI-83 plus에 구현해 놓은 memory game을 afx-2.0에 porting해봤습니다.
(원래 code는 여기에 있습니다.) 이걸 옮기다가 몇가지 변경을 했습니다.

  1. 카드 뒤집는 부분을 subroutine으로 뺐습니다. key 값을 X에 담고, Y에는 세트 구분 (0: 세트 A, 9: 세트 B), 처리 명령을 Z에 담았습니다. Z는 구체적으로...
    1. Z=0: 틀렸으므로 카드를 뒤집어라. (0으로 다시 돌려놓음)
    2. Z=1: 해당 카드의 숫자를 보여줄 것.
    3. Z=2: 맞았으니까, 해당 위치의 값을 0으로 바꾸고 출력 부분은 건드리지 않음.
    4. 반환시 Z=-1 : 해당 위치는 이미 뒤집었슴.
    5. 반환시 Z=-2 : invalid key input
  2. 카드 상태를 저장을 A,B,... 변수가 아닌 List를 사용했습니다. 덕분에 원래 source coe에서 보이던 변수 쥐어짜기를 할 필요가 없어졌습니다.
  3. 해놓고 보니, 괜찮아서 다시 TI-83 plus에 back porting했습니다. (그래서, 화면은 TI-83 plus)
  4. TI-83 plus로 다시 작성할 때, afx-2.0과 다른 점은
    1. muli statement가 되지 않아서 code가 길어졌습니다.
    2. key code가 다릅니다.
    3. repeat ~ while 문이 없어서 while ~ end문을 쓰다보니 S->0과 같은 변수 초기화를 해주어야 하네요. 그외에는 code는 대동소이합니다. 

code를 아래와 같습니다.  '->'는 →입니다. !=는 'not equal'입니다.

더보기
FILE:MEMORY
ClrText:100->Q
Lbl 0
For 1->I To 9
I->List 19[I]
Next
For 1->I To 9
Int (Ran# x10)->J
If J!=0:Then
List 19[I]->K
List 19[J]->List 19[I]
K->List 19[J]
EndIf:Next
0->List 19[10]
For 1->I To 9
I->List 19[10+I]
Next
For 1->I To 9
Int (Ran# x10)->J
If J!=0:Then
List 19[10+I]->K
List 19[10+J]->List 19[10+I]
K->List 19[10+J]
EndIf:Next

0->W:0->R
For 2->I To 6 Step 2
For 2->J To 6 Step 2
Locate I,J,0
Locate 10+I,J,0
Next:Next

Lbl 1
Locate 9,4,"<"
Locate 10,4,"-"
Do:LpWhile Getkey!=0
Do:Getkey->S
If S=47:Then Return:IfEnd
If S!=0:Then S->X:0->Y:1->Z:Prog "~MDISP":Z->U:IfEnd
LpWhile S=0 Or Z<0
Locate 9,4,"-"
Locate 10,4,">"
Do:LpWhile Getkey!=0
Do:Getkey->T
If T!=0:Then T->X:10->Y:1->Z:Prog "~MDISP":Z->V:IfEnd
LpWhile T=0 Or Z<0
Do:LpWhile Getkey!=0
Do:Getkey->K:LpWhile K=0
If U!=V:Then 0->Z
Else W+1->W:2->Z:IfEnd
S->X:0->Y:Prog "~MDISP"
T->X:10->Y:Prog "~MDISP"
R+1->R
Locate 2,7,"TRIAL:     "
Locate 9,7,R
If W<9:Then Goto 1:IfEnd
If Q>R:Then R->Q
Locate 2,7,"BEST : "
Locate 9,7,R
IfEnd
Goto 0

FILE:~MDISP
0->A
If X=74:Then
Y+2->A:2->B:Y+7->C
IfEnd
If X=73:Then
Y+2->A:4->B:Y+4->C
IfEnd
If X=72:Then
Y+2->A:6->B:Y+1->C
IfEnd
If X=64:Then
Y+4->A:2->B:Y+8->C
IfEnd
If X=63:Then
Y+4->A:4->B:Y+5->C
IfEnd
If X=62:Then
Y+4->A:6->B:Y+2->C
IfEnd
If X=54:Then
Y+6->A:2->B:Y+9->C
IfEnd
If X=53:Then
Y+6->A:4->B:Y+6->C
IfEnd
If X=52:Then
Y+6->A:6->B:Y+3->C
IfEnd
If A=0:Then
-2->Z:Return:IfEnd
If List 19[C]=0:Then
-1->Z:Return:IfEnd
If Z=2:Then 
0->List 19[C]:Return:IfEnd
If Z!=0:Then
List 19[C]->Z:IfEnd
Locate A,B,Z
Return

FX-9860에서 동작확인한 code입니다. (FA-124에서 IMPORT로 가져올 수 있습니다.)

MEMORY.G1M
0.00MB
MDISP.G1M
0.00MB

 

TI-83 plus에서 동작하는 code입니다. (text file. TI-83 plus에서 일일이 입력해야 합니다.)

memory_ti-83p.txt
0.00MB

이걸 Sharp EL-5230에 porting 할 수 있을지 생각중입니다. memory가 충분할 지...

( 2023/05/03 : fx-9860에서 동작하도록 Getkey buffer가 clear가 됨을 확인하는 code 추가. )

 

 

TI-84 plus에서 야구게임

계산기 2022. 10. 12. 23:15 posted by tolkien

- hp-39gs에서 야구게임

- sharp el-5230에서 야구게임

- algebra fx-2.0에서 야구게임

 

하는김에 탄력받아서...

가지고 있던 TI-84 plus에도 마찬가지로 porting해봤습니다.

  1. afx-2.0과 마찬가지로 if <condition>에서 OR 및 AND 연산자를 쓸 수 있습니다.
  2. Disp 명령을 쓸 수 있어서 이쁘지 않지만, 출력을 한줄로 처리할 수 있었습니다.
  3. GOTO문도 마찬가지.
  4. hp-39gs나 afx-2.0과 달리 multi statement를 지원하지 않아서 프로그램 line 수가 많습니다만, 편집하는 계산기의 column이 좁아서 큰 단점으로 느껴지지 않았습니다.

TI-84 plus는 casio fx-9860, hp-39gs와 비슷한 위치를 지닌 제품입니다. 단지 미국 수학교육 주교재 취급을 받고 있어서 가격이 비싼 편입니다. cpu는 z-80, 8bit cpu... (심지어, 칼라제품로 cpu는 z-80으로 알고 있습니다.)

 

code는 아래와 같습니다. '->'는 →입니다.

더보기
0->A
While A=0
iPart(rand*10)->A
End
0->B
While B=0 or B=A
iPart(rand*10)->B
End
0->C
While C=0 or C=A or C=B
iPart(rand*10)->C
End

Lbl 0
Input "GUESS: ",G
If G=-1
Then
Disp A*100+B*10+C
End
iPart(G/100)->D
fPart(G/10)*10->F
(G-100*D-F)/10->E
0->R
0->S
If D=B or D=C
Then
R+1->R
Else
If D=A
Then
S+1->S
End
End
If E=A or E=C
Then
R+1->R
Else
If E=B
Then
S+1->S
End
End
If F=A or F=B
Then
R+1->R
Else
If F=C
Then
S+1->S
End
End
If S=3
Then
Disp "GOOD JOB"
Return
End
Disp S,"STRIKE",R,"BALL"
Goto 0

baseball_ti-84.txt
0.00MB

algebra fx-2.0에서 야구게임

계산기 2022. 10. 12. 22:19 posted by tolkien

- hp-39gs에서 야구게임

- sharp el-5230에서 야구게임

 

 이번에 입수한 casio algebra fx-2.0(이하 afx-20)에 야구게임을 porting(?) 해보았습니다.

후속 version인 fx-2.0 plus가 2001년에 나왔으니, 나온지 20년이 넘은 제품입니다.

porting(?)하면서 앞 두 기종과 다른 점은...

  1. GOTO를 제공한다. (EL-5230과 같음) 하지만, goSub를 지원하지 않는다.
  2. 외부 program을 subroutine처럼 쓸 수 있다. RETURN 지원 (hp-39gs와 동일)
  3. 출력은 한번에 한개만 가능 (EL-5230과 비슷)
  4. IF (condition) ... 에서 AND 및 OR 연산자 사용할 수 있다.
    (hp-39gs에서는 쓰지 못하는 것으로 알고 있어서 check routine을 별도 program으로 만들어서 호출했는데, emulator로 확인해니 hp-39gs도 AND 및 OR 연산자를 쓸 수 있는 것 같습니다. 그렇다면 더 간결하게 작성할 수 있을 것같네요.)

afx-2.0는 위치상 fx-9860 series보다 상위 제품입니다. CAS를 지원하고, 후속기종이 Casio ClassPad series입니다. 나온지 오래되어서 기본 프로그램이 조금 낡은 느낌이 나고, 버튼이나 명령어 배치가 조금 불편합니다. CPU는 NEC v30mx로 intel 8086 호환이 됩니다. 그래서, OS로 ROM-DOS가 깔려있다고 합니다.

 

 

 code는 아래와 같습니다. '->'는 →이고, <는 ▲입니다.

더보기
Do:Int (Ran# x10)->A:LpWhile A=0
Do:Int (Ran# x10)->B:LpWhile B=0 Or A=B
Do:Int (Ran# x10)->C:LpWhile C=0 Or A=C Or B=C
Lbl 0
"GUESS"?->G
If G=-1:Then Ax100+Bx10+C<
IfEnd
Int (G/100)->D
Frac (G/10)x10->F
(G-100xD-F)/10->E
0->S:0->R
If D=B Or D=C
Then R+1->R
Else If D=A
Then S+1->S
IfEnd:IfEnd
If E=A Or E=C
Then R+1->R
Else If E=B
Then S+1->S
IfEnd:IfEnd
If F=B Or F=A
Then R+1->R
Else If F=C
Then S+1->S
IfEnd:IfEnd
 
If S=3:Then
"GOOD JOB":Stop
IfEnd
If S=1:Then "1 STR"<
Else If S=2:Then "2 STR"<
Else "NO STR"<
IfEnd:IfEnd
If R=1:Then "1 BALL"<
Else If R=2:Then "2 BALL"<
Else If R=3:Then "3 BALL"<
Else "NO BALL"<
IfEnd:IfEnd:IfEnd
Goto 0

baseball_afx-20.txt
0.00MB