LS-DOS 6.3.1 - LBSETCOM Assembly Listing (HTML format version)

[Copyright 1999,2002 Frank Durda IV, All Rights Reserved.
Mirroring of any material on this page in any form is expressly prohibited.
The official web site for this material is:  http://nemesis.lonestar.org
Contact this address for use clearances: clearance at nemesis.lonestar.org
Comments and queries to this address: web_software_2011 at nemesis.lonestar.org]
MISOSYS EDAS-4.3 04/19/99 01:22:03 SETCOM - LS-DOS 6.2          Page 00001 

              00001 ;LBSETCOM/ASM - Set RS232 Parameters
              00003 ;
              00004 ;       Data area offsets
              00005 ;
0004          00006 OFFSET  EQU     4
0004          00007 MSMASK  EQU     OFFSET+0
0005          00008 UCIMAGE EQU     OFFSET+1
0006          00009 BAUDRT  EQU     OFFSET+2
0007          00010 BRK     EQU     OFFSET+3
              00011 ;
              00012 ;       Default settings
              00013 ;
0000          00014 DEFMS   EQU     000H
00A5          00015 DEFUC   EQU     0A5H
0055          00016 DEFBA   EQU     055H
0003          00017 DEFBR   EQU     003H
              00018 ;
              00019 ;       ASCII/init equivalences
              00020 ;
0002          00021 _INIT   EQU     02H             ;Ctl value to init driver
0003          00022 _ETX    EQU     03H
000D          00023 _CR     EQU     0DH
000A          00024 _LF     EQU     0AH
0027          00025 _APOS   EQU     27H
002C          00026 PAR_ERR EQU     44              ;Parameter Error
              00027 ;
              00028 ;       @PARAM evaluation types
              00029 ;
0040          00030 FLAG    EQU     01000000B
0010          00031 ABB     EQU     00010000B
0080          00032 NUM     EQU     10000000B
0020          00033 STR     EQU     00100000B
              00034 ;
0000          00035 *GET    SVCMAC:3                ;SVC Macro equivalents
              00036 ;SVCMAC/ASM - LS-DOS Version VI
              00037 *LIST   OFF
              00429 *LIST   ON
              00431 ;
2400          00432         ORG     2400H
              00433 ;
2400          00434 BEGIN   EQU     $
2400 ED730B24 00435         LD      (SAVESP+1),SP   ;Save entry stack
2404 CD3A24   00436         CALL    PGRM            ;Perform operations
              00437 ;
              00438 ;       Set up exit condition
              00439 ;
2407 210000   00440 $EXIT   LD      HL,0            ;No errors
240A 310000   00441 SAVESP  LD      SP,$-$          ;P/u original SP
240D          00442         @@CKBRKC                ;Clear 
240D+3E6A     00443         LD      A,106
240F+EF       00444         RST     40
2410 C9       00445         RET
              00446 ;
              00447 ;       Abort program
              00448 ;
2411 21FFFF   00449 $ABORT  LD      HL,-1           ;Init error return
2414 18F4     00450         JR      SAVESP          ;Exit program
              00451 ;
              00452 ;       Display char in C
              00453 ;
2416          00454 $DSP    @@DSP                   ;Display
2416+3E02     00455         LD      A,2
2418+EF       00456         RST     40
2419 C8       00457         RET     Z               ;Return if NO error
241A 1804     00458         JR      IOERR           ;  else error
              00459 ;
              00460 ;       Display text @ (HL)
              00461 ;
241C          00462 $DSPLY  @@DSPLY                 ;Display
              00463         IFEQ    00H,1
              00464         LD      HL,
              00465         ENDIF
241C+3E0A     00466         LD      A,10
241E+EF       00467         RST     40
241F C8       00468         RET     Z               ;Return if NO error
              00469 ;
              00470 ;       I/O error, display what
              00471 ;
2420 6F       00472 IOERR   LD      L,A             ;Save error code
2421 F6C0     00473         OR      0C0H            ;Set return+short message
2423 4F       00474         LD      C,A             ;Pass error code
2424          00475         @@ERROR                 ;Display error
2424+3E1A     00476         LD      A,26
2426+EF       00477         RST     40
              00478 ;
2427 2600     00479 ERROR$  LD      H,0             ;Set exit code
2429 18DF     00480         JR      SAVESP          ;Terminate program
              00481 ;
242B 21E126   00482 BADMOD  LD      HL,BADDCB       ;'COM/DVR not installed'
242E          00483         @@LOGOT                 ;Log error
              00484         IFEQ    00H,1
              00485         LD      HL,
              00486         ENDIF
242E+3E0C     00487         LD      A,12
2430+EF       00488         RST     40
2431 2E08     00489         LD      L,8             ;'device not available'
2433 18F2     00490         JR      ERROR$          ;Return error in HL
              00491 ;
              00492 ;       Parameter error
              00493 ;
2435 3E2C     00494 PRMERR  LD      A,PAR_ERR       ;"Parameter Error"
2437 C32024   00495         JP      IOERR           ;Abort
              00496 ;
              00497 ;       PGRM - Set up RS-232 Parameters
              00498 ;
243A          00499 PGRM    EQU     $
              00500 ;
              00501         IF      @MOD4
243A E5       00502         PUSH    HL              ;Save command line pntr
243B 11DD26   00503         LD      DE,MDNAME       ;$CL name header
243E          00504         @@GTMOD                 ;Find module header
243E+3E53     00505         LD      A,83
2440+EF       00506         RST     40
2441 20E8     00507         JR      NZ,BADMOD       ;Exit if not found
2443 D5       00508         PUSH    DE              ;Pass pointer to IX
2444 DDE1     00509         POP     IX              ;IX=>next byte after
2446 E1       00510         POP     HL              ;Rcvr cmdline ptr
              00511         ENDIF
              00512 ;
              00513 ;       Check if any parameters entered
              00514 ;
2447 2B       00515         DEC     HL              ;Setup for immed INC
2448 23       00516 SPLP    INC     HL              ;Bump to next char
2449 7E       00517         LD      A,(HL)          ;Fetch input char
244A FE20     00518         CP      ' '             ;Space?
244C 28FA     00519         JR      Z,SPLP          ;Ignore if space
244E FE28     00520         CP      '('             ;Param marker?
2450 C2E229   00521         JP      NZ,SHOW         ;No, show settings 
              00522 ;
2453 110728   00523         LD      DE,PRMTBL$      ;Parameter table
2456          00524         @@PARAM                 ;Evaluate user input
2456+3E11     00525         LD      A,17
2458+EF       00526         RST     40
2459 C23524   00527         JP      NZ,PRMERR       ;Go if parameter error
              00528 ;
              00529         IF      @MOD2
              00530         LD      A,(PORTP)       ;Get port param
              00531         OR      A               ;Anything input?
              00532         LD      DE,MDNAME1      ;$CL
              00533         JR      Z,PORTF         ;Go default
              00534         LD      BC,(PORTD)      ;Get port value
              00535         INC     B               ;Test msb
              00536         DEC     B
              00537         JR      NZ,PRMERR       ;Param error if >256
              00538         LD      A,C             ;Get lsb
              00539         OR      A               ;0?
              00540         JR      Z,PRMERR        ;Go if yes
              00541         DEC     A               ;1?
              00542         JR      Z,PORTF         ;Yes, $CL
              00543         DEC     A               ;2?
              00544         JR      NZ,PRMERR       ;Param error if not
              00545         LD      DE,MDNAME2      ;$CM
              00546 PORTF   @@GTMOD                 ;Locate it
              00547         JR      NZ,BADMOD       ;Go if not found
              00548         PUSH    DE              ;Else pass to IX
              00549         POP     IX              ;IX => block
              00550         ENDIF
              00551 ;
              00552 ;       Check if DEFAULT param entered
              00553 ;
