Vol.800 3.Jul.2020

ガラケーはいつまで使えるの? マイナポイント PasooconMiniPC8001(15)〜1ラインアセンブラ

G ガラケーはいつまで使えるの?

by fjk

 ドコモのFOMAおよびiモード携帯(3G)は2026年3月31日(火)でサービスが終了する。そのせいか、P-01Gを利用する人にドコモからスマホに変更するように勧める電話がよくかかってくる。まだ終了までに日があるので「そのうちに」と断っていたが、カタログでは判らない最近の情報を一度訊いておこうと思って、ドコモショップで「機種変更の相談」を予約した。
 最近の機種は?、料金は?、ガラホは?・・。@国産機種、A電池の持ち、Bおサイフ携帯、CLINEが使える、DOTG(USBホスト機能)、E金額・・とメモって、ドコモショップに出かけた。
 電池の持ちが良いガラホも選択候補としていたが、「(LINEなどの)スマホ用のアプリはドコモの取り扱いではないので、ガラホで全て使えるかどうかは判らない」と回答され、ガラホは諦めた。
 そこで、電池容量が4000mAhと最も大きいSharpのAquosSence3(SH-02M)を勧められ、条件の@ABCは満足し、DのOTGは不明、Eはキャンペーンで本体価格11,000円、はじめてスマホ割で月1,000円引き(ギガライト、12ケ月)と提示され、キャンペーンのきかない他機種(数万円〜)との差が大きく、相談のつもりだったが、安価なAquosを購入することにした。後日、OTG機能が必要なUSBキーボードによるキー入力、USBメモリの読み書き、DJI_FlyによるMavicMiniの操縦もできました(「OTG機能が使える」とメーカーQ&Aにあるが、アプリによって対応しない場合もあるようです)。
 機種変更手続きは、旧ガラケー内のEdyとSuicaに残金があり、「機種変更後に使えなくなる可能性がある」(後日、機種変更後にもEdyが使えることを確認)と言われたので、変更手続きを中断し、念のためスーパーとコンビニに行ってEdyとSuicaを買い物ゲームのように使い切り(実際には数円残)、その後ドコモショップに戻り、再び機種変更手続きを行ったため、朝から夕方までかかった。
 機種変更時のついでにDカードを申し込み、スマホの支払いをDカードで行うことにした(月170円の料金割引とDポイントもゲットできる)。画面の保護シールの貼り付けは店員にお願いした(やはりプロの仕事は綺麗)が、Google設定、おサイフ携帯の設定、電話帳や写真の引っ越し、・・等の電話機能以外の設定作業はユーザが行うことになっており、ドコモの新人店員に指示されながら行った。
 AquosSence3(167g)はiPhon(177g〜)よりは軽いが、旧ガラケー(122g)に比べて重く、サイズも大きく(147x70x8.9mm)、胸ポケットにはやっと入るサイズである。そこで、落下防止のため首賭けストラップを付けたいので、ストラップが取り付け可能なケースPALLET(LEPLUS、\2,180)を電気屋さんで購入した。さらに画面の保護が薄いフイルムだけなので、手帳型のケース(ラスタバナナ、\1,950、サイドマグネット式)も購入した。手帳型のケースにはカード収納ポケットもあり、さらに横置きスタンドにもなり便利である(小さいポケットには入らないので、ケースを使い分け)。これで、スマホがポケットから抜けて落ちても安心である。
 電話帳や電話を使えることを店頭で確認し、帰宅途中のコンビニで電子マネーをチャージし、自宅の戻った。自宅では、スーパーセキュリティZERO(ソースネクスト)、さらに、PlayストアからLINE、MS-Office、Jolteをインストールし、いずれのソフトも問題なく動作することを確認した。
 ちなみに、AUの3Gは2022年3月末、ソフトバンクの3Gは2024年1月下旬にサービスを終了する。

手帳型ケース(ラスタバナナ)と
AquosSence3 SH-02M
SH-02MにDJIFlyをインストールし
MavicMiniをコントロール


M マイナポイント 〜総務省のポイント還元サービス

by fjk

 最大5%のポイントが還元されるキャッシュレス・ポイント還元事業は2020年6月30日で終了したが、新たに、キャスレス決済で最大25%のポイントが還元される「マイナポイント」が2020年9月1日からスタートする(2021年3月31日まで。8月31日までの利用は対象外)。還元金額の上限は5,000円だが、d払いでは5500円、SuicaやauPayでは6,000円、WAONでは7,000円まで「+サービス」で還元される。
 マイナポイントを利用するには「マイナンバーカード」を使って、「マイナポイントを予約」し、利用する「キャシュレス決済サービス」(ポイントもここに振り込まれる)を選択する必要がある。詳細は総務省のマイナンバーカードのページを参照。
 マイナポイントの申し込みは2020年7月1日から開始しており、マイナンバーカードを持っていない人は。まず「マイナンバーカード交付申請書」を使って、マイナンバーカードを取得する必要がある。
 マイナポイントの申し込み手続きは、スマホ、パソコン、マイナポイント手続きスポット(コンビニなど)で行うことができる。スマホの場合は対応機種をホームページで確認できる。パソコンの場合はマイナンバーカードに対応するICカードリーダーが必要。手続きスポットはHPで検索できる。申し込み手続き時には、マイナンバーカードの暗証番号および決済サービスIDなどが必要となる。
 マイナンバーと決済サービスIDの番号はどちらも1回しか利用(登録)できないので、未利用(登録)のマイナンバーと決済サービスIDを使うことで、家族(子供)のものも(代理で)申請できる。


P PasooconMiniPC8001(15) 〜1ラインアセンブラ

by fjk

 機械語はDumpListEditerでアセンブルできるが、小さな変更でも、一々パソコンに戻るのは面倒である。そこで、PC8001上でハンドアセンブルの手助け用として、1行入力毎に変換するZ80アセンブラをBASICで作成した。

