LSX-DODGERS Port for MSX(LDMSX) report003

ZAS error “Too may symbols”

I continued solve the differences between two assemblers as introduced in previous post, I encountered error “Too may symbols”(sic.) while including other source file. (FYI, this error message is not explained in HI-TECH C manuals.)

I suppose, this means “Too many sybols” and memory area is not enough. I decided to compress ZAS binary and make free memory.

I used PopCOM! execution file compresser on CP/M. It is distributed in “PC88 users club library”.

http://www.pc88.gr.jp/softlib/index.php?action=find_by_env&env=/cpm&from=1&size=20

After compression, size of ZAS.COM is 19840 from 37632 bytes.
(I compressed link.com as well this time for further use.)

I wanted to solve memory shortage by this with 18k extended free area, but in vain. “Too many symbols” error is not resolved by memory free area.

前回紹介したアセンブラ間での差分を解消しながら、ソースをアセンブルしていくと、ファイルをインクルードしたときに”Too may symbols”(ママ)のエラーが出てしまいました 。(ちなみにこのエラーメッセージはHI-TECH Cマニュアルに記載されてません)。

シンボルが多すぎる、ということだと思うのですが、メモリに確保している領域が足りなくなるのかな?と勝手に推測。いい機会なので、ZASのバイナリの方を圧縮してみることにしました。

使用したのはCP/M用の実行バイナリ圧縮ツールのPopComです。
PC88 users club libraryにあったものを使用しました。

http://www.pc88.gr.jp/softlib/index.php?action=find_by_env&env=/cpm&from=1&size=20

圧縮した結果、37632から19840になりました。
(後で使うので一緒にlink.comも圧縮しました。)

18k近くも空くなら、メモリ不足は解消するでしょう。
…と思いましたが、結論からいけばダメでした。

Symbolが多すぎるのは、空きメモリを増やしても解消しないようです。

LSX-DODGERS Port for MSX(LDMSX) report002

LSX-Dodgers is written by Z80 absolute macro assembler “OHM-Z80” on S-OS. S-OS is a multi-platform operating system project across some PCs in 80’s Japan. (S-OS is interesting and deeply technical topic so I can not describe here any further). I deeply involved in HI-TECH C for CP/M, so I want to use HI-TECH C assembler “ZAS” this time.

Ports of S-OS and OHM-Z80 is available here.

http://www.retropc.net/ohishi/s-os/

The my first interest (or TASK) is converting OHM-Z80 assembler source to HI-TECH C “ZAS” assembler. OHM-Z80 is highly extended (this topic is also so DEEP and technical, sorry) and source code for this assembler is not assembled easily with other assembler.

There are so many difference between these two assemblers and I tried to list below as far as I noticed (so it is not complete one).

My first goal is to complete editing these points.

*Description for addresses
[OHM-Z80]
Starts with $ or ends with H
[ZAS]
Ends with H

*Final and absolute address is determined by
[OHM-Z80]
OFFSET
[ZAS]
Linker(LINK -C)

*Including other source files
[OHM-Z80]
$INCLUDE
[ZAS]
*Include on line head

*Available characters for labeling
[OHM-Z80]
[],@ are OK
[ZAS]
[],@ are N/A

*Definition for bytes
[OHM-Z80]
DB & DEFB are available
[ZAS]
DB & DEFB are available, but DB cause error(by unknown reason)

*Definition for words
[OHM-Z80]
DW is available
[ZAS]
DW is not available(only DEFW)

*Recursing DEFW definition via labels
[OHM-Z80]
Available
[ZAS]
N/A

LSX-DodgersはS-OS用Z80アブソリュートマクロアセンブラである”OHM-Z80″で書かれました。S-OSは80年代のPCをまたいだマルチプラットフォームOSプロジェクト(S-OSは興味深いのですが、とてもディープで技術的な内容になるので、ここではこれ以上触れません)。自分はHI-TECH C for CP/Mにどっぷり浸かってしまったので、今回はHI-TECH C 用アセンブラである”ZAS”を使いたいと思います。

S-OSの移植版とOHM-Z80は以下で入手可能です。

http://www.retropc.net/ohishi/s-os/

自分の最初の関心(というかタスク)はOHM-Z80のアセンブラソースをHI-TECH C “ZAS”アセンブラに変換することです。OHM-Z80は大幅に拡張されており(このトピックもディープでテクニカルなのです、スイマセン)、このアセンブラ用のソースコードは他のアセンブラではそう簡単にはアセンブルできません。

この二つのアセンブラの間には多くの差異があるため、気づいた範囲で(なので完全ではないのですが)以下にリストアップします。

最初の目標はこれらの点の修正を完了することです。

□アドレスの表記
[OHM-Z80]
$で始まるかHで終わる
[ZAS]
Hで終わる

□最終的な配置アドレス
[OHM-Z80]
OFFSET
[OHM-Z80]
リンカ(LINK -C)

□他ソースファイルのインクルード
[OHM-Z80]
$INCLUDE
[ZAS]
行頭で*Include

□他テキストのインクルード
[OHM-Z80]
$CHAIN
[ZAS]
行頭で*Include

□ラベルの文字制限
[OHM-Z80]
[]と@が使える
[ZAS]
使えない??

□DB
[OHM-Z80]
DBで通る(DEFBの略)
[ZAS]
DBでエラーが出るが、DEFBだと通る

□DW
[OHM-Z80]
DWで通る
[ZAS]
DEFWでないと通らない(省略形がない)

□DEFWでのラベルを介した再帰的な定義
[OHM-Z80]
DWで2バイト分なら他ラベルを参照しても通る
[ZAS]
通らない