Re: A92: fixed code
[Prev][Next][Index][Thread]
Re: A92: fixed code
>I want to do write a little utility that would display the amount of
>free memory on the status bar. It would be updated at a certain
>interval. The way I see it is this: an interrupt is set that at the
>given interval would jump to the routine. The problem is that programs
>aren't fixed in memory. Does anyone know how to place some code in the
>memory and ensure that it won't be moved or deleted by TiOS?
The only way is that you make a resident program which would be located at
the top of the memory.
Here is a piece of code which copies a program at the top of the memory and
links it with auto-int1:
move.w #$700,d0
trap #1 ;ints off
bclr.b #1,$600001 ;memory protection off
move.l $64,old_int ;get the old auto-int handler adress and saves it in
a long variable.
lea tios::globals+$18F6,a0 ;a0 points to the adress of the Top of heap
move.l #endprog-start,d1 ;d1 is the size of your resident code
sub.l d1,(a0) ;diminuates the adress of the top of heap
move.L (a0),a0 ;a0 now points to the top of heap and not its adress
lea start(pc),a1 ;load the adress of your resident code
move.l a0,$64 ;changes the auto-int1 handler
subq.l #1,d1
\cpy move.b (a1)+,(a0)+ ;copies the resident code at
dbra d1,\cpy ;the top of memory
bset.b #1,$600001 ;mem protect on
clr.w d0
trap #1 ;ints on
notes: -endprog is the label located just after the end of the resindent code
-the size of the resident code MUST be an even adress, of course.
-this code should work on every ROM version (1.x & 2.1). It should work on
a 92+ but I'm not sure (just replace 'tios::globals+$18F6' with $4C00+$18F6)
I hope this can help.
Xavier VASSOR
---The Doors Team
E-mail:xvassor@mail.dotcom.fr
Doors Homepage: http://doorshome.home.ml.org
ICQ:10241721
Follow-Ups:
References: