From 91cc05958e0e9d1819676387028f3b04657d0c25 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Sun, 29 Jul 2018 12:57:07 +0200 Subject: [PATCH] URUG - GT40 debugger. This version uses CMP Rn,(Rn)+ to add 2 to a register, which PALX complains about. However, the resulting binary is fine. --- build/misc.tcl | 6 ++ doc/programs.md | 1 + src/sysen2/urug.27 | 211 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 218 insertions(+) create mode 100755 src/sysen2/urug.27 diff --git a/build/misc.tcl b/build/misc.tcl index d8412f44..04d3413d 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -1036,6 +1036,12 @@ expect ":KILL" respond "*" ":midas sys3;ts carpet_syseng;carpet\r" expect ":KILL" +# URUG, GT40 debugger. +respond "*" ":palx sysbin;_sysen2;urug\r" +respond "=YES" "1\r" +respond "37000" "37000\r" +expect ":KILL" + # KL10 front end debugger. Put it in the same directory as the # "MX" IOELEV. respond "*" ":palx sysbin;_syseng; klrug\r" diff --git a/doc/programs.md b/doc/programs.md index c9013aca..f0055d96 100644 --- a/doc/programs.md +++ b/doc/programs.md @@ -248,6 +248,7 @@ - UNTALK, split-screen comm-link program. - UP/DOWN, check if host is online. - UPTIME, Chaosnet uptime server. +- URUG, GT40 debugger. - USQ/TYPESQ, unsqueeze/uncram or type a file. - VERSA/SPOOLR, Versatec/Gould printer spooler. - VTTIME, display running time on the terminal. diff --git a/src/sysen2/urug.27 b/src/sysen2/urug.27 new file mode 100755 index 00000000..a1c15720 --- /dev/null +++ b/src/sysen2/urug.27 @@ -0,0 +1,211 @@ +.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: CMP R3,(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 + CMP R4,(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 +  \ No newline at end of file