.TITLE GT40 MICRORUG R0=%0 R1=%1 R2=%2 R3=%3 ;SUBROUTINE CALL LINK R4=%4 ;ADDRESS OF OPEN LOCATION R5=%5 R6=%6 R7=%7 .IF1 .PRINT /USE BPT INSTRUCTION? 0=NO, 1=YES / .TTYMA A USEBPT==A .ENDM .PRINT /URUG STARTING ADDRESS? (USUALLY 37000) / .TTYMA A SA==A .ENDM .ENDC .=SA BEG: MOV R0,SAVR0+2 MOV R1,SAVR1+2 MOV R2,SAVR2+2 MOV R3,SAVR3+2 MOV R4,SAVR4+2 MOV R5,SAVR5+2 MOV R6,SAVR6+2 .IFZ USEBPT CLR @#177560 ;NO KEYBD INTERRUPT .ENDC RESUME: MOV #DISBEG,@#172000 ;START HERE AFTER NXM, ODD ADDR TRAPS BLOC: MOV #-1,R4 BGE BFLUSH ;BREAKPOINT WAS SET CLR R4 ;SO INITIAL LF IS HAPPY BEG1: MOV R7,R3 BR SCROLL MOV #DISL+110,R0 RUBOUT: BIC #7,R0 MOV #20040,R1 ;CLEAR OUT RUBBED OUT CHARS MOV R1,(R0)+ MOV R1,(R0)+ MOV R1,(R0)+ BIC #7,R0 GETDIG: CLR R2 GETD1: TSTB @#177560 BPL GETD1 MOVB @#177562,R1 BIC #177600,R1 MOV R1,R5 CMP #60,R1 BGT SPCL ;SPECIAL CHAR, NOT A DIGIT CMP #71,R1 BLT SPCL MOVB R1,(R0)+ SUB #60,R1 ASL R2 ASL R2 ASL R2 ADD R1,R2 BR GETD1 .IFNZ USEBPT HITBRK: SUB #2,(R6) MOV (R6)+,SAVGO+2 MOV (R6)+,SAVPS+2 BR BEG .ENDC SETBRK: TST BLOC+2 BGE BLOC ;FLUSH PRIOR BKPT INSTEAD .IFZ USEBPT MOV (R2)+,BWORD1+2 ;B AT ODD LOC WILL ADDRESS ERROR MOV (R2),BWORD2+2 MOV #BEG,(R2) MOV #137,-(R2) ;JMP @# .IFF MOV (R2),BFLUSH+2 ;B AT ODD LOC WILL ADDRESS ERROR MOV #3,(R2) .ENDC MOV R2,BLOC+2 BR BEG1 BFLUSH: .IFZ USEBPT BWORD1: MOV #0,(R4)+ BWORD2: MOV #0,(R4) CMP -(R4),-(R4) .IFF MOV #0,(R4) .ENDC COM BLOC+2 BR AUTOPN SCROLL: MOV #DISL,R0 SCRL1: MOV 30(R0),(R0)+ CMP #DISL+110,R0 BNE SCRL1 SCRL2: MOV #20040,(R0)+ ;ERASE BOTTOM LINE CMP #DISL+140,R0 BNE SCRL2 MOV #5015,-(R0) RETURN: TST (R3)+ MOV R3,R7 DPOSIT: MOV R2,@R4 ;DEPOSIT THE ARGUMENT MOV R7,R3 BR FILL MOV #5015,-(R0) CHEKLF: CMP #12,R5 BNE BEG1 .IFZ USEBPT AUTOPN: .ENDC TST (R4)+ .IFNZ USEBPT AUTOPN: .ENDC MOV R7,R3 ;AUTOMATICALLY OPEN A LOCATION BR SCROLL MOV #DISL+110,R0 MOV R4,R2 MOV R7,R3 BR TYPNUM BR DOLF EVEN: BIC #1,R2 ;EXAMINE ONLY EVEN LOCS BICB #1,-1(R0) EVENOK: MOV R7,R3 BR FILL MOV R2,R4 DOLF: MOV @R4,R2 ;EXAMINE LOCATION MOV R7,R3 BR TYPNUM BR GETDIG SPCL: SUB #40,R1 BLE SPACE ;SPACE, CR, LF, SUNDRY CTRL CHARS MOVB R1,(R0)+ CMP #102,R1 BEQ SETBRK CMP #122,R1 BEQ GETDIG ;R TYPED CMP #107,R1 BNE RUBOUT BIT #6,R0 ;G TYPED BEQ SAVR0 ;NO ARGUMENT TYPED MOV R2,SAVGO+2 SAVR0: MOV #0,R0 SAVR1: MOV #0,R1 SAVR2: MOV #0,R2 SAVR3: MOV #0,R3 SAVR4: MOV #0,R4 SAVR5: MOV #0,R5 SAVR6: MOV #0,R6 .IFZ USEBPT SAVGO: MOV #BEG,R7 .IFF SAVGO: CMP #BEG,R7 SAVPS: MOV #0,-(R6) ;"R8" = PS MOV #DISBEG,@#172000 ;"R9" = DPC MOV SAVGO+2,-(R6) RTI .ENDC SPACE: BIT #7,R0 BEQ CHEKLF ;NO ARGUMENT TYPED CMP #DISL+110+20,R0 BLT DPOSIT CMPB #122,DISL+110 ;WAS FIRST CHAR R? BNE EVEN ASL R2 ;SPECIAL FUDGE FOR REGISTERS ASL R2 ADD #SAVR0+2,R2 BR EVENOK TYPNUM: MOV #100000,R1 LUP1: MOVB #57,(R0) LUP2: INCB (R0) SUB R1,R2 BPL LUP2 ADD R1,R2 ;SETS C ADC R0 ;CLEARS C AND UPDATES R0 ROR R1 ASR R1 ASR R1 BNE LUP1 FILL1: MOVB #40,(R0)+ FILL: BIT #7,R0 BNE FILL1 BR RETURN .=.+<-.&7> ;GET DISL ON 8N BOUNDARY DISL: .REPT 13 20040 ;SPACE SPACE .ENDR 5015 ;CR LF (REVERSED) .ASCII \ THIS IS THE 1000-BYTE\ 5015 .ASCII \ MICRORUG DEBUGGER FOR\ 5015 .ASCII \ THE GT-40! MIT AI LAB\ 5015 DISBEG: 170000 ;LSR A 117000 ;SGM POINT, INT 4 40000 ;INTEN, X 1000 ;Y 100000 ;SGM CHAR 160000 ;JUMP DISL .END