|
|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 10880 (0x2a80)
Types: TextFile
Names: »CALL.PRN«
└─⟦1b6e6286b⟧ Bits:30003265 CIS COBOL version 4.4 til CP/M-80 (BG/0000/BL)
└─⟦this⟧ »CALL.PRN«
└─⟦5487c9624⟧ Bits:30003266 CIS COBOL version 4.4 til CP/M-80 (BG/0026/BF)
└─⟦this⟧ »CALL.PRN«
└─⟦e265ead8b⟧ Bits:30005730 Add serial numbers to several RC700 & RC850 software packages
└─⟦this⟧ »CALL.PRN«
└─⟦f4cd6c984⟧ Bits:30005601 CIS COBOL v. 4.5 Rev 5 (RC702)
└─⟦this⟧ »CALL.PRN«
;*****************************************************************************
;*
;*
;* THIS IS AN EXAMPLE OF USER CALL CODE SUPPLIED PURELY FOR GUIDANCE OF THE
;* USER TO ENABLE THE MECHANICS OF CALL CODE INSERTION TO BE BETTER UNDERSTOOD.
;*
;* THE CODE IS DESIGNED TO BE A USEFUL EXAMPLE OF CALL, AND IF IMPLEMENTED
;* WILL ALLOW THE COBOL PROGRAMMER TO CREATE 16 BIT BINARY QUANTITIES FROM
;* UP TO 5 ASCII DIGITS, AND VICE VERSA. THE USE IS EXPLAINED IN MORE DETAIL
;* AT THE HEAD OF EACH ROUTINE.
;*
;* INTEL CORPORATION HAS TAKEN EVERY PRECAUTION TO ENSURE THE ACCURACY OF THESE
;* ROUTINES, BUT CANNOT BE HELD LIABLE IN ANY WAY FOR ANY ERRORS OR
;* OMISSIONS IN THEM.
;*
;*****************************************************************************
;*
;* THE MODULE MUST BE LOCATED AT THE ADDRESS SPECIFIED BY CONFIGURATOR
;* WHEN THE RTS IN WHICH THE CODE IS TO RESIDE WAS CONFIGURED. (SEE OPERATING
;* GUIDE, CHAPTER 4).
;*
4404 = BASE EQU 04404H ;REPLACE 04404H BY THE ADDRESS GIVEN
;BY CONFIGURATOR.
;*
;*
4404 ORG BASE ;SET THE BASE ADDRESS
;*
;*****************************************************************************
;*
;* NOW FOLLOWS THE CALL CODE IDENTIFICATION TABLE. THIS IS A TABLE OF
;* ADDRESSES OF THE ENTRY-POINTS TO THE ROUTINES, PRECEDED BY A BINARY
;* 8 BIT ITEM SPECIFYING THE HIGHEST AVAILABLE ROUTINE NUMBER
;*
;*****************************************************************************
;*
4404 02 CALTOP: DB MAXNO ;HIGHEST AVAILABLE CALL ROUTINE.
4405 0000 DW 0 ;CALL "00" (DOES NOT EXIST)
4407 0B44 DW DECBIN ;CALL "01" - DECIMAL ASCII TO BINARY
4409 3044 DW BINDEC ;CALL "02" - BINARY TO DECIMAL ASCII
0002 = MAXNO EQU ($-CALTOP-3)/2 ;LET THE ASSEMBLER DO THE WORK.
;*
;*****************************************************************************
;*
;* NB. ALTHOUGH THE USE OF CALL "00" IN THE ABOVE EXAMPLE WOULD CAUSE
;* THE RTS TO ISSUE THE FOLLOWING ERROR:-
;* 164 - CALL CODE DOES NOT EXIST
;* THE USER IS AT LIBERTY TO PROVIDE HIS OWN CODE, BY PLUGGING IN
;* THE APPROPRIATE ROUTINE ADDRESS.
;*
;* SIMILARLY, OTHER ROUTINES MAY BE ADDED BY INCREASING THE NUMBER
;* OF ADDRESSES SPECIFIED. IF THESE ARE ADDED BEFORE THE MAXNO EQUATE,
;* THEN THE BYTE AT CALTOP WILL ALWAYS BE CORRECT
;*
;*
;*
;*
;
;
;
;
;
;
;
;*****************************************************************************
;*
;*ROUTINE: DECBIN
;*
;*CALLING SEQUENCE:
;* CALL "01" USING PARA1 PARA2 PARA3.
;*
;*FUNCTION: THIS ROUTINE CONVERTS A STRING OF DECIMAL (ASCII)
;* DIGITS INTO A 16 BIT BINARY QUANTITY. IT IS VERY LOW LEVEL
;* IN THAT IT EXPECTS A POSITIVE DECIMAL VALUE
;*
;*PARAMETERS: PARA1 - ADDRESS OF LENGTH OF DECIMAL STRING
;* HELD AS 1 BYTE ASCII DIGIT (NOT CHECKED)
;* THIS ADDRESS WILL BE NO. 2 ON STACK
;*
;* PARA2 - ADDRESS OF DECIMAL STRING
;* THIS ADDRESS WILL BE IN B,C ON ENTRY
;*
;* PARA3 - ADDRESS OF RESULT AREA.
;* SPECIFIES A 2 BYTE AREA
;* THIS ADDRESS WILL BE IN D,E ON ENTRY
;*
;*VALUES RETURNED: 16 BIT RESULT IN PARA3
;*
;*
;*****************************************************************************
;*
DECBIN:
440B E1 POP H ;GET RETURN ADDRESS OFF STACK
440C E3 XTHL ;GET ADDRESS OF PARA1
;PUTTING RETURN ADDRESS BACK.
;*
440D 7E MOV A,M ;PUT IT IN ACCUMULATOR
440E E60F ANI 0FH ;CONVERT TO BINARY
4410 D5 PUSH D ;SAVE ADDRESS OF RESULT
4411 C5 PUSH B ;MOVE STRING REF
4412 D1 POP D ; INTO D,E
4413 210000 LXI H,0 ;HL = BINARY ACCUMULATOR
DEC10:
4416 F5 PUSH PSW ;SAVE THE COUNT
4417 29 DAD H ;BINARY ACCUMULATOR *2
4418 44 MOV B,H ; AND MOVE IT INTO B,C
4419 4D MOV C,L ;
441A 29 DAD H ;BINARY ACCUMULATOR *4
441B 29 DAD H ; *8
441C 09 DAD B ; *8 + *2 = *10
; (IE. 8X + 2X = 10X)
;------------------------
441D 1A LDAX D ;GET THE DECIMAL CHAR
441E 13 INX D
441F E60F ANI 0FH ;CONVERT TO BINARY CHAR
4421 0600 MVI B,0H
4423 4F MOV C,A
4424 09 DAD B ;ACC + CHAR
4425 F1 POP PSW
4426 3D DCR A ;KEEP COUNT
4427 C21644 JNZ DEC10
;*
;* NOW STORE RESULT IN USER'S AREA.
;*
442A EB XCHG ;PUT RESULT IN D,E
442B E1 POP H ;GET ADDRESS OF RESULT AREA
442C 72 MOV M,D ;STORE MS BYTE
442D 23 INX H
442E 73 MOV M,E ;STORE LS BYTE
442F C9 RET
;
;*****************************************************************************
;*
;*ROUTINE: BINDEC
;*
;*CALLING SEQUENCE:
;* CALL "02" USING PARA1 PARA2.
;*
;*FUNCTION: TAKES THE BINARY QUANTITY ADDRESSED BY PARA1 AND CONVERTS
;* IT INTO A 5 DIGIT DECIMAL (ASCII) NO. THE RESULT IS PLACED
;* IN THE AREA SPECIFIED BY PARA2.
;*
;*PARAMETERS: PARA1 = ADDRESS OF 16 BIT (2 BYTE) QUANTITY.
;* WILL BE IN REG B,C ON ENTRY
;*
;* PARA2 = ADDRESS OF 5 BYTE RESULT AREA.
;* WILL BE IN REG D,E ON ENTRY
;*
;*VALUES RETURNED:
;* 5 DIGIT ASCII VALUE IN PARA2.
;*
;*****************************************************************************
BINDEC:
4430 C5 PUSH B ;GET VALUE ADDR
4431 E1 POP H ; IN H,L
4432 46 MOV B,M ;VALUE
4433 23 INX H ; IN
4434 4E MOV C,M ; B,C
4435 210000 LXI H,0 ;PUSH CONSTANTS
4438 E5 PUSH H ; ON TO
4439 21F6FF LXI H,-10 ; STACK
443C E5 PUSH H ; FOR USE
443D 219CFF LXI H,-100 ; DURING
;*
4440 E5 PUSH H ; BINARY TO DECIMAL CONVERSION.
4441 2118FC LXI H,-1000
4444 E5 PUSH H
4445 21F0D8 LXI H,-10000
4448 E5 PUSH H
;* ;D,E = ADDRESS OF RESULT FIELD
CN25:
4449 3E30 MVI A,30H ;SET TALLY TO ASCII ZERO
CN30:
444B E1 POP H ;GET THE CONSTANT
444C E5 PUSH H ;RESTORE IT
444D 09 DAD B ;SUBTRACT FROM SOURCE OP
444E D25744 JNC CN40 ;ITS GONE NEGATIVE
4451 3C INR A ;INC TALLY
4452 E5 PUSH H ;REPLACE B,C WITH
4453 C1 POP B ; NEW RESULT
4454 C34B44 JMP CN30
CN40:
4457 E1 POP H ;CLEAR CONSTANT OFF STACK
4458 12 STAX D ;STORE TALLY IN RESULT FIELD
4459 13 INX D ;INC RESULT ADDR POINTER
445A E1 POP H ;ANY MORE CONSTANTS ?
445B 7D MOV A,L
445C B4 ORA H
445D CA6444 JZ CN50 ;NO - FINISH OFF
4460 E5 PUSH H ;YES - RESTORE IT
4461 C34944 JMP CN25
CN50:
4464 79 MOV A,C ;INSERT UNITS
4465 C630 ADI 30H ;CONVERT TO ASCII
4467 12 STAX D
4468 C9 RET ;RETURN
;*
;*
;*
4469 END
«eof»