[ZILF] Object Limit


I’m wondering what the object limit for ZILF is before I get in too deep.

I take it version 3 is 255, but what about version 5?

And can ZILF be complied in version 8? I only know of the VERSION XZIP command.

@vaporware Thanks for all your work on ZILF. It’s fun to explore.

  • D
1 Like

In ZILF, VERSION accepts numbers 3-8 or ZIP, EZIP, XZIP, YZIP. A naive test build of a game I’ve been writing as a ZIP (v3) with <VERSION 8> just now gave me a slightly larger .z8 binary and Frotz assigned it some colors by default, so I assume that means something happened.

The restrictions on objects and so forth should all be as documented in the Z-Machine Standards.

1 Like

Technically, it’s 65,535, as documented in the Z-Machine Standard.

But it’s impossible to reach that limit anyway: you’ll hit the 64k RAM limit before then. Each object takes up multiple bytes in RAM, so even if your game consisted of nothing but objects with no names or properties, you could only define about 4000 of them.


1 Like

Thanks, I didn’t know about <VERSION 8> I tested it, and it creates a .z8 too.

Yeah. I was looking at that 64k RAM limit. I remember hearing something about that with Ozmoo. I’m also wondering if there is a -s for ZILF that would output the statics? Similar to Inform, but giving the RAM limit too. I don’t see it in the zapf options, but it would be nice if possible.

  • D

Just so you know, Ozmoo has tighter memory constraints than the general Z-Machine limits. Even some z5 games like (dug around for a minute to find one) Scald can fail on Ozmoo not because they are too large to fit on supported disk formats* but because the dynamic memory requirements are too big to fit in the C64’s memory with, y’know, the interpreter also doing its thing.

Reading file scald.z5...
Dynmem blocks: 75
$zmachine_memory_size = 193960
$story_size = 194048
acme/acme --setpc 2049 -DCACHE_PAGES=4 -DSTACK_PAGES=4 -DZ5=1 -DCONF_TRK=1 --cpu 6510 --format cbm -DBGCOL=2 -DFGCOL=9 -DBORDERCOL=0 -DSMALLBLOCK=1 -DVMEM=1 -DALLRAM=1 -l "ozmoo/temp/acme_labels.txt" --outfile "ozmoo/temp/ozmoo" ozmoo.asm
Interpreter size: 11100 bytes.
ERROR: Dynamic memory is too big (38400 bytes), would pass $D000. Maximum dynmem size is 37888 bytes.
  • indeed, Ozmoo’s support for 800k .d81 images means that a story file’s size alone can’t be the only reason Ozmoo would be totally unable to cope.

The -la switch will print all the global label addresses, including the ones that are used to divide the memory map. In particular, IMPURE marks the end of RAM, so its address always has to be below $10000.

1 Like