Vol.796 22.May.2020

EXCELで16進数を任意桁数で表示 PasoconMiniPC8001(13)〜拡張メモリ SDカードの規格 歩行マシン

E EXCELで16進数を任意桁数で表示

by fjk

 EXCELで10進数を16進数に変換するにはDECN2HEX関数が使えますが、16進数の表示桁数も任意に指定したいが、16進数の表示書式は「セルの書式」では指定することができない。桁数を指定するには関数の第2引数で指定
  書式:DEC2HEX(セル、桁数)
または、「関数の挿入」で関数名を選択しダブルクリックすると「関数の引数」ダイヤログが表示されるので、数値と共に「桁数」を設定すると、任意の桁数で16進数が表示できる。

関数の挿入 関数の引数 2桁で16進数表示


P PasooconMiniPC8001(13) 〜拡張メモリ

by fjk

 本物のPC8001は6000H〜7FFFHには出荷時にROMが無く、後から24pinのmaskROMを刺せるようになっている。miniPC8001では、このメモリエリアはRAMになっており、書込や読込ができる。RAMなので、電源を落とすとその内容は失われてしまうが、BASICからこのエリアに機械語を書き込む方式であれば、十分に活用できる。(モニタで読み込んでも良いが・・)
 なお、ROM-BASICエリア(0000H〜5FFFH)にデータを書き込んでも変更されない(ROMですから当然ですが・・、MONコマンドで確認すみ)。
 PC8001はパソコンの初期設定時に、6000Hと6001H番地をチェックし、6000Hから41H(”A”)、42H(”B”)が書き込まれていると、6002Hにジャンプ(CALL)する。また、MONコマンド実行時に、7FFFH番地が55H(”U”)になっていると7FFCHにジャンプする。
 さて、abc794の「MMLエディッタ」では、メモリが不足しそうになったので、機械語を拡張メモリ部で使うことにすれば、メモリ不足が少し緩和されそうである。幸いabc794の機械語はリロケータブルプログラムでメモリ上のどこでも使えるので、6100Hからのプログラムに変更したところ、問題なく動作した

PC8001のメモリマップ

<変更前> <変更後>
・・・
 50   CLEAR 9000,&HE7FF: DEFINT A-Z
・・・
200  DEF USR0 = &HE800              :'Sound Init
210  DEF USR1 = &HE80C              :'Sound Clear
220  DEF USR2 = &HE81A              :'Sound Off
230  DEF USR3 = &HE820              :'Ch0 Play
240  DEF USR4 = &HE824              :'Ch1 Play
250  DEF USR5 = &HE828              :'Ch2 Play
260  DEF USR6 = &HE831              :'Sound On
270  DEF USR7 = &HE837              :'Copy Char to PCG
300 '--- Init Param.
310  IF PEEK(&HE800)=62 THEN 340    :'Check "3E"

9000 '=== Mashin & Sound Data Init. ===
9010 RESTORE 9030: A=&HE800
9020 FOR I=0 TO 80: READ B: POKE A+I,B: NEXT: RETURN
9030 '--- Sound Init.    *S_INI:   $E800H
9040 DATA &H3E,&H36      :'E800  LD   A,00110110B ;Mode3
9050 DATA &HD3,&H0F      :'E802  OUT  (0FH),A     ;Ch0
9060 DATA &H3E,&H76      :'E804  LD   A,01110110B
9070 DATA &HD3,&H0F      :'E806  OUT  (0FH),A     ;Ch1
9080 DATA &H3E,&HB6      :'E808  LD   A,10110110B
9090 DATA &HD3,&H0F      :'E80A  OUT  (0FH),A     ;Ch2
9100 DATA &H3E,&H01      :'E80C  LD   A,01H
9110 DATA &HD3,&H0C      :'E80E  OUT  (0CH),A     ;Ch0
9120 DATA &HD3,&H0C      :'E810  OUT  (0CH),A
9130 DATA &HD3,&H0D      :'E812  OUT  (0DH),A     ;Ch1
9140 DATA &HD3,&H0D      :'E814  OUT  (0DH),A
9150 DATA &HD3,&H0E      :'E816  OUT  (0EH),A     ;Ch2
9160 DATA &HD3,&H0E      :'E818  OUT  (0EH),A
・・・

9400 DATA &H7C           :'E840  LD   A,H
9405 DATA &HF6,&H30      :'E841  OR   30H
9410 DATA &HD3,&H02      :'E843  OUT  (02H),A
9415 DATA &HE6,&HCF      :'E845  AND  0CFH
9420 DATA &HD3,&H02      :'E847  OUT  (02H),A
9425 DATA &H23           :'E849  INC  HL
9430 DATA &H10,&HF1      :'E84A  DJNZ 0E03CH
9435 DATA &H0D           :'E84C  DEC  C
9440 DATA &H20,&HEE      :'E84D  JR   NZ,0E03CH
・・・
 50  DEFINT A-Z
・・・
200  DEF USR0 = &H6100              :'Sound Init
210  DEF USR1 = &H610C              :'Sound Clear
220  DEF USR2 = &H611A              :'Sound Off
230  DEF USR3 = &H6120              :'Ch0 Play
240  DEF USR4 = &H6124              :'Ch1 Play
250  DEF USR5 = &H6128              :'Ch2 Play
260  DEF USR6 = &H6131              :'Sound On
270  DEF USR7 = &H6137              :'Copy Char to PCG
300 '--- Init Param.
310  IF PEEK(&H6100)=62 THEN 340    :'Check "3E"

