home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
cpm
/
modems
/
xmodem
/
xmzs-1.asm
< prev
Wrap
Assembly Source File
|
1994-07-13
|
8KB
|
228 lines
;.............................................................
;.............................................................
; 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