home *** CD-ROM | disk | FTP | other *** search
- ;MX0-LB22.ASM -- AMPRO 'LITTLE BOARD' OVERLAY FILE FOR MEX
- ;
- ;
-
- VER EQU 2 ; Version
- REV EQU 2 ; Revision Level
- ;
- ;
- ; Modified from Jerry Haigwood's M7LB-2.ASM with inserts from
- ; MXO-KP41.ASM John Smith, et al..
- ;
- ; Modified from the general purpose overlay by Jerry Haigwood, KY4Z
- ;
- ; This overlay adapts the MEX program by Ronald Fowler to the
- ; AMPRO Series 100 computer, using the Z80 DART and the
- ; Z80 CTC.
- ;
- ; You will want to look this file over carefully. There are a number of
- ; options that you can use to configure the program to suit your taste.
- ; This file places particular emphasis on using the AMPRO Series 100
- ; computer with the Z80 DART serial port "B" and the Z80 CTC baud rate
- ; generator. If you are not using this equipment then you might still
- ; want to look over this file to gain knowledge on how to write your
- ; own version of this overlay. Some other overlays which might help
- ; are:
- ;
- ; "H8" Heath H89 overlay for 8250 I/O and programmable baud rates
- ; "HZ" Zenith 120 overlay for 2661B initialization and baud rates
- ; "XE" Xerox 820II overlay for Z80-SIO intialization, etc.
- ;
- ; Edit this file for your preferences then follow the "TO USE:" example
- ; shown below.
- ;
- ; TO USE: First edit this file filling in answers for your own
- ; equipment. Then assemble with ASM.COM or equivalent
- ; assembler. Then use MLOADxx to overlay the relulting
- ; .HEX file over the MEXxx.COM.
- ;
- ; A>REN MEXxxx.OBJ=MEXxxx.COM <-- THIS PRESERVES THE UNINSTALLED
- ; VERSION IN AN UNRUNABLE FORM.
- ; A>ASM MXO-LB01
- ; A>MLOADxx MEXXxx.COM=MEXXxx.OBJ,MXO-LB01.HEX
- ;
- ;
- ; = = = = = = = = = = = = = = = = = =
- ;
- ; 12/18/85 - Corrected 2400 Baud problem,
- ; Neatened up printing routines
- ; Added jump so that SM overlays can set baud rate
- ; - Mike Vore
- ;
- ; 10/02/85 - Cleaned up misc. trash
- ; Added Version and Rev - Mike Vore
- ;
- ;
- ;
- ; 09/30/85 - Added "FULL SETUP" routines (5-6-7-8 bits
- ; No, Even, Odd parity
- ; 1- 1.5- 2 stopbits)
- ; "BREAK" sent with 'esc' @ in terminal mode.
- ; Disconnects modem with 'esc' N in terminal mode
- ; by lowering HSO (Hand Shake Out), J4-P4 (for DTR)
- ;
- ; - Mike Vore, W3CCV
- ;
- ;
- ; 12/23/83 - First version of this file - Jerry Haigwood
- ; = = = = = = = = = = = = = = = = =
- ;
- BELL: EQU 07H ;bell
- CR: EQU 0DH ;carriage return
- ESC: EQU 1BH ;escape
- LF: EQU 0AH ;linefeed
- TAB: EQU 09H ;tab character
- ;
- YES: EQU 0FFH
- NO: EQU 0
- ;
- BRKWT EQU 3 ;Break Wait Time Hundreds Of mSec
- GBYTME EQU 3 ;Goodbye pause Hundreds of mSec
- HNGUPT EQU 2 ;Hangup pause Seconds
- ;
- ; Change the following information to match your equipment
- ; This is for the Little Board Serial Port B
- ;
- PORT: EQU 8CH
- MODCTL1 EQU PORT ;MODEM CONTROL PORT
- MODDATP: EQU PORT-4 ;MODEM DATA IN PORT
- MODRCVB: EQU 1 ;BIT TO TEST FOR RECEIVE
- MODRCVR: EQU 1 ;VALUE WHEN READY
- MODSNDB: EQU 4 ;BIT TO TEST FOR SEND
- MODSNDR: EQU 4 ;VALUE WHEN READY
- CTC: EQU 50H ;CTC addr
- ;
- ;
- ;
- ; MEX SERVICE PROCESSOR
- ;
- MEX EQU 0D00H ;ADDRESS OF THE SERVICE PROCESSOR
- INMDM EQU 255 ;GET CHAR FROM PORT TO A, CY=NO MORE IN 100 MS
- TIMER EQU 254 ;DELAY 100MS * REG B
- TMDINP EQU 253 ;B=# SECS TO WAIT FOR CHAR, CY=NO CHAR
- CHEKCC EQU 252 ;CHECK FOR ^C FROM KBD, Z=PRESENT
- SNDRDY EQU 251 ;TEST FOR MODEM-SEND READY
- RCVRDY EQU 250 ;TEST FOR MODEM-RECEIVE READY
- SNDCHR EQU 249 ;SEND A CHARACTER TO THE MODEM (AFTER SNDRDY)
- RCVCHR EQU 248 ;RECV A CHAR FROM MODEM (AFTER RCVRDY)
- LOOKUP EQU 247 ;TABLE SEARCH: SEE CMDTBL COMMENTS FOR INFO
- PARSFN EQU 246 ;PARSE FILENAME FROM INPUT STREAM
- BDPARS EQU 245 ;PARSE BAUD-RATE FROM INPUT STREAM
- SBLANK EQU 244 ;SCAN INPUT STREAM TO NEXT NON-BLANK
- EVALA EQU 243 ;EVALUATE NUMERIC FROM INPUT STREAM
- LKAHED EQU 242 ;GET NXT CHAR W/O REMOVING FROM INPUT
- GNC EQU 241 ;GET CHAR FROM INPUT, CY=1 IF NONE
- ILP EQU 240 ;INLINE PRINT
- DECOUT EQU 239 ;DECIMAL OUTPUT
- PRBAUD EQU 238 ;PRINT BAUD RATE
- ;
- CONOUT EQU 2 ;SIMULATED BDOS FUNCTION 2: CONSOLE CHAR OUt
- PRINT EQU 9 ;simulated BDOS function 9: print string
- INBUF EQU 10 ;input buffer, same structure as BDOS 10
- ;
- ORG 100H
- ;
- ;
- ; Change the clock speed if needed, to match your system
- ;
- DS 3 ;(for "JMP START" instruction)
- ;
- PMMIMODEM: DB NO ;yes=PMMI S-100 Modem 103H
- SMARTMODEM: DB YES ;yes=HAYES Smartmodem, no=non-PMMI 104H
- TOUCHPULSE: DB 'T' ;T=touch, P=pulse (Smartmodem-only) 105H
- CLOCK: DB 40 ;clock speed in MHz x10, 25.5 MHz max. 106H
- ;20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc.
- MSPEED: DB 1 ;0=110 1=300 2=450 3=600 4=710 5=1200 107H
- ;6=2400 7=4800 8=9600 9=19200 default
- ;This defines the DEFAULT SPEED when
- ;loading the program, REG4 and CTC1
- ;will be set at load time.
- ;
- BYTDLY: DB 5 ;0=0 delay 1=10ms 5=50 ms - 9=90 ms 108H
- ;default time to send character in ter-
- ;minal mode file transfer for slow BBS.
- CRDLY: DB 5 ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H
- ;default time for extra wait after CRLF
- ;in terminal mode file transfer
- NOOFCOL: DB 5 ;number of DIR columns shown 10AH
- SETUPTST: DB YES ;yes=user-added Setup routine 10BH
- SCRNTEST: DB NO ;Cursor control routine 10CH
- ACKNAK: DB YES ;yes=resend a record after any non-ACK 10DH
- ;no=resend a record after a valid-NAK
- BAKUPBYTE: DB NO ;yes=change any file same name to .BAK 10EH
- CRCDFLT: DB YES ;yes=default to CRC checking 10FH
- TOGGLECRC: DB YES ;yes=allow toggling of CRC to Checksum 110H
- CONVBKSP: DB NO ;yes=convert backspace to rub 111H
- TOGGLEBK: DB YES ;yes=allow toggling of bksp to rub 112H
- ADDLF: DB YES ;no=no LF after CR to send file in 113H
- ;terminal mode (added by remote echo)
- TOGGLELF: DB YES ;yes=allow toggling of LF after CR 114H
- TRANLOGON: DB NO ;yes=allow transmission of logon 115H
- ;write logon sequence at location LOGON
- SAVCCP: DB NO ;yes=do not overwrite CCP 116H
- ;no=overwrite CCP, Large ASCII captures
- ; might need this set to NO
- LOCONEXTCHR: DB NO ;yes=local command if EXTCHR precedes 117H
- ;no=external command if EXTCHR precedes
- TOGGLELOC: DB YES ;yes=allow toggling of LOCONEXTCHR 118H
- LSTTST: DB YES ;yes=printer available on printer port 119H
- XOFFTST: DB NO ;yes=checks for XOFF from remote while 11AH
- ;sending a file in terminal mode
- XONWAIT: DB NO ;yes=wait for XON after CR while 11BH
- ;sending a file in terminal mode
- TOGXOFF: DB YES ;yes=allow toggling of XOFF checking 11CH
- IGNORCTL: DB YES ;yes=CTL-chars above ^M not displayed 11DH
- EXTRA1: DB 0 ;for future expansion 11EH
- EXTRA2: DB 0 ;for future expansion 11FH
- ;
- ;
- ; Next 8 DBs used in MDM7xx not by MEXxxx, kept here for
- ; reference only.
- ; 'esc'=Escape character defined with STAT ESC command.
- ;
- BRKCHR: DB '@' ;'esc'-@ = Send 300 ms. break tone 120H
- NOCONNCT: DB 'N' ;'esc'-N = Disconnect from the phone line 121H
- LOGCHR: DB 'x' ;'esc'-x = Send Key 'x' (defined by KEY) 122H
- LSTCHR: DB 'P' ;'esc'-P = Toggle printer 123H
- UNSAVE: DB 'U' ;'esc'-U = Unstart input text capture 124H
- TRANCHR: DB 'T' ;'esc'-T = Transmit file to remote 125H
- SAVECHR: DB 'S' ;'esc'-S = Start input text capture 126H
- EXTCHR: DB ' ' ;'esc' - 'esc' = Send escape character 127H
- ;
- ;
- DS 2 ; 128H
- ;
- IN$MODCTL1: IN MODCTL1 ! RET ;in modem control port 12AH
- DS 7
- OUT$MODDATP: OUT MODDATP ! RET ;out modem data port 134H
- DS 7
- IN$MODDATP: IN MODDATP ! RET ;in modem data port 13EH
- DS 7
- ANI$MODRCVB: ANI MODRCVB ! RET ;bit to test for receive ready 148H
- CPI$MODRCVR: CPI MODRCVR ! RET ;value of rcv. bit when ready 14BH
- ANI$MODSNDB: ANI MODSNDB ! RET ;bit to test for send ready 14EH
- CPI$MODSNDR: CPI MODSNDR ! RET ;value of send bit when ready 151H
- DS 12 ; 156H
- ;
- ;
- LOGONPTR DS 2 ;FOR USER MESSAGE, NOT USED
- ;
- ; DIALV will be overwritten by SM overlays
- ;
- DIALV DS 3 ;reserved for dial routine jump
- ; DISCV May be modified by SM overlays, depending on method of disconnect.
- DISCV JMP DISCON ;disconnect modem
- JMP$GOODBYE: JMP GOODBYE ; 168H
- JMP$INITMOD: JMP INITMOD ;go to user written routine 16BH
- JMP$SETBAUD JMP STBAUD2 ;set baud from dial overlay
- RET ! NOP ! NOP ;(by-passes PMMI routine) 171H
- RET ! NOP ! NOP ;(by-passes PMMI routine) 174H
- JMP$SETUPR: JMP SETCMD ; 177H
- JMP$SPCLMENU RET ! NOP ! NOP ;
- JMP$SYSVER: JMP SYSVER ; 17DH
- JMP$BREAK: JMP SENDBRK ; 180H
- ;
- ;
- ; Do not change the following six lines.
- ;
- JMP$ILPRT: DS 3 ; 183H
- JMP$INBUF DS 3 ; 186H
- JMP$INLNCOMP: DS 3 ; 189H
- JMP$INMODEM DS 3 ; 18CH
- JMP$NXTSCRN: DS 3 ; 18FH
- JMP$TIMER DS 3 ; 192H
- ;
- ;
- ; Routine to clear to end of screen. If using CLREOS and CLRSCRN, set
- ; SCRNTEST to YES at 010AH (above).
- ;
- CLREOS: LXI D,CLRLIN ; To clear to End Of Screen
- MVI C,PRINT ; Put Terminal Data at CLRLIN
- CALL MEX
- RET
- ;
- ;
- CLRSCN: LXI D,CLS ; Put Terminal Sequence for
- MVI C,PRINT ; Screen Clear at CLS
- CALL MEX
- RET
- ;
- ; END OF FIXED ADDRESS ----------------------------------
- ;
-
- SYSVER: LXI D,VERSMSG
- MVI C,PRINT
- CALL MEX
- RET
- ;
- VERSMSG:
- DB 'AMPRO LITTLE BOARD AND SERIES 100 COMPUTER'
- DB ' VERSION ',VER+'0','.', REV+'0',CR, LF,LF
- DB 'FULL SET COMMANDS !',CR,LF,LF,'$'
- ;
- CLS DB 0,0,0,0,0,'$' ; <<- set this and the next for
- ; your screen clear and line
- ; clear sequences.
- CLRLIN DB 0,0,0,0,0,'$'
- ;.....
- ;
- ;
- ;-----------------------------------------------------------------------
- ;.....
- ;
- ;
- ;
- SENDBRK: MVI A,5
- OUT PORT
- MVI A,0FAh ; Send 'BREAK' command to DART
- OUT PORT
- MVI B,BRKWT ; Wait
- CALL MTIME
- MVI A,5
- OUT PORT
- LDA REG5 ; Send setup back to DART
- OUT PORT
- RET
- ;.....
- ;
- ;
- ;
- ;.....
- ;
- ;
- ; The following is used to initialize the AMPRO Z80 DART port "B".
- ; Baud rate is initially set from MSPEED value
- ;
- INITMOD: DI ;no interupts during setup
- LDA MSPEED ; get the initial MSPEED value and go
- ; set the baud rate with it
- CALL PBAUD
- ;
- NITSIO: DI ; All DART sets go here
- ;
- MVI A,04H ;write register 4 of DART
- OUT PORT ;contol port
- LDA REG4 ; mult, stop bits, parity bits
- OUT PORT ;
- ;
- MVI A,03H ;write register 3 of DART
- OUT PORT ;
- LDA REG3 ; rcv n bits/char, rcv enable
- OUT PORT ;
- ;
- MVI A,05H ;write register 5 of DART
- OUT PORT ;
- LDA REG5 ; BITS/CHAR, TX ENABLE, RTS ENABLE
- OUT PORT ;
- ;
- MVI A,45H ;counter mode,contol word time constant follows
- OUT CTC ;CTC channel 1
- ;
- LDA CTC1 ; MULTIPLIER
- OUT CTC ;CTC channel 1
- EI ;
- RET
- ;
- ;------------------------------------------------------------
- ;
- ;;
- ;
- ; Disconnect Routine
- ;
- ; Disconnects by lowering J4-P4 (Hand Shake Out) -connect
- ; to DTR on semi-smart modems like Novation J-Cat
- ;
- ; Hangs up modem for 2 seconds
- ;
- ;
- DISCON: MVI A,5 ;OUTPUT TXOFF,RXOFF,DTROFF TO
- OUT PORT ;TO DART PORT 5
- MVI A,0
- OUT PORT
- MVI B,HNGUPT*10 ; WAIT 2 SEC
- CALL MTIME
- MVI A,5 ; THEN RESET DART TO ORIGINAL STATUS
- OUT PORT
- LDA REG5
- OUT PORT
- RET
- ;
- ;
- ;
- ; GOODBYE routines are called by MEX prior to exit to CP/M
- ;
- GOODBYE: MVI B,GBYTME ;DELAY 300 MS.
- CALL MTIME
- RET
- ;
- ; SET COMMAND PROCESSOR
- ;
- SETCMD: MVI C,SBLANK ;ANY ARGUMENTS?
- CALL MEX
- JC SETSHO ;IF NOT, DISPLAY DEFAULTS
- LXI D,CMDTBL
- MVI C,LOOKUP
- CALL MEX ;PARSE THE ARGUMENT
- PUSH H ;SAVE ANY PARSED ARGUMENTS ON STACK
- RNC ;IF WE HAVE ONE, RETURN TO IT
- POP H ;OOPS, INPUT NOT FOUND IN TABLE
- SETERR: LXI D,SETEMS
- MVI C,PRINT
- CALL MEX
- CALL CRLF
- RET
- SETEMS: DB CR,LF,'SET command error',CR,LF,'$'
- ;
- SETBAD: LXI D,SETEMS
- MVI C,PRINT
- CALL MEX
- ;
- CMDTBL: DB '?'+80H ; HELP
- DW SETHELP
- DB 'BAU','D'+80H ; SET BAUD
- DW STBAUD
- DB 'PARIT','Y'+80H ; SET PARITY
- DW STPRTY
- DB 'STOPBIT','S'+80H ; SET STOPBITS
- DW STSTOP
- DB 'LENGT','H'+80H ; SET LENGTH
- DW STBITS
- DB 'PULS','E'+80H ;SET PULSE FOR SM OVERLAY
- DW SWPULSE
- DB 'TON','E'+80H ;SET TONE FOR SM OVERLAY
- DW SWTONE
- DB '$' ;TABLE TERMINATOR
- ;
- ;
- ; "SET (no args): PRINT CURRENT STATISTICS
- ;
- SETSHO: CALL MILP
- DB CR,LF
- DB 'SET values:',CR,LF,0
- CALL CRLF
- CALL MILP
- DB 'Baud Rate: ',TAB,0
- CALL BDSHOW
- CALL CRLF
- CALL SHPRTY
- CALL CRLF
- CALL SHSTOP
- CALL CRLF
- CALL SHBITS
- CALL CRLF
- CALL SHDIAL
- CALL CRLF
- CALL CRLF
- RET
- ;
- ; "SET ?" processor
- ;
- SETHELP: CALL MILP
- DB CR,LF,'SET PARITY - OFF, EVEN or ODD'
- DB CR,LF,'SET STOPBITS - 1, 1.5 or 2'
- DB CR,LF,'SET LENGTH - 5, 6, 7 or 8'
- DB CR,LF,'SET BAUD - 300, 450, 600, 1200, 2400, '
- DB '4800, 9600'
- DB CR,LF,'SET PULSE - For Pulse Dialing'
- DB CR,LF,'SET TONE - For Tone Dialing'
- DB CR,LF,CR,LF,0
- RET
- ;
- ;
- ; "SET BAUD" processor
- ;
- STBAUD: MVI C,BDPARS ;FUNCTION CODE: PARSE A BAUDRATE
- CALL MEX ;LET MEX LOOK UP CODE
- JC SETERR ;JUMP IF INVALID CODE
- STBAUD2 CALL PBAUD ;NO, TRY TO SET IT
- JC SETERR ;IF NOT ONE OF OURS, BOMB OUT
- CALL NITSIO
- BDSHOW: LDA MSPEED ;GET CURRENT BAUD RATE
- MVI C,PRBAUD ;LET MEX PRINT IT
- CALL MEX
- RET
- ;
- ; This routine sets baud rate passed as MSPEED code in A.
- ; Returns CY=1 if baud rate not supported.
- ;
- PBAUD: PUSH H ;DON'T ALTER ANYBODY
- PUSH D
- PUSH B
- STA TSPEED ;put it in a safe spot
- ADD A ;double it for offset into table
- MOV E,A ;MSPEED CODE TO DE
- MVI D,0
- LXI H,BAUDTB ;OFFSET INTO TABLE
- DAD D
- MOV A,M ;FETCH CODE
- ORA A ;0 MEANS UNSUPPORTED CODE
- STC ;PREP CARRY IN CASE UNSUPPORTED
- JZ PBEXIT ;EXIT IF BAD
- STA CTC1 ;
- INX H
- LDA REG4
- ANI 0FH
- ORA M
- STA REG4
- LDA TSPEED
- STA MSPEED
- ORA A ;RETURN NO ERRORS
- PBEXIT: POP B
- POP D
- POP H
- RET
- ;
- BAUDTB DB 0,0 ;110 (NOT SUPPORTED)
- DB 208,080H ;300
- DB 156,080h ;450
- DB 208,040H ;600
- DB 0,0
- DB 104,040H ;1200
- DB 52,040H ;2400
- DB 26,040H ;4800
- DB 13,040H ;9600
- DB 0FH ;19200 (Not Supported)
- RET
- ;
- ; SET PARITY command: reset transmit/receive parity
- ;
- ; Parity is controlled by bits 0 and 1 of
- ; the byte sent to the SIO write-register
- ; 4 as follows:
- ;
- ; Parity Bit 1 Bit 0
- ; Off - 0
- ; Odd 0 1
- ; Even 1 1
- ;
- STPRTY: MVI C,SBLANK ;check for parity code
- CALL MEX ;
- JC SETERR ;if none, print error
- LXI D,PARTBL ;check for proper syntax
- MVI C,LOOKUP
- CALL MEX
- PUSH H ;match found, go do it!
- RNC ;
- POP H ;no match: fix stack and
- JMP SETERR ; print error
- ;
- PROFF: LDA REG4 ;get register 4 byte
- ANI 0FEH ;reset bit 0
- JMP PARTB1 ;
- PREVEN: LDA REG4 ;
- ORI 003H ;set bits 0 & 1
- JMP PARTB1 ;
- PRODD: LDA REG4 ;
- ORI 001H ;set bit 0
- ANI 0FDH ;reset bit 1
- PARTB1: STA REG4 ;
- CALL NITSIO ;re-initialize the USART
- CALL SHPRTY ;print the result
- RET ;
- SHPRTY: CALL MILP ;display parity
- DB 'Parity: ',TAB,' ',0
- LDA REG4 ;
- ANI 001H ;test bit 0
- CPI 0 ;if bit0=0 then parity off
- JNZ SHPRT1 ;
- CALL MILP ;
- DB 'Off',0 ;
- RET
- SHPRT1: LDA REG4 ;
- ANI 002H ;test bit 1
- CPI 0 ;if bit1=0 then parity odd
- JNZ SHPRT2 ;
- CALL MILP ;
- DB 'Odd',0 ;
- RET ;
- SHPRT2: CALL MILP ;
- DB 'Even',0 ;
- RET
- ;
- ; SET PARITY command table
- ;
- PARTBL: DB 'OF','F'+80H ;"set parity off"
- DW PROFF
- DB 'EVE','N'+80H ;"set parity even"
- DW PREVEN
- DB 'OD','D'+80H ;"set parity odd"
- DW PRODD
- DB 0 ;<<== end of parity table
- ;
- ; SET STOPBITS command: reset number of stop bits
- ;
- ; The number of stop bits is controlled by bits
- ; 2 and 3 of the byte sent to the SIO write-
- ; register 4, as follows:
- ;
- ; Stop bits Bit 3 Bit 2
- ; 1 0 1
- ; 1.5 1 0
- ; 2 1 1
- ;
- ;
- STSTOP: MVI C,SBLANK ;check for stop bits
- CALL MEX ;
- JC SETERR ;if none, print error
- LXI D,STPTBL ;check for proper syntax
- MVI C,LOOKUP
- CALL MEX ;
- PUSH H ;match found, go do it!
- RNC ;
- POP H ;no match: fix stack and
- JMP SETERR ; print error
- ;
- STOP01: LDA REG4 ;get register 4 byte
- ANI 0F7H ;reset bit 3
- ORI 004H ;set bit 2
- JMP STSTP1 ;
- STOP02: LDA REG4 ;
- ORI 00CH ;set bits 2 and 3
- JMP STSTP1 ;
- STOP15: LDA REG4 ;
- ORI 008H ;set bit 3
- ANI 0FBH ;reset bit 2
- STSTP1: STA REG4 ;
- CALL NITSIO ;
- CALL SHSTOP ;print the result
- RET
- SHSTOP: CALL MILP ;display stop-bits
- DB 'Stop bits:',TAB,' ',0
- LDA REG4 ;
- ANI 004H ;test bit 2
- CPI 0 ;if bit2=0 then 1.5
- JNZ SHSTP1 ;
- CALL MILP ;
- DB '1.5',0 ;
- RET
- SHSTP1: LDA REG4 ;
- ANI 008H ;test bit 3
- CPI 0 ;if bit3=0 then 1
- JNZ SHSTP2 ;
- CALL MILP ;
- DB '1',0 ;
- RET
- SHSTP2: CALL MILP ;
- DB '2',0 ;
- RET
- ;
- ; SET STOPBITS command table
- ;
- STPTBL: DB '1'+80H ;"set stop 1"
- DW STOP01
- DB '2'+80H ;"set stop 2"
- DW STOP02
- DB '1.','5'+80H ;"set stop 1.5"
- DW STOP15
- DB 0 ;<<== End of stop-bits table
- ;
- ; SET LENGTH command: set bits per character
- ;
- ; The number of bits per character is controlled for
- ; the receiver circuit by bits 6 and 7 of the byte
- ; sent to the SIO write-register 3 and for the trans-
- ; mitter circuit by bits 5 and 6 of the byte sent to
- ; the SIO write-register 5. The assumption has been
- ; made here that both transmission and reception will
- ; be carried on at the same number of bits per charac-
- ; ter. The bit configurations are shown for register
- ; 3 only, but are the same for register 5:
- ;
- ; REG5--->Bit 6 Bit 5
- ; BPC REG3--->Bit 7 Bit 6
- ; 5 0 0
- ; 6 1 0
- ; 7 0 1
- ; 8 1 1
- ;
- STBITS: MVI C,SBLANK ;check for bits/char
- CALL MEX ;
- JC SETERR ;if none, print error
- LXI D,BITTBL ;check for proper syntax
- MVI C,LOOKUP
- CALL MEX
- PUSH H ;match found, go do it!
- RNC ;
- POP H ;no match: fix stack and
- JMP SETERR ; print error
- ;
- BIT5: LDA REG3 ;
- ANI 0BFH ;reset bit 6
- ANI 07FH ;reset bit 7
- STA REG3 ;
- LDA REG5 ;
- ANI 0DFH ;reset bit 5
- ANI 0BFH ;reset bit 6
- JMP STBTS1 ;
- BIT6: LDA REG3 ;
- ANI 0BFH ;reset bit 6
- ORI 080H ;set bit 7
- STA REG3 ;
- LDA REG5 ;
- ANI 0DFH ;reset bit 5
- ORI 040H ;set bit 6
- JMP STBTS1 ;
- BIT7: LDA REG3 ;
- ORI 040H ;set bit 6
- ANI 07FH ;reset bit 7
- STA REG3 ;
- LDA REG5 ;
- ORI 020H ;set bit 5
- ANI 0BFH ;reset bit 6
- JMP STBTS1 ;
- BIT8: LDA REG3 ;
- ORI 040H ;set bit 6
- ORI 080H ;set bit 7
- STA REG3 ;
- LDA REG5 ;
- ORI 020H ;set bit 5
- ORI 040H ;set bit 6
- STBTS1: STA REG5 ;
- CALL NITSIO ;
- CALL SHBITS ;print the result
- RET
- SHBITS: CALL MILP ;display bits/char
- DB 'Bits/char:',TAB,' ',0
- LDA REG5 ;
- ANI 040H ;test bit 6
- CPI 0 ;if bit6=0 then 6 bpc
- JNZ SHBTS2 ;
- LDA REG5 ;
- ANI 020H ;test bit 5
- CPI 0 ;if bit5=0 then 5 bpc
- JNZ SHBTS1 ;
- CALL MILP ;
- DB '5',0 ;
- RET ;
- SHBTS1: CALL MILP ;
- DB '7',0 ;
- RET ;
- SHBTS2: LDA REG5 ;
- ANI 020H ;test bit 5
- CPI 0 ;if bit5=0 then 6 bpc
- JNZ SHBTS3 ;
- CALL MILP ;
- DB '6',0 ;
- RET ;
- SHBTS3: CALL MILP ;
- DB '8',0 ;
- RET
- ;
- ; SET LENGTH command table
- ;
- BITTBL: DB '5'+80H ;"set bits 5"
- DW BIT5
- DB '6'+80H ;"set bits 6"
- DW BIT6
- DB '7'+80H ;"set bits 7"
- DW BIT7
- DB '8'+80H ;"set bits 8"
- DW BIT8
- DB 0 ;<<== end of bit table
- ;
- RET
- ;
- ;
- ;
- SWPULSE: MVI A,'P' ; Put 'P' into Touch/Pulse byte
- STA TOUCHPULSE ; for SM Overlay to grab
- JMP SHDIAL
- ;
- SWTONE MVI A,'T' ; Or put 'T' there
- STA TOUCHPULSE
-
- ;
- SHDIAL: LDA TOUCHPULSE ; Grab Flag
- CPI 'T' ; if Tone then say so
- JZ TONED
- CPI 'P' ; likewise if pulse
- JZ PULSED
- LXI D,BADFLA ; But if bad say so
- MVI C,PRINT ; should never get here, just for
- CALL MEX ; safety
- RET
- TONED: LXI D,TONEFLF
- MVI C,PRINT
- CALL MEX
- RET
- PULSED LXI D,PULSEF
- MVI C,PRINT
- CALL MEX
- RET
- BADFLA: DB 'BAD TOUCH/PULSE FLAG',CR,LF,'$'
- TONEFLF DB 'Tone Dial','$'
- PULSEF DB 'Pulse Dial','$'
- ;
- ; General utility routines
- ;
- MILP: MVI C,ILP ;IN-LINE PRINT
- JMP MEX
- RET
- ;
- MTIME: MVI C,TIMER ;MEX TIMER
- JMP MEX
- RET
- ;
- CRLF: CALL MILP ;PRINT CARRIAGE RETURN, LINE FEED
- DB CR,LF,0
- RET
- ;
- ;
- ;==========================================================================
- ; Data Area
- ;==========================================================================
- ;
- ; Default UART parameters (Initalized for RS-232 port B)
- ;
- REG3: DB 0C1H ;ENABLE RECEIVE AT 8 BITS/CHAR
- REG4: DB 004H ;NO PARITY, 1 STOP, CLOCK RATE SET AT INITALIZE TIME
- REG5: DB 06AH ;ENABLE TRANSMIT AT 8 BITS/CHAR
- CTC1 DB 0 ;Also set at initalize time
- ;
- ; Miscellaneous Default Data
- ;
- ;
- TSPEED DB 1 ;TEMP SPEED AREA
- ;
- ;
- END