9000 '=== Mashin & Sound Data Init. ===
9010 RESTORE 9030: A=&H6100
9020 FOR I=0 TO 80: READ B: POKE A+I,B: NEXT: RETURN
9030 '--- Sound Init.    *S_INI:   $6100H
9040 DATA &H3E,&H36      :'6100  LD   A,00110110B ;Mode3
9050 DATA &HD3,&H0F      :'6102  OUT  (0FH),A     ;Ch0
9060 DATA &H3E,&H76      :'6104  LD   A,01110110B
9070 DATA &HD3,&H0F      :'6106  OUT  (0FH),A     ;Ch1
9080 DATA &H3E,&HB6      :'6108  LD   A,10110110B
9090 DATA &HD3,&H0F      :'610A  OUT  (0FH),A     ;Ch2
9100 DATA &H3E,&H01      :'610C  LD   A,01H
9110 DATA &HD3,&H0C      :'610E  OUT  (0CH),A     ;Ch0
9120 DATA &HD3,&H0C      :'6110  OUT  (0CH),A
9130 DATA &HD3,&H0D      :'6112  OUT  (0DH),A     ;Ch1
9140 DATA &HD3,&H0D      :'6114  OUT  (0DH),A
9150 DATA &HD3,&H0E      :'6116  OUT  (0EH),A     ;Ch2
9160 DATA &HD3,&H0E      :'6118  OUT  (0EH),A
・・・         ( この間 E8XX −> 61XX に変更 )

9400 DATA &H7C           :'6140  LD   A,H
9405 DATA &HF6,&H30      :'6141  OR   30H
9410 DATA &HD3,&H02      :'6143  OUT  (02H),A
9415 DATA &HE6,&HCF      :'6145  AND  0CFH
9420 DATA &HD3,&H02      :'6147  OUT  (02H),A
9425 DATA &H23           :'6149  INC  HL
9430 DATA &H10,&HF1      :'614A  DJNZ 0E03CH
9435 DATA &H0D           :'614C  DEC  C
9440 DATA &H20,&HEE      :'614D  JR   NZ,0E03CH

★N-BASICのプチヒント(LOCATEのバグ?)
 画面設定を横80文字カラー画面(WIDTH 80)にセットし、よく見ると画面の左端に空白があることがわかる。すなわち横の文字数は79文字しか表示できない。白黒モード(CONSOLE,,,0)ではちゃんと80文字表示できる。この現象はLOCATE文でも同じで、画面の左端に文字を表示することができない。このため、abc794のMMLエディタでは白黒モードに設定した。
 画面の表示データ(VRAM)はF300H番地(画面の左上端)から始まり、カラーモード(CONSOLE,,,1)でF300H番地にデータを書き込んでみると、ちゃんと左上端に文字が表示される。すなわち、VRAMエリアにデータをダイレクトで書き込んでやれば、カラー80文字表示も可能である。しかし、色などの修飾も設定し直す必要があり、面倒ですが・・。

モノクロだと左端まで文字表示 カラーだと左端に文字表示されない
(POKE文で書き込むと・・’P‘を表示)


S SDカードの規格

by fjk

 (micro)SDカードを使う場面が多くなってきていますが、SDカードの規格を知らないで購入すると、思った性能が得られない場合がある。そこで、現在のSDカードの規格をまとめてみると、

1.最大保存容量
SD(〜2GB)、SDHC(4GB〜32GB)、SDXC(64GB〜2TB)
2.スピードクラス
@旧スピードクラス(SC):C文字中に数字、[2,4,6,10]MB/S
A現在のスピードクラス(UHS):U文字の中に数字、[1,3]×10MB/S 最大転送速度:UHS-T(104MB/s)またはUHS-U(312MB/s、端子が2列)
3.アプリケーションパフォーマンスクラス 【ゲーム向き】
アプリの実行やアプリのデータ保存に最低必要な転送速度を定義したもので、主にスマートフォンやタブレットのアプリ向けに策定された規格。
 A1:ランダムリード 1500 IOPS・ランダムライト 500 IOPS・シーケンシャル10MB/s
 A2:ランダムリード 4000 IOPS・ランダムライト 2000 IOPS・シーケンシャル10MB/s
4.ビデオスピードクラス 【動画撮影向き】
1秒間に読み書きできるデータの最低保証速度。4K動画を撮影する場合はV30(30MB/秒)以上、8K動画ならV90が必要。UHSでは、30MB/秒(U3)までしか対応していないが、ビデオスピードクラスは、60MB/秒(V60)、90MB/秒(V90)の最低保証速度のものがある。


W 歩行マシン

by fjk

 「スティホーム」と外出自粛が続く日々ですが、今年の正月に、冬の運動不足解消のためとして、ALINCO(アルインコ) ウォーキングマシン「電動ウォーカーAFW5014」(\19,998)をAmazonで購入しました。次世代機の新発売時期で少し安くなっていたようです。設定できる速度は0.8~5.0km/hでスピード・時間・距離・カロリーのみ表示できる機能が少ないマシンです。未使用時には折り畳んでコンパクト(55x30x104cm)で場所をとりません。
 毎日30分歩行を目安に使っていますが、ステイホームを要請されていた今春には、ジャストバイだったようです。近所の方も、我が家のマシンを見て、直ぐショップに走られました。。
電動ウォーカーAFW5014 マシンの表示板


EXCELで16進数を任意桁数で表示 PasoconMiniPC8001(13)〜拡張メモリ SDカードの規格 歩行マシン