Vol.795 8.May.2020

FitBit_Versa2 VOXYオプションパーツ PasoconMiniPC8001(12)〜逆アセンブラ

F FitBit Versa2

by fjk

 長年使っていたFitBitのChargeの充電端子が壊れて充電できなくなった。そこで、専用の万歩計をしばらく使っていたが、カウントされる歩数が少なく、なんとなく信用できない。また、万歩計はクリップで固定するので脱着が煩わしい、と思案していたところ、家電ショップのVersa2の使用レポートを見る機会があり、価格がもう少し安ければと思いつつ、結局ポチリと注文してしまった。
 購入したのは Fitbit Versa 2(Black/Carbon)(¥22.500)で、主な機能は、

@Amazon Alexa搭載(音声で指示できるが、Amazonアカウント&Wifiネット環境が必要)
A1回の充電で、リチウムポリマーバッテリーは6日間以上駆動(充電時間:約2時間)
B常時画面表示モード、数多くの文字盤を選んだり、アクセサリーベルト【別売品】も交換可能
C歩数、距離、消費カロリー、上った階数、アクティブな時間、心拍数、睡眠時間を記録
DスマートフォンのGPSに接続しマップを表示

 さらに、音楽アプリやFitbit Payなどのアプリもあるが、日本では使えないものも・・。
 なお、初期設定はOSをVアップしたA7のタブレット(Zenpad Z581KL)を使ったが、BTでは時間がかかるのでWifi利用がベスト。
 ベルトは長さが自由にセットできる純正ステンレスMetalMeshBlack(¥9,800)も購入。

【Fitbit Versa 2主な仕様】
本体:Corning Gorilla Glass3を採用、40g
腕回りサイズ:140〜220mm [S/L]
防水機能:水深50mまでの耐水仕様
対応OS : iOS 11.0以上、Android7.0以上
同期方法:Bluetooth 4.0(最大範囲6.1m)
FitBit Versa2
(文字盤はSundial[青])
連動するタブレットで
専用アプリを利用


O Voxyオプションパーツ

by TMX

 Voxyを購入して半年、高速道路での燃費はわかりませんが、下道でメーター表示は18Km/L〜20Km/L、給油時計算では17Km/L前後です。以前は渋滞を避け遠回りをしていましたが、HVは渋滞の方が燃費が良くなります。最近の車の燃費はほんと凄いですね。
さて、前から気になっていたオプションパーツ。一つは車速ドアロック、もう一つはタイヤ空気圧監視警報システムを先週末取り付けました。
 最近の車はドアロック機能はついていますが、車速ドアロック機能がついていない車が多いようです。子供が運転中ドアをよく開けるので、車速ドアロックを付けました。再ロック付き、Pシフトでロック解除、ドアオープン時ハザード、バック時ハザードが点灯、各機能のあり、無しを選択出来ます。
 タイヤ空気監視システムはタイヤ回転数のデータを使って空気圧を間接的にモニター。タイヤ内部の空気圧が低下すると外径が小さくなるため、結果的に回転数も変わる事を利用して空気圧の低下を検知。回転数の検出はABSを利用し異常があればモニターのランプと警告音で知らせます。2つの商品名は次の通りです。

タイヤ空気圧監視警報システム
(タイヤ空気圧が規定値より
20%減でアラームに設定)
ステアリングカバーを外し、
2つのシステムを直列で
OBD2コネクタに接続


P PasoconMiniPC8001(12) 〜機械語(逆アセンブラ)

by fjk

 PC8001のBASICでは速度が遅いので、機械語でプログラムを記述する例も多い。Z80機械語は昔よく使っていたが、今では、すっかり忘れている。また、BASIC-ROM内ルーチンの活用するには、解読するための逆アセンブラが必要である。昔のI/Oなどの逆アセンブラプログラムリストをそのまま利用しても良いが、機械語の思い出しついでに「逆アセンブラ」をBASICで自作することにした。

【Z80逆アセンブラの使い方】    []はオプションで、なくてもよい
<入力書式> [B/W/U][開始アドレス][:終了アドレス][、行数]
  アドレス:アドレスは16進数、範囲を指定する場合は「:xxxx」を使用。
開始アドレスを省略すると次アドレスから開始する。
  行 数:出力する行数(10進数)
  HEXデータ:入力文字列の先頭に'B'(大文字)または'W'(大文字)を付けると、
バイトデータ(DB)またはワードデータ(DW)を表示。
  ダンプ表示:文字列の先頭に'U'(大文字)を付けると、アドレスXXX0H(最下位の
4ビットが0)からダンプリストを表示する(表示行数は8行で固定)。
  データ保存:「保存モード」に設定(「&」で設定)すると解読後自動で、または、
アドレス入力時に「#」を押すと最後に解読した1行を、ファイルに保存する。
ただし、ファイルは事前にAppendモードにSetしておくこと。
保存モードの解除は「%」(コマンドプロンプトが変わる)。
  HEX表示:1バイトデータの16/10進数表示を「h」で選択可(2バイトは常に16進数)。
  ジャンプ先:JR命令の飛び先を絶対番地または相対値を「i」で選択可。

*連続逆アセンブル中にスペースキーを(長く)押すと解読を中止し、アドレス入力待ちになる。

逆アセンブルしたファイルをパソコンのエディッタで「惧惧惧」を消去するとリストを確認できる。
  (abc794で使用した機械語部分(E800〜)の一部を逆アセンブルした例)

