To find out why, you use the debugging features of DDT. DDT is completely documented (*Note DDT: (DDT).) but this is a summary of what sorts of things you can do with it.
DDT allows you to set a "breakpoint". Setting a breakpoint at an instruction means that when the program gets to that instruction it will stop (return to DDT). At this time you can examine any location in the program to see if everything is working right so far. If it is still working right, you can set another breakpoint, later on, and continue the program.
When you see that a variable contains a "wrong" value, DDT allows you to correct the value and continue, from the breakpoint or from someplace else. You can also change instructions in the program with DDT so that you can keep running the program and the problem will not happen again (but don't forget to make the correction in the source file as well!) DDT allows can print instructions and addresses using the symbols you define in the program, and it understands those symbols in your input as well.
You can also ask DDT to run your program one instruction at a time. This is often easier than setting breakpoints.
You don't have to do anything special to be able to use DDT on your program, because DDT is always available on ITS. It is the program which processed your command to run INFO. You probably don't want to set any breakpoints in INFO, but if you type C-Z now you could do just that.
Homework # 1 answer
TITLE IGPAY ATINLAY
A<-1 ;SYMBOLIC AC NAMES ARE DEFINED
B<-2
C<-3
D<-4
P<-17
PDLEN<-<-100 ;LENGTH OF PUSH DOWN LIST
PDLIST: BLOCK PDLEN ;STORAGE FOR PUSH DOWN LIST
BUFR: BLOCK 30 ;STORAGE FOR 79 CHARACTERS
START: RESET
MOVE P,[IOWD PDLEN,PDLIST]
L: OUTCHR ["*"] ;PROMPT FOR INPUT
MOVE B,[POINT 7,BUFR]
L1: PUSHJ P,DOWORD
CAIE A,12 ;DELIMITER SEEN?
JRST L1
OUTSTR [BYTE(7)15,12]
JRST L
DOWORD: MOVE B,[POINT 7,BUFR]
SETZM BUFR
PUSHJ P,GETLTR
JRST EPOPJ ;NON LETTER
DOWRD1: PUSHJ P,ISVOW ;IS IT A VOWEL?
JRST .+2
JRST DOWRD3 ;YES.
IDPB A,B ;CONSONANT AT FRONT OF WORD
PUSHJ P,GETLTR
TDZA C,C ;"WORD" HAS ALL CONSONANTS
JRST DOWRD1
IDPB C,B ;STORE ZERO TO MAKE ASCIZ
OUTSTR BUFR
EPOPJ: CAIE A,12
OUTCHR A ;TYPE NON LETTER
POPJ P,
DOWRD2: OUTCHR A ;HERE FOR A WORD THAT BEGINS W/VOWEL
PUSHJ P,GETLTR
JRST EPOPJ
JRST DOWRD2
DOWRD3: LDB C,[POINT 7,BUFR,6] ;GET FIRST CONSONANT IF ANY.
JUMPE C,DOWRD2 ;JUMP IF NO FIRST CONSONANT.
MOVE D,A ;COPY CASE OF FIRST VOWEL
TRNN C,40 ;SKIP IF FIRST LETTER IS LOWER CASE
TRZ A,40 ;MAKE FIRST VOWEL UPPER CASE.
DOWRD4: OUTCHR A ;OUTPUT FIRST V IN SAME CASE AS FIRST C
ONS.
PUSHJ P,GETLTR
JRST .+2 ;END OF WORD
JRST DOWRD4
MOVEI C,"A"
IDPB C,B
MOVEI C,"Y"
IDPB C,B
MOVEI C,0
IDPB C,B
TRNN D,40 ;WAS FIRST VOWEL IN LOWER CASE?
SKIPA C,[JFCL]
MOVE C,[IORI D,40] ;YES. FORCE REMAINDER TO LOWERCASE.
MOVE B,[POINT 7,BUFR]
DOWRD5: ILDB D,B
JUMPE D,EPOPJ
XCT C
OUTCHR D
JRST DOWRD5
GETLTR: .IOT CHTTYI,A ;Read input character into A.
CAIN A,^M
JRST GETLTR
CAIL A,"A
CAILE A,"Z
JRST .+2
JRST CPOPJ1
CAIL A,"A+40
CAILE A,"Z+40
POPJ P,
CPOPJ1: AOS (P) ;SKIP RETURN, UNLESS LF.
POPJ P,
ISVOW: IRPC ZZ,,[AEIOUY]
CAIE A,"ZZ
CAIN A,"ZZ+40
JRST CPOPJ1
TERMIN
POPJ P,
END START