【使い方】
1.入力書式 (ザイログ表記。[]はオプション)
[ラベル[:]]命令[ オペランド1[,オペランド2]]]
*命令とオぺランドの間には1文字以上の空白が必要。
*ラベルの直後には”:”(コロン)を付けるか、”EQU"または”=”の場合は空白を使うこと(コロン不可)。
*小文字は全て大文字に変換するので、大小文字どちらでもOK。
2.疑似命令
ORG :格納開始アドレスを指定(使用例:org e000h)
EQU または :ラベル(変数)の定義 (使用例:label = d123h)
DB :1バイトデータ (使用例:db 4)
DW :2バイトデータ (使用例:dw 5678h)
END :アセンブルの終了[未定義のラベル処理を行う]
3.jr命令の相対番地指定
  • 相対ジャンプの番地差分数で指定する場合は必ず”+”か”−”を付ける。
  • 符号が無いと絶対アドレスとみなしてデファレンス値(−128〜+127)を自動計算するので、範囲オーバーに注意!
4.ラベル(大小文字は区別しない)
  • 3〜6文字の英数文字、一部の記号の組み合わせをラベル(変数)として利用可。命令などの予約語も使えるが、ラベルの中に含むのは良いが、予約語そのものは紛らわしいので、なるべく使わないのが良い。
5.16進数は末尾に必ず”H“を付ける(先頭がA〜F時、先頭の”0”の有無はどちらでも良い)。
6.文字・数値の前に余分なスペース、タブはOK。ただし、”:”(コロン)”,”(カンマ)の前、および括弧内ではスペース、タブは使えない。
7.格納アドレスの初期値は拡張RAMの6010H(行番号140のZAで変更可能。またはORG命令で任意のアドレスに指定可能)。
8.プログラムを修正・変更した場合、行番号180のZGを1または2にすると、実メモリに書き込まない状態でデバッグできる。
アセンブル処理中 ラベルを使うと・・
【プログラムの概要】
1.命令、オペランド
  • 検索スピードを上げるため、命令は先頭文字のアルファベットで分岐し、各アルファベットで命令が一致するかチェックし、一致した命令を1〜67のコードに変換。
  • オペランドのチェックおよび処理は、オペランド処理コードを使い、命令毎に書式が合うか調べ、合わない場合は次の処理コードを実施。処理コード(2バイト)の最上位のビット15が1なら次の処理コードがあることを示す。処理コードの下位1バイトは命令のベースとなるバイトデータ。
2.ラベル処理
  • ラベルは定義時に,ラベルテーブルに「ラベル名」「アドレス(データ)」を記録。
  • オペランド部にラベルがあると、ラベルテーブルをサーチしアドレスやデータに変換する。
  • ラベル名がラベルテーブルに未登録の場合は、テーブルエリアの後から前方に未配置ラベルとして「ラベル名」「配置すべきアドレス」「バイト数」を順に記録する。
  • END命令は未配置ラベルのアドレスに正しいアドレス(データ)を配置するので、最後に必ずEND命令を実行すること(途中で実行しても良い)。
  • 記録されたラベルのリストは”L”(大文字)入力で確認できる。未配置ラベルで配置が終了するとバイト数が0となる。配置済ラベルのバイト数は利用回数を示す。
  • 利用できるラベルの総数は32だが、行番号140のZBで変更できる。ラベル文字数は行番号2110および2200でチェックしているので制限文字数を増やすのはOK。
  • ”ABCDH“は16進数だが、”ABCD“はラベルと見なされるので注意が必要。”0ABCD”ならエラーとなるので、入力ミスを見つけるには数値の先頭には”0”[ゼロ]をつけるのがベター。
※ 正しいニモニック書式であればほぼバグは無いが、全てのエラーのシミュレートを完全に行っていないので、エラーがある文字入力をしてもエラーとならない可能性があるので、利用は自己責任で・。
オペランド処理コード表:opland.gif, ニモニック処理表:opl_map.gif

Z80用アセンブラ:zasm.cmt(zasm.zip)
10 '*======================*
20 '*    Z80 Assembler     *
30 '*======================*
100   DEFINT A-Z:WIDTH 80
110   DEF FNL(A)=A AND 255              :'Get Low Byte
120   DEF FNH(A)=(A/256)AND 255         :'Get High Byte
130   DIM VG(26),OU$(26),VQ(67),VT(138)
140   ZA=&H6010:ZB=32:ZN=0:ZU=ZB
150   DIM ZL(ZB),ZM(ZB),OW$(ZB)
188   ZG=0                              :'for Debug 0:off,1:on(No_Poke),2:on
189   KEY2,"(IX+":KEY3,"(IY+"
190   GOTO 1010

198'===== Subroutins
199'*Ck_dec:
200   IF LEN(OT$)=0 THEN 2910
202   FOR I=1 TO LEN(OT$)
204     VN=ASC(MID$(OT$,I,1)):IF VN<&H30 OR VN>&H39 THEN 2930
206   NEXT:VE=0:RETURN
209'*Get_Num:
210   GOSUB 200:IF VE>0 THEN IF LEFT$(OT$,1)="0" OR VE=1 THEN 2930 ELSE 2200:'->*Label
212   ZZ!=VAL(OT$):IF ZZ!<-32768! OR ZZ!>65535! THEN 2930
214   IF ZZ!>32767! THEN VD=INT(ZZ!-65536!) ELSE VD=INT(ZZ!)  
216   RETURN
219'*Ck_Hex:
220   FOR I=1 TO LEN(OH$)
222     VN=ASC(MID$(OH$,I,1)):IF VN<&H30 OR VN>&H46 OR(VN>&H39 AND VN<&H41)THEN 2930
224   NEXT:VE=0:RETURN
229'*Get_Hex:
230   IF RIGHT$(OT$,1)="H" THEN OH$=LEFT$(OT$,LEN(OT$)-1) ELSE 210
232   GOSUB 220:IF VE>0 THEN 2200:'->*Label
234   IF LEFT$(OT$,1)="0" AND LEN(OH$)>1 THEN OH$=MID$(OH$,2)
236   IF LEN(OH$)>4 THEN 2930 ELSE VD=VAL("&H"+OH$):RETURN
239'*Rmv_Bal:
240   IF LEFT$(OT$,1)="(" AND RIGHT$(OT$,1)=")" THEN OT$=MID$(OT$,2,LEN(OT$)-2) ELSE VE=3
242   RETURN
249'*Get_Dsp:
250   GOSUB 240:VN=INSTR(OT$,"+"):IF VN>0 THEN OT$=MID$(OT$,VN+1):GOTO 230 ELSE 2930
259'*Get_def:
260   VN=INSTR(OT$,"+"):IF VN>0 THEN OT$=MID$(OT$,VN+1):GOTO 230
262   VN=INSTR(OT$,"-"):IF VN>0 THEN OT$=MID$(OT$,VN+1):GOSUB 230:VD=-VD:RETURN
266   GOSUB 230:IF VE>0 THEN RETURN ELSE VD=VD-ZA-2:RETURN
269'*Get_BNm:
270   GOSUB 240:IF VE>0 THEN RETURN ELSE 230
279'*Set_1By:
280   V(VI)=VM:VI=VI+1:V(VI)=FNL(VD):RETURN
289'*Set_M2W:
290   V(VI)=VM
294'*Set_2Wd:
295   VI=VI+1:V(VI)=FNL(VD):VI=VI+1:V(VI)=FNH(VD):RETURN