惧惧惧E820:0E0C    [       LD   C,0CH  
惧惧惧E822:1806    [       JR   E82AH  
惧惧惧E824:0E0D    [       LD   C,0DH  
惧惧惧E826:1802    [       JR   E82AH  
惧惧惧E828:0E0E    [       LD   C,0EH  
惧惧惧E82A:FE02    [       CP   02H    
惧惧惧E82C:C0      [       RET  NZ     
惧惧惧E82D:EDA3    [       OUTI        
惧惧惧E82F:EDA3    [       OUTI        
惧惧惧E831:3EC8    [       LD   A,C8H  
逆アセンブル・ダンプ中の画面 秀丸エディッタでリストを表示

【Z80逆アセンブルプログラムの概要】

  1. 40〜7FH(LD命令)、80〜BFH(演算命令)、CBH命令はプログラムで処理。その他は処理テーブルを作成し、利用した。HALT(76H)などはIF文で特別に処理。表記は「ザイログ形式」。
  2. 処理テーブルは「命令」「オペランド1」「オペランド2」、「8/16」(レジスタ/レジスタペア)、「special」(特別処理)で構成。テーブルは00〜3FH、EDH命令、C0〜FFHをマッピング。
  3. 処理テーブルの、命令コード、オペランドの詳細はZ80_MnemonicOperand_Mapを参照。
  4. DDH、FDHのIX、IY命令はXYフラグを一端セットし、次バイトから再解読し、オペランドが”HL”の場合は”IX/IY“、”(HL)”の場合は”(IX+n)/(IY+n)”などに変換。

 プログラムのテスト(「T」でE000H以降にセット)のためにテスト用データ(行番号が8000、20000番台)を付属(CBは30-3FHの無効コマンドもセット)。不要であれば消去して下さい。

dasm.cmt(zip)
100 '=== Dis-Assembler for PC8001
110 WIDTH 80,25 :CONSOLE 0,25,1,1
120 CLEAR 500,&HDFFF: DEFINT C-Z 
130 DIM E(255),M$(67),CB(20)
140 DIM RG$(7),MT$(7),SR$(7),CC$(7)
142 DIM RR$(3),RQ$(3),IM$(3),BO$(3)
150 GOSUB 10100 :'Read Data
160 PF = 0      :'Print(Save) flag
162 LX = 0      :'Print Lines
164 ID = 0      :'Indirect Addr (for JR cmd)
166 HF = 1      :'Hex Num. Mode (for Literal n)
180 BS = 40     :'Buffer Size
190 GOTO 1010   :'Goto Main

200 '--- Separate Code Map 
210 DS=E(BT)         :'Get Table data
220 IF DS AND &H0080 THEN RP=1 ELSE RP=0 :'Reg Flag
225 IF DS AND &H0800 THEN RP=RP+2       :'Spc.Flag
230 QC = DS      AND &H7F               :'Ope.Code
240 Q1 = DS/256  AND &H07               :'Opr-1
250 Q2 = DS/4096 AND &H07 : RETURN      :'Opr-2
260 '--- Separate Instraction Code
270 II = IC/64 AND &H03                 :'00xxxxxx
280 DD = IC/8  AND &H07                 :'xx000xxx
290 SS = IC    AND &H07 : RETURN        :'xxxxx000

300 '--- Get 1Byte & Hex-Data Set
310  BT=PEEK(AC): GOSUB 370
320  BB$=BB$+P$:  AC=AC+1 :       RETURN
330  GOSUB 310:   P$=STR$(BT):    RETURN :'BT->Dec
335  GOSUB 310:   P$=P$+"H":      RETURN :'BT->Hex
340  GOSUB 310                           :'Get byte &
350  BU=BT: GOSUB 310: BT=BT*256+BU      :'Calc.2-Byte
360  P$=RIGHT$("000"+HEX$(BT),4): RETURN :'BT->2byte(Hex)
370  P$=RIGHT$("0"+HEX$(BT),2):   RETURN :'BT->1byte(Hex)
380  IF BT<&H20 THEN P$="." ELSE P$=CHR$(BT)
390  RETURN

400 '---Indirect Num. Set
410  GOSUB 310: P$="("+P$+"H)": RETURN  :'(xxH)
420  GOSUB 340: P$="("+P$+"H)": RETURN  :'(xxxxH)
430 '---Jump Offset
440  GOSUB 310: IF BT>127 THEN BT=BT-256
450  IF ID>0 THEN 470
460  P$=RIGHT$("000"+HEX$(AD+BT+2),4)+"H": RETURN :'xxxxH
470  IF BT>0 THEN P$="$+"+STR$(2+BT):  RETURN :'$+d
480               P$="$"+STR$(2+BT):   RETURN :'$-d 

499 '-- 8bit     1   2   3   4   5   6   7
500  ON OL GOTO 510,520,530,540,550,560,570
510  P$=RG$(PP): RETURN         :'reg
520  IF HF=0 THEN 330 ELSE 335  :'n
530  P$=RIGHT$("0"+HEX$(DD*8),2)+"H":RETURN   :'ttt
540  GOTO 420                   :'(nn)
550  GOTO 410                   :'(n)
560  P$="(C)":   RETURN
570  P$="A":     RETURN

599 '-- 16bit    1   2   3   4   5   6   7
600  ON OL GOTO 610,620,630,640,650,660,670
610  P$=RR$(DD/2): RETURN       :'Pair rr
620  GOSUB 340:P$=P$+"H":RETURN :'nn
630  GOTO 440                   :'e
640  GOTO 420                   :'(nn)
650  P$=RQ$(DD/2): RETURN       :'Pair qq
660  IF QC=29 THEN P$=CC$(DD AND 3):RETURN :'cc (JR)
665  P$=CC$(DD): RETURN         :'ccc
670  P$="HL":    RETURN

699 '-Spc.8bit   1   2   3   4   5   6   7
700  ON OL GOTO 710,720,730,740,750,760,770
710  P$=RG$(PP): RETURN         :'reg
720  P$=IM$(DD AND 3): RETURN   :'IM
730  P$="I":     RETURN
740  P$="(BC)":  RETURN
750  P$="R":     RETURN
760  P$="(DE)":  RETURN
770  P$="A":     RETURN

799 '-Spc.16bit  1   2   3   4   5   6   7
800  ON OL GOTO 810,820,830,840,850,860,870
810  P$="DE":   RETURN
820  P$="AF'":    RETURN
830  P$="AF":    RETURN
840  P$="(SP)":  RETURN
850  P$="SP":    RETURN
860  P$="(HL)":  RETURN
870  P$="HL":    RETURN

900 '--- Error Table
910  ER=1: MS$="Syntax":     GOTO 990
920  ER=2: MS$="UnDef.Ope.": GOTO 990
930  ER=3: MS$="Operand":    GOTO 990
940  ER=4: MS$="Not Number": GOTO 990
950  ER=5: MS$="OverFlow":   GOTO 990
960  ER=6: MS$="Name":       GOTO 990
990  BB$=BB$+" "+MS$+" Error!!": RETURN

1000 '--- Main Loop
1010 ER=0:DF=0:XY=0: COLOR 3: PRINT"Address [Sa[:Ea]][,Ln] ";CHR$(&H25+PF);" ";
1015  COLOR 7: LINE INPUT K$
1020 IF K$="" THEN AS=AC: AE=AS: GOTO 1110
1030 IF K$="!" THEN END
1040 S=INSTR("ih%&#BWUT",LEFT$(K$,1)): IF S>0 THEN 1210
1050 GOSUB 1310                             :' Key Ent. Check & Sep.
1060 IF LEN(H1$)>0 THEN H$=H1$:GOSUB 1380: AS=HH ELSE AS=AC
1070 IF LEN(H2$)=0 THEN AE=AS: GOTO 1080
1075  H$=H2$:GOSUB 1380:AE=HH:LX=0: IF AE<AS THEN SWAP AS,AE
1080 IF LEN(H3$)>0 THEN H$=H3$:GOSUB 1390: LX=HH
1090 IF ER>0 THEN 1010
1100 AD=AS
1109 '--- D-Ass.Start
1110 LC = LX                                        :'Set Line Counter
1120 ER = 0:IF DF>0 THEN ON DF GOTO 4010,4510,5510
1125 GOSUB 1510                                     :'1-Line DisAssemble
1130 PRINT MID$(BF$,6);                             :'Print Result
1140 IF ER>0 THEN PRINT BB$: BEEP: GOTO 1010
1145 IF INKEY$<>"" THEN PRINT: GOTO 1010
1150 IF PF>0 THEN PRINT "--- Saving": PRINT#-1,BF$ ELSE PRINT :'Save BF$
1160 IF LC>1 THEN LC=LC-1: GOTO 1120                :'Loop
1170 IF AD<0 THEN AA=AD+65536! ELSE AA=AD
1180 IF AA<AE THEN 1120 ELSE 1010                   :'Check End Addr.

1200 '--- K$:   i    H    %    &    #    B    W    U    T
1210 ON S GOTO 1220,1225,1230,1235,1250,1280,1290,1295,8010
1220 ID = ID XOR 1: GOTO 1010
1225 HF = HF XOR 1: GOTO 1010
1230 PF = 0:        GOTO 1010
1235 PF = 1:        GOTO 1010
1240 '--- Save ?
1250 IF LEN(BF$)>0 THEN PRINT BF$ ELSE 1010
1260 INPUT"Save Sure?( y or n )";K$
1265 IF K$="y" THEN PRINT#-1,BF$
1270 GOTO 1010
1275 '--- DB,DW
1280 DF=1:K$=MID$(K$,2): GOTO 1020
1290 DF=2:K$=MID$(K$,2): GOTO 1020
1295 DF=3:K$=MID$(K$,2): GOTO 1020

1300 '---Key Entry Data Check & Trim
1310 S1=INSTR(K$,":"): S2=INSTR(K$,",")
1320 IF S1>0 AND S2>0 AND S1>S2 THEN 910        :'Syntax Err,
1330 H1$="":H2$="":H3$=""
1340 IF S1=0 AND S2=0 THEN H1$=K$: RETURN
1345 IF S1=0 AND S2=1 THEN H3$=MID$(K$,S2+1): RETURN
1350 IF S1=0 AND S2>1 THEN H1$=MID$(K$,1,S2-1):H3$=MID$(K$,S2+1):RETURN
1355 IF S1>0 AND S2=0 THEN H1$=MID$(K$,1,S1-1):H2$=MID$(K$,S1+1):RETURN
1360 IF S1>0 AND S2>0 THEN H1$=MID$(K$,1,S1-1):H3$=MID$(K$,S2+1):RETURN 
1370 ER=1 :RETURN
1380 HH=VAL("&H"+H$): RETURN
1390 HH=VAL(H$): RETURN

1500 '---- 1-Line DisAssemble.
1510 BB$="":P1$="":P2$=""
1530 AC = AD                        :'Set Curent Addr.
1540 BB$=RIGHT$("000"+HEX$(AC),4)+":"
1550 BF$=BB$+SPACE$(BS-5)
1560 COLOR 6: PRINT BB$;
1570 COLOR 7: BB$=""

1600 GOSUB 2010: IF ER>0 THEN 920   :'Start disAsm.
1630 IF XY=0 THEN 1710              :'if not IX/IY
1640 GOSUB 2010: IF ER>0 THEN 920   :'Re-dAsm from next
1645 IF IC=&H36 THEN GOSUB 1870: GOTO 1670
1650 ER=2
1655 P$=P1$:GOSUB 1810: P1$=P$      :'if P$=HL or (HL) then ER=0
1660 P$=P2$:GOSUB 1810: P2$=P$      :'if P$=HL or (HL) then ER=0
1670 IF ER>0 THEN 920 ELSE XY=0
1700 '--- Set String to Buffer
1710 MID$(BF$,6)=BB$                :'Set Bytes
1715 MID$(BF$,14)="["
1720 'MID$(BF$,15)=LB$+":"          :'Set Lable
1730 MID$(BF$,22)=MN$               :'Set Mnemonic
1740 IF P1$<>"" THEN P$=P1$ ELSE 1770
1750 IF P2$<>"" THEN P$=P$+","+P2$
1760 MID$(BF$,27)=P$                :'Set Operand
1770 IF ER>0 THEN RETURN
1780 AD=AC: RETURN

1800 '--- Check "HL"or"(HL)" & Change
1810 X$="I"+CHR$(&H57+XY)                   :'X$=IX,IY
1820 IF P$="HL" THEN ER=0: P$=X$: RETURN    :'HL->X$
1830 IF P$="(HL)" THEN ER=0 ELSE  RETURN 
1840 IF IC=&HE9 THEN P$="("+X$+")": RETURN  :'(HL)->(X$)
1850 GOSUB 310
1860 P$="("+X$+"+"+STR$(BT)+")": RETURN     :'(HL)->(X$+n)
1870 P1$="(I"+CHR$(&H57+XY)+"+"+STR$(VAL(P2$))+")" :'if IC=36H
1880 GOSUB 520: P2$=P$: RETURN
2000 '--- start Decode
2010 GOSUB 310                          :'Get Byte
2020 IF BT<&H40 OR BT>&HBF THEN 2310    :'Jump Spc.Ope.
2030 IF BT>&H7F THEN 2210               :'Jump Math Ope.

2100 '--- reg.LD Ope.(40H-7FH)
2110 IF BT=&H76 THEN 2160
2120 MN$="LD":
2130 IC=BT: GOSUB 270               :'Bit Separate
2140 P1$=RG$(DD): P2$=RG$(SS): RETURN
2160 IF XY=0 THEN MN$="HALT":  RETURN
2170 GOTO 920   :'Ope.Err

2200 '--- Math.Ope.(80H-BFH)
2210 IC=BT:GOSUB 270:MN$=MT$(DD)    :'Math. cmd
2220 IF DD<2 OR DD=3 THEN 2250
2230 P1$=RG$(SS): RETURN
2250 P1$="A":P2$=RG$(SS)            :' Add Areg to opl.
2260 RETURN

2300 '--- Check Special Ope.
2310 IF BT=&HCB THEN 3010           :'Code 'CB'
2320 IF BT=&HDD THEN 3210           :'Code 'DD'
2340 IF BT=&HED THEN 2610           :'Code 'ED'
2350 IF BT=&HFD THEN 3260           :'Code 'FD'
2360 '--- Use Ope.Table 
2370 DS=BT: GOSUB 210               :'Get Table Data
2380 IF QC=0 THEN 920               :'No Ope.Err
2390 MN$=M$(QC)
2400 IC=BT: GOSUB 270               :'Bit Separate
2410 IF Q1=0 THEN RETURN
2420 OL=Q1:PP=DD
2430 ON RP+1 GOSUB 500,600,700,800    :'Call Mode
2440 IF P$="" OR ER>0 THEN 930 ELSE P1$=P$
2450 IF Q2=0 THEN RETURN
2460 OL=Q2:IF QC=40 THEN PP=DD ELSE PP=SS   :'"out"?
2470 ON RP+1 GOSUB 500,600,700,800    :'Call Mode
2480 IF P$="" OR ER>0 THEN 930 ELSE P2$=P$
2490 RETURN

2600 '--- EDxx
2610 GOSUB 310                      :'Get Next Byte
2620 IF BT<&H40 OR BT>&HBF THEN 920
2630 GOTO 2370                      :'Jmp Ope.Table

3000 '--- CBxx
3010 GOSUB 310                      :'Get Next Byte
3015 IC=BT:GOSUB 270                :'Bit Separate
3020 IF BT<&H40 THEN 3060
3030 MN$=BO$(II)                    :'Bit Operation
3040 P1$=HEX$(DD):P2$=RG$(SS)       :'Bit,Reg
3050 RETURN
3060 IF DD=6 THEN 930
3070 MN$=SR$(DD)
3080 P1$=RG$(SS)
3090 RETURN

3200 '--- DDxx
3210 IF XY>0 THEN 930
3220 XY=1: RETURN

3250 '--- FDxx
3260 IF XY>0 THEN 930
3270 XY=2: RETURN

3900 '--- Set Adr. & Print
3910 BB$=RIGHT$("000"+HEX$(AC),4)+":"
3920 BF$=BB$: RETURN
3930 BF$=BF$+SPACE$(BS-5)
3940 COLOR 6: PRINT BB$;: COLOR 7
3950 RETURN

4000 '--- DB
4010 BB$="":P1$="":P2$=""
4030 AC=AD: GOSUB 3910: GOSUB 3930
4050 MN$="DB": BB$=""
4060 GOSUB 310: P1$=P$+"H"
4070 GOSUB 380: P2$=SPACE$(4)+"'"+P$+"'"  :'Char.Set
4080 GOSUB 1710: GOTO 1130 

4500 '--- DW
4510 BB$="":P1$="":P2$=""
4530 AC=AD: GOSUB 3910: GOSUB 3930
4550 MN$="DW": BB$=""
4560 GOSUB 310: GOSUB 350: P1$=P$+"H"
4580 GOSUB 1710: GOTO 1130

5500 '--- U (Memory Dump)
5510 AS=INT(AD/16)*16
5520 GOSUB 5760
5530 COLOR 4: PRINT BF$;: COLOR 7                  :'Dsp Title
5540 IF PF>0 THEN PRINT " * Saving";: PRINT#-1,BF$ :'Save BF$
5545 PRINT
5550 FOR J=0 TO 7
5560   AC=AS: GOSUB 3910: GOSUB 3940
5600   FOR I=0 TO 15
5610     CB(I)=PEEK(AS+I)
5620     BB$=RIGHT$("0"+HEX$(CB(I)),2)+" "
5630     PRINT BB$;: BF$=BF$+BB$
5640   NEXT I
5650   COLOR 5
5660   FOR I=0 TO 15
5670     V=CB(I): GOSUB 5810
5680     PRINT C$;: BF$=BF$+C$
5690   NEXT I: COLOR 7
5700   IF INKEY$<>"" THEN PRINT: GOTO 1010
5710   IF PF>0 THEN PRINT " * Saving";: PRINT#-1,BF$ :'Save BF$
5720   AS=AS+16: PRINT
5730 NEXT J: AD=AS
5740 GOTO 1010
5750 '
5760 BF$="Addr  0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f "
5770 BF$=BF$+"-- ASCII Code --"
5780 RETURN
5800 '
5810 IF V<&H20 THEN C$=CHR$(&HA5):RETURN
5820 IF V=&H60 THEN C$=CHR$(&HA5):RETURN
5830 IF V=&H7F THEN C$=CHR$(&HA5):RETURN
5840 IF V>&HF7 THEN C$=CHR$(&HA5):RETURN
5850 C$=CHR$(V):RETURN

8000 '--- Set Test Data 
8010 PRINT "Set Test Data from E000H (A:1b,C:CB,D:DD,E:ED,F:FD)"
8020 K$=INPUT$(1)
8030 S=INSTR("ACDEF",K$): IF S=0 THEN 1010
8100 '-- Set Test Data
8110 '           A    C    D    E    F
8120 ON S GOSUB 8210,8310,8410,8510,8610 
8130 GOTO 1010
8200 '-- Set Test Data(00H-FFH) '
8210 PRINT "Set 00H-FFH to E000H"
8220 A=&HE000: RESTORE 21000
8230 FOR I=0 TO 336: READ Z: POKE A+I,Z: NEXT: RETURN
8300 '-- Set CB Test Data
8310 PRINT "Set CB & 00H-FFH to E000H"
8320 B=&HCB: A=&HE000
8330 FOR I=0 TO 255
8340  POKE A+I*2,B
8350  POKE A+I*2+1,I
8360 NEXT: RETURN
8400 '-- Set DD Data
8410 PRINT "Set DD Data to E000H"
8420 A=&HE000: RESTORE 23000
8430 FOR I=0 TO 233: READ Z: POKE A+I,Z: NEXT: RETURN
8500 '-- Set ED Data
8510 PRINT "Set ED Data to E000H"
8520 A=&HE000: RESTORE 24040
8530 FOR I=0 TO 123: READ Z: POKE A+I,Z: NEXT: RETURN
8600 '-- Set FD Data
8610 PRINT "Set FD Data to E000H"
8620 A=&HE000: RESTORE 25000
8630 FOR I=0 TO 233: READ Z: POKE A+I,Z: NEXT: RETURN

10000 '=== Init. Aray Data
10100 RESTORE 11010: FOR I=0 TO 7:   READ RG$(I): NEXT
10110 RESTORE 11110: FOR I=0 TO 7:   READ MT$(I): NEXT
10130 RESTORE 11310: FOR I=0 TO 7:   READ SR$(I): NEXT
10140 RESTORE 11410: FOR I=0 TO 7:   READ CC$(I): NEXT
10150 RESTORE 11510: FOR I=0 TO 3:   READ RR$(I): NEXT
10160 RESTORE 11610: FOR I=0 TO 3:   READ RQ$(I): NEXT
10170 RESTORE 11710: FOR I=0 TO 3:   READ IM$(I): NEXT
10180 RESTORE 11810: FOR I=0 TO 3:   READ BO$(I): NEXT
10200 RESTORE 13010: FOR I=1 TO 67:  READ M$(I): NEXT
10300 RESTORE 15010: FOR I=0 TO 255: READ E(I):  NEXT
10499 RETURN
11000 '---Operand Table
11010 DATA B,C,D,E,H,L,(HL),A:                  'Reg.      RG$()
11110 DATA ADD,ADC,SUB,SBC,AND,XOR,OR,CP:       'Math.Ope. MT$()
11310 DATA RLC,RRC,RL,RR,SLA,SRA,,SRL:          'Sft.Rot   SR$()
11410 DATA NZ,Z,NC,C,PO,PE,P,M:                 'Condition CC$()
11510 DATA BC,DE,HL,SP:                         'Reg.Pair  RR$()
11610 DATA BC,DE,HL,AF:                         'Reg.Pair2 RQ$()
11710 DATA 0,,1,2:                              'IM        IM$()
11810 DATA ,BIT,RES,SET:                        'Bit Ope.  BO$()

13000 '---Mnemonic Table   M$() [ascending order]
13010 DATA ADC, ADD, AND, BIT, CALL,CCF, CP,  CPD:  '1-8
13020 DATA CPDR,CPI, CPIR,CPL, DAA, DEC, DI,  DJNZ: '9-16
13030 DATA EI,  EX,  EXX, HALT,IM,  IN,  INC, IND:  '17-24
13040 DATA INDR,INI, INIR,JP,  JR,  LD,  LDD, LDDR: '25-32
13050 DATA LDI, LDIR,NEG, NOP, OR,  OTDR,OTIR,OUT:  '33-40
13060 DATA OUTD,OUTI,POP, PUSH,RES, RET, RETI,RETN: '41-48
13070 DATA RL,  RLA, RLC, RLCA,RLD, RR,  RRA, RRC:  '49-56
13080 DATA RRCA,RRD, RST, SBC, SCF, SET, SLA, SRA:  '57-64
13090 DATA SRL, SUB, XOR:                           '65-67
14999 '--- Decoding Code Map    E()
15000 '00-3F
15005 '      0/8    1/9    2/A    3/B    4/C    5/D    6/E    7/F
15010 DATA &H0024,&H219E,&H7C1E,&H0197,&H0117,&H010E,&H211E,&H0034: '00-07
15020 DATA &H2B92,&H1782,&H4F1E,&H018E,&H0117,&H010E,&H211E,&H0039: '08-0F
15030 DATA &H0390,&H219E,&H7E1E,&H0197,&H0117,&H010E,&H211E,&H0032: '10-17
15040 DATA &H039D,&H1782,&H6F1E,&H018E,&H0117,&H010E,&H211E,&H0037: '18-1F
15050 DATA &H369D,&H219E,&H749E,&H0197,&H0117,&H010E,&H211E,&H000D: '20-27
15060 DATA &H369D,&H1782,&H479E,&H018E,&H0117,&H010E,&H211E,&H000C: '28-2F
15070 DATA &H369D,&H219E,&H741E,&H0197,&H0117,&H010E,&H211E,&H003D: '30-37
15080 DATA &H369D,&H1782,&H471E,&H018E,&H0117,&H010E,&H211E,&H0006: '38-3F
15085 'ED/40-7F
15090 DATA &H6116,&H1628,&H17BC,&H149E,&H0023,&H0030,&H0A15,&H7B1E: '40-47
15100 DATA &H6116,&H1628,&H1781,&H419E,     0,&H002F,     0,&H7D1E: '48-4F
15110 DATA &H6116,&H1628,&H17BC,&H149E,     0,     0,&H0A15,&H3F1E: '50-57
15120 DATA &H6116,&H1628,&H1781,&H419E,     0,     0,&H0A15,&H5F1E: '58-5F
15130 DATA &H6116,&H1628,&H17BC,     0,     0,     0,     0,&H003A: '60-67
15140 DATA &H6116,&H1628,&H1781,     0,     0,     0,     0,&H0035: '68-6F
15150 DATA      0,     0,&H17BC,&H149E,     0,     0,     0,     0: '70-77
15160 DATA &H6116,&H1628,&H1781,&H419E,     0,     0,     0,     0: '78-7F
15165 'ED/80-BF
15170 DATA      0,     0,     0,     0,     0,     0,     0,     0: '80-87
15180 DATA      0,     0,     0,     0,     0,     0,     0,     0: '88-8F
15190 DATA      0,     0,     0,     0,     0,     0,     0,     0: '90-97
15200 DATA      0,     0,     0,     0,     0,     0,     0,     0: '98-9F
15210 DATA &H0021,&H000A,&H001A,&H002A,     0,     0,     0,     0: 'A0-A7
15220 DATA &H001F,&H0008,&H0018,&H0029,     0,     0,     0,     0: 'A8-AF
15230 DATA &H0022,&H000B,&H001B,&H0027,     0,     0,     0,     0: 'B0-B7
15240 DATA &H0020,&H0009,&H0019,&H0026,     0,     0,     0,     0: 'B8-BF
15245 'C0-FF
15250 DATA &H06AE,&H05AB,&H269C,&H029C,&H2685,&H05AC,&H2702,&H033B: 'C0-C7
15260 DATA &H06AE,&H002E,&H269C,     0,&H2685,&H0285,&H2701,&H033B: 'C8-CF
15270 DATA &H06AE,&H05AB,&H269C,&H7528,&H2685,&H05AC,&H0242,&H033B: 'D0-D7
15280 DATA &H06AE,&H0013,&H269C,&H5716,&H2685,     0,&H273C,&H033B: 'D8-DF
15290 DATA &H06AE,&H05AB,&H269C,&H7C92,&H2685,&H05AC,&H0203,&H033B: 'E0-E7
15300 DATA &H06AE,&H0E9C,&H269C,&H7992,&H2685,     0,&H0243,&H033B: 'E8-EF
15310 DATA &H06AE,&H05AB,&H269C,&H000F,&H2685,&H05AC,&H0225,&H033B: 'F0-F7
15320 DATA &H06AE,&H7D9E,&H269C,&H0011,&H2685,     0,&H0207,&H033B: 'F8-FF

15510 'Decoding Table Code:   [0bbbSaaaRccccccc]
15520 ' S:      Special Flag    [0:Normal/1:Special]
15530 ' R:      Reg./Pair Flag  [0:Reg.  /1:Reg.Pair]
15540 ' ccccccc:Operation Number(67)
15550 ' aaa:    Operand-1
15555 ' bbb:    Operand-2
15560 ' Operand Code: R=0,S=0(norm) [,rrr,n,ttt,(nn),(n),(C),A] 
15570 '                  ,S=1(spcl) [,rrr,ii,I,(BC),R,(DE),A]
15580 '               R=1,S=0(norm) [,rr,nn,e,(nn),qq,ccc,HL]
15590 '                  ,S=1(spcl) [,DE,AF',AF,(SP),SP,(HL),HL]

20000 '--- Test Data
20990 '    0-8  *  1-9  * *  2-A  * *  3-B  4-C  5-D  6-E  *  7-F
21000 DATA &H00,   &H01,2,3, &H02,     &H03,&H04,&H05,&H06,2, &H07:   '00H-07H
21008 DATA &H08,   &H09,     &H0A,     &H0B,&H0C,&H0D,&H0E,2, &H0F:   '08H-0FH
21010 DATA &H10,2, &H11,2,3, &H12,     &H13,&H14,&H15,&H16,2, &H17:   '10H-17H
21018 DATA &H18,2, &H19,     &H1A,     &H1B,&H1C,&H1D,&H1E,2, &H1F:   '18H-1FH
21020 DATA &H20,2, &H21,2,3, &H22,2,3, &H23,&H24,&H25,&H26,2, &H27:   '20H-27H
21028 DATA &H28,2, &H29,     &H2A,2,3, &H2B,&H2C,&H2D,&H2E,2, &H2F:   '28H-2FH
21030 DATA &H30,2, &H31,2,3, &H32,2,3, &H33,&H34,&H35,&H36,2, &H37:   '30H-37H
21038 DATA &H38,2, &H39,     &H3A,2,3, &H3B,&H3C,&H3D,&H3E,2, &H3F:   '38H-3FH

21040 DATA &H40,&H41,&H42,&H43,&H44,&H45,&H46,&H47,&H48,&H49,&H4A,&H4B,&H4C,&H4D,&H4E,&H4F:'40H-4FH
21050 DATA &H50,&H51,&H52,&H53,&H54,&H55,&H56,&H57,&H58,&H59,&H5A,&H5B,&H5C,&H5D,&H5E,&H5F:'50H-5FH
21060 DATA &H60,&H61,&H62,&H63,&H64,&H65,&H66,&H67,&H68,&H69,&H6A,&H6B,&H6C,&H6D,&H6E,&H6F:'60H-6FH
21070 DATA &H70,&H71,&H72,&H73,&H74,&H75,&H76,&H77,&H78,&H79,&H7A,&H7B,&H7C,&H7D,&H7E,&H7F:'70H-7FH

21080 DATA &H80,&H81,&H82,&H83,&H84,&H85,&H86,&H87,&H88,&H89,&H8A,&H8B,&H8C,&H8D,&H8E,&H8F:'80H-8FH
21090 DATA &H90,&H91,&H92,&H93,&H94,&H95,&H96,&H97,&H98,&H99,&H9A,&H9B,&H9C,&H9D,&H9E,&H9F:'90H-9FH
21100 DATA &HA0,&HA1,&HA2,&HA3,&HA4,&HA5,&HA6,&HA7,&HA8,&HA9,&HAA,&HAB,&HAC,&HAD,&HAE,&HAF:'A0H-AFH
21110 DATA &HB0,&HB1,&HB2,&HB3,&HB4,&HB5,&HB6,&HB7,&HB8,&HB9,&HBA,&HBB,&HBC,&HBD,&HBE,&HBF:'B0H-BFH

21119 '    0-8  1-9  2-A  * *  3-B  (2)  *  4-C  * *  5-D  (2)  *  6-E  *  7-F
21120 DATA &HC0,&HC1,&HC2,2,3, &HC3, 2,  3, &HC4,2,3, &HC5,        &HC6,2, &HC7: 'C0H-C7H
21128 DATA &HC8,&HC9,&HCA,2,3, &HCB,&H6E,   &HCC,2,3, &HCD, 2,  3, &HCE,2, &HCF: 'C8H-CFH
21130 DATA &HD0,&HD1,&HD2,2,3, &HD3, 2,     &HD4,2,3, &HD5,        &HD6,2, &HD7: 'D0H-D7H
21138 DATA &HD8,&HD9,&HDA,2,3, &HDB, 2,     &HDC,2,3, &HDD,&HE9,   &HDE,2, &HDF: 'D8H-CFH
21140 DATA &HE0,&HE1,&HE2,2,3, &HE3,        &HE4,2,3, &HE5,        &HE6,2, &HE7: 'E0H-E7H
21148 DATA &HE8,&HE9,&HEA,2,3, &HEB,        &HEC,2,3, &HED,&H40,   &HEE,2, &HEF: 'E8H-EFH
21150 DATA &HF0,&HF1,&HF2,2,3, &HF3,        &HF4,2,3, &HF5,        &HF6,2, &HF7: 'F0H-F7H
21158 DATA &HF8,&HF9,&HFA,2,3, &HFB,        &HFC,2,3, &HFD,&H7E,3, &HFE,2, &HFF: 'F8H-FFH

22999 '-- DD Test Data
23000 DATA &HDD,&H09,&HDD,&H19:
23020 DATA &HDD,&H21,3,4,&HDD,&H22,3,4,&HDD,&H23,&HDD,&H29,&HDD,&H2A,3,4,&HDD,&H2B:
23030 DATA &HDD,&H34,3,&HDD,&H35,3,&HDD,&H36,3,4,&HDD,&H39:
23040 DATA &HDD,&H46,3,&HDD,&H4E,3,&HDD,&H56,3,&HDD,&H5E,3,&HDD,&H66,3,&HDD,&H6E,3:
23070 DATA &HDD,&H70,3,&HDD,&H71,3,&HDD,&H72,3,&HDD,&H73,3,&HDD,&H74,3,&HDD,&H75,3,&HDD,&H77,3,&HDD,&H7E,3:
23080 DATA &HDD,&H86,3,&HDD,&H8E,3,&HDD,&H96,3,&HDD,&H9E,3,&HDD,&HA6,3,&HDD,&HAE,3,&HDD,&HB6,3,&HDD,&HBE,3:
23150 DATA &HDD,&HE1, &HDD,&HE3, &HDD,&HE5, &HDD,&HE9, &HDD,&HF9:
23200 DATA &HDD,&HCB,&H06,4,&HDD,&HCB,&H0E,4,&HDD,&HCB,&H16,4,&HDD,&HCB,&H1E,4:
23210 DATA &HDD,&HCB,&H26,4,&HDD,&HCB,&H2E,4,                 &HDD,&HCB,&H3E,4:
23220 DATA &HDD,&HCB,&H46,4,&HDD,&HCB,&H4E,4,&HDD,&HCB,&H56,4,&HDD,&HCB,&H5E,4:
23230 DATA &HDD,&HCB,&H66,4,&HDD,&HCB,&H6E,4,&HDD,&HCB,&H76,4,&HDD,&HCB,&H7E,4:
23240 DATA &HDD,&HCB,&H86,4,&HDD,&HCB,&H8E,4,&HDD,&HCB,&H96,4,&HDD,&HCB,&H9E,4:
23250 DATA &HDD,&HCB,&HA6,4,&HDD,&HCB,&HAE,4,&HDD,&HCB,&HB6,4,&HDD,&HCB,&HBE,4:
23260 DATA &HDD,&HCB,&HC6,4,&HDD,&HCB,&HCE,4,&HDD,&HCB,&HD6,4,&HDD,&HCB,&HDE,4:
23270 DATA &HDD,&HCB,&HE6,4,&HDD,&HCB,&HEE,4,&HDD,&HCB,&HF6,4,&HDD,&HCB,&HFE,4:

23999 '--- ED Test Data
24040 DATA &HED,&H40,&HED,&H41,&HED,&H42,&HED,&H43,3,4,&HED,&H44,&HED,&H45,&HED,&H46,&HED,&H47:
24048 DATA &HED,&H48,&HED,&H49,&HED,&H4A,&HED,&H4B,3,4,&HED,&H4D,&HED,&H4F:
24050 DATA &HED,&H50,&HED,&H51,&HED,&H52,&HED,&H53,3,4,&HED,&H56,&HED,&H57:
24058 DATA &HED,&H58,&HED,&H59,&HED,&H5A,&HED,&H5B,3,4,&HED,&H5E,&HED,&H5F:
24060 DATA &HED,&H60,&HED,&H61,&HED,&H62,&HED,&H67,&HED,&H68,&HED,&H69,&HED,&H6A,&HED,&H6F:
24070 DATA &HED,&H72,&HED,&H73,3,4,&HED,&H78,&HED,&H79,&HED,&H7A,&HED,&H7B,3,4:
24100 DATA &HED,&HA0,&HED,&HA1,&HED,&HA2,&HED,&HA3,&HED,&HA8,&HED,&HA9,&HED,&HAA,&HED,&HAB:
24110 DATA &HED,&HB0,&HED,&HB1,&HED,&HB2,&HED,&HB3,&HED,&HB8,&HED,&HB9,&HED,&HBA,&HED,&HBB:

24999 '--- FD Test Data
25000 DATA &HFD,&H09,&HFD,&H19:
25020 DATA &HFD,&H21,3,4,&HFD,&H22,3,4,&HFD,&H23,&HFD,&H29,&HFD,&H2A,3,4,&HFD,&H2B:
25030 DATA &HFD,&H34,3,&HFD,&H35,3,&HFD,&H36,3,4,&HFD,&H39:
25040 DATA &HFD,&H46,3,&HFD,&H4E,3,&HFD,&H56,3,&HFD,&H5E,3,&HFD,&H66,3,&HFD,&H6E,3:
25070 DATA &HFD,&H70,3,&HFD,&H71,3,&HFD,&H72,3,&HFD,&H73,3,&HFD,&H74,3,&HFD,&H75,3,&HFD,&H77,3,&HFD,&H7E,3:
25080 DATA &HFD,&H86,3,&HFD,&H8E,3,&HFD,&H96,3,&HFD,&H9E,3,&HFD,&HA6,3,&HFD,&HAE,3,&HFD,&HB6,3,&HFD,&HBE,3:
25150 DATA &HFD,&HE1, &HFD,&HE3, &HFD,&HE5, &HFD,&HE9, &HFD,&HF9:
25200 DATA &HFD,&HCB,&H06,4,&HFD,&HCB,&H0E,4,&HFD,&HCB,&H16,4,&HFD,&HCB,&H1E,4:
25210 DATA &HFD,&HCB,&H26,4,&HFD,&HCB,&H2E,4,                 &HFD,&HCB,&H3E,4:
25220 DATA &HFD,&HCB,&H46,4,&HFD,&HCB,&H4E,4,&HFD,&HCB,&H56,4,&HFD,&HCB,&H5E,4:
25230 DATA &HFD,&HCB,&H66,4,&HFD,&HCB,&H6E,4,&HFD,&HCB,&H76,4,&HFD,&HCB,&H7E,4:
25240 DATA &HFD,&HCB,&H86,4,&HFD,&HCB,&H8E,4,&HFD,&HCB,&H96,4,&HFD,&HCB,&H9E,4:
25250 DATA &HFD,&HCB,&HA6,4,&HFD,&HCB,&HAE,4,&HFD,&HCB,&HB6,4,&HFD,&HCB,&HBE,4:
25260 DATA &HFD,&HCB,&HC6,4,&HFD,&HCB,&HCE,4,&HFD,&HCB,&HD6,4,&HFD,&HCB,&HDE,4:
25270 DATA &HFD,&HCB,&HE6,4,&HFD,&HCB,&HEE,4,&HFD,&HCB,&HF6,4,&HFD,&HCB,&HFE,4:


FitBit_Versa2 VOXYオプションパーツ PasoconMiniPC8001(12)〜逆アセンブラ