245C ED5B6627 00554         LD      DE,(DFPARM)     ;Check D parm
2460 7A       00555         LD      A,D
2461 B3       00556         OR      E
2462 C4CC26   00557         CALL    NZ,DEFALT       ;Go if Default parm used
              00558 ;
2465 ED5B4C27 00559         LD      DE,(QPARM)      ;Query parm used?
2469 7A       00560         LD      A,D             ;Check input
246A B3       00561         OR      E
246B CA2025   00562         JP      Z,CKPARM        ;Check input if not query
              00563 ;
              00564 ;       Prompt user for input not entered on command line
              00565 ;
              00566 ;       Fetch BAUD
              00567 ;
246E 213825   00568 ASKBAUD LD      HL,DMSG2        ;BAUD param display
2471 111A28   00569         LD      DE,BTYP         ;BAUD param
2474 CD5026   00570         CALL    GETIT           ;Get user input
2477 300B     00571         JR      NC,ASKWORD      ;Continue on ENTER
2479 CDC229   00572         CALL    CKBAUD          ;Test response for valid
247C 2806     00573         JR      Z,ASKWORD       ;Move on if valid entry
247E AF       00574 BADBAUD XOR     A               ;  else clear
247F 321F28   00575         LD      (BRESP),A       ;  for re-try
2482 18EA     00576         JR      ASKBAUD         ;Bad entry - retry
              00577 ;
              00578 ;       Fetch WORD
              00579 ;
2484 216625   00580 ASKWORD LD      HL,DMSG3        ;WORD display
2487 112228   00581         LD      DE,WTYP         ;Param type
248A CD5026   00582         CALL    GETIT           ;Get user input
248D 3011     00583         JR      NC,ASKSTOP      ;Nil input, leave it
248F 3A5027   00584         LD      A,(WORDP)       ;Fetch input
2492 FE05     00585         CP      5               ;<5?
2494 3804     00586         JR      C,BADWORD       ;Bad entry
2496 FE09     00587         CP      8+1             ;>8?
2498 3806     00588         JR      C,ASKSTOP       ;Go if OK
249A AF       00589 BADWORD XOR     A               ;Clear param
249B 322728   00590         LD      (WRESP),A       ;Load flag
249E 18E4     00591         JR      ASKWORD         ;Re-try
              00592 ;
              00593 ;       Fetch STOP
              00594 ;
24A0 217F25   00595 ASKSTOP LD      HL,DMSG4        ;STOP
24A3 112A28   00596         LD      DE,STYP         ;=>type byte
24A6 CD5026   00597         CALL    GETIT           ;Get user input
24A9 3014     00598         JR      NC,ASKPAR       ;Nil input, leave it
24AB 3A5227   00599         LD      A,(STOPP)       ;Chk range
24AE B7       00600         OR      A               ;0?
24AF 2804     00601         JR      Z,BADSTOP       ;Invalid if yes
24B1 FE03     00602         CP      2+1             ;>2?
24B3 380A     00603         JR      C,ASKPAR        ;Go if OK
24B5 AF       00604 BADSTOP XOR     A               ;Load zero
24B6 322F28   00605         LD      (SRESP),A       ;Clear input param
24B9 18E5     00606         JR      ASKSTOP         ;Ask again
              00607 ;
              00608 ;       Fetch PARITY
              00609 ;
24BB AF       00610 BADPAR  XOR     A               ;Load zero
24BC 323928   00611         LD      (PRESP),A       ;Clear response byte
24BF 219125   00612 ASKPAR  LD      HL,DMSG5        ;PARITY display driver
24C2 113228   00613         LD      DE,PTYP         ;Param type
24C5 CD5026   00614         CALL    GETIT           ;Get user input
24C8 3017     00615         JR      NC,ASKBRK       ;Nil input, leave
              00616 ;
              00617 ;       Check if user entered 'O' or 'E' or ON/OFF
              00618 ;
24CA 3A3928   00619         LD      A,(PRESP)       ;Get response byte
24CD ED5B5427 00620         LD      DE,(PARITYP)    ;Get param pointer
24D1 CB77     00621         BIT     6,A             ;Switch?
24D3 200C     00622         JR      NZ,ASKBRK       ;Yes, continue
              00623 ;
              00624 ;       Check for ODD/EVEN input
              00625 ;
24D5 1A       00626         LD      A,(DE)          ;Get input
24D6 CDB929   00627         CALL    UCASE           ;Make upper case
24D9 FE45     00628         CP      'E'             ;Even?
24DB 2804     00629         JR      Z,ASKBRK        ;Continue if yes
24DD FE4F     00630         CP      'O'             ;Odd?
24DF 20DA     00631         JR      NZ,BADPAR       ;Invalid, re-prompt
              00632 ;
              00633 ;       Fetch BREAK
              00634 ;
24E1 21B025   00635 ASKBRK  LD      HL,DMSG6        ;Display driver
24E4 110828   00636         LD      DE,BRTYP        ;Param type
24E7 CD5026   00637         CALL    GETIT           ;Get user input
              00638 ;
              00639 ;       Fetch DTR
              00640 ;
24EA 21CB25   00641 ASKDTR  LD      HL,DMSG8        ;Display driver
24ED 114B28   00642         LD      DE,DTYP         ;Param type
24F0 CD5026   00643         CALL    GETIT           ;Get user input
              00644 ;
              00645 ;       Fetch RTS
              00646 ;
24F3 21D725   00647 ASKRTS  LD      HL,DMSG9        ;Display driver
24F6 115228   00648         LD      DE,RTYP         ;Param type
24F9 CD5026   00649         CALL    GETIT           ;Get user input
              00650 ;
              00651 ;       Fetch RI
              00652 ;
24FC 21F225   00653 ASKRI   LD      HL,DMSG11       ;Display driver
24FF 115928   00654         LD      DE,RITYP        ;Param type
2502 CD5026   00655         CALL    GETIT           ;Get user input
              00656 ;
              00657 ;       Fetch DSR
              00658 ;
2505 21F925   00659 ASKDSR  LD      HL,DMSG12       ;Display driver
2508 116528   00660         LD      DE,DSTYP        ;Param type
250B CD5026   00661         CALL    GETIT           ;Get user input
              00662 ;
              00663 ;       Fetch CD
              00664 ;
250E 210026   00665 ASKCD   LD      HL,DMSG13       ;Display driver
2511 115F28   00666         LD      DE,CDTYP        ;Param type
2514 CD5026   00667         CALL    GETIT           ;Get user input
              00668 ;
              00669 ;       Fetch CTS
              00670 ;
2517 210726   00671 ASKCTS  LD      HL,DMSG14       ;Display driver
251A 116C28   00672         LD      DE,CTTYP        ;Param type
251D CD5026   00673         CALL    GETIT           ;Get user input
              00674 ;
              00675 ;       Check params and issue INIT to device
              00676 ;
