2013-03 の変更点
[[2013-02]] [[FM3]] [[RX62N]] [[SH2A]] [[PIC32MX]]
----
*3月 [#xdcceb3f]
-先月は、秋月PIC32MX220F032B用のブートローダーを作っていた。
-作ったといっても、UBW32用のHIDBoot.Xを少し改造しただけ。
-
- read more : [[PIC32MX]]
持ち越し案件
-pic32mxでFTDI互換(JTAG)ファーム
~
~
~
~
--------------
*PIC32MX220F032 [#w1babdd6]
先月までの成果まとめ。
-開発環境構築
--''Pinguino''がArduinoっぽくてお手軽。
--MPLAB-Xは駄目。''MPLABとそれに付属のpic32-gccを使う''べし。(-mips16もちゃんと使える)
--ブートローダー探し。''HIDBoot.X''で決まり。
---AN1388はHEXテキストをそのまま扱うっぽいので、ローダーがでかいしコードも複雑。それにPinguino互換じゃない。
~
--ライターはPicKit2/3がベスト。ライターソフトは''pic32prog''で決まり。
---PicKit2互換機は手軽に作れて安いし、WinXP/8(64bit)の両方でドライバー導入要らずで、しかも安定動作する。
~
~
-ファームウェア/アプリケーション
--Pinguinoのスケッチは手軽でシンプル。便利。
---PinguinoスケッチをGUIを使わずに、付属のmake.exeを使ってビルドするCUI環境を作った。
---ついでに、bootloaderを使用せずに自力起動するビルドも可能にしてみた。Flash領域32kB目一杯使い切れる。
~
--HIDBoot.Xのファームウェアは汎用的に使える。
---PCから簡単にPIC32MX上のメモリーやポートを読み書きできる。
---USB HIDデバイスのお手本になっている。
---MPLAB付属のpic32-gccでビルドする(GUI)方法と、Pinguinoのmips-gccでビルドする(コマンドラインmake)環境の
両方を用意した。
---これにより、60日試用期間を過ぎても安心してサイズ最適化や-mips16オプションが使えるようになった。
-------
*PIC32MXの続編 [#jeab1a50]
-オーバークロック/アンダークロック
--16MHz〜72MHzまで、安定動作範囲。
--80MHzは動きはするものの、不安定。
~
-水晶を使わずにUSB
--すでにやった人がいる。
--外部回路は要らないけれど、ピン同士の配線(内蔵RC発振の外だし)が必要。
--やってみてもいいけれど水晶安い(50円)し周波数が安定しているので、あえて50円をケチる理由が無い。たまたま8MHz切らしてるときも4〜20MHzの4MHz刻みのどれかなんて、ジャンク箱あされば出てくるし。
~
-オシロスコープとかロジアナの簡易実装
--これはPIC32MXを使う目的のひとつでもある。
--壊しても惜しくないし小さく作れる。
~
-FT2232互換 JTAGドングルのソフトウェア実装
--これがそもそもPIC32MXを使ってやってみようと思った動機。
--どう無駄に作っても32kB以内に実装出来そうだし、それほど複雑でもないし。SRAMも足りる。
--これまで、独自実装のOpenOCDデバイスを作ったりしたけれども、OpenOCDのリポジトリ更新に付いていけないと分かったので、だったらMPSSEの一部コマンド(OpenOCDで使ってるものだけ)を実装したほうが話が早いし、動作も速い。
--220円+αで作れるので、FT2232より安く作れる。ファーム書くのが少し面倒臭い程度。
~
-VGAとかNTSC出力のGDPもどきを実装。
--いわゆるあれ、ARM(STM32)でも同様のを見たけど。ワンチップ・テレタイプ端末(RS-232C)っぽいやつ。
--[[TVゲーム作ってる人:http://www.ze.em-net.ne.jp/~kenken/picrope/index.html]]も居たなぁ。
~
-レトロBSD , Z80 (CP/M) エミュレータ
--''MX220F032B''でやろうと思っても、RAMが足らない。
--AVRの作例みたいに、強引な外付けS-RAMとか外付けD-RAMという手段は残っている。
--面白いか、と言われると、うーん、どうなんだろう。
--AVRでやると、凄いなーと思われるけれど、MIPS32だと出来て当たり前だし。
--retroBSDは置いといて、CP/Mのほうは、もうアプリ持って無い。Z80マシン語も今更書きたくない。(全部覚えてるけど)
~
-Android Accesory
--PIC32MXがUSBホストになって、それより遥かに高性能なアンドロイド端末をUSBデバイスとして接続。
--ADBのプロトコルに間借りする形でソケットコネクションして、あとはデータ転送するだけなので、結局のところ論理的にはRS232Cで繋がってるのとたいして変わらない(のだと思っている)。
--MPLABのUSBフレームワークサンプルにADKのやつがあったので、MX220対応させるだけで多分そのまま動くと思うんだ。
--Androidのアプリ考えるのが面倒面倒。
~
結論
-まずは、ロジアナとオシロを書いて、
-気が向いたらMPSSE互換機、
-最後に、応用でVGA出力のGDP実装。
だけど、ARM弄る気あんまり残ってないので''JTAG要らん''かなぁ・・・FT2232は実物あるし。
まあ、そんな感じ。
~
~
~
-------
*PIC32MXで仮想シリアル [#i1828bd8]
-やってみた結果、''PinguinoのUSB CDCは遅い''(390kBPSしか出ない)ということが分かった。
-Mchipサンプルのほうが優秀で、2M BPS出る。
-Mchipサンプルから作成したUSB-シリアル変換器も動いた。(以前はuart2.cがおかしくてBugっていたので、uart1.cを新たに起こした。)
-USB HOST(KeyBoard)は、sbrkのバグを直して、とりあえず動作確認の手前に辿り着いた。けど肝心のキーボードが規格外(HUB内蔵)だったので、別のキーボードを探し中
続きを読む: [[PIC32MXで仮想シリアル>PIC32MX_USBCDC]]
続きを読む: [[USBカスタムデバイス>USB_CUSTOM]]
続きを読む: [[USBホスト>USB_HOST]]
-USB HOST Mouseも動いた。
~
~
~
---------------
*ここまでのまとめ。 [#oae94439]
-Pinguinoのmips-gccを使って、MchipのUSBサンプルを動かす技はほぼ会得した。
-HOSTとかAndroid ADKなんかも動く(と思う。ビルドだけは成功している)けど24kB超える勢いなのでブートローダーからの書き込みは無理。当然'-mips16'で'-Os'で'--gc-sections'さらにcrt0.Sも改造済み。
-cdcserialは動いたと思ったけど、UARTのIO Remapに失敗している気配。(USBデバイスとしては認識OKでWindowsからは正常に動いているように見える)
-bulk(WinUSB)デバイスは速い。1MB/s。
-クロックは72MHzで常用している。80MHzでは無理。それから間違って水晶を12MHzで実装してしまった(ICソケットの中に埋めた)のでIDIVを1/3 (12MHz->4MHz)で使っている。ブートローダーで試すときはFuseや水晶のことは考えなくてOK。(configを無視するので)
~
*これからどうするか。 [#a5877fd4]
-オシロとロジアナっぽいやつをでっちあげてみる。(WinUSB叩いて)
-JTAGは飽きたのでやめ。
-VGA出力も、要らんかなぁ・・・(USBキーボードと液晶モニタ繋いで英字が出せる端末は作れるけどそれ以上の用途が思いつかない)
-たぶんNTSC出力出して、32kBレギュレーションのイントロ・デモ(メガデモの一種)に挑戦するのも悪くないとは思うけれど自分はセンスが無いのでやらない。
-sdcardくらいは繋げてみるか。
~
~
まあともかく
-220円+少ない外付け部品で、12Mbit/sまでのUSBをとことん堪能できるチップは稀有だと思う。
-32kB Flash+8kB SRAMはアプリを書くには少なすぎるけれど、デバイスとしてはむしろ充分だし72MHzはDIPにしては充分速い。(定格上は50MHz)
-このコスパに対抗できるチップって、ないんだな。Cortex系でUSB入りだと高いしDIP品種がないし。
-8bitで遅くて良いならArduino LeonardのATmega32u8とかあるけど、あっちのほうがUSB SIEとしてはしょぼい。
~
~
~
---------------
*USB HOSTサンプルのビルド。 [#t60700de]
USB HOST Keyboard
-ちゃんと動いている。
-ファームサイズは24kBを少し超えている。
-ためしに''-mips16''を外したら、32kBを2kB程度超えるので、焼けない。2kBの大半は.dataセクションで0連続が多いのと、3kBのBOOT ROMはまだ空いているので、詰め込めなくはないけれど、Mchipのコンパイラを使ってたら絶望だな。(うわさでは''-O0オプション''しか許さないらしい。どういう罰ゲームなんだろ)
~
-問題は、空きエリアがあと8kBも無いので、USBキーボードが使えるVGA端末を作ることは不可能だ。(英字フォントを入れるだけで4kBくらいは消費してしまい、残り4kB以内でVGA OUTとターミナルを書かなければならない。''絶対無理だ'')
~
~
Android ADK
-諦めた。
-容量的には、20kB以内。
-動いてるんだけどAndroidと通信しない。理由がさっぱりわからない。(どっちも組み込みなので、調べようがない)
--print吐くようにして調べた結果、物理的に全くネゴシエーションしていないっぽい。
--Android側が480Mbpsで送信してきて、PIC32MX側は''「ハァ?意味わかんねー」''って感じでUSB SIEが応答できない感じ。''12MHzのマイコンに480MHzなんか聞こえるわけねーじゃん。''
-そういえば、HighSpeedデバイスをFullSpeedホストに繋ぐ場合、どういうネゴが行なわれるんだろうか?
--FullとLowでは、デバイス側のPullUpポートがD+とかD-の片側だけにしていて、ホスト側はどちらかのピンがPullUpされたらデバイスが接続されたと認識してたはずだけど・・・。
---LowSpeedではD-が、FullSpeedではD+がPullUpされる。
--HighSpeedのときはどうなってたっけ、%%PullUpじゃなくていきなり480MHzで話しかけるのかな。(要調査)%%
---HighSpeedデバイスも、''まずはFullSpeedでネゴシエーションしてから''480Mbpsに移行するらしい。---そこが出来ていないんじゃあ?
~
~
追記:
-MicroChipのADKアプリはPlayストアで配布されているので、それを入手する。
-usb_host.c あたりで DEBUG_MODE を定義すると、attachとかdetachの表示をしてくれる(Serial Printに繋ぐ)
-それで、ADKのファームを再ビルドして、いろいろなデバイスを繋いでみる。
-KB MouseなどのLowSpeedデバイスはちゃんと認識する。
-USB内蔵マイコン(FullSpeed)を使ったHIDやCDCデバイスはだいたい認識する。
-USBメモリーの中には認識するものとしないものがある。しないものは無反応。
-Androidを、(アプリ起動状態あり、なしの両方で)接続してみたけれど、PIC32MX側は全く無反応。
どうやら、Android端末がHighSpeedデバイスなので、そもそも物理的にネゴシエーションしてないんじゃないか疑惑。
~
*続きはWEBで! [#o826874c]
-[[USB_HOST]]に少し足を突っ込んでみたので、次のテーマとしては、
-(1)[[USB_HOST]]に接続されたデバイスのディスクリプタやエンドポイントを列挙するツール。
-(2)USB Keyboardをシリアルポートに変換する変換器
-(3)USB Keyboardを楽器演奏に使ってみる。
(3)はPS/2キーボードを使った演奏プログラム([[KeyBoardマニア]])を移植してみるテスト。
~
~
~
------
*RETROF-16のエミュレータ再び [#wcbef61d]
retrof-16とは?
- duo6750さんが作成中の(21世紀に実在する)
- TTLのみで作るコンピュータです。
- 下記サイトに詳細があります。
- http://retrof.jpn.org/
~
[[ダウンロードはこちら:http://psp.dip.jp/web/upload/R16/r16sim.zip]]
実行例写真
http://psp.dip.jp/web/upload/R16/r16sim.png
~
出来てるところ
-Windows/Linux上のgcc/makeでビルドできる。
-なんとなく命令セットをエミュレートしているように見える。
-逆アセンブルもする。
-GUIっぽいものを追加しました。COLOR(RED){←ここが新しいところ}
--COLOR(BLUE){SPACEキーを押すと実行速度を変えられます}
***R16アセンブラ、+cina16 + ナイトライダー風サンプル [#lbf0a6fb]
[[ダウンロード:http://psp.dip.jp/web/upload/R16/asm16.zip]]
~
- R16 asmソースを入力して、バイナリーとリストを出力します。
- バイナリーは常に0番地から始まるイメージです。
***遊び方。 [#k16aabf0]
-Windows XP/Vista/7/8のどれかを用意します。
-上記の2つのzipをどこか適当なdirに(並べて)展開します。
-MinGW32 gccとmakeをインストールしておいてください。
~
-asm16/nr.c がナイトライダーです。
/* R16: ナイトライダー */
org 0;
do {
r80h = 7;
r81h = 16;
do {
ld r80h;
OUT 0;
do {
r82h++;
} while(nf); // } while(r82h != 0xFFFF) ;
ld(r80h);
sfl;
st(r80h); // r80h <<= 1 ;
r81h--;
} while(nf); // if (r81h != (-1)) goto A0002;
} while(1);
-nr.lst
0000: org 0
0000: __do000:
0000:8007 c480 mov r80h,7
0002:8010 c481 mov r81h,16
0004: __do001:
0004:9080 ld r80h
0005:c600 OUT 0
0006: __do002:
0006:9082 8801 c482 inc r82h
0009:0b04 jnf __do002
000a: __od002:
000a:9080 ld r80h
000b:cc0b sfl
000c:c480 st r80h
000d:9081 8c01 c481 dec r81h
0010:0b0d jnf __do001
0011: __od001:
0011:0812 jmp __do000
0012: __od000:
SYMBOL LIST:
= 17 (0x11)
__od000 = 18 (0x12)
__od001 = 17 (0x11)
__od002 = 10 (0xa)
__do000 = 0 (0x0)
__do001 = 4 (0x4)
__do002 = 6 (0x6)
-asm16ディレクトリで make test するとビルドが完了します。
-r16simディレクトリで a.bat を実行するとエミュレータが動きます。
エミュレータは逆アセンブル表示が遅いので、カーソル上キーを1回押して、スペースキーを1回押してください。
-ナイトライダーします。
-詳しくは各ディレクトリのReadMe.txtを参照してください。
*R16でインベーダー [#lf43953c]
-一匹表示のみです。ゲームではありません。
http://psp.dip.jp/web/upload/R16/inv.png
-ソース
//-------------------------------------------
org 0; goto _start;
// 暗黙のレジスタ
at equ r13; // assembler temp.
lr equ r14; // link register.
sp equ r15; // stack pointer.
// ユーザー割り当てレジスタ
x equ r16;
y equ r17;
bc equ r18;
de equ r19;
hl equ r20;
ix equ r21;
a equ r22;
i equ r23;
j equ r24;
k equ r25;
// 定数equ.
r equ 4;
g equ 2;
b equ 1;
w equ 7;
b equ 0;
c equ 3;
p equ 5;
org 256;
/*-------------------------------------------
* スタートアップ.
*-------------------------------------------
*/
_start:
sp=0x100;
main();
halt;
/*-------------------------------------------
* データ
*-------------------------------------------
*/
invdata:
dot 0,0,0,0,0,0,0,0
dot 0,0,0,g,g,g,0,0
dot 0,0,g,g,g,g,g,0
dot 0,g,0,g,g,g,0,g
dot 0,0,g,g,g,g,g,0
dot 0,0,0,g,0,g,0,0
dot 0,0,g,0,0,0,g,0
dot 0,0,0,0,0,0,0,0
/*-------------------------------------------
* メイン
*-------------------------------------------
*/
main()
{
subr();
}
/*-------------------------------------------
*
* サブ
*-------------------------------------------
*/
subr()
{
cls();
y=0;do {
x=0;do {
ix=y;
ix<<=7;
ix+=x;
putdata1();
x+=4;
}while(x!=128);
y+=8;
}while(y!=256);
k=0;do {
//
// 虫を画面いっぱいに敷き詰める.
// (x,y)は座標. ixはVRAMアドレス.
y=0;do {
x=0;do {
ix=y;ix<<=7; // 128倍.
ix+=x;
at=k;at>>=4; // ix += (k/16) ずらし.
ix+=at;
putdata1(); //一匹虫を書く.
x+=4; //左へ8ドット.
}while(x!=128);
y+=8; //下へ8ドット.
}while(y!=256);
k++;
OUT 0; //LEDを更新してみる.
}while(1); //無限ループ.
}
/*-------------------------------------------
* 虫を一匹だけ書く.
*-------------------------------------------
* 引数
* ix : VRAMアドレス.
*/
putdata1()
{
hl=ix;
de=invdata;putdata();
de=invdata;blit8x8();
}
/*-------------------------------------------
*
* 画面を消す.
*-------------------------------------------
*/
cls()
{
hl=0;
do {
ld 0;
stv([hl]);
hl++;
}while(hl!=0x8000);
// }while(hl!=0x8);
}
/*-------------------------------------------
*
* 画面に8x8のデータを書き込む.
*-------------------------------------------
* 引数:
* de: 8x8ドットデータの存在するアドレス
* hl: 書き込み先のVRAMアドレス.
*/
putdata()
blit8x8()
{
j=8;do {
i=4;do {
i=4;do { // 8dot=4ワード.
ld([de]);
stv([hl]);
hl++;
de++;
}while(--i);
hl+=124;
}while(--j);
}
/*-------------------------------------------
* 以下、テストパターン.
*-------------------------------------------
*/
test1()
{
hl=1024;
for(bc=0;bc<2000;bc++) {
for(bc=0;bc<2000;bc++) { // for文のテスト.
if(de<hl) a++;
}
test2:
while(a!=100) {
while(a!=100) { // while文のテスト.
bc++;
}
test3:
a=0;
do {
a++;
}while(a==0x4a);
}while(a==0x4a); // do〜while文のテスト.
test4:
a=0;
do {
a++;
}while(a<0x4a);
}while(a<0x4a); // do〜while文のテスト(終了判定が不等式).
}
/*-------------------------------------------
* nr.c
* おまけ:ナイトライダー.
*-------------------------------------------
*/
subr2()
{
do {
r80h = 7;
r81h = 16;
do {
ld r80h;
OUT 0;
do {
r82h++;
} while(nf); // } while(r82h != 0xFFFF) ;
r80h <<= 1 ;
r81h--;
} while(nf); // if (r81h != (-1)) goto A0002;
} while(1);
}
-コンパイル結果
0000: org 0
0000:04ff jmp _start
0001: at: equ r13
0001: lr: equ r14
0001: sp: equ r15
0001: x: equ r16
0001: y: equ r17
0001: bc: equ r18
0001: de: equ r19
0001: hl: equ r20
0001: ix: equ r21
0001: a: equ r22
0001: i: equ r23
0001: j: equ r24
0001: k: equ r25
0001: r: equ 4
0001: g: equ 2
0001: b: equ 1
0001: w: equ 7
0001: b: equ 0
0001: c: equ 3
0001: p: equ 5
0100: org 256
0100: _start:
0100:b000 0100 c40f mov sp,0100h
0103:c202 c40e 0422 call main
0106:cf00 0106 halt
0108: invdata:
0108:0000 0000 0000 0000 dot 0,0,0,0,0,0,0,0
010c:0000 0002 0022 0000 dot 0,0,0,g,g,g,0,0
0110:0000 0022 0022 0020 dot 0,0,g,g,g,g,g,0
0114:0002 0002 0022 0002 dot 0,g,0,g,g,g,0,g
0118:0000 0022 0022 0020 dot 0,0,g,g,g,g,g,0
011c:0000 0002 0002 0000 dot 0,0,0,g,0,g,0,0
0120:0000 0020 0000 0020 dot 0,0,g,0,0,0,g,0
0124:0000 0000 0000 0000 dot 0,0,0,0,0,0,0,0
0128: main:
0128:900f 8401 c40f 900e d40f enter
012d:c202 c40e 040b call subr
0130:a00f c40e 900f 8801 c40f c204 c40d 900e d40d 3000 0000 leave
013b: subr:
013b:900f 8401 c40f 900e d40f enter
0140:c202 c40e 0447 call cls
0143:8000 c411 mov y,0
0140:c202 c40e 0459 call cls
0143:8000 c419 mov k,0
0145: __do000:
0145:8000 c410 mov x,0
0145:8000 c411 mov y,0
0147: __do001:
0147:9011 c415 mov ix,y
0149:9015 c801 c801 c801 c801 c801 c801 c801 c415 sfl ix,7
0152:9015 9810 c415 add ix,x
0155:c202 c40e 041a call putdata1
0158:9010 8804 c410 add x,4
015b:8080 9410 cp x,128
015d:8401 sub 1
015e:0a18 jnf __do001
015f: __od001:
015f:9011 8808 c411 add y,8
0162:b000 0100 9411 cp y,256
0165:8401 sub 1
0166:0a22 jnf __do000
0167: __od000:
0167:a00f c40e 900f 8801 c40f c204 c40d 900e d40d 3000 0000 leave
0172: putdata1:
0172:900f 8401 c40f 900e d40f enter
0177:9015 c414 mov hl,ix
0179:b000 0108 c413 mov de,invdata
017c:c202 c40e 0427 call putdata
017f:a00f c40e 900f 8801 c40f c204 c40d 900e d40d 3000 0000 leave
018a: cls:
018a:900f 8401 c40f 900e d40f enter
018f:8000 c414 mov hl,0
0191: __do002:
0191:8000 ld 0
0192:de14 stv [hl]
0193:9014 8801 c414 inc hl
0196:b000 8000 9414 cp hl,08000h
0199:8401 sub 1
019a:0a0a jnf __do002
019b: __od002:
019b:a00f c40e 900f 8801 c40f c204 c40d 900e d40d 3000 0000 leave
01a6: putdata:
01a6:900f 8401 c40f 900e d40f enter
01ab:8008 c418 mov j,8
01ad: __do003:
01ad:8004 c417 mov i,4
01af: __do004:
01af:a013 ld [de]
01b0:de14 stv [hl]
01b1:9014 8801 c414 inc hl
01b4:9013 8801 c413 inc de
01b7:9017 8401 c417 dec i
01ba:8401 sub 1
01bb:0a0d jnf __do004
01bc: __od004:
01bc:9014 887c c414 add hl,124
01bf:9018 8401 c418 dec j
01c2:8401 sub 1
01c3:0a17 jnf __do003
01c4: __od003:
01c4:a00f c40e 900f 8801 c40f c204 c40d 900e d40d 3000 0000 leave
01cf: test1:
01cf:900f 8401 c40f 900e d40f enter
01d4:b000 0400 c414 mov hl,1024
01d7:8000 c412 mov bc,0
01d9: __fo005:
01d9:b000 07d0 9412 cp bc,2000
01dc:440a jnc __of005
01dd:9014 9413 cp de,hl
01df:4403 jnc __el006
01e0:9016 8801 c416 inc a
01e3: __el006:
01e3:9012 8801 c412 inc bc
01e6:080e jmp __fo005
01e7: __of005:
01e7: test2:
01e7: __wh007:
01e7:8064 9416 cp a,100
01e9:8401 sub 1
01ea:0704 jf __ew007
01eb:9012 8801 c412 inc bc
01ee:0808 jmp __wh007
01ef: __ew007:
01ef: test3:
01ef:8000 c416 mov a,0
01f1: __do008:
01f1:9016 8801 c416 inc a
01f4:804a 9416 cp a,04ah
01f6:8401 sub 1
01f7:0b07 jf __do008
01f8: __od008:
01f8: test4:
01f8:8000 c416 mov a,0
01fa: __do009:
01fa:9016 8801 c416 inc a
01fd:804a 9416 cp a,04ah
01ff:4906 jc __do009
0200: __od009:
0200:a00f c40e 900f 8801 c40f c204 c40d 900e d40d 3000 0000 leave
020b: subr2:
020b:900f 8401 c40f 900e d40f enter
0210: __do010:
0210:8007 c480 mov r80h,7
0212:8010 c481 mov r81h,16
0214: __do011:
0214:9080 ld r80h
0215:cc00 OUT 0
0216: __do012:
0216:9082 8801 c482 inc r82h
0219:8401 sub 1
021a:0a05 jnf __do012
021b: __od012:
021b:9080 c801 c480 sfl r80h,1
021e:9081 8401 c481 dec r81h
0221:8401 sub 1
0222:0a0f jnf __do011
0223: __od011:
0223:0814 jmp __do010
0224: __od010:
0224:a00f c40e 900f 8801 c40f c204 c40d 900e d40d 3000 0000 leave
0147:8000 c410 mov x,0
0149: __do002:
0149:9011 c415 mov ix,y
014b:9015 c801 c801 c801 c801 c801 c801 c801 c415 sfl ix,7
0154:9015 9810 c415 add ix,x
0157:9019 c40d mov at,k
0159:900d c601 c601 c601 c601 c40d sfr at,4
015f:9015 980d c415 add ix,at
0162:c202 c40e 041f call putdata1
0165:9010 8804 c410 add x,4
0168:8080 9410 cp x,128
016a:8401 sub 1
016b:0a23 jnf __do002
016c: __od002:
016c:9011 8808 c411 add y,8
016f:b000 0100 9411 cp y,256
0172:8401 sub 1
0173:0a2d jnf __do001
0174: __od001:
0174:9019 8801 c419 inc k
0177:cc00 OUT 0
0178:0834 jmp __do000
0179: __od000:
0179:a00f c40e 900f 8801 c40f c204 c40d 900e d40d 3000 0000 leave
0184: putdata1:
0184:900f 8401 c40f 900e d40f enter
0189:9015 c414 mov hl,ix
018b:b000 0108 c413 mov de,invdata
018e:c202 c40e 0427 call blit8x8
0191:a00f c40e 900f 8801 c40f c204 c40d 900e d40d 3000 0000 leave
019c: cls:
019c:900f 8401 c40f 900e d40f enter
01a1:8000 c414 mov hl,0
01a3: __do003:
01a3:8000 ld 0
01a4:de14 stv [hl]
01a5:9014 8801 c414 inc hl
01a8:b000 8000 9414 cp hl,08000h
01ab:8401 sub 1
01ac:0a0a jnf __do003
01ad: __od003:
01ad:a00f c40e 900f 8801 c40f c204 c40d 900e d40d 3000 0000 leave
01b8: blit8x8:
01b8:900f 8401 c40f 900e d40f enter
01bd:8008 c418 mov j,8
01bf: __do004:
01bf:8004 c417 mov i,4
01c1: __do005:
01c1:a013 ld [de]
01c2:de14 stv [hl]
01c3:9014 8801 c414 inc hl
01c6:9013 8801 c413 inc de
01c9:9017 8401 c417 dec i
01cc:8401 sub 1
01cd:0a0d jnf __do005
01ce: __od005:
01ce:9014 887c c414 add hl,124
01d1:9018 8401 c418 dec j
01d4:8401 sub 1
01d5:0a17 jnf __do004
01d6: __od004:
01d6:a00f c40e 900f 8801 c40f c204 c40d 900e d40d 3000 0000 leave
01e1: test1:
01e1:900f 8401 c40f 900e d40f enter
01e6:b000 0400 c414 mov hl,1024
01e9:8000 c412 mov bc,0
01eb: __fo006:
01eb:b000 07d0 9412 cp bc,2000
01ee:440a jnc __of006
01ef:9014 9413 cp de,hl
01f1:4403 jnc __el007
01f2:9016 8801 c416 inc a
01f5: __el007:
01f5:9012 8801 c412 inc bc
01f8:080e jmp __fo006
01f9: __of006:
01f9: test2:
01f9: __wh008:
01f9:8064 9416 cp a,100
01fb:8401 sub 1
01fc:0704 jf __ew008
01fd:9012 8801 c412 inc bc
0200:0808 jmp __wh008
0201: __ew008:
0201: test3:
0201:8000 c416 mov a,0
0203: __do009:
0203:9016 8801 c416 inc a
0206:804a 9416 cp a,04ah
0208:8401 sub 1
0209:0b07 jf __do009
020a: __od009:
020a: test4:
020a:8000 c416 mov a,0
020c: __do010:
020c:9016 8801 c416 inc a
020f:804a 9416 cp a,04ah
0211:4906 jc __do010
0212: __od010:
0212:a00f c40e 900f 8801 c40f c204 c40d 900e d40d 3000 0000 leave
021d: subr2:
021d:900f 8401 c40f 900e d40f enter
0222: __do011:
0222:8007 c480 mov r80h,7
0224:8010 c481 mov r81h,16
0226: __do012:
0226:9080 ld r80h
0227:cc00 OUT 0
0228: __do013:
0228:9082 8801 c482 inc r82h
022b:8401 sub 1
022c:0a05 jnf __do013
022d: __od013:
022d:9080 c801 c480 sfl r80h,1
0230:9081 8401 c481 dec r81h
0233:8401 sub 1
0234:0a0f jnf __do012
0235: __od012:
0235:0814 jmp __do011
0236: __od011:
0236:a00f c40e 900f 8801 c40f c204 c40d 900e d40d 3000 0000 leave
SYMBOL LIST:
= 548 (0x224)
= 566 (0x236)
a = R22 (0x16)
b = 0 (0x0)
c = 3 (0x3)
subr = 315 (0x13b)
g = 2 (0x2)
i = R23 (0x17)
j = R24 (0x18)
k = R25 (0x19)
p = 5 (0x5)
r = 4 (0x4)
w = 7 (0x7)
x = R16 (0x10)
y = R17 (0x11)
putdata = 422 (0x1a6)
__od000 = 359 (0x167)
__od001 = 351 (0x15f)
__od002 = 411 (0x19b)
__od003 = 452 (0x1c4)
__od004 = 444 (0x1bc)
__od008 = 504 (0x1f8)
__od010 = 548 (0x224)
__od009 = 512 (0x200)
__od011 = 547 (0x223)
__od012 = 539 (0x21b)
__od000 = 377 (0x179)
__od001 = 372 (0x174)
__od002 = 364 (0x16c)
__od003 = 429 (0x1ad)
__od004 = 470 (0x1d6)
__od005 = 462 (0x1ce)
__od010 = 530 (0x212)
__od009 = 522 (0x20a)
__od011 = 566 (0x236)
__od012 = 565 (0x235)
__od013 = 557 (0x22d)
invdata = 264 (0x108)
cls = 394 (0x18a)
subr2 = 523 (0x20b)
cls = 412 (0x19c)
subr2 = 541 (0x21d)
bc = R18 (0x12)
at = R13 (0xd)
de = R19 (0x13)
hl = R20 (0x14)
ix = R21 (0x15)
lr = R14 (0xe)
sp = R15 (0xf)
test1 = 463 (0x1cf)
test2 = 487 (0x1e7)
test3 = 495 (0x1ef)
test4 = 504 (0x1f8)
blit8x8 = 440 (0x1b8)
test1 = 481 (0x1e1)
test2 = 505 (0x1f9)
test3 = 513 (0x201)
test4 = 522 (0x20a)
__do000 = 325 (0x145)
__do001 = 327 (0x147)
__do002 = 401 (0x191)
__do003 = 429 (0x1ad)
__do004 = 431 (0x1af)
__do008 = 497 (0x1f1)
__do010 = 528 (0x210)
__do009 = 506 (0x1fa)
__do011 = 532 (0x214)
__do012 = 534 (0x216)
__of005 = 487 (0x1e7)
__ew007 = 495 (0x1ef)
__el006 = 483 (0x1e3)
__do002 = 329 (0x149)
__do003 = 419 (0x1a3)
__do004 = 447 (0x1bf)
__do005 = 449 (0x1c1)
__do010 = 524 (0x20c)
__do009 = 515 (0x203)
__do011 = 546 (0x222)
__do012 = 550 (0x226)
__do013 = 552 (0x228)
__of006 = 505 (0x1f9)
__ew008 = 513 (0x201)
__el007 = 501 (0x1f5)
main = 296 (0x128)
_start = 256 (0x100)
__wh007 = 487 (0x1e7)
__fo005 = 473 (0x1d9)
putdata1 = 370 (0x172)
__wh008 = 505 (0x1f9)
__fo006 = 491 (0x1eb)
putdata1 = 388 (0x184)
~
~
~
[[<前の月>2013-02]]|[[次の月>>2013-04]]
~
~