298'==== Except LD Command
299'[0]*No_Opl:
300   IF LEN(O$(2))>0 THEN 2930 ELSE IF(VH AND &H40)>0 THEN V(VI)=&HED:VI=VI+1
305   V(VI)=VM:RETURN
309'[20]*CB_r
310   OT$=O2$:GOSUB 630:IF VB<0 THEN 2930
312   V(VI)=&HCB:VI=VI+1:V(VI)=VM+VB:RETURN
319'[1]*ddd:
320   OT$=O2$:GOSUB 630:IF VB>=0 THEN V(VI)=VM+VB*8:RETURN ELSE 2930
329'[2]*sss:
330   OT$=O2$:GOTO 345
339'[3]*A_sss:
340   IF O$(2)="A" THEN OT$=O3$ ELSE 2930
344'*:
345   GOSUB 630:IF VB<0 THEN 2930 ELSE V(VI)=VM+VB:RETURN
349'[4]*_n:
350   OT$=O$(2):GOTO 365
359'[5]*A_n
360   IF O$(2)="A" THEN OT$=O$(3)ELSE 2930
364'*:
365   GOSUB 230:IF VE=0 THEN 280 ELSE 2930
369'[6]*rp:
370   OT$=O2$:GOSUB 640:GOTO 395
379'[7]*qq:
380   OT$=O2$:GOSUB 650:GOTO 395
389'[8]*H_rp:
390   IF O$(2)="HL" THEN OT$=O3$:GOSUB 640 ELSE 2930
392   IF (VH AND &H40)>0 THEN V(VI)=&HED:VI=VI+1
394'*:
395   IF VB<0 THEN 2930 ELSE V(VI)=VM+VB*16:RETURN 
399'[9]*aa
400   OT$=O$(2):GOSUB 230:IF VE=0 THEN 290 ELSE 2930
409'[A]*e:
410   OT$=O$(2):GOSUB 260:IF VD<-128 OR VD>127 THEN 2940 ELSE V(VI)=VM:VI=VI+1:V(VI)=VD:RETURN
419'[B]*ccc:
420   OT$=O2$:GOSUB 680:IF VB>=0 THEN V(VI)=VM+VB*8:RETURN ELSE 2930
429'[C]*ccc_aa:
430   OT$=O2$:GOSUB 680:IF VB<0 THEN 2930
432   OT$=O$(3):GOSUB 230:IF VE>0 THEN 2930 ELSE V(VI)=VM+VB*8:GOTO 295
439'[D]*cc_e:
440   OT$=O2$:GOSUB 680:IF VB<0 OR VB>3 THEN 2930 ELSE OT$=O$(3):GOSUB 260:IF VE>0 THEN RETURN
442   IF VD<-128 OR VD>127 THEN 2940 ELSE V(VI)=VM+VB*8:VI=VI+1:V(VI)=VD:RETURN
449'[E]*nH:
450   OT$=O2$:GOSUB 670:IF VB>=0 THEN V(VI)=VM+VB*8:RETURN ELSE 2930
459'[F]*(HL):
460   IF O$(2)="(HL)" THEN V(VI)=VM:RETURN ELSE 2930
469'[10]*xy:
470   OT$=O2$:GOSUB 690:IF VB<0 THEN 2930 ELSE V(VI)=&HDD+VB*32:VI=VI+1:V(VI)=VM:RETURN
479'[11]*xy_rXY:
480   OT$=O2$:GOSUB 690:IF VB<0 THEN 2930 ELSE VC=VB
482   IF O2$=O3$ THEN VB=3 ELSE OT$=O3$:GOSUB 645:IF VB<0 THEN 2930
484   V(VI)=&HDD+VC*32:VI=VI+1:V(VI)=VM+VB*16:RETURN
489'[12]*(xy):
490   OT$=O2$:GOSUB 695:IF VB<0 THEN 2930 ELSE V(VI)=&HDD+VB*32:VI=VI+1:V(VI)=VM:RETURN
499'[13]*(xy+d):
500   OT$=O2$:GOSUB 695:IF VB<0 THEN 2930 ELSE OT$=O$(2)
504'*:
505   GOSUB 250:IF VD<0 OR VD>255 THEN 2940
506   V(VI)=&HDD+VB*32:VI=VI+1:IF (VH AND &H40)>0 THEN V(I)=&HCB:VI=VI+1
507   V(VI)=VM:VI=VI+1:V(VI)=VD:RETURN
509'[14]*A,(xy+d):
510   IF O$(2)<>"A" THEN 2930 ELSE OT$=O3$:GOSUB 695:IF VB<0 THEN 2930 ELSE OT$=O$(3):GOTO 505
519'[15]*ddd(C:
520   IF O$(3)<>"(C)" THEN 2930 ELSE OT$=O2$:GOSUB 635:IF VB<0 THEN 2930
524   V(VI)=&HED:VI=VI+1:V(VI)=VM+VB*8:RETURN
529'[16]*A,(n):
530   IF O$(2)<>"A" THEN 2930 ELSE OT$=O$(3):GOSUB 270:IF VE>0 THEN RETURN
532   IF VD<0 OR VD>255 THEN 2940 ELSE 280
539'[17]*(C),sss:
540   IF O$(2)<>"(C)" THEN 2930
542   OT$=O3$:GOSUB 635:IF VB<0 THEN 2930 ELSE V(VI)=&HED:VI=VI+1:V(VI)=VM+VB*8:RETURN
549'[18]*(n),A:
550   IF O$(3)<>"A" THEN 2930 ELSE OT$=O$(2):GOSUB 270:IF VE>0 THEN RETURN
552   IF VD<0 OR VD>255 THEN 2940 ELSE 280
559'[19]*b,rrr:
560   OT$=O3$:GOSUB 630:IF VB<0 THEN 2930 ELSE OT$=O$(2):GOSUB 230:IF VE>0 THEN RETURN
562   IF VD<0 OR VD>7 THEN 2930 ELSE V(VI)=&HCB:VI=VI+1:V(VI)=VM+VD*8+VB:RETURN
569'[1A]*b,(xy):
570   OT$=O3$:GOSUB 695:IF VB<0 THEN 2930 ELSE OT$=O$(2):GOSUB 230:IF VE>0 THEN RETURN
572   IF VD<0 OR VD>7 THEN 2930 ELSE VC=VD:OT$=O$(3):GOSUB 250:IF VD<0 OR VD>255 THEN 2940
575   V(VI)=&HDD+VB*32:VI=VI+1:V(VI)=&HCB:VI=VI+1:V(VI)=VD:VI=VI+1:V(VI)=VM+VC*8:RETURN
579'[1B]*m:
580   OT$=O2$:GOSUB 660:IF VB<0 THEN 2930 ELSE V(VI)=&HED:VI=VI+1:V(VI)=VM+VB*8:RETURN
589'[1C]*DE,HL:
590   IF O$(2)="DE" AND O$(3)="HL"  THEN V(VI)=VM:RETURN ELSE 2930
599'[1D]*AF,AF:
600   IF O$(2)="AF" AND O$(3)="AF'" THEN V(VI)=VM:RETURN ELSE 2930
609'[1E]*(SP),HL: 
610   IF O$(2)="(SP)" AND O$(3)="HL" THEN V(VI)=VM:RETURN ELSE 2930
619'[1F]*(SP),xy:
620   IF O$(2)<>"(SP)" THEN 2930
622   OT$=O3$:GOSUB 690:IF VB<0 THEN 2930 ELSE V(VI)=&HDD+VB*32:VI=VI+1:V(VI)=VM:RETURN