2520 CD7F28   00677 CKPARM  CALL    SETPARAM        ;Check entered params
2523 DD5E00   00678         LD      E,(IX+0)        ;Pickup DCB address lsb
2526 DD5601   00679         LD      D,(IX+1)        ;Pickup DCB address msb
2529 0E02     00680         LD      C,_INIT         ;Init code
252B          00681         @@CTL                   ;Setup channel for values
252B+3E05     00682         LD      A,5
252D+EF       00683         RST     40
252E C9       00684         RET                     ;Completed
              00685 ;
              00686 ;       Display drivers for text
              00687 ;
252F 216C27   00688 DMSG1   LD      HL,MSG1         ;RS232 params:
2532 CD1C24   00689         CALL    $DSPLY          ;Display and return
2535 360A     00690         LD      (HL),_LF        ;Set for next time
2537 C9       00691         RET
              00692 ;
2538 218027   00693 DMSG2   LD      HL,MSG2         ;BAUD=
253B CD1C24   00694         CALL    $DSPLY          ;Display
253E DD7E06   00695         LD      A,(IX+BAUDRT)   ;Get baud rate
2541 E60F     00696         AND     0FH             ;Low 4 bits only
2543 87       00697         ADD     A,A             ;*2
2544 21FA26   00698         LD      HL,BAUDTBL      ;Baud lookup table
2547 85       00699         ADD     A,L             ;Add to lsb table
2548 6F       00700         LD      L,A             ;Update lsb table
2549 3001     00701         JR      NC,$+3          ;Go if no page cross
254B 24       00702         INC     H               ;  else bump page
254C 7E       00703         LD      A,(HL)          ;Get LSB baud
254D 23       00704         INC     HL              ;Bump table pointer
254E 66       00705         LD      H,(HL)          ;Get MSB baud
254F 6F       00706         LD      L,A             ;HL = baud rate
2550 11F727   00707         LD      DE,MSG20        ;Text to load
2553          00708         @@HEXDEC                ;Convert to decimal
2553+3E61     00709         LD      A,97
2555+EF       00710         RST     40
2556 3E03     00711         LD      A,_ETX          ;End text char
2558 12       00712         LD      (DE),A          ;Terminate text
              00713 ;
              00714 ;       Strip leading zeroes from display
              00715 ;
2559 21F727   00716         LD      HL,MSG20        ;Text loaded
255C 3E20     00717         LD      A,' '           ;Test char
255E BE       00718 STRIP1  CP      (HL)            ;Leading zero?
255F 23       00719         INC     HL              ;Bump pointer
2560 28FC     00720         JR      Z,STRIP1        ;Go till non-zero found
2562 2B       00721         DEC     HL              ;Adjust pointer
2563 C31C24   00722         JP      $DSPLY          ;Display remainder
              00723 ;
2566 218627   00724 DMSG3   LD      HL,MSG3         ;WORD=
2569 CD1C24   00725         CALL    $DSPLY          ;Display header
256C DD7E05   00726         LD      A,(IX+UCIMAGE)  ;Get data
256F 07       00727         RLCA                    ;Align to low bits
2570 07       00728         RLCA
2571 07       00729         RLCA
2572 E603     00730         AND     3               ;2 bits only
2574 EA7925   00731         JP      PE,$+5          ;Go if set
2577 EE03     00732         XOR     3               ;Else reverse 6/7
2579 C635     00733         ADD     A,5+'0'         ;Correct + ASCII
257B 4F       00734         LD      C,A             ;Pass character
257C C31624   00735         JP      $DSP            ;Display and return
              00736 ;
257F 218C27   00737 DMSG4   LD      HL,MSG4         ;STOP=
2582 CD1C24   00738         CALL    $DSPLY          ;Display header
2585 0E31     00739         LD      C,'1'           ;Set one bit
2587 DDCB0566 00740         BIT     4,(IX+UCIMAGE)  ;Get data
258B 2801     00741         JR      Z,$+3           ;Go if one stop
258D 0C       00742         INC     C               ;Else bump to '2'
258E C31624   00743         JP      $DSP            ;Display and return
              00744 ;
2591 219227   00745 DMSG5   LD      HL,MSG5         ;PARITY=
2594 CD1C24   00746         CALL    $DSPLY          ;Display
2597 21E327   00747         LD      HL,MSG16        ;OFF
259A DDCB055E 00748         BIT     3,(IX+UCIMAGE)  ;Is off?
259E C21C24   00749         JP      NZ,$DSPLY       ;Yes, go
25A1 21E727   00750         LD      HL,MSG17        ;ODD
25A4 DDCB057E 00751         BIT     7,(IX+UCIMAGE)  ;Is odd?
25A8 2803     00752         JR      Z,$+5           ;Go if yes
25AA 21EB27   00753         LD      HL,MSG18        ;EVEN
25AD C31C24   00754         JP      $DSPLY          ;Display and return
              00755 ;
25B0 219A27   00756 DMSG6   LD      HL,MSG6         ;BREAK=
25B3 CD1C24   00757         CALL    $DSPLY          ;Display header
25B6 DD4E07   00758         LD      C,(IX+BRK)      ;Get break char
25B9 21FF27   00759         LD      HL,MSG21A       ;Text to load
25BC          00760         @@HEX8                  ;Convert to ASCII
25BC+3E62     00761         LD      A,98
25BE+EF       00762         RST     40
25BF 21FD27   00763         LD      HL,MSG21        ;Text start
25C2 C31C24   00764         JP      $DSPLY          ;Display and return
              00765 ;
25C5 21A127   00766 DMSG7   LD      HL,MSG7         ;Input:
25C8 C31C24   00767         JP      $DSPLY          ;Display and return
              00768 ;
25CB 21B327   00769 DMSG8   LD      HL,MSG8         ;DTR=
25CE CD1C24   00770         CALL    $DSPLY          ;Display
25D1 DDCB054E 00771         BIT     1,(IX+UCIMAGE)  ;Is on?
25D5 180A     00772         JR      DMSG89          ;Display
              00773 ;
25D7 21B827   00774 DMSG9   LD      HL,MSG9         ;RTS=
25DA CD1C24   00775         CALL    $DSPLY          ;Display header
25DD DDCB0546 00776         BIT     0,(IX+UCIMAGE)  ;Is on?
              00777 ;
25E1 21E027   00778 DMSG89  LD      HL,MSG15        ;ON?
25E4 2803     00779         JR      Z,$+5           ;Go if yes
25E6 21E327   00780         LD      HL,MSG16        ;OFF
25E9 C31C24   00781         JP      $DSPLY          ;Display and return
              00782 ;
25EC 21BD27   00783 DMSG10  LD      HL,MSG10        ;Output:
25EF C31C24   00784         JP      $DSPLY          ;Display and return
              00785 ;
25F2 21CE27   00786 DMSG11  LD      HL,MSG11        ;RI=
25F5 3E11     00787         LD      A,00010001B     ;Enable bits
25F7 1813     00788         JR      DMSG0           ;Go common
              00789 ;
25F9 21D227   00790 DMSG12  LD      HL,MSG12        ;DSR=
25FC 3E44     00791         LD      A,01000100B     ;Enable bits
25FE 180C     00792         JR      DMSG0           ;Go common
              00793 ;
2600 21D727   00794 DMSG13  LD      HL,MSG13        ;CD=
2603 3E22     00795         LD      A,00100010B     ;Enable bits
2605 1805     00796         JR      DMSG0           ;Go common
              00797 ;
2607 21DB27   00798 DMSG14  LD      HL,MSG14        ;CTS=
260A 3E88     00799         LD      A,10001000B     ;Enable bits
              00800 ;
