復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第173回]
●EOF(End of File)コード
前回からの続きです。
ソースプログラムの終わりから後は全て00にしたのですが、それでもおかしなエラーはなくなりませんでした。
Premature End of File(ファイルの終わりが早過ぎる)というエラーメッセージから推測すると、どうやらファイルの終わり方に問題があるらしいように思えます。
ソースプログラムの最後にはENDが書いてありますからそれで終わりにしてくれてもよさそうなものですけれど、どうもそうはいかないようです。
END文から後ろを全て00にしてみても、やっぱり駄目でした。
END文の後ろは全て00にしたのですけれど、それでも相変わらず「END文のうしろにまだ何かある」と言っているようです。
ひょっとするとファイルの最後にEOFコードを置いたら解決できるかもしれません。
EOFコードは[第15回]で説明をいたしました。
コード1AHです。
その昔はファイルの終わりを示すために、最後にEOFコード(1AH)を置いたようですが、いまどきのテキストエディタはそんなことはしてくれません。
自分でファイルの終わりに1AHを書くしかありません。
なかなかに面倒なことです。
面倒ではありますが、ND80ZVにはそういう作業のためのマシン語コマンドが用意されていますから、こういう場合には比較的簡単に目的のものを作り上げることができます。
以下は実際に作業を行なった過程を記録したログファイルです。
最初に前回と同じように
JP@8080
を実行して、0100Hからのエリアを00でクリアしました。
前回の結果からすると、このようにしてもエラーメッセージはなくなりませんでしたから、無駄作業のようなものですが、こうすることで視覚的にファイルの終わりがよくわかりますから、そのようにしました。
実行後DM@コマンドでメモリ内容を確認しました。
>jp@8080 >dm@0100,01ff 0100 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0130 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0180 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 0190 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 01A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 01B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 01C0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 01D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 01E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 01F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ > |
>/ld hell1.for,0100 loading HELL1.FOR ...00de(222)bytes loaded,from 0100 to 01DD >dm@0100,01ff 0100 09 50 52 4F 47 52 41 4D-20 48 45 4C 4C 31 0D 0A .PROGRAM HELL1.. 0110 09 57 52 49 54 45 28 33-2C 31 30 30 29 0D 0A 31 .WRITE(3,100)..1 0120 30 30 09 46 4F 52 4D 41-54 28 27 20 48 45 4C 4C 00.FORMAT(' HELL 0130 4F 20 57 4F 52 4C 44 21-21 20 62 79 20 46 4F 52 O WORLD!! by FOR 0140 54 52 41 4E 38 30 27 29-0D 0A 09 57 52 49 54 45 TRAN80')...WRITE 0150 28 33 2C 31 31 30 29 0D-0A 31 31 30 09 46 4F 52 (3,110)..110.FOR 0160 4D 41 54 28 33 58 2C 27-41 2C 42 2C 43 2C 44 3D MAT(3X,'A,B,C,D= 0170 27 29 0D 0A 09 52 45 41-44 28 33 2C 31 32 30 29 ')...READ(3,120) 0180 20 49 2C 4A 2C 4C 2C 4D-0D 0A 31 32 30 09 46 4F I,J,L,M..120.FO 0190 52 4D 41 54 28 34 49 31-35 29 0D 0A 09 4B 3D 49 RMAT(4I15)...K=I 01A0 2B 4A 2B 4C 2B 4D 0D 0A-09 57 52 49 54 45 28 33 +J+L+M...WRITE(3 01B0 2C 32 30 30 29 20 4B 0D-0A 32 30 30 09 46 4F 52 ,200) K..200.FOR 01C0 4D 41 54 28 33 58 2C 27-37 41 2B 42 2B 43 2B 44 MAT(3X,'7A+B+C+D 01D0 3D 27 2C 49 35 29 0D 0A-09 45 4E 44 0D 0A 00 00 =',I5)...END.... 01E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 01F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ > |
>cm@01dd 01DD 0A- 01DE 00-1a 01DF 00- >dm@01d0,01df 01D0 3D 27 2C 49 35 29 0D 0A-09 45 4E 44 0D 0A 1A 00 =',I5)...END.... > |
>jp d233 A>dir A: F80 COM : HELL1 FOR : HELL1 REL : HELLO FOR A: HELLO REL : HELL2 FOR : HELL2 REL A>save 2 hell3.for A> |
A>f80 *=HELL3 HELL1 *end of ZBDOS >0000 00C3 - リモート接続を終了しました logfile closed at Sat Jul 14 10:54:25 2012 |