Vol.790 28.Feb.2020

CDブート〜外部メディアから起動 PasoconMiniPC8001(7)〜I/OとPCG

C CDブート 〜CD/DVD・USBからパソコンを起動する

by fjk

 パソコンにCD/DVDやUSBをセットして電源を投入しても、CDやUSBから起動できないことがある。マザーボードのBIOSには「レガーシー(Legacy BIOS)」と「UEFI(Unifiesd Extensible Firmware Interface)」(EFIの強化版)の2種類があり、BIOSの種類によって起動設定が異なる。

Legacy EFI UEFI
システム 16ビット 32ビット 64ビット
ファイル形式 MBR GPT GPT
対応Windows Windows32/64 XP64bit以降 Vista64SP以降
メモリ 最大1Mb 最大4Gb 最大256Tb
HDDディスク 最大2Tb 最大8Zb 最大8Z〈ゼタ〉b
Pパーテション最大4個 最大128個 最大128個
設定画面 CGI GUI GUI

※ BIOSの確認方法
@「windows+Rキー」を押し、[ファイル名を指定して実行]を開く
A「msinfo32」と入力し、OKボタンをクリック
B[システムの情報]画面の[BIOSモード]で確認できる(「UEFI」か「BIOS」)。
コマンド入力画面 システムの情報画面

 BIOSがUEFIの場合、UEFI起動ドライバー対応デバイスであれば、自動的に認識され、ブートが可能となる場合があるが、非対応の場合はCSMの設定を以下のように変更する必要がある

起動CSM設定画面 セキュアブート設定画面 再起動後、CD起動が選択可


P PasoconMiniPC8001(7) 〜入出力(I/O)とPCG

by fjk

 PasoconminiPC8001でI/Oの詳細については ver1.1.1以降のAPPENDIXに紹介されている。特に、PCGおよびSOUNDは機械語サンプルプログラムも付いているので、参考になる。ここでは、使用頻度が多いと思われる、キー入力とPCGのグラフィックについて紹介する。
 なお、PCGを使うには、f9から[PCG8100]のSWITCHをONにしておくこと。

<I/O(番地)> <機 能>
PCG(00−02): ユーザ文字パターンを自由に設定できる。
Timer(0C−0F): TIME$関数などで使用。
Keyboad(00−09): ダブルキータッチなどをチェックするのに使えそう。
USRT(20−21): 外部シリアル入出力ができないのでCMTのみ。
CRTC(50−51): 直接アクセスも可能だが、結構面倒(上級者向き)。
DMAC(84−88): 画面表示との同期はminiPC8001で必要ない。
Appendix PCG Sound(PCG)
●キー入力
通常キー入力はINPUT$関数などで得られるが、INP関数を使うと、押されているキーのハード情報が得られる。これによりshift+など、複数キーが同時に押されている場合も確認できる。
実行速度が遅く、キーを押してもすぐ結果が表示されないが、どのキーを押すとどんなデータが得られるかが判る。
※(注)INPUT$関数では、「{」は65H:"e"、「}」は20H:Space、「|」は29H:")"、が入力となる(INP関数ではSHIFT+で区別できる)。
   さらに、フルキーでは反応しないキーがあるなど、ホームページの説明と異なるので注意。


ktst.cmt(zip)
100 DIM K(9),M(7)
110 FOR I=0 TO 7: READ M(I): NEXT
120 DATA &H80,&H40,&H20,&H10,&H08,&H04,&H20,&H10
130 WIDTH 40,25: PRINT CHR$(12)
140 LOCATE 3,1:FOR I=0 TO 7: PRINT HEX$(7-I);:NEXT
150 K$=INKEY$: IF K$<>"" THEN A=ASC(K$)
160 CC=0
170 FOR J=0 TO 9
180 IF K(J)=INP(J) THEN 240 ELSE K(J)=INP(J)
190 LOCATE 0,J-2: CC=1
200 B$ = RIGHT$("0"+HEX$(J),2)+":........"
210 FOR I=0 TO 7
220 IF K(J) AND M(I) THEN B$=B$+"." ELSE B$=B$+"O"
230 NEXT I: PRINT B$;" ";RIGHT$("0"+HEX$(K(J)),2)
240 NEXT
250 IF K$="" AND CC>0 THEN A=0
260 LOCATE 3,13: PRINT "(";RIGHT$("0"+HEX$(A),2);")";
270 IF A<&H20 THEN PRINT " " ELSE PRINT K$
280 GOTO 150
●PCGの使い方
@ 書き込みたいバイトデータを「00H」番地にOUT命令で書き込む。
A 書き込みたいデータのアドレスを「01H」「02H」にOUT命令で書き込む。
B データ転送クロック(02HのBit4)を「0→1」にすると、データが書き込まれる。
【PCGに1バイトを書込】
  CD−>AD
