home *** CD-ROM | disk | FTP | other *** search
- ;.............................................................
- ;.............................................................
- ; XMZS-1.ASM - XMODEM81 PATCH FILE FOR THE Z80-SIO. 11/27/83
- ;.............................................................
- ;.............................................................
- ;
- ; Assembly instructions
- ;
- ;
- ; B>DDT XMODEM81.COM
- ; DDT VERS 2.2
- ; NEXT PC
- ; 1100 0100
- ; -IXMZS-1.HEX (note the 'I' command)
- ; -R ('R' loads in the .HEX file)
- ; NEXT PC
- ; 1100 0000
- ; -G0 (return to CP/M)
- ; B>SAVE 17 XMODEM81.COM (now have a modified .COM file)
- ;
- ; NOTE: Save 22 (rather than 17) if LOGCAL is TRUE and assembling with
- ; MAC.COM and SEQIO22.LIB.
- ;.....................................................................
- ; This file along with XMODEMxx.ASM are the only two files necessary
- ; to set-up XMODEM for the Kaypro with a Hayes Smartmodem
- ;
- ; Set USECON equate to FALSE in XMODEMxx.ASM and insert appropriate
- ; CONOUT equate below. See BYE-KPRO.INF for proper CONOUT for Kaypro
- ;
- ; Steve Sanders
- ; Tampa Bay Bandit Board RCP/M
- ;.....................................................................
- ;.....................................................................
- ;
- ; 11/27/83 Updated to XMZS-1 - Steve Sanders
- ; 06/03/83 Created Z80SIO from EXT - Al Krug
- ; 04/04/83 Updated to XMODEM74 - Irv Hoff
- ; 03/27/83 Updated to XMODEM73 - Irv Hoff
- ; 03/17/83 Updated to XMODEM72 - Irv Hoff
- ; 03/15/83 Updated to XMODEM71 - Irv Hoff
- ;
- ; 03/07/83 Added instructions on how to adapt this file to XMODEM70.COM.
- ; Standardized the format. Added automatic MSPEED from "BYE"
- ; program. Added CONOUT information. Adapted from XM70PMMI.
- ; - Irv Hoff
- ;
- ;.....................................................................
- ;
- ; Define True and False
- ;
- TRUE: EQU 0FFH
- FALSE: EQU 0
- ;
- ;.....................................................................
- ;
- ; Modem & Data Equates
- ;
- MODDATP: EQU 04H ;DATA IN PORT (04H for KAYPRO)
- MODDATO: EQU MODDATP ;DATA OUT PORT
- MODCTLP: EQU MODDATP+2 ;CONTROL/STATUS PORT
- MODSNDB: EQU 4 ;BIT TO TEST FOR SEND
- MODSNDR: EQU 4 ;VALUE WHEN READY
- MODRCVB: EQU 1 ;BIT TO TEST FOR RECEIVE
- MODRCVR: EQU 1 ;VALUE WHEN READY
- MODDCDB: EQU 8 ;CARRIER DETECT BIT
- MODDCDA: EQU 8 ;VALUE WHEN ACTIVE
- MODPARE: EQU 10H ;VALUE FOR PARITY ERROR
- MODOVRE: EQU 20H ;VALUE FOR OVERRUN ERROR
- MODFRME: EQU 40H ;VALUE FOR FRAMING ERROR
- MODRESI: EQU 10H ;RESET EXTERNAL STATUS/INTERRUPTS
- MODERES: EQU 30H ;ERROR RESET
- ;
- ;
- LSPEED: EQU TRUE ;TRUE IF USING BY2-17KS OR ANY BYE2-xx
- ;FALSE IF USING 'SPEED' MANUAL SELECTION
- MSPEED: EQU 3CH ;LOCATION OF BAUD RATE FACTOR (SET BY
- ; ;'BYE') SET LOCATION IN 'BYE' TO AGREE.
- ; ;3DH AND 3EH OFTEN USED BY NEWER VER-
- ; ;SIONS OF 'ZCPR'.
- XSPEED: EQU 1 ;SPEED FOR FILE TIME TRANSFER WITHOUT
- ; ;AUTO-SET. USE ONE OF THE FOLLOWING:
- ; ;0=110 1=300 2=450 3=600 4=710 5=1200
- BASE: EQU 100H ;START OF CP/M NORMAL PROGRAM AREA
- ;
- ;.......................................................................
- ;
- ; Jump table: The jump table must be in exactly the same sequence as the
- ; one in XMODEM. Note the ORG of 103H - This jump table has no jump to
- ; 'BEGIN'.
- ;
- ;
- ORG BASE+3 ;START AFTER 'JMP BEGIN'
- ;
- CONOUT: JMP 0EBFDH ;MUST BE 00000H IF NOT USED, SEE BELOW
- ;currently set for a Kaypro-10 with CP/M 2.2D
- PMINIT: JMP MINIT ;INITIALIZATION ROUTINE (IF NEEDED)
- PUNINIT: JMP UNINIT ;UNDO WHATEVER 'MINIT' DID (OR RETURN)
- PSENDR: JMP SENDR ;SEND CHARACTER (VIA POP PSW)
- PCAROK: JMP CAROK ;TEST FOR CARRIER
- PMDIN: JMP MDIN ;RECEIVE DATA BYTE
- PGETCHR: JMP GETCHR ;GET CHARACTER FROM MODEM
- PRCVRDY: JMP RCVRDY ;CHECK RECEIVE READY
- PSNDRDY: JMP SNDRDY ;CHECK SEND READY
- PSPEED: JMP SPEED ;GET SPEED VALUE FOR FILE TRANSFER TIME
- PEXTRA1: JMP EXTRA1 ;EXTRA FOR CUSTOM ROUTINE
- PEXTRA2: JMP EXTRA2 ;EXTRA FOR CUSTOM ROUTINE
- PEXTRA3: JMP EXTRA3 ;EXTRA FOR CUSTOM ROUTINE
- ;
- ;......................................................................
- ;
- ; -- To Display the Record Count on the CRT During Program Transfers --
- ;
- ; This one addition requires some work on the part of the user.
- ; When "BYE" is added, CP/M is normally moved lower to accomodate the
- ; new program above CP/M. Whenever BYE is called to enable the RCPM
- ; capability, it steals some of the addresses contained in the BIOS jump
- ; vector table. In order to display on the CRT during program transfers
- ; you need to get into the BIOS console output routine directly, else
- ; what is being displayed also tries to go out the modem. This is a big
- ; NO-NO at that time. (This cannot be done automatically by XMODEM,
- ; since BYE has already taken the address we need to find, by the time
- ; XMODEM is automatically activated by the remote station.)
- ;......................................................................
- ;
- ; I was always impressed but lost when trying to follow the instructions
- ; that were previously here. So to make this a simple process rather
- ; than a rediculous round and round affair, simply get a copy of TELL.COM
- ; and run it on your system. Take the equate listed as "CONSOLE OUT
- ; ROUTINE:" and plug the value into CONOUT above.
- ;
- ; Steve Sanders
- ;......................................................................
- ;
- ; ---> CAROK - check for presence of carrier. RET with Z = carrier on
- ;
- CAROK:
- MVI A,MODRESI ;RESET EXTERNAL STATUS/INTERRUPTS
- OUT MODCTLP
- IN MODCTLP ;GET STATUS
- ANI MODDCDB ;GET CARRIER DETECT BIT
- CPI MODDCDA ;TEST BIT
- RET
- ;
- ;..........................................................
- ;
- EXTRA1: RET ;FOR LATER USE
- EXTRA2: RET ;FOR LATER USE
- EXTRA3: RET ;FOR LATER USE
- ;
- ;...........................................................
- ;
- ; ---> GETCHR - get a character, same as MDIN
- ; ---> MDIN - - get a character, same as GETCHR
- ;
- GETCHR:
- MDIN:
- IN MODDATP ;GET CHARACTER FROM DATA IN PORT
- RET
- ;
- ;.......................................................................
- ;
- MINIT: RET ;NO INITIALIZATION REQUIRED
- ;
- ;.......................................................................
- ;
- ; ---> RCVRDY - check receive ready. RET with Z = character available.
- ; Return with error code in A-reg.
- ;
- RCVRDY:
- IN MODCTLP ;GET MODEM STATUS
- PUSH B ;SAVE SCRATCH REGISTER
- PUSH PSW
- MVI A,1+MODRESI ;SELECT READ REGISTER 1
- OUT MODCTLP
- IN MODCTLP ;READ THE ERROR STATUS
- ANI MODFRME+MODOVRE+MODPARE
- MOV B,A ;SAVE IT FOR A MOMENT
- MVI A,MODERES
- OUT MODCTLP ;DO AN ERROR RESET COMMAND
- POP PSW ;NOW GET MODEM STATUS BACK
- ANI MODRCVB ;ISOLATE READY BIT
- CPI MODRCVR ;TEST IT
- MOV A,B ;GET THE ERROR CODE CHAR. BACK
- POP B
- RET
- ;
- ;....................................................................
- ;
- ; ---> SENDR - send character
- ;
- SENDR:
- POP PSW ;GET THE CHARACTER BACK
- OUT MODDATO ;SEND IT TO THE MODEM OUTPUT
- RET
- ;
- ;....................................................................
- ;
- ; ---> SNDRDY - check if ready to send.
- ;
- SNDRDY:
- IN MODCTLP ;GET STATUS BYTE
- ANI MODSNDB ;ISOLATE READY BIT
- CPI MODSNDR ;READY TO SEND?
- RET
- ;
- ;....................................................................
- ;
- ; ---> SPEED - sets the time shown for program transfer.
- ;
- SPEED:
- IF LSPEED
- LDA MSPEED ;GET INDEX FOR BAUD RATE FROM 'BYE'
- ENDIF
- ;
- IF NOT LSPEED
- MVI A,XSPEED ;GET INDEX FOR BAUD RATE FROM 'XSPEED'
- ENDIF
- ;
- RET
- ;
- ;....................................................................
- ;
- UNINIT: RET ;NOT INITIALIZED, SO NO 'UN-INITIALIZE'
- ;
- ;....................................................................
- ;
- END