AllocSignal EQU -330
FreeSignal  EQU -336
Wait        EQU -318
AllocMem    EQU -198
FreeMem     EQU -210
FindTask    EQU -294
AddPort     EQU -354
OpenDevice  EQU -444
ExecBase    EQU 4

 public _TDOpen
 ; TDOpen(drive,devicename,name) long drive - char *devicename char *name

_TDOpen:
        move.l  4(a7),drive
        move.l  8(a7),devname
        move.l  12(a7),tdname        
       	movem.l d1/d7-a0/a6,-(sp)
        move.l  ExecBase,a6
        moveq   #-1,d0
        jsr     AllocSignal(a6)
        tst.l   d0
        bmi     signalerr
        move.b  d0,signal  
        moveq   #90,d0
        move.l  #$10001,d1    ; MEMF_PUBLIC|MEMF_CLEAR
        jsr     AllocMem(a6)       
        move.l  d0,iostdreq
        add.l   #56,d0
        move.l  d0,msgport
        move.l  d0,a1
        move.b  #$04,8(a1)  ; ln_type = NT_MSGPORT
        move.l  tdname(pc),10(a1) ; ln_name
        move.b  signal(pc),15(a1) ; mp_SigBit
        move.l  a1,-(sp)
        sub.l   a1,a1
        jsr     FindTask(a6)
        move.l  (sp)+,a1
        move.l  d0,16(a1)    ;mp_SigTask
        jsr     AddPort(a6)
        
        move.l  iostdreq(pc),a1
        move.l  msgport(pc),14(a1) ; mn_ReplyPort = msgport
        move.w  #56,18(a1)         ; mn_Length = 56 Byte
        move.b  #$05,8(a1)         ; Typ ist NT_MESSAGE $5
;        lea     TD_NAME(pc),a0
        move.l  devname(pc),a0
        move.l  drive(pc),d0
        moveq   #0,d1          
        jsr     OpenDevice(a6)
        tst.l   d0
        bne     error
        movem.l (sp)+,d1/d7-a0/a6 
        move.l  iostdreq(pc),d0              ; d0 = iostdreq 
        rts
        
error: 
        move.l  iostdreq(pc),a1
        moveq   #90,d0
        jsr     FreeMem(a6)
        moveq   #0,d0 
        move.b  signal(pc),d0
        jsr     FreeSignal(a6)
signalerr: 
        movem.l (sp)+,d1/d7-a0/a6 
        moveq   #0,d0
        rts

; TD_NAME:       dc.b "trackdisk.device",0
signal:        dc.b 0 
drive:         dc.l 0
devname:       dc.l 0
tdname:        dc.l 0
msgport:       dc.l 0
iostdreq:      dc.l 0	 
 end



; TDOpen kann übrigens genausogut auch das input.device, printer.device, 
; console.device und das wasweißich.device öffnen.



  

