; pchk.a -- check PVCF in memory
pchk: 
        xchg  ; DE - points to MM addr
        lxi h,GBL_4K
        lxi b,1108/4
        call mm_fetch
; check VCFC
        lda expected_vcfc
        cmp M
        jnz vbrk
        inr a
        sta expected_vcfc
; process packets
        lxi h,GBL_4K+3
        shld ppp
        lxi b,1105
ckl1:   call chkit
        lhld ppp
        inx h
        shld ppp
        dcx b
        mov a,b
        ora c
        jnz ckl1
        ret
ppp     ds 2

chkit:  lhld state
        pchl
state   dw s0
expected_vcfc db 0
nskip   ds 1
vbrk:   call debug_asc
        asc "VCFC break$"
        ret

s0:     lhld ppp
        mov a,M
        cpi 0Fh
        jz p1ok
        call debug_asc
        asc "0F missing$"
bad:    lxi b,1         ; force stop
        ret
p1ok:   lxi h,s2
        shld state
        ret

s2:     lhld ppp
        mov a,M
        cpi 20h
        jz p2ok
        call debug_asc
        asc "20 missing$"
        jmp bad
; skip to packet length byte 1
p2ok:   lxi h,skip
        shld state
        mvi a,2
        sta nskip
        jmp nextt
skip:   lda nskip
        dcr a
        rnz
        lxi h,getpl1
        shld state
        ret
getpl1: lhld ppp
        mov a,M
        cpi 0fh
        jnz badlength
        lxi h,getpl2
        shld state
        ret
getpl2: lhld ppp
        mov a,M
        cpi 0F7h
        jnz badlength
; skip to 1st pattern byte
        mvi a,14
        sta nskip
        lxi h,patskip
        shld state
        ret
badlength:
        call debug_asc
        asc "badlength$"
        jmp bad
patskip: lhld ppp
        lda nskip
        lxi h,patskip
        dcr a
        sta nskip
        rnz

; process pattern
        lxi h,1018
        shld n_pat_words
        mvi a,03h  ; initial 3rd pat byte
        sta pb3
        lxi h,pat1
        shld state
        ret
n_pat_words ds 2
pb3     db 03h
nextt:  shld state
        ret
pat1:   lhld ppp
        mov a,M
        cpi 01h
        jnz paterr
        lxi h,pat2
        jmp nextt
pat2:   lhld ppp
        mov a,M
        cpi 02h
        jnz paterr
        lxi h,pat3
        jmp nextt
pat3:   lhld ppp
        lda pb3
        cmp M
        jnz paterr
        inr a
        sta pb3
        lxi h,pat4
        jmp nextt
pat4:   lhld ppp
        mov a,M
        cpi 04h
        jnz paterr
        lhld n_pat_words
        dcx h
        shld n_pat_words
        mov a,h
        ora l
        jz pat_end
        lxi h,pat1
        jmp nextt
pat_end:
        lxi h,s0
        jmp nextt
paterr: call debug_asc
        asc "pattern error$"
        jmp bad