【8byteデータをPCGに】
  CC(CP,7)−>AD
 OUT  0,CD  
 A = AD OR &H0100 
 AL = A AND &HFF
 AH = A / 256
 OUT 1,AL
 OUT 2,AH
 AH = AH AND &HEF
 OUT 2,AH
 RETURN
 AD = CG * 8
 FOR I=0 TO 7
   OUT  0, CC(CP,I) 
   A = AD+I OR &H0100 
   AL= A AND &HFF
   AH = A / 256
   OUT 1,AL
   OUT 2,AH
   AH = AH AND &HEF
   OUT 2,AH
 NEXT
 RETURN
AD:PCGアドレス
CD:データ
02H/b4:ストローブ
b4:0→1→0
(0に戻しておくこと)
CGはPCGの文字番号
(0〜127)
CPはパターンデータ
配列の要素番号
【PCGのアドレスマップ】
PCGパターンコピー前 PCGパターンコピー後
pcgtst.cmt(zip)
10  '==== PCG Patern Test
100  DEFINT A-Z
110  WIDTH 40,25
120  DIM CC(3,7)
130  GOSUB 10000        :' CG Data Read Sub.
150  INPUT "1:1byte, 2:1char, 3:ROM->PCG 4:Print PCG";S
160  ON S GOTO 200,300,400,500
170  GOTO 150
200 '---
210  INPUT "PCG-Adr(0-1023)";AD
220  input "Data(8bit)";CD
230  GOSUB 1010
240  GOTO 150
300 '---
310  INPUT "Char Code(0-127)";CG
320  INPUT "CG Data(0-3)";CP
330  GOSUB 1210
340  GOTO 150
400 '---
410  INPUT "Copy Char Code(0-127)";CG
420  IF CG<0 OR CG>127 THEN 450
430  GOSUB 1510
440  GOTO 150
450  FOR CG=0 TO 127
460   GOSUB 1510
470  NEXT
480  GOTO 150
500 '---
510  PRINT
520  GOSUB 2000: PRINT
530  GOTO 150
1000 '--- 1 Byte send to PGC Sub.(CD->AD)
1010  OUT 0,CB 
1020 '
1030  AL = AD AND &HFF
1040  AH = (AD/256) OR MS
1050  OUT 1,AL
1060  OUT 2,AH
1070  AH = AH AND &HCF
1080  OUT 2,AH
1090  RETURN
1200 '--- 1 Char Data send PCG Sub.
1210  A = CG*8
1220  MS = &H10
1230  FOR I=0 TO 7
1240    CB = CC(CP,I)
1250    AD = A+I
1260    GOSUB 1010 
1270  NEXT
1280  RETURN
1500 '--- Copy CG-data to PCG
1510  A = CG*8
1520  MS = &H30
1530  FOR I=0 TO 7
1540    AD = A+I
1550    GOSUB 1030 
1560  NEXT
1570  RETURN
2000 '-- Print Graphic Char Sub.
2010  FOR J=0 TO 7
2020   FOR I=0 TO 15
2030    PRINT CHR$(128+J*16+I);
2040   NEXT I
2050   PRINT
2060  NEXT J
2070  RETURN

10000 '--- CG Data Read Sub.
10010 RESTORE 10110
10020 FOR J=0 TO 3
10030  FOR I=0 TO 7
10040   READ CC(J,I)
10050  NEXT I
10060 NEXT J
10070 PRINT
10080 RETURN

10100 '--- CG Data
10110 DATA &HFE         :'11111110b
10120 DATA &H28         :'00101000b
10130 DATA &H28         :'00101000b
10140 DATA &H48         :'01001000b
10150 DATA &H48         :'01001000b
10160 DATA &H8A         :'10001010b
10170 DATA &H84         :'10000100b
10180 DATA &H00         :'00000000b
10200 '
10210 DATA &H0C         :'00001100b
10220 DATA &H12         :'00010010b
10230 DATA &H22         :'00100010b
10240 DATA &H24         :'00100100b
10250 DATA &H58         :'01011000b
10260 DATA &H40         :'01000000b
10270 DATA &H80         :'10000000b
10280 DATA &H00         :'00000000b
10300 '
10310 DATA &H00         :'00000000b
10320 DATA &H00         :'00000000b
10330 DATA &H3A         :'00111010b
10340 DATA &H44         :'01000100b
10350 DATA &H84         :'10000100b
10360 DATA &H8A         :'10001010b
10370 DATA &H72         :'01110010b
10380 DATA &H00         :'00000000b
10400 '
10410 DATA &HFC         :'11111100b
10420 DATA &H42         :'01000010b
10430 DATA &H20         :'00100000b
10440 DATA &H10         :'00010000b
10450 DATA &H20         :'00100000b
10460 DATA &H42         :'01000010b
10470 DATA &HFC         :'11111100b
10480 DATA &H00         :'00000000b


CDブート〜外部メディアから起動 PasoconMiniPC8001(7)〜I/OとPCG