;
; Virtual Net 96 Routinenpack, 1996 by Hage & Steve of Wizcat
;_____________________________________________________________
;
; Block HL senden, Laenge in DE
;
NOLIST
vnsndb: push de                        ; Laenge senden
        ld a,e
        call vnsnd
        pop de
        push de
        ld a,d
        call vnsnd
        pop de
;
vnsnd1: push de                        ; Block senden
        ld a,(hl)
        inc hl
        call vnsnd
        pop de
        dec de
        ld a,d
        or e
        jr nz,vnsnd1
        ret
;
; Block nach HL empfangen, Laenge nach DE
;
vnrecb: call vnrec                     ; Laenge empfangen
        ret c
        ld (vnrec1+1),a
        call vnrec
        ret c
        ld (vnrec1+2),a
;
vnrec1: ld de,0                        ; Block empfangen
vnrec2: push de
        call vnrec
        jr c,vnrec3
        ld (hl),a
        inc hl
        pop de
        dec de
        ld a,d
        or e
        jr nz,vnrec2
        ld de,(vnrec1+1)
        or a
        ret
vnrec3: pop de
        ret
;
; Byte A senden
;
vnsnd:  ld c,a                         ; Startbit senden
        ld b,&EF
        xor a
        out (c),a
        ds 18
        ld a,128
        out (c),a
;
        rr c                           ; Byte senden
        rra
        ds 13
        out (c),a
        rr c
        rra
        ds 5
        out (c),a
        rr c
        rra
        ds 5
        out (c),a
        rr c
        rra
        ds 5
        out (c),a
        rr c
        rra
        ds 5
        out (c),a
        rr c
        rra
        ds 5
        out (c),a
        rr c
        rra
        ds 5
        out (c),a
        rr c
        rra
        ds 5
        out (c),a
;
        ld a,128
        ds 4
        out (c),a
        ret
;
; Byte nach A empfangen
;
vnrec:  ld b,&F5                       ; Startbit empfangen
        ld de,0
vnemp1: in a,(c)
        cp 64
        jr c,vnemp2
        dec de
        ld a,d
        or e
        jr nz,vnemp1
        scf
        ret
;
vnemp2: in a,(c)
        cp 64
        jr c,vnemp2
;
        ds 12                          ; Byte empfangen
        in a,(c)
        rla
        rla
        rr c
        ds 4
        in a,(c)
        rla
        rla
        rr c
        ds 4
        in a,(c)
        rla
        rla
        rr c
        ds 4
        in a,(c)
        rla
        rla
        rr c
        ds 4
        in a,(c)
        rla
        rla
        rr c
        ds 4
        in a,(c)
        rla
        rla
        rr c
        ds 4
        in a,(c)
        rla
        rla
        rr c
        ds 4
        in a,(c)
        rla
        rla
        rr c
;
        ld a,c
        or a
        ret
;
; Warteschleife
;
vnwait: dec hl
        ld a,h
        or l
        jr nz,vnwait
        ret
;
; Auf Warteroutine warten
;
vnwais: ds 60
        ret
;
; Auf Null warten
;
vnzero: ld b,&F5
        ld de,0
vnzer1: in a,(c)
        cp 64
        jr c,vnzer2
        dec de
        ld a,d
        or e
        jr nz,vnzer1
        scf
        ret
vnzer2: or a
        ret
;
; Auf Eins warten
;
vnone:  ld b,&F5
        ld de,0
vnone1: in a,(c)
        cp 64
        ret nc
        dec de
        ld a,d
        or e
        jr nz,vnone1
        scf
        ret
;
; Auf Null warten ohne Timeout
;
vnzeri: ld b,&F5
vnzei1: in a,(c)
        cp 64
        jr nc,vnzei1
        ret
;
; Auf Eins warten ohne Timeout
;
vnonei: ld b,&F5
vnoni1: in a,(c)
        cp 64
        jr c,vnoni1
        ret
___________