悪夢の linux 戦記
「ワタシ、linux 語ワカリマセ〜ン」

つーか Windows もろくに出来ないんですけど。。。



*** XPのパソコンを復旧してやる!!超修理挑戦編 ***
Round fight 5 2章!!!
軽量PCとSSD HDDにインストールしちゃおう!番外編

'20.8.21 作成
'24.10.11 更新


(本文)

PC88 BIOS ROMやBASICには「mon」という命令があり、
このmonコマンドモード単体だけでもアセンブラが組めるようになっています。
aコマンド中(アッセンブル命令入力モード)に入力するアセンブラ
命令文がよく分からないので、00-ff まで逆アセンブル表示をやってみました。

その時のメモを少しだけ清書したのが以下。

ブート後、
mon
ac000
rst 7
gc000


うわあああいアセンブラだー!わーいわーい!


うわあああいアセンブラだー!わーいわーい!

88 mon モニターによる hex00-ff 逆アセンブル表示
これで使える命令がぜんぶ分かるはず!(な訳ないか…)
00 NOP
01 0203 LXI B,0302
02 STAX Bstore X だからメモリ書き込み命令じゃね?
03 INX BIncrimentX B だから BC <= BC+1 じゃね?
04 INR BB <= B+1 じゃね?
05 DCR BB <= B-1 じゃね?
06 07 MVI B,07B <= 0x07
07 RLCAを左ローテートじゃね?
08 ???対応アセンブラなし
09 DAD Bなんだろこれ。
0a LDAX BA <= (BC)
0b DCX BDecrimentX B, BC <= BC-1じゃないかな
0c INR CIncriment C, C <= C+1じゃないかな
0d DCR CDecriment C, C <= C-1じゃないかな
0e 0f MVI C,0FC <= 0x0fじゃないかな
0f RRCA <= A >> 1bitシフト
10 11 DJNZ C013特殊条件ジャンプ命令? DJNZ e の事かな?
Bをデクリメントして、
B=0ならジャンプするらしい
11 1917 LXI D,1917
12 stax D(DE) <- A メモリ書き込み
13 INX DIncriment(16bit) DE, DE <- DE+1かな?
14 INR DIncriment D, D <- D+1かな?
15 DCR DD <= D-1
16 17 MVI D,17D <= 0x17
17 RALA <= A << 1 A[0] <= 0?
16 17 MVI D,17D <- 0x17 かな?
17 RALRotate A To Left?左論理シフト命令かな??
18 19 JMPR C023 PC <= PC + 0x19 + 2。相対ジャンプ
19 DAD Dなんだろこれ???
1a LDAX DA <= (DE)
1b DCX DDE <= DE-1
1c INR EE <= E+1
1d DCR EE <= E-1
1e 1f MVI E,1FE <= 0x1f
1f RARA <= A>>1
20 21 JRNZ C023PC <=if NC, PC + 0x21 + 2(相対ジャンプ)
21 23 22 LXI H,2322HL <= 0x2322
22 24 23 SHLD 2423(2423) <= L, (2423+1) <= H
23 INX H HL <= HL+1
24 INR H H <= H+1
25 DCR H H <= H-1
26 27 MVI H,27 H <= 0x27
27 DAAfor decimal packed BCD演算関係らしいけど
28 29 JRZ C033PC <= PC + 0x29+2
c008からc033への相対ジャンプ
29 DAD H(BCD演算関係???)
2A 2C2B LHLD 2c2b0x2c2b番地からLHレジスタに読み込み、らしい
2B DCX Hdecriment HL
2C INR Lincriment L
2D DCR Ldecriment L
2e 2f MVI L,2fL <- 0x2f じゃね?
2f CMAComplement acc. A
補数をA に入れる
30 31 JRNC C133If NC, PC<= 0x31 x 2 + 0x2 じゃないの?
31 c7c4LXI SP,c7c4 SP <= 0xc7c4 じゃないの?
32 3433STA 3433 0x3433番地にAを書き込む
33INX SP
34INR M
35DCR M
36 37MVI M,37
37STC Set Cary Flag。
38 39JRC C143
39DAD SP
3a 3c3bLDA 3c3b
3bDCX SP
3cINR A
3dDCR A
3e 3fMVI A,3f
3fCMC Complement CarryFlag
キャリーフラグの1の補数をキャリーフラグに入れる
40-47MOV B, B/C/D/E/H/L/M/A
48-4fMOV C, B/C/D/E/H/L/M/A
50-57MOV D, B/C/D/E/H/L/M/A
58-5FMOV E, B/C/D/E/H/L/M/A
60-67MOV H, B/C/D/E/H/L/M/A
68-6FMOV L, B/C/D/E/H/L/M/A
70-75MOV M,B/C/D/E/H/L
76HLT
77MOV M,A
78-7FMOV A,B/C/D/E/H/L/M/A
88-8fADD B/C/D/E/H/L/M/A
80-87ADC B/C/D/E/H/L/M/A
90-97SUB B/C/D/E/H/L/M/A
98-9FSBB B/C/D/E/H/L/M/A
A0-A7ANA B/C/D/E/H/L/M/A Aレジスタと各レジスタをの論理積を取る、らしい
A8-AFXRA B/C/D/E/H/L/M/A Aレジスタと各レジスタをの排他的論理積を取る、らしい
B0-B7ORA B/C/D/E/H/L/M/A Aレジスタと各レジスタをのORを取る、らしい
B8-BFCMP B/C/D/E/H/L/M/A
C0RNZ return NZ の事じゃね?
C1POP B
C2 C4C3JNZ C4C3 Z=1の時ジャンプ?
C3 C7C4JMP C7C4 無条件絶対アドレス指定分岐かな?
C4 c7c7CNZ C7C4 ジャンプ系命令だろうけど何だろこれ…
C5PUSH B
C6 C7ADI C7 たぶんAレジスタに即値 C7 を足すって意味じゃね?
C7RST 0
C8RZ return Z の事じゃね?
C9RET
CA CCCBJZ CCCB
CB xx BIT b,(HL) Z ← (IX+d)b
CB 00 07 RLC A with carry,
left rotate, C< = A[0]
CB 00 01-06 RLC B/C/D/E/H/L/(HL) with carry,
left rotate, C <= A[0]
CB 00 0f RRC A, right rotate,
A[7] <= A[0] A[n] <= A[n+1] C <= A[0]
CB 00 (0000 1sss)
sss=111:A, 000:B,001:C,010:D,011:E,100:H,101:L
CB 00 08-0FRRC B/C/D/E/H/L/M/A
CC 23CBCZ 23cb Call when Z の事じゃね?
CD CFCECALL CFCE
CE CFACI CF
CFRST 1
D0RNC return NC の事じゃね?
D1POP D
D2 D4D3JNC D4D3
D3 D4OUT D4
D4 E3DCCNC E3DC call when C=1じゃね?
D5push D
D6 D7SUI D7 sub r の事らしい A <- A - 0xXX
D7RST 2
D8RC return When C=1 の事じゃね?
D9 exx,
BC<->BC',DE<->DE',HL<->HL'
を行う。非公開命令じゃん?
DA DCDBJC DCDB
db dcIN DC JC DCDB
DC c4e3CC c4e3 call when C=1じゃないの?
DD 21 nn MMLD IX,MMnn レジスタIX <=固定値 0xMMnn
IX <= 0xMMnn
DD 22 nn MMLD IX,MMnn メモリ(アドレス直接指定)<=レジスタの値
(0xMMnn) <= IX[7:0]
(0xMMnn+1) <= IX[15:8]
ちょっと変わってるなぁコレ。レジスタIXの値を
メモリ 0xMMnn に書き込むらしい
DD 2A nn MMLD IX,(MMnn) レジスタ <= メモリ(アドレス直接指定)
IX[7:0] <= (MMnn)
IX[15:8] <= (MMnn+1)
DD 36 dd nnLD (IX+0xdd),nn メモリ(IX+オフセット指定) <= 即値 0xnn
(IX+0xdd) <= 0xnn
DD 70-75/77 ddLD (IX+0xdd),B/C/D/E/H/L/A メモリ(IX+オフセット指定) <= レジスタ
(IX + 0xdd) <= A
DE(調査ミス、抜け)
DFSBI DF(調査ミス)
E0RPO Return POじゃね?
E1POP H
E2 E4E3JPO E4E3 jmp when PO
E3(調査ミス、抜け)
E4CPO e7e3 Call when PO の事じゃね?
E5PUSH H
E6 e7ANI e7 And n. A <- A and n
E7RST 4
E8RPE return PE の事じゃね?
E9PCHL jmp hl. PC <- HLのこと
Ea ecebjpe eceb
EBXCHG H<->D,L<->E
E9PCHL jmp hl
PC <- HLのこと
Ea ecebjpe eceb jump when PE=1 じゃね?
EBXCHG H<->D,L<->E
ec efebCPE efeb CALL when PE=1 じゃね?
Ed xx??? IN r,(C)相当らしい 11101101 01DDD000
ee efxri ef xor xx. A <- A xor xx
EFRST 5
f0RP return when P...じゃないのかな?
F1POP PSW pop AF という事らしい。
F2 F4F3JP F4F3
F3DI Disable Interrpt flag(I<=0)
f4 F7F3CP f7f3
F5PUSH PSW push AF という事らしい。
F6 f7ORI F7
F7RST 6 restart命令
f8RM なんだろこれw多分 returns memory(HL)って事だろうね
F9SPHL exchange SP <-> HL って事じゃないの
fa fcfbJM FCFB Jamp memory's address って事だろうね
FBEI
fc fffbCM fffb call memory fffb 番地に書いてあるアドレス
>って事じゃないの
FD 2A??? LD IY,nnmm IY <= nnmm
あってんのかなこれ・・・怪しいw
FD 21 nn MM??? LD IY,MMnn レジスタIY <=固定値 0xMMnn
IY <= 0xMMnn
FD 22 nn MM??? LD (MMnn),IY メモリ(アドレス直接指定)<=レジスタの値
(0xMMnn) <= IY[7:0]
(0xMMnn+1) <= IY[15:8]
FD 2A nn MM??? LD IY,(MMnn) レジスタ <= メモリ(アドレス直接指定)
IY[7:0] <= (MMnn)
IY[15:8] <= (MMnn+1)
FD 36 dd nn??? (IY+0xdd),nn メモリ(IY+オフセット指定) <= 即値 0xnn
(IY+0xdd) <= 0xnn
FD 77/70-75 dd??? LD (IY+0xdd),A/B/C/D/E/H/L メモリ(IY+オフセット指定) <= レジスタ
(IY + 0xdd) <= A/B/C/D/E/H/L
FD 7e nn??? LD A,(IY+0xnn) レジスタ<= メモリ(IY+オフセット指定)
A <= (IY + 0xnn)
FD 46/4e/56/5e/66/6e nn??? LD B/C/D/E/H/L,(IY+0xnn)
(IY系未検証)
FE ffCPI ff
FFRST 7 restart命令。int命令だけどフラグは保存しないらしい
SPにはPCを保存するらしい
ジャンプ先は8かけるn?
PE/PO というのは
PE は parity even (偶パリティ
PO は paritiy odd ( 奇数パリティ  V と同じ意味らしい。

http://www.yamamo10.jp/yamamoto/comp/Z80/instructions/index.php
だいたいはこのHPに書いてある。らしい。





mov a, m (HL) -> a の事らしいw
mov m, a a -> (HL) の事らしいw
LDA 0000 0000番地をAに読み込む、という事らしいw
LXI H,0 HL <= 0000 となるらしい。
LXI D,ffff DE <= ffff
LHLD 2c2b 0x2c2b番地からLHレジスタに読み込み、らしいw
mvi a,12 A <= 12 /td>
INR A A <= A + 1
DCR A A <= A - 1
ANA B A <= A and B
cpi 34 A - 34 の結果をフラグレジスタにセット
jmp XXXX XXXX番地にジャンプ



レジスタ <= 数値セット
命令
MVI B/C/D/E/H/L/M/A,12 B/C/D/E/H/L/(HL)/A <= 0x12
LXI B/D/H/SP,0302 BC/DE/HL/SP <= 0x0302
16bit
レジスタ <= メモリ、
ロード命令
LDA 0000 0000番地からAに読み込む、という事らしい
LHLD 2c2b 0x2c2b番地からLHレジスタに読み込み、らしい
LDAX B/D A <= (BC)/(DE)
SHLD 2423(2423) <= L, (2423+1) <= H
メモリ <= レジスタ、
ストア命令
STA 1234 0x1234番地にAレジスタの値を書き込む
STAX B/D (BC)/(DE) <= A
インクリメント
デクリメント命令
INR B/C/D/E/H/L/M/A B/C/D/E/H/L/(HL)/A <= B/C/D/E/H/L/(HL)/A+1
DCR B/C/D/E/H/L/M/A B/C/D/E/H/L/(HL)/A <= B/C/D/E/H/L/(HL)/A-1
INX B/D/H/SP BC/DE/SP <= BC/DE/HL/SP+1
DCX B/D/H/SP BC/DE/SP <= BC/DE/HL/SP-1
シフト命令 RAL A <= A<<1
RAR A <= A>>1
RRC A <= A>>1 | Carry8かな…

※機能別のこの表は抜けだらけです。
主に使いそうな主要な命令だけ適当にピックアップしただけ。



mvi a,12
cpi 11
jnc 7ffc 7ffc に飛ぶ。
rst 7 7



mvi a,11
cpi 12
jnc 7ffc
jmp c007 c007 の無限ループになる。
引き算・比較は c フラグ見ればいいのかな??


スペースキーを押すと終了するアセンブラw(多分動いてない
mon
ac000
mvi b,40
in 9
ana b
cpi 40
jnz c002
rst 7
(リターンで入力モード抜ける)
gc000
0xff:RST 7 がmonに戻るソフトウェアブレークポイント命令相当
らしい?
モニタにjmp 7ffc で戻ろうというのは間違いらしい???



うわああああい、アセンブラーだー、アセンブラーだぁぁ、
うわーーい、うわーーーい、たっのしいな〜〜〜〜♪
うわーいうわーーーい♪



しっかしROMだけでアセンブラ組めるとか
すっげーなこのハード・・・
最近じゃVisualStudioだのgccだの絶対ツール必須なのに…。
信じられないパフォーマンスだぜこいつ・・・


!!!以下、未整理。

試作アセンブラの試作コード
試作アセンブラの試作の試作コード2
よてい

びじゅあるすたじおこーどのVB.net拡張に挑戦資料
68kをさわってみた感想文

当ホームページの現在のメインコンテンツは以下でございます。
乱雑で読みにくいので、気分を害したくない、面倒くさい意味不明な事を
言われなくない、暴言で不快な思いをしたくない正常な神経の方、
アタマのおかしい人を相手にしたくない方や、暇ではない方、お時間が無い方、
正常な神経の方、頭がおかしくない方、
武石雅夫が嫌いな方は絶対に読まないで下さい。

PCMデータをYM2203音色データに変換挑戦で分かった事

もどる

ほーむ