LUSIANI%VXALTP.DECnet@CERNVAX.BITNET (08/08/88)
I am writing a simple program that allocates some memory, copies an executable
module in it, calls F$VModul, and then exits. F$VModul requires system state,
but I saw that in system state a program like the following exits with error
after F$Exit, while in user mode it completes correctly. The following program
just opens /term, allocates memory, deallocates memory, closes /term.
What I' m doing wrong ? I am using os9 v 2.1.
Thanks
Alberto Lusiani
---------------- cut here ---------------------------------------
nam Trapini
ttl User Trap Handler for the TPP
use oskdefs.d
use systype.d
* use tppdefs.d
opt lx
************************************************
* Edition History
*
* # Date Comments By
* -- -------- ------------------------------------------------- ---------------
*
*
Edition equ 1 current edition number
Typ_Lang set (Prgrm<<8)+Objct mainline segment
* Attr_Rev set ((ReEnt!SupStat)<<8)+0
Attr_Rev set ((ReEnt)<<8)+0
psect test,Typ_Lang,Attr_Rev,Edition,255,Entry
file_name dc.b "small",0
stdout_n dc.b "/term",0
crlf_str dc.b C$CR,0
delim_s dc.b " - ",0
align
vsect
path do.w 1
stdout do.w 1
buf do.b 8
mod_addr do.l 1
ends
use alb_io.a ; get string/number I/O funcs
err_abort MACRO
bcc ea\@1
os9 F$Exit
ea\@1
ENDM
************************************************************************
*
* Begin of Main
*
Entry
lea stdout_n(pc),a0
move.b #(Read_!Write_),d0
os9 I$Open
err_abort
move d0,stdout(a6)
* Writes stdout(a6),file_name(pc)
* Writes stdout(a6),crlf_str(pc)
lea file_name(pc),a0
move.b #Read_,d0
os9 I$Open
err_abort
move d0,path(a6)
* Writeshort stdout(a6),#1
move.l #8,d1
lea buf(a6),a0
os9 I$Read
err_abort
lea buf(a6),a0
* Writelong stdout(a6),4(a0)
move.l 4(a0),d0
os9 F$SRqMem
err_abort
move.l a2,mod_addr(a6)
* Writelong stdout(a6),a2
lea buf(a6),a0
move.l (a0),(a2)
move.l 4(a0),4(a2)
move path(a6),d0
move.l 4(a0),d1
subq.l #8,d1
lea 8(a2),a0
os9 I$Read
err_abort
move path(a6),d0
os9 I$Close
err_abort
* Writeshort stdout(a6),#3
movea mod_addr(a6),a0
move.l #$0000,d0
* os9 F$VModul
* Writes stdout(a6),crlf_str(pc)
* Writelong stdout(a6),d1
* Writelong stdout(a6),a2
* Writelong stdout(a6),a0
* Writes stdout(a6),crlf_str(pc)
move #0,d0
lea file_name(pc),a0
* os9 F$Link
err_abort
* Writeshort stdout(a6),#4
move.l #$80000900,d0
* os9 F$Sleep
err_abort
* Writeshort stdout(a6),#5
lea file_name(pc),a0
* os9 F$UnLoad
err_abort
* Writeshort stdout(a6),#6
movea mod_addr(a6),a2
move.l 4(a2),d0
os9 F$SRtMem
err_abort
* Writeshort stdout(a6),#7
close_exit
move stdout(a6),d0
os9 I$Close
err_abort
move #0,d1
os9 F$Exit
ends