630   VB=(INSTR("B__C__D__E__H__L__(HLA__",OT$)-1)/3:RETURN     :'*Ck_Reg
635   VB=(INSTR("B__C__D__E__H__L__***A__",OT$)-1)/3:RETURN     :'*Ck_Rg2
640   VB=(INSTR("BC_DE_HL_SP_",OT$)-1)/3:RETURN                 :'*Ck_RgP
645   VB=(INSTR("BC_DE_***SP_",OT$)-1)/3:RETURN                 :'*Ck_RgX
650   VB=(INSTR("BC_DE_HL_AF_",OT$)-1)/3:RETURN                 :'*Ck_RgAF
655   VB=(INSTR("(BC(DE",OT$)-1)/3:RETURN                       :'*Ck_IdRg
660   VB=(INSTR("0__1__***2__",OT$)-1)/3:RETURN                 :'*Ck_IM
670   VB=(INSTR("00H08H10H18H20H28H30H38H",OT$)-1)/3:RETURN     :'*Ck_RST
680   VB=(INSTR("NZ_Z__NC_C__PO_PE_P__M__",OT$)-1)/3:RETURN     :'*Ck_Cnd
690   VB=(INSTR("IX_IY_",OT$)-1)/3:RETURN                       :'*Ck_Ixy
695   VB=(INSTR("(IX(IY",OT$)-1)/3:RETURN                       :'*Ck_Ixy
   
700' ===== LD Command
709'[21]*dd-ss:
710   OT$=O3$:GOSUB 630:IF VB<0 THEN 2930 ELSE VC=VB
712   OT$=O2$:GOSUB 630:IF VB<0 OR (VB=6 AND VC=6) THEN 2930 ELSE V(VI)=VM+VB*8+VC:RETURN
719'[22]*ddd-n:
720   OT$=O2$:GOSUB 630:IF VB<0 OR LEFT$(O$(3),1)="(" THEN 2930
722   OT$=O$(3):GOSUB 230:IF VE>0 THEN 2930
724   IF VD<0 OR VD>255 THEN 2930 ELSE  V(VI)=VM+VB*8:VI=VI+1:V(VI)=VD:RETURN
729'[23]*d-(xy:
730   OT$=O3$:GOSUB 695:IF VB<0 THEN 2930 ELSE VC=VB
732   OT$=O2$:GOSUB 630:IF VB<0 THEN 2930 ELSE IF VB=6 THEN 2935
734   OT$=O$(3):GOSUB 250:IF VE>0 THEN RETURN ELSE IF VD<0 OR VD>255 THEN 2930
736   V(VI)=&HDD+VC*32:VI=VI+1:V(VI)=VM+VB*8:VI=VI+1:V(VI)=VD:RETURN
739'[24]*A-(bd:
740   IF O$(2)<>"A" THEN 2930 ELSE OT$=O3$:GOSUB 655:IF VB<0 THEN 2930 ELSE V(VI)=VM+VB*16:RETURN
749'[25]*A-(aa:
750   IF O$(2)<>"A" THEN 2930 ELSE OT$=O$(3):GOSUB 270:IF VE>0 THEN 2930 ELSE 290
759'[26]*pp-nn:
760   OT$=O2$:GOSUB 640:IF VB<0 OR LEFT$(O$(3),1)="(" THEN 2930
762   OT$=O$(3):GOSUB 230:IF VE>0 THEN 2930 ELSE V(VI)=VM+VB*16:GOTO 295
769'[27]*pp(aa:
770   OT$=O2$:GOSUB 645:IF VB<0 THEN 2930
772   OT$=O$(3):GOSUB 270:IF VE>0 THEN 2930 ELSE V(VI)=&HED:VI=VI+1:V(VI)=VM+VB*16:GOTO 295
779'[28]*HL(aa:
780   IF O$(2)<>"HL" THEN 2930 ELSE OT$=O$(3):GOSUB 270:IF VE>0 THEN 2930 ELSE 290
789'[29]*SP-HL:
790   IF O$(2)="SP" AND O$(3)="HL" THEN V(VI)=VM:RETURN ELSE 2930
799'[2A]*SP-xy:
800   IF O$(2)<>"SP" THEN 2930
802   OT$=O3$:GOSUB 690:IF VB<0 THEN 2930 ELSE V(VI)=&HDD+VB*32:VI=VI+1:V(VI)=VM:RETURN
809'[2B}*(bd-A:
810   IF O$(3)<>"A" THEN 2930 ELSE OT$=O2$:GOSUB 655:IF VB<0 THEN 2930 ELSE V(VI)=VM+VB*16:RETURN
819'[2C]*(aa-A:
820   IF O$(3)<>"A" THEN 2930 ELSE OT$=O$(2):GOSUB 270:IF VE>0 THEN 2930 ELSE 290
829'[2D]*(aa-H:
830   IF O$(3)<>"HL" THEN 2930 ELSE OT$=O$(2):GOSUB 270:IF VE>0 THEN 2930 ELSE 290
839'[2E]*(aa-p:
840   OT$=O3$:GOSUB 645:IF VB<0 THEN 2930
842   OT$=O$(2):GOSUB 270:IF VE>0 THEN 2930 ELSE V(VI)=&HED:VI=VI+1:V(VI)=VM+VB*16:GOTO 295
849'[2F]*(aaxy:
850   OT$=O3$:GOSUB 690:IF VB<0 THEN 2930 ELSE OT$=O$(2):GOSUB 270:GOTO 875
859'[30]*xy-nn:
860   OT$=O2$:GOSUB 690:IF VB<0 THEN 2930 ELSE OT$=O$(3):GOSUB 230:GOTO 875
869'[31]*xy(aa:
870   OT$=O2$:GOSUB 690:IF VB<0 THEN 2930 ELSE OT$=O$(3):GOSUB 270
874'*:
875   IF VE=0 THEN V(VI)=&HDD+VB*32:VI=VI+1:GOTO 290 ELSE 2930
879'[32]*(xy-s:
880   OT$=O2$:GOSUB 695:IF VB<0 THEN 2930 ELSE VC=VB:OT$=O3$:GOSUB 630:IF VB<0 THEN 2930
884   IF VB=6 THEN 2935 ELSE OT$=O$(2):GOSUB 250:IF VE>0 THEN RETURN
886   IF VD<0 OR VD>255 THEN 2940
888   V(VI)=&HDD+VC*32:VI=VI+1:V(VI)=VM+VB:VI=VI+1:V(VI)=VD:RETURN
889'[33]*(xy-n:
890   OT$=O2$:GOSUB 695:IF VB<0 THEN 2930 ELSE OT$=O$(3):VL=1:GOSUB 230:IF VE>0 THEN RETURN
892   IF VD<0 OR VD>255 THEN 2940 ELSE VC=VD
894   OT$=O$(2):VL=0:GOSUB 250:IF VE>0 THEN RETURN
896   IF VD<0 OR VD>255 THEN 2940
898   V(VI)=&HDD+VB*32:VI=VI+1:V(VI)=VM:VI=VI+1:V(VI)=VD:VI=VI+1:V(VI)=VC:RETURN
899'[34]*A-I:
900   IF O$(2)="A" AND O$(3)="I" THEN 940 ELSE 2930
909'[35]*A-R:
910   IF O$(2)="A" AND O$(3)="R" THEN 940 ELSE 2930
919'[36]*I-A:
920   IF O$(2)="I" AND O$(3)="A" THEN 940 ELSE 2930
929'[37]*R-A:
930   IF O$(2)="R" AND O$(3)="A" THEN 940 ELSE 2930
939'*ExED
940   V(VI)=&HED:VI=VI+1:V(VI)=VM:RETURN

949'*To_Lowr:
950   FOR I=1 TO LEN(OL$)
952   VN=ASC(MID$(OL$,I,1)):IF VN>&H60 AND VN<&H7B THEN MID$(OL$,I,1)=CHR$(VN-&H20)
955   NEXT:RETURN
959'*Get_Op:
960   IF VS=LEN(OL$) THEN O$(VJ)=MID$(OL$,VP,VS-VP+1):RETURN
962   O$(VJ)=MID$(OL$,VP,VS-VP):VS=VS+1:VP=VS
964'*Sp_Skip:
965   VN=ASC(MID$(OL$,VS,1)):IF VN=&H20 OR VN=&H09 THEN VS=VS+1:GOTO 965 ELSE VP=VS:RETURN
969'*Spt_Ln:
970   FOR I=0 to 9:O$(I)="":NEXT
972   VS=INSTR(OL$,":"):IF VS>0 THEN O$(0)=LEFT$(OL$,VS-1):VS=VS+1 ELSE VS=1
974   GOSUB 965:VJ=1:VP=VS
979'*Spt_Lp:
980   OH$=MID$(OL$,VS,1):IF OH$=";" OR VS=LEN(OL$) THEN GOSUB 960:GOTO 985
982   IF OH$="," OR OH$=" " THEN GOSUB 960 ELSE VS=VS+1:GOTO 980
983   IF VJ<10 THEN VJ=VJ+1:GOTO 980
984'*Spt_Ext:
985   IF O$(2)="EQU" OR O$(2)="=" THEN FOR I=0 TO 8:O$(I)=O$(I+1):NEXT
986   IF ZG>1 THEN print ".";O$(0);".";O$(1);".";O$(2);".";O$(3);".":'----------- for Debug
988   RETURN
989'*Spt_Wd:
990   O1$=LEFT$(O$(1)+"____",4):O2$=LEFT$(O$(2)+"___",3):O3$=LEFT$(O$(3)+"___",3):RETURN

1000'===== Start Asm
1009'*Init_Asm:
1010  GOSUB 3080:GOSUB 3360:GOSUB 3510
1099'*Main:
1100  PRINT"#";:GOSUB 2600:LINEINPUT "[Asm]? ";OL$:IF LEN(OL$)=0 THEN 1100
  