260C F5       00801 DMSG0   PUSH    AF              ;Save bits
260D CD1C24   00802         CALL    $DSPLY          ;Display prefix
2610 F1       00803         POP     AF              ;Restore
2611 DDA604   00804         AND     (IX+MSMASK)     ;And with mask
2614 21F027   00805         LD      HL,MSG19        ;IGNORE
2617 2809     00806         JR      Z,DMSG0X        ;Go if yes
2619 21E027   00807         LD      HL,MSG15        ;ON
261C E22226   00808         JP      PO,DMSG0X       ;Go if yes
261F 21E327   00809         LD      HL,MSG16        ;OFF
2622 C31C24   00810 DMSG0X  JP      $DSPLY          ;Display and return
              00811 ;
2625 210328   00812 DMSG22  LD      HL,MSG22        ;CR
2628 C31C24   00813         JP      $DSPLY          ;Display and return
              00814 ;
262B 210428   00815 DMSG23  LD      HL,MSG23        ;', '
262E C31C24   00816         JP      $DSPLY          ;Display and return
              00817 ;
              00818 ;       Display entire parameter set
              00819 ;
2631 FDE5     00820 DSPALL  PUSH    IY              ;Save
2633 FD211A27 00821         LD      IY,DSPTBL       ;Display table
2637 FD6E00   00822 DSPSET  LD      L,(IY+0)        ;Get lsb vector
263A FD6601   00823         LD      H,(IY+1)        ;Get msb vector
263D 7C       00824         LD      A,H             ;Check for term
263E B5       00825         OR      L               ;HL = 0000?
263F 280C     00826         JR      Z,DSPDONE       ;Yes, go
2641 E5       00827         PUSH    HL              ;Save address
2642 214726   00828         LD      HL,DSPRET       ;Return vector
2645 E3       00829         EX      (SP),HL         ;Leave return, get vector
2646 E9       00830         JP      (HL)            ;Display
2647 FD23     00831 DSPRET  INC     IY              ;Bump table
2649 FD23     00832         INC     IY              ;2 byte entries
264B 18EA     00833         JR      DSPSET          ;Continue
264D FDE1     00834 DSPDONE POP     IY              ;Restore
264F C9       00835         RET                     ;Display complete
              00836 ;
              00837 ;       QUERYing for parameter
              00838 ;
2650 E5       00839 GETIT   PUSH    HL              ;Save display driver
2651 D5       00840         PUSH    DE              ;Save type byte
2652 EB       00841         EX      DE,HL           ;Type byte to HL
2653 CD6326   00842         CALL    CKRSP           ;Check if response enterd
2656 D1       00843         POP     DE              ;Restore type byte
2657 E1       00844         POP     HL              ;Restore prompt
2658 C0       00845         RET     NZ              ;Already have this one
              00846 ;
              00847 ;       Setup for prompt display
              00848 ;
2659 E5       00849         PUSH    HL              ;Save for repeat prompt
265A D5       00850         PUSH    DE
265B CD7426   00851         CALL    GETRSP          ;Get user response
265E D1       00852         POP     DE              ;Restore data
265F E1       00853         POP     HL
2660 20EE     00854         JR      NZ,GETIT        ;Invalid, ask again
2662 C9       00855         RET                     ;  else param loaded
              00856 ;
              00857 ;       Check if correct response entered
              00858 ;
2663 22A026   00859 CKRSP   LD      (TTYP),HL       ;Save type position
              00860 ;
2666 3E0F     00861 MVUP    LD      A,0FH           ;Low 4 bits for length
2668 4E       00862         LD      C,(HL)          ;Get type byte
2669 A1       00863         AND     C               ;Fetch length
266A 23       00864 UP      INC     HL              ;Bump pointer
266B 3D       00865         DEC     A               ;Less length
266C 20FC     00866         JR      NZ,UP           ;Go for length
266E 23       00867         INC     HL              ;Bump to next
266F 7E       00868         LD      A,(HL)          ;Get response byte
2670 E6E0     00869         AND     NUM!FLAG!STR    ;Response type bits
2672 A1       00870         AND     C               ;Compare to entered
2673 C9       00871         RET                     ;Return with status
              00872 ;
              00873 ;       Query on, param not entered, prompt for it
              00874 ;
2674 E5       00875 GETRSP  PUSH    HL              ;Save driver address
2675 217A26   00876         LD      HL,GETRSPR      ;Return vector
2678 E3       00877         EX      (SP),HL         ;Leave get display driver
2679 E9       00878         JP      (HL)            ;Display prompt
              00879 ;
267A 0604     00880 GETRSPR LD      B,4             ;Command get cursor
267C          00881         @@VDCTL                 ;Fetch cursor
267C+3E0F     00882         LD      A,15
267E+EF       00883         RST     40
267F 2E14     00884         LD      L,20            ;Column to position to
2681 0603     00885         LD      B,3             ;Command put cursor
2683          00886         @@VDCTL                 ;Setup new cursor
2683+3E0F     00887         LD      A,15
2685+EF       00888         RST     40
2686 21F726   00889         LD      HL,PROMPT       ;Prompt text
2689 CD1C24   00890         CALL    $DSPLY          ;Display prompt
268C AF       00891         XOR     A               ;Load zero
268D 32E829   00892         LD      (FRESP),A       ;Clear response byte
              00893 ;
2690 21EF29   00894         LD      HL,INBUF        ;Key input buffer
2693 01000A   00895         LD      BC,10<8+0       ;Max input length
2696          00896         @@KEYIN                 ;Get user input
2696+3E09     00897         LD      A,9
2698+EF       00898         RST     40
2699 DA1124   00899         JP      C,$ABORT        ;Terminate on BREAK
              00900 ;
              00901 ;       Evaluate user input
              00902 ;
269C 04       00903         INC     B               ;Check if nil input
269D 05       00904         DEC     B               ;B=0?
269E C8       00905         RET     Z               ;No input, go
              00906 ;
269F 210000   00907         LD      HL,0            ;Get param pointer
26A0          00908 TTYP    EQU     $-2
26A2 7E       00909         LD      A,(HL)          ;Get response type
26A3 E6F0     00910         AND     0F0H            ;  attribute only
26A5 F601     00911         OR      1               ;Single byte char
26A7 32E629   00912         LD      (FTYP),A        ;Pass to new block
              00913 ;
26AA 21EC29   00914         LD      HL,FSTR         ;Set command pointer
26AD 11E529   00915         LD      DE,PTBL2        ;Mini-param table
26B0          00916         @@PARAM                 ;Evaluate input
26B0+3E11     00917         LD      A,17
26B2+EF       00918         RST     40
26B3 C0       00919         RET     NZ              ;Invalid, go
              00920 ;
26B4 2AA026   00921         LD      HL,(TTYP)       ;Get response pointer
26B7 CD6626   00922         CALL    MVUP            ;Move to response byte
26BA 3AE829   00923         LD      A,(FRESP)       ;Get input response
26BD 77       00924         LD      (HL),A          ;  to param block
26BE 23       00925         INC     HL              ;Bump to word pointer
26BF CDB429   00926         CALL    GETHL           ;Get pointer
26C2 ED4B6A27 00927         LD      BC,(FPARM)      ;Get temp param
26C6 71       00928         LD      (HL),C          ;Load into param block
26C7 23       00929         INC     HL              ;Bump pointer
26C8 70       00930         LD      (HL),B          ;New param loaded
26C9 AF       00931         XOR     A               ;Set NO error
26CA 37       00932         SCF                     ;Carry = input
26CB C9       00933         RET                     ;Done
              00934 ;
              00935 ;       Init default settings
              00936 ;
