;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