home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Oakland CPM Archive
/
oakcpm.iso
/
cpm
/
mex
/
mxo-lb22.aqm
/
MXO-LB22.ASM
Wrap
Assembly Source File
|
1986-10-06
|
22KB
|
789 lines
;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