26CC DD360400 00937 DEFALT  LD      (IX+MSMASK),DEFMS
26D0 DD3605A5 00938         LD      (IX+UCIMAGE),DEFUC
26D4 DD360655 00939         LD      (IX+BAUDRT),DEFBA
26D8 DD360703 00940         LD      (IX+BRK),DEFBR
26DC C9       00941         RET
              00942 ;
              00943 ;       Text area
              00944 ;
              00945         IF      @MOD4
26DD 24       00946 MDNAME  DB      '$CL'
     43 4C 
26E0 03       00947         DB      _ETX
              00948         ENDIF
              00949 ;
              00950         IF      @MOD2
              00951 MDNAME1 DB      '$CL'
              00952         DB      _ETX
              00953 MDNAME2 DB      '$CM'
              00954         DB      _ETX
              00955         ENDIF
              00956 ;
26E1 43       00957 BADDCB  DB      'COM/DVR not installed'
     4F 4D 2F 44 56 52 20 6E
     6F 74 20 69 6E 73 74 61
     6C 6C 65 64 
26F6 0D       00958         DB      _CR
              00959 ;
26F7 3F       00960 PROMPT  DB      '? '
     20 
26F9 03       00961         DB      _ETX
              00962 ;
              00963 ;       Valid baud rate lookup table
              00964 ;
26FA 3200     00965 BAUDTBL DW      50,75,110,135,150,300,600,1200,1800
     4B00 6E00 8700 9600 2C01 5802 B004 0807
270C D007     00966         DW      2000,2400,3600,4800,7200,9600,19200
     6009 100E C012 201C 8025 004B 
              00967 ;
              00968 ;       Display driver lookup table
              00969 ;
271A 2F25     00970 DSPTBL  DW      DMSG1           ;'RS232 params: '
271C 3825     00971         DW      DMSG2           ;'BAUD='
271E 2B26     00972         DW      DMSG23          ;', '
2720 6625     00973         DW      DMSG3           ;'WORD='
2722 2B26     00974         DW      DMSG23          ;', '
2724 7F25     00975         DW      DMSG4           ;'STOP='
2726 2B26     00976         DW      DMSG23          ;', '
2728 9125     00977         DW      DMSG5           ;'PARITY='
272A 2B26     00978         DW      DMSG23          ;', '
272C B025     00979         DW      DMSG6           ;'BREAK='
              00980 ;
272E C525     00981         DW      DMSG7           ;'output: '
2730 CB25     00982         DW      DMSG8           ;'DTR='
2732 2B26     00983         DW      DMSG23          ;', '
2734 D725     00984         DW      DMSG9           ;'RTS='
              00985 ;
2736 EC25     00986         DW      DMSG10          ;'input: '
2738 F225     00987         DW      DMSG11          ;'RI='
273A 2B26     00988         DW      DMSG23          ;', '
273C F925     00989         DW      DMSG12          ;'DSR='
273E 2B26     00990         DW      DMSG23          ;', '
2740 0026     00991         DW      DMSG13          ;'CD='
2742 2B26     00992         DW      DMSG23          ;', '
2744 0726     00993         DW      DMSG14          ;'CTS='
2746 2526     00994         DW      DMSG22          ;_cr
2748 0000     00995         DW      0               ;Terminator
              00996 ;
              00997 ;       Parameter pointer table
              00998 ;
274A 0000     00999 BREAKP  DW      0
274C 0000     01000 QPARM   DW      0
274E 0000     01001 BAUDP   DW      0
2750 0000     01002 WORDP   DW      0
2752 0000     01003 STOPP   DW      0
2754 0000     01004 PARITYP DW      0
2756 0000     01005 EVENP   DW      0
2758 0000     01006 ODDP    DW      0
275A 0000     01007 DTRP    DW      0
275C 0000     01008 RTSP    DW      0
275E 0000     01009 RIP     DW      0
2760 0000     01010 CDP     DW      0
2762 0000     01011 DSRP    DW      0
2764 0000     01012 CTSP    DW      0
2766 0000     01013 DFPARM  DW      0
2768 0000     01014 PORTD   DW      0
276A 0000     01015 FPARM   DW      0
              01016 ;
276C 00       01017 MSG1    DB      0               ;Will be LF after 1st DSP
276D 52       01018         DB      'RS232'
     53 32 33 32 
              01019         IF      @MOD2
              01020 MSG1A   DB      'A'
              01021         ENDIF
2772 20       01022         DB      ' parameters: '
     70 61 72 61 6D 65 74 65
     72 73 3A 20 
277F 03       01023         DB      _ETX
              01024 ;
2780 42       01025 MSG2    DB      'Baud='
     61 75 64 3D 
2785 03       01026         DB      _ETX
              01027 ;
2786 57       01028 MSG3    DB      'Word='
     6F 72 64 3D 
278B 03       01029         DB      _ETX
              01030 ;
278C 53       01031 MSG4    DB      'Stop='
     74 6F 70 3D 
2791 03       01032         DB      _ETX
              01033 ;
2792 50       01034 MSG5    DB      'Parity='
     61 72 69 74 79 3D 
2799 03       01035         DB      _ETX
              01036 ;
279A 42       01037 MSG6    DB      'Break='
     72 65 61 6B 3D 
27A0 03       01038         DB      _ETX
              01039 ;
27A1 0A       01040 MSG7    DB      _LF
27A2 4F       01041         DB      'Output control: '
     75 74 70 75 74 20 63 6F
     6E 74 72 6F 6C 3A 20 
27B2 03       01042         DB      _ETX
              01043 ;
27B3 44       01044 MSG8    DB      'DTR='
     54 52 3D 
27B7 03       01045         DB      _ETX
              01046 ;
27B8 52       01047 MSG9    DB      'RTS='
     54 53 3D 
27BC 03       01048         DB      _ETX
              01049 ;
27BD 0A       01050 MSG10   DB      _LF
27BE 49       01051         DB      'Input control: '
     6E 70 75 74 20 63 6F 6E
     74 72 6F 6C 3A 20 
27CD 03       01052         DB      _ETX
              01053 ;
27CE 52       01054 MSG11   DB      'RI='
     49 3D 
27D1 03       01055         DB      _ETX
              01056 ;
27D2 44       01057 MSG12   DB      'DSR='
     53 52 3D 
27D6 03       01058         DB      _ETX
              01059 ;
27D7 43       01060 MSG13   DB      'CD='
     44 3D 
27DA 03       01061         DB      _ETX
              01062 ;
27DB 43       01063 MSG14   DB      'CTS='
     54 53 3D 
27DF 03       01064         DB      _ETX
              01065 ;
27E0 4F       01066 MSG15   DB      'ON'
     4E 
27E2 03       01067         DB      _ETX
              01068 ;
27E3 4F       01069 MSG16   DB      'OFF'
     46 46 
27E6 03       01070         DB      _ETX
              01071 ;
27E7 4F       01072 MSG17   DB      'ODD'
     44 44 
27EA 03       01073         DB      _ETX
              01074 ;
27EB 45       01075 MSG18   DB      'EVEN'
     56 45 4E 
27EF 03       01076         DB      _ETX
              01077 ;
27F0 49       01078 MSG19   DB      'IGNORE'
     47 4E 4F 52 45 
27F6 03       01079         DB      _ETX
              01080 ;
