Trailing-Edge
-
PDP-10 Archives
-
decuslib20-02
-
decus/20-0037/ascode.mac
There are 2 other files named ascode.mac in the archive. Click here to see a list.
TITLE ASCODE
SUBTTL PUT OUT A WORD, GET A CHARACTER
ENTRY PUTWRD
PUTWRD: MOVEI TA,4 ;GET ADDRESS OF
EXCH TA,0(PP) ; PARAMETERS, AND
ADDM TA,0(PP) ; RESET RETURN ADDRESS
MOVE TB,@0(TA) ;GET BYTE-POINTER TO INPUT
MOVE TD,@1(TA) ;GET BYTE-POINTER TO OUTPUT
MOVE TE,@3(TA) ;GET ADDRESS OF ERROR FLAG
TLZ TE,-1 ;MAKE A 3-CHAR POINTER
TLO TE,(POINT 7,0,20)
PUTWD1: ILDB TC,TB ;GET A CHARACTER
JUMPE TC,CPOPJ ;LEAVE IF IT'S A SPACE
AOS @2(TA) ;BUMP "J"
ADDI TC,40 ;CONVERT OT ASCII
IDPB TC,TD ;STASH IT AWAY
CAIE TC,"\" ;BAD CHARACTER?
JRST PUTWD1 ;NO--LOOP
MOVE TC,[OCT 2512452];YES--GET THREE ASCII STARS
DPB TC,TE ;STASH INTO ERROR FLAG
JRST PUTWD1 ;LOOP
;GET ONE CHARACTER FROM INPUT RECORD.
;"INPTR" AND "THSKAR" WERE SET UP BY "CONVRT" ROUTINE.
ENTRY GETKAR
GETKAR: ILDB TA,INPTR ;GET A CHARACTER
DPB TA,THSKAR ;STASH IT
MOVEI TA," " ;REPLACE IT WITH
DPB TA,INPTR ; A SPACE
CPOPJ: POPJ PP,
SUBTTL CONVERT B300 CODE TO ASCII
ENTRY CONVRT
CONVRT: MOVEI TA,3 ;RESET RETURN ADDRESS AND
EXCH TA,0(PP) ; PUT PARAMETER ADDRESS INTO
ADDM TA,0(PP) ; TA
MOVE TB,@2(TA) ;GET RECORD SIZE
MOVE TD,@1(TA) ;PICK UP CONVERSION-TABLE ADDRESS
MOVE TA,@0(TA) ;PICK UP RECORD ADDRESS
MOVE TC,TA ;SAVE IT FOR "GETKAR"
IBP TC
MOVEM TC,INPTR
MOVEM TC,THSKAR
ASCOD1: ILDB TC,TA ;GET A CHARACTER
CAIG TC,137 ;IS IT WITHIN
CAIGE TC,40 ; THE SIXBIT RANGE?
JRST ASCOD3 ;NO
SUBI TC,40 ;CONVERT TO SIXBIT
IDIVI TC,5
ADD TC,TD
MOVE TE,ASCOD9(TC+1)
DPB TE,[POINT 6,TC,5]
LDB TE,TC
DPB TE,TA
ASCOD3: SOJG TB,ASCOD1 ;LOOP THRU ENTIRE RECORD
POPJ PP,
ASCOD9: 35
26
17
10
01
INPTR: BLOCK 1 ;BYTE-POINTER TO SOURCE-RECORD CHARACTER
THSKAR: BLOCK 1 ;BYTE-POINTER TO CURRENT CHARACTER
TA=5
TB=6
TC=7 ;(2 AC'S)
TD=11
TE=12
PP=17
END