[A83] Re: _insertmem


[Prev][Next][Index][Thread]

[A83] Re: _insertmem




> Van: KWarp9@cs.com
> 
> A few questions for the TI-83 (-).
> I've been going through the source of Zasmload and I came across the
romcall 
> _insertmem. Can anyone tell me what this does and how to use it? 
> I know that the name and size of a program are stored in the programtable
and 
> at the actual place where the program is stored. Are there any other
places I 
> should know about if I want to change anything in the name or size of the

> program?

For the Ti83 (source 83-rom.txt/zip):

+- _INSERTMEM
------+-------+-------+-------+-------+-------+-------+-------+
|                   |  4432 |  4432 |  4432 |  4432 |  4432 |  4432 |  4432
|
+-------------------+-------+-------+-------+-------+-------+-------+-------
+
| Call to:          |  ???? |  ???? |  ???? |  ???? |  ???? |  ???? |  ????
|
+-------------------+-------+-------+-------+-------+-------+-------+-------
+
input: DE = place from where to allocate
       HL = size to be allocated
output: DE = beginning of inserted memory
        VAT-pointers updated.
destroyed: AF, HL, BC
description: allocate one byte of memory,
NOTE: First check if enough mem free (call _memchk) for allocated block!
      If you use this routine to enlarge a file, you have to manualy change
      the sizebytes of the file! (_insertmem doesn't do this)

Enlarging a file is pretty straight forward, just lookup where the file is,
pinpoint where you want to inserte free space, and update the sizebytes. As
far as I know there is even a ROMcall that does right this (at least I've
seen one on the Ti82 and on the Ti83+).

Renaming a file is a bit more difficult, as a programs VAT entry can take
variable amount of space (5 till 11 bytes). So you can't simply overwrite
the name-string with a new one (unless you keep the string-size the same).
The easiest/smallest way to do it I think is to first create a new 0 bytes
file with the new name. Then swap the data/sizebytes-pointers between the
old and the new entry. And at last remove the old entry (now pointing to
the sizebytes of your 0 bytes program) via _delvar.

There are off coarse more hacker'ish approaches for both of the problems
(but why would you then want to use _insertmem?).

	Henk Poley <><