MSX漢字RAMをカートリッジスロットに挿し、電源を入れる。スーパーキャパシタは3秒もあれば十分に充電される。
MSX側の電源電圧が5.13Vのとき、RAMの電源電圧は3秒後で4.80V、30秒で4.90V、5.5分で4.95Vと計測された。
ハードウェアがちゃんと動作しているかは、以下の作業で確認できる。
なお、ブラウザの表示フォントによっては、半角「¥」が半角「\」と表示されるので注意。メモ帳などにコピペすれば半角「¥」になる。
- BASIC上で、以下の一文を実行する。コピペして行番号をつけて、BASICプログラムとして実行しても構わない。
ka=1*96+32:out &hd8,ka and 63:out &hd9,ka\64:out &hd9,ka\64:for i=0 to 15:out &hd9,val("&h"+mid$("00402010080402011122334455667788",i*2+1,2)):next - リセット、または電源を入れなおして再起動する。I/OポートF5Hを使う反則技もあるけど……
- BASIC上で、以下の一文を実行する。こちらもプログラム化しても構わない。
ka=1*96+32:out &hd8,ka and 63:out &hd9,ka\64:for i=0 to 15:?hex$(inp(&hd9))" ";:next
0 40 20 10 8 4 2 1 11 22 33 44 55 66 77 88
「3.」での表示結果が上記の通りであれば、正常に動作していることになる。
MSXシステムは起動時、内蔵漢字ROMを無効化した上で、漢字ROMポートで特定のフォントを確認する。それが上で書き込んだデータ群の前半になる。
正しく書き込みができていれば、「漢字RAM」が漢字ROMとして認識、有効化され、後半のデータも書き込んだとおりに読み出せることになる。
もし「3.」の表示内容後半が「0」続きなど異なっていたら、漢字RAMは漢字ROMとして認識されていない。書き込みができてないので、工作物を見直す必要がある。
さて、仏が彫れたら魂を入れる。
漢字RAMにフォントが収まるまでの手順は、以下のようになる。OS標準搭載のツールを使い、視覚的に処理が進むよう考慮している。
なお、各処理にはPowerShellというスクリプト環境を使っている。Windows7で標準搭載、XP以降ならインストールすれば使えるらしい。
PowerShellは、初期状態ではスクリプトが実行できない。「PowerShell 実行できない」などでググると、解決法がたくさん出てくる。
セキュリティポリシーの変更は、PowerShellまたはPowerShell ISEを管理者権限で起動する必要がある。これを忘れると何もできないので注意。
また、使用するスクリプト(*.ps1)やデータ(*.txt)は、すべてプレーンテキストになっている。メモ帳(notepad.exe)などにコピペして保存すればよいので、ファイル名とその内容を稿末に羅列しておく。
まずはフォントを準備する。書き込むフォントは、PC上から持ってくる。
OS付属のフォントでもいいし、フリーフォントを探してきてもいい。もちろん自分で描いてもいい。Windowsにインストールして使える状態にしておく。
本気で自分で描く場合は、「3.」から始めて、コピペの代わりに画像に描きこんでいってもいい。
今回は、いつもお世話になっている「あずきフォント」を使わせてもらった。*.ttfファイルを右クリックして「インストール」を選べばOK。
なお、文字間隔が異なるプロポーショナルなタイプは、この用途には適さない。
区点コード一覧の作成は、kutenList.ps1で行う。
ps1ファイルを右クリックして、「PowerShellで実行」などして実行すると、kuten1.txtとkuten2.txtが作成される。内容はそれぞれ、第一水準と第二水準の、シフトJISによる全文字リストになる。
これらファイルは、メモ帳で開けるが保存してはいけない。扱えない文字が勝手に変更されてしまう。
kuten1.txt、kuten2.txtを画像データ化する。これにはペイント(mspaint.exe)を使う。
ペイントを起動したら、プロパティを開き、色は白黒、幅は1536ピクセル、高さは1000ピクセルに設定する。
文字入力窓を画像一杯に広げておく。フォントは「あずきフォント」、サイズは12ポイント、太字などの装飾は無しに設定。
メモ帳で、kuten1.txtを開く。[Ctrl]+[A]で全て選択、[Ctrl]+[C]でコピー。……したら、閉じていい。
ペイントの文字入力窓内で、貼り付け([Ctrl]+[V])。これで第一水準の文字全てが表示される。
再びプロパティを開き、色はカラーに設定。できた画像をkuten1.pngとして保存する。スクリプトの都合上、カラー設定は必須。
第二水準についても同様にし、kuten2.txtからkuten2.pngを作成する。
標準的には、左上から16×20pxずつを一文字として切り出し、上3px下1pxを捨てている。他のフォントを使う場合にはこれに合わせる。
合わない場合には、後処理で都合をつけることも可能。最上行が0区、右に向かって0点から95点、の順になる。
いずれの水準でも、左右1文字ずつの空きがある。これは0点、95点に相当する。96進数の漢字アドレス(漢字番号)と94進数の区点コードとの狭間で生まれた空隙。メモリ上には存在するが文字コードが無い場所になる。
第一水準の最上行も空いている。ここは0区に相当し、1区1点から始まる区点コードには無い場所。MSXでは半角英数などの置き場になっている。
画像データの調整は、kutenFix.ps1を使う。
作成してきた、kuten1.pngおよびkuten2.pngに特定フォントを追加し、2値化する。その際、kutenH.txtというデータファイルも使う。
kutenH.txtは、MSX用の半角その他独自フォントのデータ。漢字ROMとしてのフラグデータも含む。
MSXの漢字ROM仕様は、JIS78などとも呼ばれるJIS X 0208準拠。その後、追加変更がいろいろあったので、現行コードとは2区の大半や8区以降が大きく異なる。そのあたりをMSX仕様にする。
これまでの手順どおり進めれば中間色は存在しないのだが、kuten1.txtなどを貼り付ける際に「カラー」画像だと発生してしまう。
また、他フォントを使用する場合は、中間色から変換した方が綺麗にいく場合もあるかもしれない。
スレッショルドを定め、ピクセルの輝度と比較し、白黒2値化を行っている。
輝度の計算は、MSX2+で使われたYJK方式に倣い、以下の式で計算している。
Y=(1/8G+1/4R+1/2B)*1.14
スレッショルドの定数は158としてある。kutenFix.ps1を実行すると、kuten1-158.png、kuten2-158.png、というファイルが作られる。
定数を書き換えて実行した場合は、ファイル名の158の部分が変わる。
ここで作成された画像データが、最終的なフォントの形態になる。よく確認し、不満があれば手直しをしておく。
kanji.ps1を使って、漢字RAM用のデータを作る。
ここで使う画像ファイルは、kuten1.pngとkuten2.png。前項で作られたファイルはリネームしておく。
スクリプトを実行すると、フォントの一部を切り出して表示し、データが正しく読めているかの確認を求める。やり直したければ「キャンセル」で中断できる。
位置や大きさの調整でよければ、kanji.ps1内の定数を変更する。根本的にダメなら、前項以前へ戻って、画像の作成をやりなおす。
処理が終わると、kanji.binという255KBのバイナリファイルが作成される。
kanji.binとk-ram.basをフロッピに入れ、MSXにもってくる。
BASIC上で、k-ram.basを実行すると、0区~10区、および16区~84区を一気に書き込む。
10区64点~15区95点に相当する部分は、漢字ROM上に存在しない。
書き込みは、R800高速モードで6秒/区、Z80だと30秒/区ぐらいかかる。
ちなみにここまでのPC上での処理でも、1水準あたり2~3分かかるものがある。
お茶でもしながら、のんびりやっていきたい。
k-ram.basでは、ディスクエラーをすっ飛ばすようにしている。これは拙機で、FDDがたまにDisk offlineを吐くため。換装の不具合か、ハード的な劣化か……
ともかく、ディスクエラーのときは構わずリトライするようにしている。本格的に壊れたときには、壊れたまま延々とアクセスすることになるので、書き込み中はそばに居てあげたい。
書き込みが終了したら、MSXを再起動させる。漢字モードで、独特の文字が表示されれば完遂。
以下に使用するファイルを掲げる。
太字がファイル名、緑色背景がその内容。メモ帳などにコピペして保存すれば使える。
知識ゼロから3日ぐらいで、ネット上のサンプルをかき集めてでっち上げたものがベースになっている。
一貫性がないなど美しくないのはご容赦。
kutenList.ps1
$fn1="kuten1.txt" # 第一水準一覧ファイル名
$fn2="kuten2.txt" # 第二水準一覧ファイル名
[Convert]::ToInt32("ffff",16)
[byte[]]$s1=(0x81..0x9f)+(0xe0..0xfc) # shift-JIS 1文字目の範囲
[byte[]]$s2=(0x40..0x7e)+(0x80..0xfc) # shift-JIS 2文字目の範囲
function getSjis($ku,$ten){
[byte[]]$d=(0,0)
if($ten -eq 95){
$d=(0x0d,0x0a) # CRLF
}elseif(($ku -eq 0) -or ($ten -eq 0)){
$d=(0x81,0x40) # 全角スペース
}else{
$p=($ku-1)*94+($ten-1)
$s1p=[Math]::Floor($p/$s2.length)
$s2p= $p%$s2.length
$d=($s1[$s1p],$s2[$s2p])
}
return $d
}
$d=new-object byte[] (96*48*2) # 配列領域確保
0..47|%{
$ku=$_
[int]$j=$ku/48*100 # 偶数丸め
write-progress "フォントリストの作成" "第一水準は" -PercentComplete $j -CurrentOperation "$j%処理中"
0..95|%{
$ten=$_
$r=getSjis $ku $ten
$d[($ku*96+$ten)*2 ]=$r[0]
$d[($ku*96+$ten)*2+1]=$r[1]
}
}
set-content -path ((pwd).path+"\"+$fn1) -encoding byte -value $d;
$d=new-object byte[] (96*(84-47)*2) # 配列領域確保
48..84|%{
$ku=$_
[int]$j=($ku-48)/(85-48)*100 # 偶数丸め
write-progress "フォントリストの作成" "第二水準は" -PercentComplete $j -CurrentOperation "$j%処理中"
0..95|%{
$ten=$_
$r=getSjis $ku $ten
$d[(($ku-48)*96+$ten)*2 ]=$r[0]
$d[(($ku-48)*96+$ten)*2+1]=$r[1]
}
}
set-content -path ((pwd).path+"\"+$fn2) -encoding byte -value $d
exit
kutenFix.ps1
# 定数
$fnH="kutenH.txt" # 独自hex形式のフォントファイル
$fn1="kuten1.png" # 第一水準フォントを展開した画像(1536x1000)
$fn2="kuten2.png" # 第二水準フォントを展開した画像
$sx=0 # スタートX座標
$sy=3 # スタートY座標
$w=16 # 文字幅
$h=20 # 文字高
$th=158 # 2値化スレッショルド(0..255)
Add-Type -AssemblyName System.Drawing
# 関数定義
function exp_bit($dst,$x,$y,$d){
7..0|%{
$p=[math]::Pow(2,(7-$_))
$dr=255-(($d -band $p)/$p)*255
$col=[System.Drawing.Color]::FromArgb(255,$dr,$dr,$dr)
$dst.SetPixel($x+$_,$y,$col)
}
}
# 出力用オブジェクト生成
$dst_image1 = New-Object System.Drawing.Bitmap((pwd).Path+"\"+$fn1)
$dst_image2 = New-Object System.Drawing.Bitmap((pwd).Path+"\"+$fn2)
# ソースhex読み込み
$src_hex = (Get-Content ((pwd).path+"\"+$fnH)) -as [string[]]
0..($src_hex.length-1)|%{
[int]$j=$_/$src_hex.length*100 # キャストでだいたい四捨五入
write-progress "MSX独自フォント" "書き込み中" -PercentComplete $j -CurrentOperation "$j%"
$L=$src_hex[$_]
$ten=[Convert]::ToInt32($L.substring(2,2),16)
$ku =[Convert]::ToInt32($L.substring(0,2),16)
$x=$sx+$w*$ten
if($ku -lt 48) {
$dst_image = $dst_image1
$y = $sy+$h*$ku
} else {
$dst_image = $dst_image2
$y = $sy+$h*($ku-48)
}
0..7|%{
$d = [Convert]::ToInt32($L.substring($_*2+5+ 0*2,2),16)
exp_bit $dst_image ($x+0) ($y+0+$_) $d
if($L.substring(4,1) -eq ":"){
$d=[Convert]::ToInt32($L.substring($_*2+5+ 8*2,2),16)
exp_bit $dst_image ($x+8) ($y+0+$_) $d
$d=[Convert]::ToInt32($L.substring($_*2+5+16*2,2),16)
exp_bit $dst_image ($x+0) ($y+8+$_) $d
$d=[Convert]::ToInt32($L.substring($_*2+5+24*2,2),16)
exp_bit $dst_image ($x+8) ($y+8+$_) $d
}
}
}
0..(1536-1)|%{
[int]$j=$_/1536*100 # キャストでだいたい四捨五入
write-progress "第一水準" "調整中" -PercentComplete $j -CurrentOperation "$j%"
$x=$_
0..(1000-1)|%{
$r=$dst_image1.GetPixel($x,$_).r
$g=$dst_image1.GetPixel($x,$_).g
$b=$dst_image1.GetPixel($x,$_).b
$y=($g/8+$r/4+$b/2)*1.14
if($y -gt $th){
$dst_image1.SetPixel($x,$_,[System.Drawing.Color]::FromArgb(255,255,255,255))
}else{
$dst_image1.SetPixel($x,$_,[System.Drawing.Color]::FromArgb(255,0,0,0))
}
}
}
# 保存
$dst_image1.Save((pwd).Path + "\" + $fn1.replace(".","-"+[string]$th+"."), [System.Drawing.Imaging.ImageFormat]::Png)
0..(1536-1)|%{
[int]$j=$_/1536*100 # キャストでだいたい四捨五入
write-progress "第二水準" "調整中" -PercentComplete $j -CurrentOperation "$j%"
$x=$_
0..(1000-1)|%{
$r=$dst_image2.GetPixel($x,$_).r
$g=$dst_image2.GetPixel($x,$_).g
$b=$dst_image2.GetPixel($x,$_).b
$y=($g/8+$r/4+$b/2)*1.14
if($y -gt $th){
$dst_image2.SetPixel($x,$_,[System.Drawing.Color]::FromArgb(255,255,255,255))
}else{
$dst_image2.SetPixel($x,$_,[System.Drawing.Color]::FromArgb(255,0,0,0))
}
}
}
# 保存
$dst_image2.Save((pwd).Path + "\" + $fn2.replace(".","-"+[string]$th+"."), [System.Drawing.Imaging.ImageFormat]::Png)
# オブジェクト破棄
$dst_image1.dispose()
$dst_image2.dispose()
exit
kutenH.txt
0120\0040201008040201 MSX漢字ROM第一水準フラグ
535E\01020c37c03b2a2a MSX漢字ROM第二水準フラグ
0000:0000000000000000000000000000000000000000000000000000000000000000 半角英数など
0001:1010101010101010000000000010101010100000101000001010101010000010
0002:44EE444400000000000000000044444400000000000000004488000000000000
0003:0028282C3868282800000000004444442C38682828280000FE444444FE444444
0004:1038549292503018000000000010107C141292925438100092907C12927C1010
0005:0062929494680810000000000044A4A81629294946000000A85010242A4A4A84
0006:00384444442810300000000000609090528A8A844A31000090A040A2928C8C72
0007:1038101000000000000000000010101000000000000000001020000000000000
0008:040810102020202000000000000C10202020202010100804204040402020100C
0009:40201010080808080000000000C02010080808081010204010080808101020C0
000A:0000000010925438000000000000008238549210000000004428FE2844820000
000B:00000000101010FE00000000000000101010100000000000101010FE10101010
000C:0000000000000000000000000000000000000000101010200000001038181060
000D:000000000000007C00000000000000000000000000000000000000FE00000000
000E:0000000000000000000000000000000000000000202000000000000000006060
000F:0202020404080810000000000002020410202040408080000408081010202040
0010:0018242442424242000000000018244242424242242418004242424224180000
0011:0008182808080808000000000008182808080808080808000808080808080000
0012:001824424242020400000000001824420408102040407E0042041820407E0000
0013:0018244202020418000000000038440204020242422418000418040244380000
0014:000C0C141424242400000000000C14144444447E040404002424447E04040000
0015:007C40404040586400000000007C404042020202024438005864020244380000
0016:001824424040586400000000001C224042424242422418005864424224180000
0017:007E42420404080800000000007E424210101010101010000408081010100000
0018:0018244242422418000000000018244224424242422418002418244224180000
0019:00182442424242420000000000182442261A02024224180042261A0244380000
001A:0000000000181800000000000000003000000000181800003000000030300000
001B:0000000000181800000000000000003000000000181808103000000030301020
001C:0000000408102040000000000000000420100804000000000810204020100804
001D:000000000000FE00000000000000000000FE00000000000000FE000000FE0000
001E:0000004020100804000000000000004008102040000000002010080408102040
001F:0018244202020408000000000078848408101000101000008408102020002020
0020:003844829AAAAAAA00000000007C8282AAAA9680443800000202728A8A8A8A7C
0021:001010282828444400000000001010284482FE8282820000284444FE82820000
0022:00F88482828284F800000000007844428482828284F800004478444244780000
0023:0038448282808080000000000018244080828282443800004040404224180000
0024:00F884828282828200000000007844428282828284F800004242424244780000
0025:00FE8080808080FC00000000007E40408080808080FE0000407C4040407E0000
0026:00FE8080808080FC00000000007E40408080808080800000407C404040400000
0027:003844808080808E0000000000182440848484844C340000404E44442C140000
0028:00828282828282FE00000000004242428282828282820000427E424242420000
0029:0038101010101010000000000038101010101010103800001010101010380000
002A:0002020202020202000000000004040402024242241800000404044448300000
002B:00828284848890A00000000000424244D0888484828200004850684442420000
002C:008080808080808000000000004040408080808080FE000040404040407E0000
002D:008282C6C6AAAAAA000000000082C6C6AA92929282820000AAAA929292820000
002E:008282C2C2A2A29200000000004262528A8A868682820000524A4A4642420000
002F:0038448282828282000000000018244282828282443800004242424224180000
0030:00F88482828284F8000000000078444280808080808000004478404040400000
0031:003844828282828200000000001824428282928A443A00004242424A241A0000
0032:00F88482828284F8000000000078444290888884848200004478484444420000
0033:0038448282804038000000000018244204028282443800002018044224180000
0034:00FE1010101010100000000000FE101010101010101000001010101010100000
0035:0082828282828282000000000042424282828282443800004242424224180000
0036:0082828282824444000000000082828244282828101000004444282810100000
0037:008282929292AAAA0000000000829292AAAAC6C68282000092AAAAC6C6820000
0038:0082824444282810000000000042422428284444828200002418242442420000
0039:0082828244442828000000000082824410101010101000004428101010100000
003A:00FE02040408081000000000007E02042020404080FE000008081020407E0000
003B:3C2020202020202000000000007C4040202020202020203C404040404040407C
003C:008282444428FE10000000000000824410FE1010101000002810FE1010FE1010
003D:780808080808080800000000007C04040808080808080878040404040404047C
003E:1028448200000000000000000010282800000000000000004444828200000000
003F:0000000000000000000000000000000000000000000000FE00000000000000FE
0040:2010080000000000000000000000804000000000000000002000000000000000
0041:00000000003844040000000000000038043C4444443A000044043C44443A0000
0042:0040404040586442000000000040404042424242645800005864424264580000
0043:0000000000182442000000000000001840404042241800002440404224180000
0044:00020202021A2642000000000002020242424242261A00001A264242261A0000
0045:00000000001824420000000000000018427E4040221C000024427E40201C0000
0046:000C1010107C1010000000000C10107C10101010101000001010101010100000
0047:00000000001A2642000000000000001A4242261A02024438264242261A024438
0048:00404040405C6242000000000040404042424242424200005C62424242420000
0049:0010100000101010000000000010100010101010101000001010101010100000
004A:0004040000040404000000000004040004040404040424180404040404042418
004B:0040404040424448000000000040404250684444424200004448506844420000
004C:0010101010101010000000000010101010101010101000001010101010100000
004D:0000000000A4DA9200000000000000A49292929292920000DA92929292920000
004E:00000000005C6242000000000000005C42424242424200006242424242420000
004F:0000000000182442000000000000001842424242241800002442424224180000
0050:0000000000586442000000000000005842424264584040406442424264584040
0051:00000000001A2642000000000000001A424242261A02020226424242261A0202
0052:00000000005C6240000000000000005C40404040404000006240404040400000
0053:00000000003C4240000000000000003C20180402423C000042403C02423C0000
0054:00101010107C1010000000001010107C10101010120C000010101010120C0000
0055:0000000000424242000000000000004242424242463A000042424242463A0000
0056:0000000000828282000000000000008244442828101000008244442828100000
0057:00000000008292920000000000000082AAAAC6C6828200009292AAAAC6820000
0058:0000000000424224000000000000004224182424424200004224182442420000
0059:0000000000424242000000000000004222241414080810604222241408081060
005A:00000000007E4204000000000000007E08181020427E000042041820427E0000
005B:081020202020204000000000000C10104020202020201008101020101010100C
005C:0010101010101010000000000010101010101010101010101010101010101010
005D:2010080808080804000000000030080804080808080810200808040808080830
005E:FE00000000000000000000000000FE0000000000000000000000000000000000
005F:0000000000000000000000000000000000000000000000000000000000000000
0100:00000000000103FF000000000080C0FF0301000000000000C080000000000000
015F:20383C3F3F3F3F3F00000000C0E0F8FE3F3F3F3F3F3C3820FEF8E0C000000000
0200:00000000070703FF00000000C0C080FF03010100000000008000000000000000
020F:28484889BD8A9CAB28A4A422FA2222FEAAC8C8898A4848282272AA2622242428 記号など
0210:214142BF84848F88080404FA0202E2229FA8CF8888484828E222E22222242468
0211:000F01010101010100E0000000000000010101010101010F00000000000000E0
0212:001F04040404040400F0404040404040040404040404041F40404040404040F0
0213:003F09090909090900F8202020202020090909090909093F20202020202020F8
0214:007B212121202020008E04040488888820202020202020788888505050202020
0215:0078101010080808007820202020404004040402020201014040808080800000
0216:007920202010111100BC88888888080811090A0A0A040404080808080808083C
0217:00F320202020201100BE9494949494141111110A0A0A0404141414141414143E
0218:00F920202020111100FEAAAAAAAA2A2A11110A0A0A0404042A2A2A2A2A2A2A7E
0219:00F7212020202020008E04888850502020202020202121F7205050888804048E
021A:003E0808040402020078202040408080010202040408083C00808040402020F8
021B:0000000304081010000000A060202020100F00030C10100FC04050E040408000
021C:0000000077080808000000007088888811111122222222001010102022241800
021D:0000000000001D2200000000000024DA4240808081854931929294A424282A24
021E:000000000000546A000000000000546A4A4A929292A4A4A24A4A929292A4A4A2
021F:002020222448516000000000000024DA5048488884858585929292A4A4282A24
0220:0000000000001D220C1204081E0024DA4240808080858971929294A4A4282A24
0221:000000000000001B000C1204081E007024040809090912128888901010222418
0222:000000000000D22D00000C12122224242949494A4A9293922828283020629C00
0223:000000926D494A920000001A2642828292929495920000008C74041E64848870
0224:00202224244850680000001A2642828248488884848484008C74041E64848870
0225:0000000011112222000000001824222222222222255840802010080444C43800
0226:244444888893A88888A49482FA82828288888888884848288242424242242418
0227:008488889090A0D0004244444848506888888884848500004444444242420000
0228:00FB222222222223009010101010109022222222222223001010101010109E00
0229:00C2A2A2A29292920000000030484884928A8A8A8A86820084848484484A3200
022A:0004081028C8080800804222040830C000063808FF0810600000000000000000
022B:0000000000000000000000000000000000000000000000000000000000000000
022C:101E224284081565007C00FE02040830001010242246F9010000000000000000
022D:0002221408142240000000FE0000000000202030282420210050505252949800
022E:002020FE2224201E0000C02202041860000C7010FE1020400000000000000000
022F:00700C601804E01C000000000000000002000000000000004242424204040810
0230:0010284484020201101E224204081020203848A81B10204000282828AA2A2C40
0231:00FE021214102040000000FE0000000000282829294A4C800000000000000000
0232:0025252038242220000000000000000020000000000000011050505252949800
0233:002020382422202000000000000000000000000000000000804222040830C000
0234:00107E1010FF08080000000000000000080000000000000000FC84848484FC00
0235:00107C1010FE080800007E4242427E00203B488B10205495088808D05452A63A
0236:00107C1010FE080800007E4242427E0000F8888A0A102040000808ACAA284888
0237:007E424202040810000052525204083000202038242220200000000000000000
0238:00424242040408100000A4A4A408102000202038242220210050505252949800
0239:0025222322214181008040807E0000000042F948485041320010105854921010
023A:001629498602010100000000FE0000000022124021020C700080800000000000
023B:00203EE22214101000000000FE00000000222238242220200080800000000000
023C:00FE0202040408100000040830D01010000000FE000000000040407048444040
023D:0718204345898181C030080404020202818181414121180702020204040830C0
023E:0718204344888880C030088444222242818284484F20180782020204E40830C0
023F:0718204748808083C03008C4242222C2808080484720180722222224C40830C0
0240:0718204142828484C0300884848282828888905F40201807828282E4848830C0
0241:0718204744848586C03008C404028242808088484423180722222224448830C0
0242:071820434488888BC0300884442202828C8888484423180742222224448830C0
0243:0718204F40808080C03008E424424282808181424222180782020204040830C0
0244:0718204344848483C030088444424282848888484423180742222224448830C0
0245:0718204344888888C030088444222222848380484423180762A22224448830C0
0246:0718204859AA8A8AC03008C4241212128A8A8A494820180712121224C40830C0
0247:0000000000000000F88890A0A0A0A0A00000000000000000A0A0A0A0A09088F8
0248:1F110905050505050000000000000000050505050509111F0000000000000000
0249:003F00003F41699900F80000F8042C32A5A55949242318074A4A3424488830C0
024A:00001F7FE4E7C71C0000F0FC4ECEC6703020303C3F1F000018081878F8F00000
024B:00FF80808080808000FE020202020202808080808040310E1A26404080800000
024C:00000000000101016090908080000000010101020212120C0000000000000000
024D:00000000000000083F2020404040408018280805050502028080800000000000
024E:FF00000000000000FF0000000000000000000000000000000000000000000000
024F:00000000000000000000000000000000FF80808080808080FF01010101010101
0250:8080808080808080010101010101010180808080808080800101010101010101
0251:80808080808080FF01010101010101FF00000000000000000000000000000000
0252:000000000000000000000000000000000718204040808080C030080404020202
0253:808080404020180702020204040830C000000000000000000000000000000000
0254:0000000000000000FF80808080808080000000000000000080808080808080FF
0255:FF00000000000000FF0000000000000000000000000000FF00000000000000FF
0256:FE02020202020202000000000000000002020202020202FE0000000000000000
0257:0000000000000000071820404080808000000000000000008080804040201807
0258:E018040202010101000000000000000001010102020418E00000000000000000
0259:07182040409BA2A2C030080404925252A3A2A25A4020180792925254040830C0
025A:07182040409BA2A2C03008040412AA8AA2A3A25A402018079212A2BC040830C0
025B:0718245E4C96A58FC03048F464D24AE2809F81495123180702F20224140830C0
025C:07182048489C898AC030084484FA0ACA88888A5C402018070A2ACA1424C830C0
025D:0718214345898181C030088444220202818181414121180702020204040830C0
025E:0718214141818181C030080404020202818189454321180702022244840830C0
025F:0718204140808080C03008C424120A0A80808142472219070A0A1224C40830C0
0300:00000004060707FF00000000000080FF07070604000000008000000000000000
0301:00000000000001FF0000002060E0E0FF0100000000000000E0E0602000000000
0302:00000000000001030000000040C0C0C00100000000000000C0C0400000000000
0303:0000000000000038000000000000003800000000000000000000000000000000
0304:0000000000000038000000000000003838000000000000003800000000000000
0305:0000000000000001000000000000000001000000000000000000000000000000
0306:0000000001010000000000000000000000000101000000000000000000000000
0307:00000000000F0808000080C0A090080408080F0000000000040890A0C0800000
035F:00FFF8E7C8D0A0A000FE3E0E06060202A0A092C9C7E1FAFF02020206860E3EFE
0400:0718204040FB9494C03008040432AAAA9497945440201807B2AAAAB4040830C0
0454:0102040810204080010204081020408001020408102040800102040810204080
0455:8040201008040201804020100804020180402010080402018040201008040201
0456:0202022020220202020202202022020220202002022220202020200202222020
0457:0038000000C6000000C60000003800000038000000C6000000C6000000380000
0458:0010000082000010008200001000008200000082000010000000001000008200
045F:000000000001010100000000000000000F01010100000000E000000000000000
0500:0718204040909192C0300804048202029792915040201807FA020284040830C0
055F:000000000203030300000000000080C003030200000000008000000000000000
0600:00D5800080008000005602000200020080008000800080D50200020002000256
0620:00AA00820082008200AA00820082008200820082008200AA00820082008200AA
063F:00552A552A552A550054AA54AA54AA542A552A552A552A00AA54AA54AA54AA00
065F:00000000000F07030000000000E0C08001000000000000000000000000000000
0700:000000000810207F00000000201008FC20100800000000000810200000000000
075F:809F92929F80849F01F94949F901111184BF84849F84BF8011D915131111D111
0800:0001030509010101000080402000000001010109050301000000002040800000
0801:0000000000000000000000000000000000000000000000000000000000000000
0802:00000000000000000010080C0606000000000000000000000000000000000000
0803:0000000000000000001C2222221C000000000000000000000000000000000000
0804:00000000000000FF000000000000000000000000000000000000000000000000
0805:000000000000000100000000000000FE00000000000000000000000000000000
0806:0101010101010101000000000000000001000000000000000000000000000000
0807:0000000000000001000000000000000001010101010101010000000000000000
0808:0000000000000000000000000000000000000000000000000000000000000000
0809:0000000000000000000000000000000000000000000000000000000000000000
080A:0000000000000000000000000000000000000000000000000000000000000000
080B:0000000000000000000000000000000000000000000000000000000000000000
080C:0000000000000000000000000000000000000000000000000000000000000000
080D:0000000000000000000000000000000000000000000000000000000000000000
080E:0000000000000000000000000000000000000000000000000000000000000000
080F:0000000000000000000000000000000000000000000000000000000000000000
0810:0000000000000000000000000000000000000000000000000000000000000000
0811:0000000101010F010000000000F800F007091111110E00000814244484083000
0812:0000000404080808000000001008088409090602000000000404000000000000
0813:0000040300000B04000000E000E01008000000000003000008081020C0000000
0814:0000020100080700000000C000F01020000001020408000040C02020201C0000
0815:00000101110F010700000000C80404E0091111110E0000001008080810600000
0816:0000040202031E010000402038E4220201010100000000002418008080800000
0817:0000000408090A0C00402020F824222208090400000100002224F84080000000
0818:0000000000000000000000804048704000000304040300004040E05048800000
0819:0000000000130C0000000000F0080404000000000100000004040830C0000000
081A:00000402020E03020000000070880404060A0202020000000404081000000000
081B:0000000000000000000000000000000000000000000000000000000000000000
081C:0001010101010101008080808080808001010101010101008080808080808000
081D:0101010101010101000000000000000001010101010101010000000000000000
081E:0000000001010101000000000000000001010101000000000000000000000000
081F:0000000000000000000000000000000000000000000000000000000000000000
0820:0000000000000000000000000000000000000000000000000000000000000000
0821:0201000000000001000080404040800001020404040201000000000000000080
0822:000000000000FF00000000000000FE0000FF00000000000000FE000000000000
0823:00000000000000FF00000000000000FE00000000000000000000000000000000
0824:0001030100000103000080000000008001000001030100000000000080000000
0825:0000010301000000000000800000000000000001030100000000000080000000
0826:0000000000000000000000000000000000000000000000000000000000000000
0827:0000000000000000000000000000000000000000000000000000000000000000
0828:0000000000000000000000000000000000000000000000000036361212244800
0829:00122448486C6C00000000000000000000000000000000000000000000000000
082A:0000000000000000000000000000000000030C30408000000080601804020000
082B:00008040300C0300000002041860800000000000000000000000000000000000
082C:00000000000000000000000000000000001F20408000000000F0080402000000
082D:0000008040201F00000000020408F00000000000000000000000000000000000
082E:0000000000000000000000000000000000FF80808000000000FE020202000000
082F:000000808080FF00000000020202FE0000000000000000000000000000000000
0830:0000000000000000000000000000000000010678808000000000C03C02020000
0831:0000808078060100000002023CC0000000000000000000000000000000000000
0832:0000000000000000000000000000000000010618608000000000C0300C020000
0833:00008060180601000000020C30C0000000000000000000000000000000000000
0834:000000000000000100000000000000000618618618608000C0300CC2300C0200
0835:008060188661180600020C30C20C30C001000000000000000000000000000000
0836:000000000000000000000000000000000000FF00000000000000FE0202020200
0837:0080808080FF00000000000000FE000000000000000000000000000000000000
0838:0000000000000000000000000000000000FF80FF0000000000FE02FA0A0A0E00
0839:00E0A0A0A0BF80FF0000000000FE02FE00000000000000000000000000000000
083A:0000000000000000000000000000000000FFFFF8C080000000FEFE3E06020000
083B:000080C0F8FFFF00000002061EFEFE0000000000000000000000000000000000
083C:0718204054969695C0300804B4AAAAAA9595945440201807AAAAAAB4040830C0
083D:07182040408080BFC0300804442212FA808080404020180712224204040830C0
083E:07182040408884BEC0300804042242FA848880404020180742220204040830C0
083F:0718204073AAAAABC0300804942A22A2AAAAAA734020180722222A94040830C0
0840:000C1212222222220000000000000000242428906C0300000000000000000000
0841:0000020202020202000080808080808002020202020200008080808080800000
0842:E0E0E01C1C1F070700000000000000000101010000000000C0C0F070700E0E0E
0843:0000000000000000000000000000000000000000000000000000000000000000
0844:0000000000000000000000000000000000000000000000000000000000000000
0845:0000000F00000000000000FC040888900001010202040000A000000000000000
0846:000000000000000000000008102040C0030C0000000000004040404040400000
0847:00000000000F08080000808080F8080808000000000100000810102040800000
0848:000000000700000000000000F88080800000000F00000000808080F800000000
0849:0000000000000F00000000202020F8A00001010204000000A020202060200000
084A:0000000202011F010000000000FC040801010000000000001020808080800000
084B:000000000700000000000000E02020200000000F00000000202020FC00000000
084C:000000000F00000700000000F80808F80000000F00000000080808F808000000
084D:0000000211080404000000000888880800000000010600001010204080000000
084E:0000000F08080800000000F80808080800000000010000001010204080000000
084F:0000000000000700000000808080F88800000101020400008888080828100000
0850:0000000101010302000000000000FC1004080000000100001010202040800000
0851:00000000000000FF00000000000000FF00000000000000000000000000000000
0852:0101010101010101000000000000000001010101010101010000000000000000
0853:010101010101010100000000000000FF00000000000000000000000000000000
0854:000000000000000100000000000000FF01010101010101010000000000000000
0855:00000000000000FF000000000000000001010101010101010000000000000000
0856:01010101010101FF000000000000000000000000000000000000000000000000
0857:01010101010101FF00000000000000FF00000000000000000000000000000000
0858:010101010101010100000000000000FF01010101010101010000000000000000
0859:00000000000000FF00000000000000FF01010101010101010000000000000000
085A:01010101010101FF000000000000000001010101010101010000000000000000
085B:01010101010101FF00000000000000FF01010101010101010000000000000000
085C:007F7F7F7F7F000000FCFCFCFCFC000000000000000000000000000000000000
085D:0000000000000000000000000000000000007F7F7F7F7F7F0000FCFCFCFCFCFC
085E:7F7F7F7F7F7F0000FCFCFCFCFCFC000000007F7F7F7F7F7F0000FCFCFCFCFCFC
085F:FF007F447F08087FFE00FC44FC20202008FF087F08FF00FF30AC222020A020FE
0900:0000000000000000000000000000000000000000000000000000000000000000
0901:0000000000000000000000000000000000006090906000000000000060909060 半角カナなど
0902:003C20202020202000000000007E404020000000000000004040404000000000
0903:00000000000008080000000000000000080808080878000000040404040404FC
0904:0000000000000000000000000000000000004020202000000000000000201010
0905:0000000000003838000000000000000038000000000000000010381000000000
0906:00FC0404047C04040000000000FE020208081010204000007E02020408100000
0907:00000000FC0424240000000000000000282040404080000000FE022428202040
0908:0000000808081010000000000000000030509010101000000204081828480808
0909:0000002020F88888000000000000000088081010204000001010FE8282040810
090A:00000000007C1010000000000000000010101010FE00000000007C10101010FE
090B:0000000808FC0818000000000000000028284888080800000808FE1828488808
090C:00000020203CE424000000000000000028202020202000002020FE2224282020
090D:0000000000780808000000000000000008080808FE00000000007808080808FE
090E:000000007E02020200000000000000003E0202027E000000007E02023E02027E
090F:0000000000249454000000000000000044080810102000000092929204040830
0910:000000000000FE00000000000000000000000000000000000000FE0000000000
0911:00FC040404242830000000000000FE0220202020408000000222242820204080
0912:0002020404081828000000000002020448880808080800000818284888080808
0913:002020FC8484848800000000001010FE08081010204000008282820202040810
0914:00007C1010101010000000000000000010101010FE0000007C101010101010FE
0915:00080808FE08181800000000000808082828484888080000FE08182848880808
0916:002020FC2424242400000000002020202424244444980000FE22222222224286
0917:00202020FC101010000000000010101010FE0808080800007C101010FE101010
0918:0020203C244444880000000020203E2208081010204000004282020204040810
0919:002020203E484888000000000010102008081010204000003E48880810102040
091A:007C04040404040400000000000000FE040404047C00000002020202020202FE
091B:00484848FE48484800000000004444FE48081010204000004444440408081020
091C:004020120282442400000000000000F00408081020C000000002F202020408F0
091D:007C0404040808080000000000007E0214142222428200000404080814244282
091E:002020203EE22428000000000020202020202020201C00003EE224282020201E
091F:0084844444440808000000000002828208101020204000004242220404081020
0920:0020203E2242A4140000000000101E2208081010204000004282241408102040
0921:000478080808FE08000000000002047808101020204000000808FE0808101020
0922:0022A2A292544404000000000092929208081010204000009292020204040830
0923:007C000000FE080800000000007C0000081010202040000000FE080810102040
0924:0020202020302824000000000040404022202020202000006050484440404040
0925:00080808FE08080800000000000808080810102020400000FE08080810102040
0926:00007800000000000000000000000000000000FC000000007C000000000000FE
0927:007C040444241408000000000000FE020C121220408000000224140814244080
0928:0010107C0404081800000000001010FC34529210101000000408183452921010
0929:0008080808080810000000000000000210102020408000000204040808102040
092A:0028282424242424000000000008044444424242828200004242424242428282
092B:004040404C704040000000000080808240404040403C00008CF080808080807E
092C:00FC04040404080800000000000000FE08101020204000000202020404081020
092D:0000205050888888000000000000002004040402020200005088080404020200
092E:001010FE1010545400000000001010105252929292100000FE10105452929210
092F:00FE02020204442800000000000000FE10100808080000000202024428100808
0930:00601008006010080000000000007C020000C03008040000000078040000FC02
0931:000808101010202800000000000008082424424EF20000001010282424425EE2
0932:0008080848281808000000000002020214122220408000002414080C12224080
0933:007C20202020FE200000000000007C2020202020201C00002020FE202020201E
0934:002020203EE22428000000000020202020202020202000003EE2222428202020
0935:0000780808080808000000000000007808080808FE00000008080808080808FE
0936:007C04040404043C000000000000FE0204040404047C000002027E02020202FE
0937:0078000000FC04040000000000007C00040808102040000000FE020204040810
0938:0044444444444444000000000000008244440808102000008282828202040408
0939:000028282828282800000000000000484A4A4A4A8A8C00004848484A4A4A8A8C
093A:00404040404040420000000000000080424444485060000080808084848890E0
093B:00007C444444444400000000000000FE444444447C000000828282828282FE00
093C:00FC84848484040400000000000000FE08080810102000008282020204040810
093D:008040202404040400000000000000000808101020C00000C0320202040830C0
093E:00904848000000000000000000A0505000000000000000002828000000000000
093F:0060909060000000000000000000609000000000000000009060000000000000
0940:00FC0000000000FC0000000000FE00000000000000FE00000000FE00000000FE
0941:00FE02060A0A12120000000000FE020622224242828200000A0A121222224282
0942:00FEFEFE7C7C7C380000000000FEFEFE38383810101000007C7C7C3838381010
0943:00000000002442FF000000000000000042240000000000002844FE4428000000
0944:8080404020202010000000000080804010080804040202004020201010080804
0945:0010103838387C7C000000000008081C38383810100000001C3E3E1C1C080800
0946:FEEEEEC6C6C68282000000007F777763C6C6C6EEEEFE0000634141636377777F
0947:00FCFCFCFCFCFCFC0000000000FEFEFEFCFCFCFCFCFC0000FEFEFEFEFEFEFEFE
0948:00FCFCFCFCFCFCFC0000000000FEFEFEFCFCFCFCFCFC0000FEFEFEFEFEFEFEFE
0949:00FCFCFCFCFCFCFC0000000000FEFEFEFCFCFCFCFCFC0000FEFEFEFEFEFEFEFE
094A:00FCFCFCFCFCFCFC0000000000FEFEFEFCFCFCFCFCFC0000FEFEFEFEFEFEFEFE
094B:00FCFCFCFCFCFCFC0000000000FEFEFEFCFCFCFCFCFC0000FEFEFEFEFEFEFEFE
094C:00FCFCFCFCFCFCFC0000000000FEFEFEFCFCFCFCFCFC0000FEFEFEFEFEFEFEFE
094D:00FCFCFCFCFCFCFC0000000000FEFEFEFCFCFCFCFCFC0000FEFEFEFEFEFEFEFE
094E:00FCFCFCFCFCFCFC0000000000FEFEFEFCFCFCFCFCFC0000FEFEFEFEFEFEFEFE
094F:00FCFCFCFCFCFCFC0000000000FEFEFEFCFCFCFCFCFC0000FEFEFEFEFEFEFEFE
0950:007C828282828282007C82828282828282828282827C000082828282827C0000
0951:0018284808080808001828480808080808080808083C000008080808083C0000
0952:007C828282020408007C8282820204081020408080FE00001020408080FE0000
0953:007C828202043804007C82820204380402028282827C000002028282827C0000
0954:000818182828484800081818282848488888FE08080800008888FE0808080000
0955:007E4040405C6242007E4040405C624202020282827C000002020282827C0000
0956:007C82828080BCC2007C82828080BCC282828282827C000082828282827C0000
0957:00FE82840408081000FE82840408081010102020202000001010202020200000
0958:007C828282827C82007C828282827C8282828282827C000082828282827C0000
0959:007C828282828286007C8282828282867A020282827C00007A020282827C0000
095A:20203E4888087E48000000000020207E484848FF0808080088087E4848FE0808
095B:007C4444447C444400000000007E4242447C444444448C007E42427E42424286
095C:007C44444444447C000000000000FE8244444444447C00008282FE828282FE00
095D:00FE7C7C383810100000000000FEFE7C1038387C7CFE00007C3810387C7CFEFE
095E:008282C6C6EEEEFE00000000008282C6EEEEC6C682820000C6EEFEEEC6C68282
095F:00FEFEFEFEFEFEFE0000000000AA00AAFEFEFEFEFEFE000000AA00AA00AA00AA
0A00:0000000000000000000000000000000000000000000000000000000000000000
0A01:FFFFFFFCFCF8F8F8FFFFFF6363630101F0F1F1E3E3FFFFFF0108080C9CFFFFFF 慎ましくロゴ
0A02:FFFFFF80001F1F00FFFFFF0702E0F0F880FCFC0000FFFFFF78706042C7FFFFFF
0A03:FEFEFE1E1E3E7EFE83DF632F8CCC6F00FE7E3E1E1EFEFEFE6F607FC3CEDCB800
0A04:30FC30FCCCCCFCC003FFFFC0FF3F0003FCC0FC60381E0C0003FFFF03031F0F00
0A05:00FCFC0CFCF0E0800000F8FCC6C6C6CE00FCFC0000000000FCF8DCCEC7C30000
0A06:00000707070F0D1D00000707078786C61D183F3F30700000C6C6E6E666760000
0A07:000007078FCFDBFB000000000000000073732303030300000000000000000000
0A08:00001C3E6606060C00001C3C766666C60C183060FCF80000C6CCCCC8F9710000
0A09:000018197BF333310000F0F89818B8F023676666F7F3000060303070E0C00000
0A0A:00000000000000600000000000000000606373CBD9F0000300606060E060C0C0
0A0B:0000313333367C7800068680000606047179DCCEC7C30000EDED0D0D1C1C0000
0A0C:000101010179F9C3008383808003E3B38303039AFAF600003332366666660000
0A0D:00989818300F1F110000000000060706181E07233E1C0000060604040C0C0000
0A0E:0000000000CCFC6C0000000000787C8C6D6D4D4DCCCC000089F98189FB730000
0A0F:0000000000B3FFDB00000000001C3E239B9B131333330000636363623E1C0000
0A10:0000000000000000000000000000000000000000000000000000000000000000
0A11:0000000000000000000000000000000000000000000000000000000000000000
0A12:0000000000000000000000000000000000000000000000000000000000000000
0A13:0000000000000000000000000000000000000000000000000000000000000000
0A14:0000000000000000000000000000000000000000000000000000000000000000
0A15:0000000000000000000000000000000000000000000000000000000000000000
0A16:0000000000000000000000000000000000000000000000000000000000000000
0A17:0000000000000000000000000000000000000000000000000000000000000000
0A18:0000000000000000000000000000000000000000000000000000000000000000
0A19:0000000000000000000000000000000000000000000000000000000000000000
0A1A:0000000000000000000000000000000000000000000000000000000000000000
0A1B:0000000000000000000000000000000000000000000000000000000000000000
0A1C:0000000000000000000000000000000000000000000000000000000000000000
0A1D:0000000000000000000000000000000000000000000000000000000000000000
0A1E:0000000000000000000000000000000000000000000000000000000000000000
0A1F:0000000000000000000000000000000000000000000000000000000000000000
0A20:0000000000000000000000000000000000000000000000000000000000000000
0A21:0000000000000000000000000000000000000000000000000000000000000000
0A22:0000000000000000000000000000000000000000000000000000000000000000
0A23:0000000000000000000000000000000000000000000000000000000000000000
0A24:0000000000000000000000000000000000000000000000000000000000000000
0A25:0000000000000000000000000000000000000000000000000000000000000000
0A26:0000000000000000000000000000000000000000000000000000000000000000
0A27:0000000000000000000000000000000000000000000000000000000000000000
0A28:0000000000000000000000000000000000000000000000000000000000000000
0A29:0000000000000000000000000000000000000000000000000000000000000000
0A2A:0000000000000000000000000000000000000000000000000000000000000000
0A2B:0000000000000000000000000000000000000000000000000000000000000000
0A2C:0000000000000000000000000000000000000000000000000000000000000000
0A2D:0000000000000000000000000000000000000000000000000000000000000000
0A2E:0000000000000000000000000000000000000000000000000000000000000000
0A2F:0000000000000000000000000000000000000000000000000000000000000000
0A30:0000000000000000000000000000000000000000000000000000000000000000
0A31:0000000000000000000000000000000000000000000000000000000000000000
0A32:0000000000000000000000000000000000000000000000000000000000000000
0A33:0000000000000000000000000000000000000000000000000000000000000000
0A34:0000000000000000000000000000000000000000000000000000000000000000
0A35:0000000000000000000000000000000000000000000000000000000000000000
0A36:0000000000000000000000000000000000000000000000000000000000000000
0A37:0000000000000000000000000000000000000000000000000000000000000000
0A38:0000000000000000000000000000000000000000000000000000000000000000
0A39:0000000000000000000000000000000000000000000000000000000000000000
0A3A:0000000000000000000000000000000000000000000000000000000000000000
0A3B:0000000000000000000000000000000000000000000000000000000000000000
0A3C:0000000000000000000000000000000000000000000000000000000000000000
0A3D:0000000000000000000000000000000000000000000000000000000000000000
0A3E:0000000000000000000000000000000000000000000000000000000000000000
0A3F:0000000000000000000000000000000000000000000000000000000000000000
1000:000000000704040700000000C000008000000403000000004040408000000000 第一水準中の0点と95点
105F:FF80808080FF8080FF00000000FF00008080FF80808080800000FF0000000000
1100:000000001132521200000000C02020201212121100000000202020C000000000
115F:80FF80808080FF8000FF00000000FF00808080FF80808080000000FF00000000
1200:000000001C22220400000000708888880810223E000000008888887000000000
125F:8080FF80808080FF0000FF00000000FF80808080FF80808000000000FF000000
1300:000000001C22020C00000000708888880222221C000000008888887000000000
135F:808080FF80808080000000FF00000000FF80808080FF8080FF00000000FF0000
1400:00000000040C1414000000007088888824243E04000000008888887000000000
145F:80808080FF80808000000000FF00000080FF80808080FF8000FF00000000FF00
1500:000000003E20203C00000000708888880202221C000000008888887000000000
155F:8080808080FF80800000000000FF00008080FF80808080FF0000FF00000000FF
1600:000000001C22203C00000000708888882222221C000000008888887000000000
165F:FF80808080FF8080FF00000000FF00008080FF80808080800000FF0000000000
1700:000000003E222204000000007088888804080808000000008888887000000000
175F:80FF80808080FF8000FF00000000FF00808080FF80808080000000FF00000000
1800:000000001C22221C00000000708888882222221C000000008888887000000000
185F:8080808080808080808080808080808080808080808080808080808080808080
1900:000000001C22222200000000708888881E02221C000000008888887000000000
195F:4040404040404040404040404040404040404040404040404040404040404040
1A00:000000001C22222200000000708888882222221C000000008888887000000000
1A5F:2020202020202020202020202020202020202020202020202020202020202020
1B00:0000201008040201000004081020408001020408102000008040201008040000
1B5F:1010101010101010101010101010101010101010101010101010101010101010
1C00:00FF80808080808000FE02020202020280808080808080FF02020202020202FE
1C5F:0808080808080808080808080808080808080808080808080808080808080808
1D00:FF00FF00FF00FF0000FF00FF00FF00FFFF00FF00FF00FF0000FF00FF00FF00FF
1D5F:0404040404040404040404040404040404040404040404040404040404040404
1E00:00FFC0A09088848300FE060A122242828183848890A0C0FF02824222120A06FE
1E5F:0202020202020202020202020202020202020202020202020202020202020202
1F00:007FBFDFEFF7FBFD00FCFAF6EEDEBE7EFEFDFBF7EFDFBF7FFE7EBEDEEEF6FAFC
1F5F:0101010101010101010101010101010101010101010101010101010101010101
2000:00C06030180C060300060C183060C08003060C183060C00080C06030180C0600
205F:8080808080808080808080808080808080808080808080808080808080808080
2100:F8F8F8F8F8FF07070000000000C0C0C00707070000000000C0C0C03E3E3E3E3E
215F:4040404040404040404040404040404040404040404040404040404040404040
2200:0000000000000000000000000000000000000000000000000000000000000000
225F:2020202020202020202020202020202020202020202020202020202020202020
2300:0000000000000000000000000000000000000000000000000000000000000000
235F:1010101010101010101010101010101010101010101010101010101010101010
2400:0000000000000000000000000000000000000000000000000000000000000000
245F:0000008080808080000000808080808080808080808080808080808080808080
2500:0000000000000000000000000000000000000000000000000000000000000000
255F:0000004040404040000000404040404040404040404040404040404040404040
2600:0000000000000000000000000000000000000000000000000000000000000000
265F:0000002020202020000000202020202020202020202020202020202020202020
2700:0000000000000000000000000000000000000000000000000000000000000000
275F:0000001010101010000000101010101010101010101010101010101010101010
2800:0000000000000000000000000000000000000000000000000000000000000000
285F:0000000808080808000000080808080808080808080808080808080808080808
2900:0000000000000000000000000000000000000000000000000000000000000000
295F:0000000404040404000000040404040404040404040404040404040404040404
2A00:0000000000000000000000000000000000000000000000000000000000000000
2A5F:0000000202020202000000020202020202020202020202020202020202020202
2B00:0000000000000000000000000000000000000000000000000000000000000000
2B5F:0000000101010101000000010101010101010101010101010101010101010101
2C00:0000000000000000000000000000000000000000000000000000000000000000
2C5F:0000008080808080000000808080808080808080808080808080808080808080
2D00:0000000000000000000000000000000000000000000000000000000000000000
2D5F:0000004040404040000000404040404040404040404040404040404040404040
2E00:0000000000000000000000000000000000000000000000000000000000000000
2E5F:0000002020202020000000202020202020202020202020202020202020202020
2F00:0000000000000000000000000000000000000000000000000000000000000000
2F5F:0000001010101010000000101010101010101010101010101010101010101010
3000:0000000000000000000000000000000000000000000000000000000000000000 第二水準中の0点と95点
305F:0000000000000000000000000000000000000000000000000000000000000000
3100:0000000000000000000000000000000000000000000000000000000000000000
315F:0000000000000000000000000000000000000000000000000000000000000000
3200:0000000000000000000000000000000000000000000000000000000000000000
325F:0000000000000000000000000000000000000000000000000000000000000000
3300:0000000000000000000000000000000000000000000000000000000000000000
335F:0000000000000000000000000000000000000000000000000000000000000000
3400:0000000000000000000000000000000000000000000000000000000000000000
345F:0000000000000000000000000000000000000000000000000000000000000000
3500:0000000000000000000000000000000000000000000000000000000000000000
355F:0000000000000000000000000000000000000000000000000000000000000000
3600:0000000000000000000000000000000000000000000000000000000000000000
365F:0000000000000000000000000000000000000000000000000000000000000000
3700:0000000000000000000000000000000000000000000000000000000000000000
375F:0000000000000000000000000000000000000000000000000000000000000000
3800:0000000000000000000000000000000000000000000000000000000000000000
385F:0000000000000000000000000000000000000000000000000000000000000000
3900:0000000000000000000000000000000000000000000000000000000000000000
395F:0000000000000000000000000000000000000000000000000000000000000000
3A00:0000000000000000000000000000000000000000000000000000000000000000
3A5F:0000000000000000000000000000000000000000000000000000000000000000
3B00:0000000000000000000000000000000000000000000000000000000000000000
3B5F:0000000000000000000000000000000000000000000000000000000000000000
3C00:0000000000000000000000000000000000000000000000000000000000000000
3C5F:0000000000000000000000000000000000000000000000000000000000000000
3D00:0000000000000000000000000000000000000000000000000000000000000000
3D5F:0000000000000000000000000000000000000000000000000000000000000000
3E00:0000000000000000000000000000000000000000000000000000000000000000
3E5F:0000000000000000000000000000000000000000000000000000000000000000
3F00:0000000000000000000000000000000000000000000000000000000000000000
3F5F:0000000000000000000000000000000000000000000000000000000000000000
4000:0000000000000000000000000000000000000000000000000000000000000000
405F:0000000000000000000000000000000000000000000000000000000000000000
4100:0000000000000000000000000000000000000000000000000000000000000000
415F:0000000000000000000000000000000000000000000000000000000000000000
4200:0000000000000000000000000000000000000000000000000000000000000000
425F:0000000000000000000000000000000000000000000000000000000000000000
4300:0000000000000000000000000000000000000000000000000000000000000000
435F:0000000000000000000000000000000000000000000000000000000000000000
4400:0000000000000000000000000000000000000000000000000000000000000000
445F:0000000000000000000000000000000000000000000000000000000000000000
4500:0000000000000000000000000000000000000000000000000000000000000000
455F:0000000000000000000000000000000000000000000000000000000000000000
4600:0000000000000000000000000000000000000000000000000000000000000000
465F:0000000000000000000000000000000000000000000000000000000000000000
4700:0000000000000000000000000000000000000000000000000000000000000000
475F:0000000000000000000000000000000000000000000000000000000000000000
4800:0000000000000000000000000000000000000000000000000000000000000000
485F:0000000000000000000000000000000000000000000000000000000000000000
4900:0000000000000000000000000000000000000000000000000000000000000000
495F:0000000000000000000000000000000000000000000000000000000000000000
4A00:0000000000000000000000000000000000000000000000000000000000000000
4A5F:0000000000000000000000000000000000000000000000000000000000000000
4B00:0000000000000000000000000000000000000000000000000000000000000000
4B5F:0000000000000000000000000000000000000000000000000000000000000000
4C00:0000000000000000000000000000000000000000000000000000000000000000
4C5F:0000000000000000000000000000000000000000000000000000000000000000
4D00:0000000000000000000000000000000000000000000000000000000000000000
4D5F:0000000000000000000000000000000000000000000000000000000000000000
4E00:0000000000000000000000000000000000000000000000000000000000000000
4E5F:0000000000000000000000000000000000000000000000000000000000000000
4F00:0000000000000000000000000000000000000000000000000000000000000000
4F5F:0000000000000000000000000000000000000000000000000000000000000000
5000:0000000000000000000000000000000000000000000000000000000000000000
505F:0000000000000000000000000000000000000000000000000000000000000000
5100:0000000000000000000000000000000000000000000000000000000000000000
515F:0000000000000000000000000000000000000000000000000000000000000000
5200:0000000000000000000000000000000000000000000000000000000000000000
525F:0000000000000000000000000000000000000000000000000000000000000000
5300:0000000000000000000000000000000000000000000000000000000000000000
535F:0000000000000000000000000000000000000000000000000000000000000000
5400:0000000000000000000000000000000000000000000000000000000000000000
545F:0000000000000000000000000000000000000000000000000000000000000000
kanji.ps1
# 定数
$fn1="kuten1.png" # 第一水準画像ファイル(1536x1000) 0区~47区
$fn2="kuten2.png" # 第二水準画像ファイル(1536x1000) 48区~84区
$fn3="kanji.bin" # 第一、第二水準ROMバイナリデータ255KB 先頭は0区0点、96点/区
$sx=0 # スタートX座標
$sy=3 # スタートY座標
$w=16 # 文字幅
$h=20 # 文字高
$r=1 # 1=#000色を'1'、0=#000色を'0'
Add-Type -AssemblyName System.Drawing
# 関数たち
function GetFont1Byte($src_image,$x,$y){
$d=0
0..7|%{ $d = $d*2+(([math]::ceiling($src_image.GetPixel($x+$_,$y).R /256)) -bxor $r) }
return $d
}
function GetFont($src_image,$ku,$ten){
if($ku -gt 47){ $ku-=48 }
$x=$ten*$w+$sx
$y=$ku *$h+$sy
$d=new-object byte[] (32)
0..7|%{ $d[$_ ]=GetFont1Byte $src_image ($x ) ($y +$_) }
0..7|%{ $d[$_+ 8]=GetFont1Byte $src_image ($x+8) ($y +$_) }
0..7|%{ $d[$_+16]=GetFont1Byte $src_image ($x ) ($y+8+$_) }
0..7|%{ $d[$_+24]=GetFont1Byte $src_image ($x+8) ($y+8+$_) }
return $d
}
# 画像読み込み
$src_image = [System.Drawing.Image]::FromFile((pwd).Path+"\"+$fn1)
# フォント位置確認
$d=@(0..47)
$tmp1=GetFont $src_image 16 1;$tmp2=GetFont $src_image 16 2;$tmp3=GetFont $src_image 16 3 # 上段3文字
00..07|%{ $d[$_+00]=([Convert]::tostring($tmp1[$_+00],2)).padleft(8,'0')+([Convert]::tostring($tmp1[$_+08],2)).padleft(8,'0')+" "`
+([Convert]::tostring($tmp2[$_+00],2)).padleft(8,'0')+([Convert]::tostring($tmp2[$_+08],2)).padleft(8,'0')+" "`
+([Convert]::tostring($tmp3[$_+00],2)).padleft(8,'0')+([Convert]::tostring($tmp3[$_+08],2)).padleft(8,'0')+"`r`n" }
00..07|%{ $d[$_+08]=([Convert]::tostring($tmp1[$_+16],2)).padleft(8,'0')+([Convert]::tostring($tmp1[$_+24],2)).padleft(8,'0')+" "`
+([Convert]::tostring($tmp2[$_+16],2)).padleft(8,'0')+([Convert]::tostring($tmp2[$_+24],2)).padleft(8,'0')+" "`
+([Convert]::tostring($tmp3[$_+16],2)).padleft(8,'0')+([Convert]::tostring($tmp3[$_+24],2)).padleft(8,'0')+"`r`n" }
$d[15]+="`r`n"
$tmp1=GetFont $src_image 17 1;$tmp2=GetFont $src_image 17 2;$tmp3=GetFont $src_image 17 3 # 中段3文字
00..07|%{ $d[$_+16]=([Convert]::tostring($tmp1[$_+00],2)).padleft(8,'0')+([Convert]::tostring($tmp1[$_+08],2)).padleft(8,'0')+" "`
+([Convert]::tostring($tmp2[$_+00],2)).padleft(8,'0')+([Convert]::tostring($tmp2[$_+08],2)).padleft(8,'0')+" "`
+([Convert]::tostring($tmp3[$_+00],2)).padleft(8,'0')+([Convert]::tostring($tmp3[$_+08],2)).padleft(8,'0')+"`r`n" }
00..07|%{ $d[$_+24]=([Convert]::tostring($tmp1[$_+16],2)).padleft(8,'0')+([Convert]::tostring($tmp1[$_+24],2)).padleft(8,'0')+" "`
+([Convert]::tostring($tmp2[$_+16],2)).padleft(8,'0')+([Convert]::tostring($tmp2[$_+24],2)).padleft(8,'0')+" "`
+([Convert]::tostring($tmp3[$_+16],2)).padleft(8,'0')+([Convert]::tostring($tmp3[$_+24],2)).padleft(8,'0')+"`r`n" }
$d[31]+="`r`n"
$tmp1=GetFont $src_image 18 1;$tmp2=GetFont $src_image 18 2;$tmp3=GetFont $src_image 18 3 # 下段3文字
00..07|%{ $d[$_+32]=([Convert]::tostring($tmp1[$_+00],2)).padleft(8,'0')+([Convert]::tostring($tmp1[$_+08],2)).padleft(8,'0')+" "`
+([Convert]::tostring($tmp2[$_+00],2)).padleft(8,'0')+([Convert]::tostring($tmp2[$_+08],2)).padleft(8,'0')+" "`
+([Convert]::tostring($tmp3[$_+00],2)).padleft(8,'0')+([Convert]::tostring($tmp3[$_+08],2)).padleft(8,'0')+"`r`n" }
00..07|%{ $d[$_+40]=([Convert]::tostring($tmp1[$_+16],2)).padleft(8,'0')+([Convert]::tostring($tmp1[$_+24],2)).padleft(8,'0')+" "`
+([Convert]::tostring($tmp2[$_+16],2)).padleft(8,'0')+([Convert]::tostring($tmp2[$_+24],2)).padleft(8,'0')+" "`
+([Convert]::tostring($tmp3[$_+16],2)).padleft(8,'0')+([Convert]::tostring($tmp3[$_+24],2)).padleft(8,'0')+"`r`n" }
$d[47]+="`r`n"
# オブジェクト破棄
$src_image.dispose()
1..47|%{ $d[0]+=$d[$_] } # popupで配列展開するとズレるのでまとめる
$wsobj = new-object -comobject wscript.shell
$result = $wsobj.popup($d[0],0,"フォント位置の確認",1+32)
if ($result -ne 1){ exit } # キャンセル中断
$d=new-object byte[] (85*96*32) # 84区95点まで、各文字32バイト分の領域確保
$src_image = [System.Drawing.Image]::FromFile((pwd).Path+"\"+$fn1) # 第一水準画像読み込み
0..47|%{
$ku=$_
[int]$j=$_/48*100 # キャストでだいたい四捨五入
write-progress "フォントファイルの変換" "第一水準は" -PercentComplete $j -CurrentOperation "$j%処理中"
0..95|%{
$ten=$_
$s=getFont $src_image $ku $ten
0..31|%{ $d[($ku*96+$ten)*32+$_]=$s[$_] }
}
}
$src_image.dispose()
$src_image = [System.Drawing.Image]::FromFile((pwd).Path+"\"+$fn2) # 第二水準画像読み込み
48..84|%{
$ku=$_
[int]$j=($_-48)/(85-48)*100 # キャストでだいたい四捨五入
write-progress "フォントファイルの変換" "第二水準は" -PercentComplete $j -CurrentOperation "$j%処理中"
0..95|%{
$ten=$_
$s=getFont $src_image $ku $ten
0..31|%{ $d[($ku*96+$ten)*32+$_]=$s[$_] }
}
}
$src_image.dispose()
Set-Content -Path ((pwd).path+"\"+$fn3) -Value $d -Encoding byte # 全データ書き込み
exit
k-ram.bas
100 'save"k-ram.bas",a
110 clear 1000:defint a-z:dim d(31)
120 on error goto 390
130 open"kanji.bin" as #1 len=32:field #1,32 as d$
140 'f1$="":for i=0 to 7:f1$=f1$+chr$(val("&h"+mid$("0040201008040201",i*2+1,2))):next '1st level kanji-ROM flag
150 'f2$="":for i=0 to 7:f2$=f2$+chr$(val("&h"+mid$("01020c37c03b2a2a",i*2+1,2))):next '2nd level kanji-ROM flag
160 for i=0 to 84 'write 1..84-ku, added 0-ku
170 if i=11 then i=16 'skip 11..15-ku
180 if i>47 then p=&hda else p=&hd8 'i/o port
190 if i>47 then db=(i-48)*96 'kanji address base
200 if i<16 then db=i*96 else db=i*96-512
210 cls:? i"/84-ku writing...";
220 for j=0 to 95 'write 1..94-ten, added 0-ten and 95-ten
230 get #1,i*96+j+1 'get font data
240 dd$=d$ 'replace flag font
250 'if i= 1 and j=32 then mid$(dd$,1)=f1$
260 'if i=83 and j=94 then mid$(dd$,1)=f2$
270 d=db+j 'make kanji address
280 out p,d and 63 'set kanji address low, clear internal counter and RAM mode
290 out p+1,d\64 'set kanji address high, set 1st step of RAM mode
300 out p+1,d\64 'set kanji address high, set Kanji-RAM mode
310 for k=0 to 31 'write 1 char font
320 out p+1,asc(mid$(dd$,k+1,1))
330 next
340 next
350 next
360 close
370 on error goto 0
380 end
390 if erl=230 then ?"*";:resume else 370 'skip disk error
以上。
0 件のコメント:
コメントを投稿
.