1105  IF OL$="!" THEN END
1110  IF OL$="L" THEN GOSUB 2300:GOTO 1100          :'*Print Lable List
1120  GOSUB 950:GOSUB 970:GOSUB 990                 :'*ToLower,*SepLn,*SetWd
1130  GOSUB 3010:IF VE>0 THEN 1150                  :'*GetCmdTabl
1140  IF VR>67 THEN 1300
1145  IF VR=30 THEN GOSUB 3310 ELSE GOSUB 3210      :'Exc.Asm.
1150  IF VE>0 THEN GOSUB 2900:GOTO 1100             :'Print Error
1160  IF LEN(O$(0))>0 THEN GOSUB 2100               :'Label Set
1170  GOSUB 2650:GOSUB 2700:GOTO 1100               :'Print Result & Set Data

1299'*Pseudo:
1300  ON VR-67 GOSUB 1400,1600,1600,1700,1800,1900
1310  IF VE>0 THEN 1150
1320  IF VR>70 AND VR<73 THEN 1170 ELSE 1100
1399'*ORG:
1400  OT$=O$(2):GOSUB 230:IF VE>0 THEN 2930
1410  ZA=VD:GOSUB 2600:PRINT:RETURN
1599'*EQU:
1600  OT$=O$(2):GOSUB 230:IF VE>0 THEN 2930
1610  OT$=O$(0):GOTO 2110
1699'*DB:
1700  OT$=O$(2):GOSUB 230:IF VE>0 THEN 2930 ELSE V(VI)=FNL(VD):V(0)=VI:RETURN
1799'*DW:
1800  OT$=O$(2):GOSUB 230:IF VE>0 THEN 2930 ELSE V(VI)=FNL(VD):VI=VI+1:V(VI)=FNH(VD):V(0)=VI:RETURN
1899'*END:
1900  GOTO 2400

2000 '===== Label
2009'*Sch_Lbl:
2010  FOR ZI=0 TO ZN
2020   IF OW$(ZI)=OT$ THEN ZE=0:RETURN
2030  NEXT:ZE=6:RETURN
2099'*Set_Lbl:
2100  OT$=O$(0):VD=ZA
2105'*
2110  Z=LEN(OT$):IF Z>6 OR Z<3 THEN 2990    :'*Er_Bad
2120  GOSUB 2010:IF ZE=0 THEN 2980          :'*Er_Dup
2130  IF ZN<ZU THEN ZN=ZN+1:OW$(ZN)=OT$:ZL(ZN)=VD:RETURN ELSE 2970:'*Er_Ovr
2199'*Sh&St_ULbl:
2200  Z=LEN(OT$):IF Z>6 OR Z<3 THEN 2990    :'*Er_Bad
2210  GOSUB 2010:IF ZE=0 THEN VD=ZL(ZI):ZM(ZI)=ZM(ZI)+1:VE=0:RETURN
2220  IF ZU=ZN THEN 2970 ELSE OW$(ZU)=OT$:ZL(ZU)=ZA :'*Er_Ovr
2230  IF VZ=&H33 THEN Z=2+VL:ZM(ZU)=1:GOTO 2270     :'VL=0:Op2/VL=1:Op3,1byte
2240  OQ$=right$("__"+hex$(VZ),2):VD=0
2250  IF INSTR("__4__5_16_18_22",OQ$)>0 THEN Z=1:ZM(ZU)=1:GOTO 2270 :'Op1,1byte
2252  IF INSTR("_13_14_1A_23_32",OQ$)>0 THEN Z=2:ZM(ZU)=1:GOTO 2270 :'Op2,1byte
2254  IF INSTR("_27_2E_2F_30_31",OQ$)>0 THEN Z=2:ZM(ZU)=2:GOTO 2270 :'Op2,2byte
2256  IF INSTR("__A__D",OQ$)>0  THEN VD=ZA+2:Z=1:ZM(ZU)=3:GOTO 2270 ;'Op1,Ofset
2258  IF INSTR("__9_12_25_26_28_2C_2D",OQ$)>0 THEN Z=1:ZM(ZU)=2     :'Op1,2Byte
2270  ZL(ZU)=ZL(ZU)+Z:ZU=ZU-1
2280  VE=0:OO$="":RETURN 
2299'*Lst_Lbl:
2300  PRINT"---- Defined Labels ----":FOR Z=1  TO ZN:GOSUB 2350:NEXT
2310  PRINT"---- Undefined Labels --":FOR Z=ZB TO ZU+1 STEP -1:GOSUB 2350:NEXT
2320  RETURN
2349'*
2350  PRINT OW$(Z);":";TAB(10);RIGHT$("000"+HEX$(ZL(Z)),4);"H";TAB(16);ZM(Z):RETURN
2399'*Rst_Lbl:
2400  IF ZU=ZB THEN RETURN
2410  FOR ZJ=ZB TO ZU+1 STEP -1:ZF=0
2420   FOR ZI=1 TO ZN
2430    IF OW$(ZJ)=OW$(ZI) THEN ZF=1:ZQ=ZL(ZI):ZR=ZL(ZJ):GOSUB 2500
2440   NEXT ZI:
2450   IF ZF=0 THEN GOSUB 2960:PRINT "[";OW$(ZJ);"]=???"
2460  NEXT ZJ
2470  RETURN
2499'*Set_Lbl_Dat:
2500  IF ZM(ZJ)=0 THEN RETURN
2502  PRINT RIGHT$("000"+HEX$(ZR),4);": ";
2504  ON ZM(ZJ) GOSUB 2510,2520,2530
2506  ZM(ZJ)=0:ZM(ZI)=ZM(ZI)+1:PRINT:RETURN
2509'*
2510  ZD=ZQ:PRINT RIGHT$("0"+HEX$(FNL(ZQ)),2);:IF ZG=0 THEN POKE ZR,FNL(ZQ)
2515  RETURN
2519'*
2520  GOSUB 2510:PRINT RIGHT$("0"+HEX$(FNH(ZQ)),2);:IF ZG=0 THEN POKE ZR+1,FNH(ZQ)
2525  RETURN
2529'*
2530  ZD=ZQ-ZR-1:IF ZD<-128 OR ZD>127 THEN 2940
2532  PRINT FNL(ZD);:IF ZG=0 THEN POKE ZR,FNL(ZD)
2535  RETURN

2599'*Prt_Data:
2600  PRINT RIGHT$("000"+HEX$(ZA),4);" ";:RETURN
2650  GOSUB 2600:FOR I=1 TO V(0):PRINT RIGHT$("0"+HEX$(V(I)),2);:NEXT:PRINT:RETURN
2699'*Set_Data:
2700  FOR I=1 TO V(0)
2710    IF ZG=0 THEN POKE ZA,FNL(V(I))
2720    ZA=ZA+1
2730  NEXT:RETURN

