2014.8.29

前へ
次へ
ホームページトップへ戻る

MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!


[第26回]


●Windows側のプログラム(部分)です

実はちょっと後悔しております。
やっぱりプログラムリストをお見せするべきではなかったのかなと。
いえ。
隠しておくつもりはありませんです。
ただちょっと特殊なプログラムなので、やっぱり説明がしにくいです。
あまり参考にはならないような気がします。

そしてこちらがWindows側のプログラム(BSAVEの部分)です。

[00759]                     ;;; bsave
[00760] 072B  E82C06        BSAVE:CALL DIN <0D5A>
[00761] 072E  3C10              CMP AL,10
[00762] 0730  7527              JNZ BSAVE1 <0759>
[00763]                     ;wfopen
[00764] 0732  E82506            CALL DIN <0D5A>
[00765] 0735  8AD8              MOV BL,AL
[00766] 0737  E82006            CALL DIN <0D5A>
[00767] 073A  8AF8              MOV BH,AL
[00768] 073C  891E5AF1          MOV [ZRETADRS],BX
[00769] 0740  E81706            CALL DIN <0D5A>
[00770] 0743  8AD8              MOV BL,AL
[00771] 0745  E81206            CALL DIN <0D5A>
[00772] 0748  8AF8              MOV BH,AL
[00773] 074A  891E5CF1          MOV [ZWBFADRS],BX
[00774] 074E  B001              MOV AL,01
[00775] 0750  A259F1            MOV [LOGFSW],AL
[00776] 0753  E88B08            CALL LOGOPEN <0FE1>
[00777] 0756  EB6A90            JMP ZBENT32 <07C2>
[00778] 0759  3C12          BSAVE1:CMP AL,12
[00779] 075B  750A              JNZ BSAVE2 <0767>
[00780]                     ;wfclose
[00781] 075D  E84600            CALL WFWRITE <07A6>
[00782] 0760  B43E              MOV AH,3E;CLOSE
[00783] 0762  CD21              INT 21
[00784] 0764  EB5C90            JMP ZBENT32 <07C2>
[00785]                     ;bfwrite & wfwrite
[00786] 0767  3C11          BSAVE2:CMP AL,11
[00787] 0769  7403              JZ BSAVE3 <076E>
[00788] 076B  EB5590            JMP ZBENT32 <07C2>
[00789] 076E  8B1E5CF1      BSAVE3:MOV BX,[ZWBFADRS]
[00790] 0772  E806FB            CALL ADOUT <027B>
[00791] 0775  B238              MOV DL,38;DUMP MEMORY
[00792] 0777  E8AC05            CALL OUT <0D26>
[00793] 077A  B200              MOV DL,00
[00794] 077C  E89105            CALL DOUT <0D10>
[00795] 077F  B300              MOV BL,00
[00796] 0781  BF00E8            MOV DI,WFBFTOP
[00797] 0784  E8D305        BSAVE32:CALL DIN <0D5A>
[00798] 0787  8805              MOV [DI],AL
[00799] 0789  47                INC DI
[00800] 078A  FECB              DEC BL
[00801] 078C  75F6              JNZ BSAVE32 <0784>
[00802] 078E  E81500            CALL WFWRITE <07A6>
[00803] 0791  8B1E5AF1          MOV BX,[ZRETADRS]
[00804] 0795  E8E3FA            CALL ADOUT <027B>
[00805] 0798  B248              MOV DL,48;GO
[00806] 079A  E88905            CALL OUT <0D26>
[00807] 079D  B22E              MOV DL,2E;'.'
[00808] 079F  B402              MOV AH,02
[00809] 07A1  CD21              INT 21
[00810] 07A3  EB1D90            JMP ZBENT32 <07C2>
[00811]                     ;
[00812] 07A6  BA00E8        WFWRITE:MOV DX,WFBFTOP
[00813] 07A9  B90001            MOV CX,100
[00814] 07AC  8B1E5EF1          MOV BX,[WFNO]
[00815] 07B0  B440              MOV AH,40;WRITE
[00816] 07B2  CD21              INT 21
[00817] 07B4  7201              JC WFWRITE2 <07B7>
[00818] 07B6  C3                RET
[00819] 07B7  BAF611        WFWRITE2:MOV DX,WFERRT
[00820] 07BA  B409              MOV AH,9
[00821] 07BC  CD21              INT 21
[00822] 07BE  C3                RET
[00823]                     ;

前回の説明を書いている時点では、Windows側のプログラムはてっきりBorlandC++で書いたものだと思い違いをしておりました。
この作業は例によりまして、今だ現役のWindows98SEでやっております。
なにしろパラレルポート(プリンタポート)が使えるので非常に便利なのです。
壊れてしまうまで手放せそうにありません。

当社のBASIC制御マイコンボードZB28KほかのZBKボードのためのWindows側のプログラムは、昔からのパラレルポート接続用とUSB接続用の二本立てになっています。
もちろんWindows98SEでもそのどちらも使うことができるのですが、やっぱりパラレルポート接続のほうが慣れていて使いやすいので、どうしてもそちらを使ってしまいます。
USB接続用はBorlandC++で書いているのですが、パラレルポート接続用は、自作の8086アセンブラで書いています。
そのことをすっかり忘れておりました。

いまどきはC++ならば皆様方のなにかの参考にはなると思いますが、8086アセンブラではねえ。
ちょっと説明するのもなんだかなあと思ってしまいます。
これはこれでC++ではできない(やりにくい)処理などもこなせるのでなかなかに便利なところもあるのですけれどねえ。

そういうわけで、とりあえずプログラムリストをお見せするだけにしまして、説明のほうは省略させていただきます。
いまどきは滅多に見ることもなくなってしまった8086の機械語プログラムのリストでありますから、「ほお、こんなものなのか」と思って見ていただければと思います。
8086のプログラムはコマンドプロンプト限定ではありますが、Windows7(ただし32ビット)でもちゃんと動きます。
まだまだ現役でありますから、8080やZ80のアセンブラの延長として、こういうものに親しんでいただくのもまた一興かと思います。

MYCPU80でCP/Mを![第26回]
2014.8.29upload

前へ
次へ
ホームページトップへ戻る