since 2007.8 by K-ichi

MSX漢字RAM(ハードウェア編)の続き。

MSX漢字RAMをカートリッジスロットに挿し、電源を入れる。スーパーキャパシタは3秒もあれば十分に充電される。
MSX側の電源電圧が5.13Vのとき、RAMの電源電圧は3秒後で4.80V、30秒で4.90V、5.5分で4.95Vと計測された。

ハードウェアがちゃんと動作しているかは、以下の作業で確認できる。
なお、ブラウザの表示フォントによっては、半角「¥」が半角「\」と表示されるので注意。メモ帳などにコピペすれば半角「¥」になる。

  1. 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

  2. リセット、または電源を入れなおして再起動する。I/OポートF5Hを使う反則技もあるけど……

  3. 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内容を貼り付け
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を再起動させる。漢字モードで、独特の文字が表示されれば完遂。


標準の漢字ROMで表示した場合

漢字RAMにあずきフォントを載せた



以下に使用するファイルを掲げる。
太字がファイル名、緑色背景がその内容。メモ帳などにコピペして保存すれば使える。

知識ゼロから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 件のコメント:

コメントを投稿

.

関連記事


この記事へのリンク by 関連記事、被リンク記事をリストアップする」記事

ブログ アーカイブ