2899'*Errors:
2900  BEEP:PRINT "*** ";OO$;" !!":RETURN
2910  VE=1:OO$="Syntacs Error":RETURN
2920  VE=2:OO$="No Operation":RETURN
2930  VE=3:OO$="Bad Operand":RETURN
2935   GOSUB 2930:VE=13:RETURN
2940  VE=4:OO$="Out of Range":RETURN
2950  VE=5:OO$="Too Many Operand":RETURN
2960  VE=6:OO$="Undefined Label":RETURN
2970  VE=7:OO$="Too Many Lables":RETURN
2980  VE=8:OO$="Duplicated Name":RETURN
2990  VE=9:OO$="Bad Label Name":RETURN

3000 '===== Tables
3009'*Get_CmTbl:
3010  VE=0:VA=INSTR("ORG_EQU_=___DB__DW__END_",O1$):IF VA>0 THEN VR=67+(VA+3)/4:RETURN
3020  VA=ASC(O1$)-&H40: IF VG(VA)=0 THEN 2920
3030  VB=INSTR(OU$(VA),O1$):IF VB=0 THEN 2920 ELSE VB=(VB-1)/4
3040  VR=VG(VA)+VB
3045  IF ZG>1 THEN print "VR:";VR;O1$;",";O2$;",";O3$:'------- for Debug
3050  RETURN
3079'*Init_CmTbl:
3080  RESTORE 3101:FOR I=1 TO 26:READ VG(I),OU$(I):NEXT:RETURN
3100'* VG(VA)
3101  DATA  1,"ADC_ADD_AND_"
3102  DATA  4,"BIT_"
3103  DATA  5,"CALLCCF_CP__CPD_CPDRCPI_CPIRCPL_"
3104  DATA 13,"DAA_DEC_DI__DJNZ"
3105  DATA 17,"EI__EX__EXX_"
3106  DATA  0,""  :'F
3107  DATA  0,""  :'G
3108  DATA 20,"HALT"
3109  DATA 21,"IM__IN__INC_IND_INDRINI_INIR"
3110  DATA 28,"JP__JR__"
3111  DATA  0,""  :'K
3112  DATA 30,"LD__LDD_LDDRLDI_LDIR"
3113  DATA  0,""  :'M
3114  DATA 35,"NEG_NOP_" 
3115  DATA 37,"OR__OTDROUIROUT_OUTDOUTI"
3116  DATA 43,"POP_PUSH"
3117  DATA  0,""  :'Q
3118  DATA 45,"RES_RET_RETIRETNRL__RLA_RLC_RLCARLD_RR__RRA_RRC_RRCARRD_RST_"
3119  DATA 60,"SBC_SCF_SET_SLA_SRA_SRL_SUB_"
3120  DATA  0,""  :'T
3121  DATA  0,""  :'U
3122  DATA  0,""  :'V
3123  DATA  0,""  :'W
3124  DATA 67,"XOR_"
3125  DATA  0,""  :'Y
3126  DATA  0,""  :'Z

3189'-------- for Debug
3190  IF ZG>1 THEN print "VK,VZ,VW:";VK;", ";right$("0"+hex$(VZ),2);"H, ";right$("000"+hex$(VW),4);"H, VE:";VE
3192  RETURN

3200'*Asm_Jmp: ---- Except LD Command
3210  VK=VQ(VR)
3219'*Asm_Lp:
3220  GOSUB 3380:VI=1:VE=0
3230  ON VZ+1 GOSUB 300,320,330,340,350,360,370,380,390,400,410,420,430,440,450,460,470,480,490,500,510,520,530,540,550,560,570,580,590,600,610,620,310
3235  GOSUB 3190
3240  IF VE=0 THEN V(0)=VI:RETURN
3250  IF VE=3 AND VF>0 THEN VK=VK+1:GOTO 3220 ELSE RETURN

3300'*AsLd_Jp: ----- LD Command 
3310  OT$=O2$:GOSUB 630:IF VB>=0 THEN VK=57 ELSE IF LEFT$(O2$,1)="(" THEN VK=64 ELSE VK=71
3319'*AsLd_Lp:
3320  GOSUB 3380:VI=1:VE=0
3330  ON VZ-32 GOSUB 710,720,730,740,750,760,770,780,790,800,810,820,830,840,850,860,870,880,890,900,910,920,930  
3335  GOSUB 3190
3340  IF VE=0 THEN V(0)=VI:RETURN
3345  IF VE>10 THEN VE=VE-10:RETURN
3350  IF VE=3 AND VF>0 THEN VK=VK+1:GOTO 3320 ELSE RETURN

3359'*Init_AsTbl:
3360  RESTORE 3400:FOR I=1 TO 67:READ VQ(I):NEXT:RETURN
3379'*Asm_Sep:
3380  VW=VT(VK):VM=FNL(VW):VH=FNH(VW):VF=VH AND &H80:VZ=VH AND &H3F:RETURN 
3399'* VQ(VR)
3400  DATA   1,  5, 10, 13, 15, 17, 18, 21, 22, 23, 24, 25, 26, 27, 31, 32, 33, 34, 38, 39
3410  DATA  40, 41, 43, 47, 48, 49, 50, 51, 55, 57, 80, 81, 82, 83, 84, 85, 86, 89, 90, 91
3420  DATA  93, 94, 95, 97, 99,101,103,104,105,107,108,110,111,112,114,115,117,118,119,120
3430  DATA 124,125,127,129,131,133,136

