[net.micro] Bug report KERMIT-80

LANGE%DACTH51.BITNET@WISCVM.WISC.EDU (06/23/86)

Subject : Bug report for KERMIT-80

The following error has been noted:
-----------------------------------

It  concerns  the  piece of code starting at label  "staspd"  (in
cp4mit.asm) which is to show the current line speed.  The current
baud rate value is taken from location "speed" and compared  with
a  corresponding entry into table "spdtab" (linked to "spdtbl" in
cp4sys.asm).  Unfortunately  only  an 8-bit  comparison  is  done
although this is a 16-bit value.

This  practice  made some trouble as I used the 1st byte of  this
16-bit value as a time constant for a Z80-CTC and the 2nd part as
prescaler  information  to cover the total range from  50  up  to
19200  Baud.  So  it happened that the first value (the CTC  time
constant)  was not unique in the table and that it was  necessary
to check the 2nd byte to identify the correct baud rate.

It appears a good programming practice to use a 16-bit comparison
where you handle 16-bit values.

Jan G. Loeschner
(Technical University of Aachen, West Germany)
==================================================================
;       Show the current line speed (if known).

staspd: lxi     d,spdst
        call    prtstr
        lda     speed           ;Get current speed.
        mov     c,a             ;[JGL] (C) = LSB of speed factor
        lda     speed+1         ;[JGL] Get 2nd part of current speed.
        mov     b,a             ;[JGL] (B) = MSB of speed factor
        lxi     h,spdust        ;Assume undefined.
        cpi     0FFH            ;Is it?
        jz      stat73          ;Yes.
        lhld    spdtab          ;Start scanning keyword table.
        mov     d,m             ; get count of entries
        inx     h               ; advance over it.
stat70: mov     e,m             ;[JGL] Get string length.
        inr     e               ;[JGL] Account for $.
        inx     h
        shld    temp1           ;Save string pointer.
stat71: inx     h               ;Loop over string.
        dcr     e               ;[JGL]
        jnz     stat71
        mov     a,m             ;[JGL] Get speed value (1st part)
        inx     h               ;[JGL] Skip LSB of speed factor.
        cmp     c               ;[JGL] Match?
        jnz     stat711         ;[JGL] No.
        mov     a,m             ;[JGL] Get speed value (2nd part).
        cmp     b               ;[JGL] Match?
        jz      stat72          ;[JGL] Yes -- a 16 bit match.
stat711:inx     h               ;[JGL] Bump to next keyword.
        dcr     d               ; decrement entry count
        jnz     stat70          ; if more left, check them.
        lxi     h,spdust        ; can't find it. say it's undefined.
        jmp     stat73          ; print the message.

stat72: lhld    temp1           ;Restore saved string pointer.
stat73: xchg                    ;Set into DE for display.
        jmp     prtstr          ; print it, and return.
==================================================================