27F7 30       01081 MSG20   DB      '00000'
     30 30 30 30 
27FC 03       01082         DB      _ETX
              01083 ;
27FD 58       01084 MSG21   DB      'X',_APOS
     27 
27FF 30       01085 MSG21A  DB      '00',_APOS
     30 27 
2802 03       01086         DB      _ETX
              01087 ;
2803 0D       01088 MSG22   DB      _CR
              01089 ;
2804 2C       01090 MSG23   DB      ', '
     20 
2806 03       01091         DB      _ETX
              01092 ;
              01093 ;       Parameter evaluation table
              01094 ;
2807 80       01095 PRMTBL$ DB      80H             ;Extended param
              01096 ;
2808 C5       01097 BRTYP   DB      5!FLAG!NUM
2809 42       01098         DB      'BREAK'
     52 45 41 4B 
280E 00       01099 BRRESP  DB      0
280F 4A27     01100         DW      BREAKP
              01101 ;
2811 55       01102         DB      5!ABB!FLAG
2812 51       01103         DB      'QUERY'
     55 45 52 59 
2817 00       01104 QRESP   DB      0
2818 4C27     01105         DW      QPARM
              01106 ;
281A 94       01107 BTYP    DB      4!ABB!NUM
281B 42       01108         DB      'BAUD'
     41 55 44 
281F 00       01109 BRESP   DB      0
2820 4E27     01110         DW      BAUDP
              01111 ;
2822 94       01112 WTYP    DB      4!ABB!NUM
2823 57       01113         DB      'WORD'
     4F 52 44 
2827 00       01114 WRESP   DB      0
2828 5027     01115         DW      WORDP
              01116 ;
282A 94       01117 STYP    DB      4!ABB!NUM
282B 53       01118         DB      'STOP'
     54 4F 50 
282F 00       01119 SRESP   DB      0
2830 5227     01120         DW      STOPP
              01121 ;
2832 76       01122 PTYP    DB      6!ABB!FLAG!STR
2833 50       01123         DB      'PARITY'
     41 52 49 54 59 
2839 00       01124 PRESP   DB      0
283A 5427     01125         DW      PARITYP
              01126 ;
283C 54       01127 ETYP    DB      4!ABB!FLAG
283D 45       01128         DB      'EVEN'
     56 45 4E 
2841 00       01129 ERESP   DB      0
2842 5627     01130         DW      EVENP
              01131 ;
2844 53       01132 OTYP    DB      3!ABB!FLAG
2845 4F       01133         DB      'ODD'
     44 44 
2848 00       01134 ORESP   DB      0
2849 5827     01135         DW      ODDP
              01136 ;
284B 43       01137 DTYP    DB      3!FLAG
284C 44       01138         DB      'DTR'
     54 52 
284F 00       01139 DTRESP  DB      0
2850 5A27     01140         DW      DTRP
              01141 ;
2852 43       01142 RTYP    DB      3!FLAG
2853 52       01143         DB      'RTS'
     54 53 
2856 00       01144 RTRESP  DB      0
2857 5C27     01145         DW      RTSP
              01146 ;
2859 42       01147 RITYP   DB      2!FLAG
285A 52       01148         DB      'RI'
     49 
285C 00       01149 RIRESP  DB      0
285D 5E27     01150         DW      RIP
              01151 ;
285F 42       01152 CDTYP   DB      2!FLAG
2860 43       01153         DB      'CD'
     44 
2862 00       01154 CDRESP  DB      0
2863 6027     01155         DW      CDP
              01156 ;
2865 43       01157 DSTYP   DB      3!FLAG
2866 44       01158         DB      'DSR'
     53 52 
2869 00       01159 DSRESP  DB      0
286A 6227     01160         DW      DSRP
              01161 ;
286C 43       01162 CTTYP   DB      3!FLAG
286D 43       01163         DB      'CTS'
     54 53 
2870 00       01164 CTRESP  DB      0
2871 6427     01165         DW      CTSP
              01166 ;
2873 57       01167         DB      7!ABB!FLAG
2874 44       01168         DB      'DEFAULT'
     45 46 41 55 4C 54 
287B 00       01169         DB      0
287C 6627     01170         DW      DFPARM
              01171 ;
              01172         IF      @MOD2
              01173         DB      4!NUM
              01174         DB      'PORT'
              01175 PORTP   DB      0
              01176         DW      PORTD
              01177         ENDIF
              01178 ;
287E 00       01179         DB      0               ;List terminator
              01180 ;
              01181 ;       Evaluate and setup user parameters
              01182 ;
              01183 SETPARAM
287F 213524   01184         LD      HL,PRMERR       ;Param error exit vector
2882 E5       01185         PUSH    HL              ;Leave for quick exits
              01186 ;
              01187 ;       Evaluate BAUD
              01188 ;
2883 3A1F28   01189 SETBAUD LD      A,(BRESP)       ;Get baud response
2886 B7       01190         OR      A               ;Anything?
2887 2807     01191         JR      Z,SETWORD       ;Nope, go
2889 CDC229   01192         CALL    CKBAUD          ;Get baud setting
288C C0       01193         RET     NZ              ;Go if error
288D DD7706   01194         LD      (IX+BAUDRT),A   ;  else save new baud
              01195 ;
              01196 ;       Evaluate WORD
              01197 ;
2890 DD4E05   01198 SETWORD LD      C,(IX+UCIMAGE)  ;P/u current setings
2893 3A2728   01199         LD      A,(WRESP)       ;Get word response
2896 B7       01200         OR      A               ;Anything?
2897 281C     01201         JR      Z,SETSTOP       ;Nope, continue
2899 ED5B5027 01202         LD      DE,(WORDP)      ;Get parameter
289D 14       01203         INC     D               ;Check msb
289E 15       01204         DEC     D               ;D<>0?
289F C0       01205         RET     NZ              ;>256?
28A0 7B       01206         LD      A,E             ;Get lsb
28A1 D605     01207         SUB     5               ;Adjust 0 relative
28A3 D8       01208         RET     C               ;Go if out of range
28A4 FE04     01209         CP      4               ;5-8?
28A6 D0       01210         RET     NC              ;Out of range
28A7 B7       01211         OR      A               ;Clear carry, set PV
28A8 EAAD28   01212         JP      PE,$+5          ;Go if 5/8
28AB EE03     01213         XOR     3               ;Change 6=>7=>6
28AD 0F       01214         RRCA                    ;Align to bits 6/5
28AE 0F       01215         RRCA
28AF 0F       01216         RRCA
28B0 0660     01217         LD      B,01100000B     ;For bit setup
28B2 CDAB29   01218         CALL    SETBITS         ;Setup in C register
              01219 ;
              01220 ;       Evaluate STOP
              01221 ;
28B5 3A2F28   01222 SETSTOP LD      A,(SRESP)       ;Get response byte
28B8 B7       01223         OR      A               ;Anything?
28B9 2817     01224         JR      Z,SETPAR        ;Nope, continue
28BB ED5B5227 01225         LD      DE,(STOPP)      ;Get input
28BF 14       01226         INC     D               ;Check for out of range
28C0 15       01227         DEC     D               ;D<>0?
28C1 C0       01228         RET     NZ              ;>256
28C2 7B       01229         LD      A,E             ;Get lsb
28C3 B7       01230         OR      A               ;0?
28C4 C8       01231         RET     Z               ;Invalid if not
28C5 FE03     01232         CP      3               ;1/2?
28C7 D0       01233         RET     NC              ;Invalid
28C8 3D       01234         DEC     A               ;Change 1|2 to 0|1
28C9 07       01235         RLCA                    ;Align result
28CA 07       01236         RLCA
28CB 07       01237         RLCA
28CC 07       01238         RLCA
28CD 0610     01239         LD      B,00010000B     ;Init mask
28CF CDAB29   01240         CALL    SETBITS         ;Setup in C register
              01241 ;
              01242 ;       Evaluate PARITY
              01243 ;