3500'*Init_OpTbl:
3510  RESTORE 3601:FOR VK=1 TO 138:READ VT(VK):NEXT:RETURN
3600'*  VT(VK)                                  VR VK
3601  DATA &H8388,&H948E,&H85CE,&H484E        :' 1, 1 ADC  A.sss/A,(xy+d)/A,n/HL,rp
3602  DATA &H8380,&H9486,&H85C6,&H8809,&H1109 :' 2, 5 ADD  A,sss/A,(xy+d)/A,n/HL,rp/rx,rx
3603  DATA &H82A0,&H93A6,&H04D6               :' 3, 10 AND  sss/(xy+d)/n
3604  DATA &H9940,&H5A46                      :' 4, 13 BIT  b.sss/b,(xy+d)
3605  DATA &H8CC4,&H09CD                      :' 5, 15 CALL cc.aa/aa
3606  DATA &H003F                             :' 6, 17 CCF  *
3607  DATA &H82B8,&H93BE,&H04FE               :' 7, 18 CP   ss/(xy+d)/n
3608  DATA &H40A9                             :' 8, 21 CPD  *
3609  DATA &H40B9                             :' 9, 22 CPDR *
3610  DATA &H40A1                             :'10, 23 CPI  *
3611  DATA &H40B1                             :'11, 24 CPIR *
3612  DATA &H002F                             :'12, 25 CPL  *
3613  DATA &H0027                             :'13, 26 DAA  *
3614  DATA &H8105,&H860B,&H9335,&H102B        :'14, 27 DEC  ddd/rp/(xy+d)/xy
3615  DATA &H00F3                             :'15, 31 DI   *
3616  DATA &H0A10                             :'16, 32 DJNZ *
3617  DATA &H00FB                             :'17, 33 EI   *
3618  DATA &H9CEB,&H9D08,&H9EE3,&H1FE3        :'18, 34 EX   DE,HL/AF,AF'/(SP)HL/(SP),xy
3619  DATA &H00D9                             :'19, 38 EXX  *
3620  DATA &H0076                             :'20, 39 HALT *
3621  DATA &H5B44                             :'21, 40 IM   m
3622  DATA &HD540,&H16DB                      :'22, 41 IN   r,(C)/A,(n)
3623  DATA &H8104,&H8603,&H9334,&H1023        :'23, 43 INC  ddd/rp/(xy+d)/xy
3624  DATA &H40AA                             :'24, 47 IND  *
3625  DATA &H40BA                             :'25, 48 INDR *
3626  DATA &H40A2                             :'26, 49 INI  *
3627  DATA &H40B2                             :'27, 50 INIR *
3628  DATA &H8CC2,&H8FE9,&H92E9,&H09C3        :'28, 51 JP   cc,aa/(HL)/(xy)/aa
3629  DATA &H8D20,&H0A18                      :'29, 55 JR   cc,e/e
3630  DATA &HA140,&HF457,&HF55F               :'30, 57 LD   ddd,sss/A,I/A,R/
3631  DATA &HA40A,&HA346,&HA53A,&H2206        :'    60 LD   A,(bd)/dd,(xy)/A,(aa)/dd,n
3632  DATA &HAB02                             :'(   64 LD   (bd),A/
3633  DATA &HB270,&HB336                      :'    65 LD   (xy),sss/(xy),n/
3634  DATA &HAC32,&HAD22,&HAE43,&H2F22        :'    67 LD   (aa),A/(aa),HL/(aa),pp/(aa),xy
3635  DATA &HA9F9,&HAAF9,&HA601,&HA82A,&HA74B :'*   71 LD   SP,HL/SP,xy/rp,nn/HL,(aa)/pp,(aa)/
3636  DATA &HB12A,&HB021                      :'    76 LD   xy,(aa)/xy,nn/
3637  DATA &HF647,&H774F                      :'    78 LD   I,A/R,A
3638  DATA &H40A8                             :'31, 80 LDD  *
3639  DATA &H40B8                             :'32, 81 LDDR *
3640  DATA &H40A0                             :'33, 82 LDI  *
3641  DATA &H40B0                             :'34, 83 LDIR *
3642  DATA &H4044                             :'35, 84 NEG  *
3643  DATA &H0000                             :'36, 85 NOP  *
3644  DATA &H82B0,&H93B6,&H04F6               :'37, 86 OR   sss/(xy+d)/n
3645  DATA &H40BB                             :'38, 89 OTDR *
3646  DATA &H40B3                             :'39, 90 OUIR *
3647  DATA &HD741,&H18D3                      :'40, 91 OUT  (C),sss/(n),A
3648  DATA &H40AB                             :'41, 93 OUTD *
3649  DATA &H40A3                             :'42, 94 OUTI *
3650  DATA &H87C1,&H10E1                      :'43, 95 POP  pp/xy
3651  DATA &H87C5,&H10E5                      :'44, 97 PUSH pp/xy
3652  DATA &H9980,&H5A86                      :'45, 99 RES  b,r/b,(xy+d)
3653  DATA &H8BC0,&H00C9                      :'46,101 RET  cc/*
3654  DATA &H404D                             :'47,103 RETI *
3655  DATA &H4045                             :'48,104 RETN *
3656  DATA &HA010,&H5316                      :'49,105 RL   r/(xy+d)
3657  DATA &H0017                             :'50,107 RLA  *
3658  DATA &HA000,&H5306                      :'51,108 RLC  r/(xy+d)
3659  DATA &H0007                             :'52,110 RLCA *
3660  DATA &H406F                             :'53,111 RLD  *
3661  DATA &HA018,&H531E                      :'54,112 RR   r/(xy+d)
3662  DATA &H001F                             :'55,114 RRA  *
3663  DATA &HA008,&H530E                      :'56,115 RRC  r/(xy+d)
3664  DATA &H000F                             :'57,117 RRCA *
3665  DATA &H4067                             :'58,118 RRD  *
3666  DATA &H0EC7                             :'59,119 RST  nH
3667  DATA &H8398,&H939E,&H85DE,&H4842        :'60,120 SBC  A,sss/A,(xy+d)/A,n/HL,rp
3668  DATA &H0037                             :'61,124 SCF  *
3669  DATA &H99C0,&H5AC6                      :'62,125 SET  n,r/n.(xy+d)
3670  DATA &HA020,&H5326                      :'63,127 SLA  r/(xy+d)
3671  DATA &HA028,&H532E                      :'64,129 SRA  r/(xy+d)
3672  DATA &HA038,&H533E                      :'65,131 SRL  r/(xy+d)
3673  DATA &H8290,&H9396,&H04E6               :'66,133 SUB  sss/(xy+d)/n
3674  DATA &H82A8,&H939E,&H04EE               :'67,136 XOR  sss/(xy+d)/n


ガラケーはいつまで使えるの? マイナポイント PasooconMiniPC8001(15)〜1ラインアセンブラ