28D2 3A3928   01244 SETPAR  LD      A,(PRESP)       ;Get parity response
28D5 B7       01245         OR      A               ;Any input?
28D6 2825     01246         JR      Z,SETPEO        ;Nope, check EVEN|ODD
              01247 ;
              01248 ;       Check if response was string or switch
              01249 ;
28D8 ED5B5427 01250         LD      DE,(PARITYP)    ;Get user pointer
28DC CB77     01251         BIT     6,A             ;Switch?
28DE 2015     01252         JR      NZ,SETPOF       ;Yes, set ON/OFF
              01253 ;
              01254 ;       Response was string, check 'E'|'O'
              01255 ;
28E0 1A       01256         LD      A,(DE)          ;Get input
28E1 CDB929   01257         CALL    UCASE           ;Make upper case
28E4 FE4F     01258         CP      'O'             ;Odd?
28E6 2807     01259         JR      Z,SETPO         ;Yes, go
28E8 FE45     01260         CP      'E'             ;Even?
28EA C0       01261         RET     NZ              ;Neither, invalid
28EB CBF9     01262 SETPE   SET     7,C             ;Set EVEN parity
28ED 1802     01263         JR      SETPAEO         ;Continue
28EF CBB9     01264 SETPO   RES     7,C             ;Set ODD parity
28F1 CB99     01265 SETPAEO RES     3,C             ;Set ON parity
28F3 182C     01266         JR      SETBRK          ;Continue
              01267 ;
              01268 ;       Response was switch, check ON|OFF
              01269 ;
28F5 7A       01270 SETPOF  LD      A,D             ;Check input
28F6 B3       01271         OR      E               ;=0000?
28F7 CBD9     01272         SET     3,C             ;Set OFF
28F9 2826     01273         JR      Z,SETBRK        ;Continue if yes
28FB CB99     01274         RES     3,C             ;Set ON
              01275 ;
              01276 ;       Check for ODD|EVEN params
              01277 ;
28FD 3A4828   01278 SETPEO  LD      A,(ORESP)       ;Get odd response
2900 B7       01279         OR      A               ;Anything?
2901 280C     01280         JR      Z,SETPAE        ;Nope, check EVEN
2903 ED5B5827 01281         LD      DE,(ODDP)       ;Get user input
2907 7A       01282         LD      A,D             ;Check for nil
2908 B3       01283         OR      E               ;DE=0000?
2909 CBF9     01284         SET     7,C             ;ODD=off?
290B 2802     01285         JR      Z,SETPAE        ;Go if yes
290D CBB9     01286         RES     7,C             ;ODD=on
              01287 ;
290F 3A4128   01288 SETPAE  LD      A,(ERESP)       ;Get even response
2912 B7       01289         OR      A               ;Anything?
2913 280C     01290         JR      Z,SETBRK        ;Nope, continue
2915 ED5B5627 01291         LD      DE,(EVENP)      ;Get param
2919 7A       01292         LD      A,D             ;Check for nil
291A B3       01293         OR      E               ;DE=0000?
291B CBB9     01294         RES     7,C             ;EVEN=off?
291D 2802     01295         JR      Z,SETBRK        ;Go if yes
291F CBF9     01296         SET     7,C             ;EVEN=on
              01297 ;
              01298 ;       Evaluate BREAK
              01299 ;
2921 3A0E28   01300 SETBRK  LD      A,(BRRESP)      ;Get user response
2924 B7       01301         OR      A               ;Anything?
2925 2818     01302         JR      Z,SETDTR        ;Nope, continue
2927 ED5B4A27 01303         LD      DE,(BREAKP)     ;Get user input
292B CB77     01304         BIT     6,A             ;Switch?
292D 2005     01305         JR      NZ,SETBOF       ;Yes, check ON|OFF
              01306 ;
              01307 ;       Value entered, check if in range
              01308 ;
292F 14       01309         INC     D               ;Check msb
2930 15       01310         DEC     D               ;D<>0?
2931 C0       01311         RET     NZ              ;>256?
2932 1808     01312         JR      UPDBRK          ;Continue
              01313 ;
              01314 ;       Switch entered, check if on/off
              01315 ;
2934 7A       01316 SETBOF  LD      A,D             ;Get input
2935 B3       01317         OR      E               ;DE=0000?
2936 1E80     01318         LD      E,80H           ;Default
2938 2802     01319         JR      Z,UPDBRK        ;Go if off
293A 1E03     01320         LD      E,03H           ;Default
293C DD7307   01321 UPDBRK  LD      (IX+BRK),E      ;Update data
              01322 ;
              01323 ;       Evaluate DTR
              01324 ;
293F 3A4F28   01325 SETDTR  LD      A,(DTRESP)      ;Get user response byte
2942 B7       01326         OR      A               ;Anything?
2943 280C     01327         JR      Z,SETRTS        ;Continue if not
2945 ED5B5A27 01328         LD      DE,(DTRP)       ;Get user param
2949 7A       01329         LD      A,D             ;Check if anything
294A B3       01330         OR      E               ;DE=0000?
294B CBC9     01331         SET     1,C             ;Set OFF
294D 2802     01332         JR      Z,SETRTS        ;Go if yes
294F CB89     01333         RES     1,C             ;Set ON
              01334 ;
              01335 ;       Evaluate RTS
              01336 ;
2951 3A5628   01337 SETRTS  LD      A,(RTRESP)      ;Get user response byte
2954 B7       01338         OR      A               ;Anything?
2955 280C     01339         JR      Z,UPDCI         ;Continue if not
2957 ED5B5C27 01340         LD      DE,(RTSP)       ;Get user param
295B 7A       01341         LD      A,D             ;Check if 0
295C B3       01342         OR      E               ;DE=0000?
295D CBC1     01343         SET     0,C             ;Set OFF
295F 2802     01344         JR      Z,UPDCI         ;Go if yes
2961 CB81     01345         RES     0,C             ;Set ON
2963 CBD1     01346 UPDCI   SET     2,C             ;Enable transmit
2965 DD7105   01347         LD      (IX+UCIMAGE),C  ;Update new data
              01348 ;
              01349 ;       Evaluate RI
              01350 ;
2968 215C28   01351 SETRI   LD      HL,RIRESP       ;Response byte
296B 0E01     01352         LD      C,00000001B     ;Bit to set
296D CD8A29   01353         CALL    SETIT           ;Setup data
              01354 ;
              01355 ;       Evaluate DSR
              01356 ;
2970 216928   01357 SETDSR  LD      HL,DSRESP       ;Response byte
2973 0E04     01358         LD      C,00000100B     ;Bit mask
2975 CD8A29   01359         CALL    SETIT           ;Setup data
              01360 ;
              01361 ;       Evaluate CD
              01362 ;
2978 216228   01363 SETCD   LD      HL,CDRESP       ;Response byte
297B 0E02     01364         LD      C,00000010B     ;Bit mask
297D CD8A29   01365         CALL    SETIT           ;Setup data
              01366 ;
              01367 ;       Evaluate CTS
              01368 ;
2980 217028   01369 SETCTS  LD      HL,CTRESP       ;Response byte
2983 0E08     01370         LD      C,00001000B     ;Bit mask
2985 CD8A29   01371         CALL    SETIT           ;Setup data
              01372 ;
              01373 ;       Evaluation complete
              01374 ;
2988 F1       01375         POP     AF              ;Remove param error vect
2989 C9       01376         RET                     ;Return from evaluate
              01377 ;
298A 34       01378 SETIT   INC     (HL)            ;Any response?
298B 35       01379         DEC     (HL)            ;(HL) = 00?
298C C8       01380         RET     Z               ;Back if no change
298D 23       01381         INC     HL              ;Point to response data
298E CDB429   01382         CALL    GETHL           ;Load HL with (HL)
2991 CDB429   01383         CALL    GETHL           ;Get user response
2994 79       01384         LD      A,C             ;Get response data ON
2995 07       01385         RLCA                    ;Align to upper 4 bits
2996 07       01386         RLCA
2997 07       01387         RLCA
2998 07       01388         RLCA
2999 B1       01389         OR      C               ;Combine
299A 47       01390         LD      B,A             ;Set response data OFF
299B 2F       01391         CPL                     ;Reverse bits
299C DDA604   01392         AND     (IX+MSMASK)     ;Drop desired bits
299F 5F       01393         LD      E,A             ;Save new mask
29A0 7C       01394         LD      A,H             ;Check if OFF
29A1 B5       01395         OR      L               ;HL = 0000?
29A2 78       01396         LD      A,B             ;Get OFF bits
29A3 2801     01397         JR      Z,$+3           ;Go if off
29A5 79       01398         LD      A,C             ;Get ON bits
29A6 B3       01399         OR      E               ;Combine with remainder
29A7 DD7704   01400         LD      (IX+MSMASK),A   ;Update mask
29AA C9       01401         RET                     ;Done
              01402 ;
              01403 ;       Set bits in C from A using B as mask
              01404 ;
29AB A0       01405 SETBITS AND     B               ;Mask others
29AC F5       01406         PUSH    AF              ;Save data
29AD 78       01407         LD      A,B             ;Get mask
29AE 2F       01408         CPL                     ;Reverse for mask off
29AF A1       01409         AND     C               ;Remove undesired bits
29B0 C1       01410         POP     BC              ;B = new bits
29B1 B0       01411         OR      B               ;Combine
29B2 4F       01412         LD      C,A             ;Update
29B3 C9       01413         RET                     ;New bits set
              01414 ;
              01415 ;       Fetch HL from (HL)
              01416 ;
29B4 7E       01417 GETHL   LD      A,(HL)          ;Get lsb
29B5 23       01418         INC     HL              ;Bump pointer
29B6 66       01419         LD      H,(HL)          ;Get msb
29B7 6F       01420         LD      L,A             ;HL = (HL)
29B8 C9       01421         RET                     ;Done
              01422 ;
              01423 ;       Convert char in A to upper case
              01424 ;
29B9 FE61     01425 UCASE   CP      'a'             ;In range?
29BB D8       01426         RET     C               ;Nope, go
29BC FE7B     01427         CP      'z'+1           ;In range?
29BE D0       01428         RET     NC              ;Nope, go
29BF E65F     01429         AND     5FH             ;  else make upper case
29C1 C9       01430         RET                     ;Done
              01431 ;
              01432 ;       Check for valid baud rate entered
              01433 ;
29C2 ED5B4E27 01434 CKBAUD  LD      DE,(BAUDP)      ;Baud parm (default 300)
29C6 21FA26   01435         LD      HL,BAUDTBL      ;Point to baud table
29C9 010010   01436         LD      BC,16<8+0       ;B=count, C=position
              01437 ;
29CC 7E       01438 BLOOP   LD      A,(HL)          ;Fetch LSB baud
29CD 23       01439         INC     HL              ;Bump table
29CE BB       01440         CP      E               ;Lsb match?
29CF 2004     01441         JR      NZ,NOMATB       ;Nope, go next entry
29D1 7E       01442         LD      A,(HL)          ;Get MSB baud
29D2 BA       01443         CP      D               ;Msb match?
29D3 2805     01444         JR      Z,MATCHB        ;Yes, baud found
              01445 ;
29D5 23       01446 NOMATB  INC     HL              ;Bump to next entry
29D6 0C       01447         INC     C               ;Bump position count
29D7 10F3     01448         DJNZ    BLOOP           ;Go for table length
29D9 C9       01449         RET                     ;Param error
              01450 ;
29DA 79       01451 MATCHB  LD      A,C             ;Pick up baud rate code
29DB 07       01452         RLCA                    ;Align to high bits
29DC 07       01453         RLCA
29DD 07       01454         RLCA
29DE 07       01455         RLCA
29DF B1       01456         OR      C               ;Use for xmit and rcv
29E0 BF       01457         CP      A               ;Z=good value
29E1 C9       01458         RET                     ;Return with BAUD setting
              01459 ;
              01460 ;       Nil params entered, display current settings
              01461 ;
29E2          01462 SHOW    EQU     $
              01463         IF      @MOD2
              01464         LD      A,-1            ;Set NO flag
              01465         LD      (SHOWF),A       ;Save flag
              01466         LD      DE,MDNAME1      ;CL1
              01467         LD      A,'A'           ;Comm A
              01468         LD      (MSG1A),A       ;To text
              01469         CALL    SHOW1           ;Display
              01470         LD      DE,MDNAME2      ;CL2
              01471         LD      A,'B'           ;Comm B
              01472         LD      (MSG1A),A       ;To text
              01473         CALL    SHOW1           ;Display
              01474         LD      A,-1            ;Get flag
              01475 SHOWF   EQU     $-1
              01476         OR      A               ;Any found?
              01477         JP      NZ,BADMOD       ;Not installed
              01478         RET                     ;  else OK
              01479 ;
              01480 SHOW1   @@GTMOD                 ;Locate module
              01481         RET     NZ              ;Module not found
              01482         XOR     A               ;Set module found
              01483         LD      (SHOWF),A       ;Init flag
              01484         PUSH    DE              ;Pass to IX
              01485         POP     IX              ;IX => module
              01486         ENDIF
              01487 ;
29E2 C33126   01488         JP      DSPALL          ;Display all settings
              01489 ;
              01490 ;       Mini param block for 'query' evaluation
              01491 ;
29E5 80       01492 PTBL2   DB      80H             ;Extended param
              01493 ;
29E6 C1       01494 FTYP    DB      FLAG!NUM!1
29E7 46       01495         DB      'F'
29E8 00       01496 FRESP   DB      0
29E9 6A27     01497         DW      FPARM
              01498 ;
29EB 00       01499         DB      0
              01500 ;
              01501 ;       Text string passed to @PARAM for query eval
              01502 ;
29EC 28       01503 FSTR    DB      '(F='
     46 3D 
29EF          01504 INBUF   EQU     $               ;Keyboard input buffer
              01505 ;
2400          01506         END     BEGIN
2400 is the transfer address
00000 Total errors


[Copyright 1999,2002 Frank Durda IV, All Rights Reserved.
Mirroring of any material on this page in any form is expressly prohibited.
The official web site for this material is:  http://nemesis.lonestar.org
Contact this address for use clearances: clearance at nemesis.lonestar.org
Comments and queries to this address: web_software_2011 at nemesis.lonestar.org]

Valid HTML 4.01!