A routine taking \$(a,b,c)\$ into R0, R1 and R2 respectively and setting the carry if \$(a,b,c)\$ is not a triangle, or clearing it otherwise.
083 | MOVR R0, R3 0CB | ADDR R1, R3 15A | CMPR R3, R2 02F | ADCR R7 0D3 | ADDR R2, R3 049 | SLL R1 159 | CMPR R3, R1 201 002 | BC @@rtn 048 | SLL R0 158 | CMPR R3, R0 0AF | @@rtn JR R5
How?
Instead of testing:
$$\cases{a+b>c\\a+c>b\\b+c>a}$$
We test:
$$\cases{a+b>c\\a+b+c>2b\\a+b+c>2a}$$
The left parts of the inequalities are stored into R3. If the first test fails (when \$a+b\$ is stored into R3 and compared with R2), the carry is set and added to the program counter (R7), forcing the next instruction to be skipped. Consequently, R3 is not updated to \$a+b+c\$ and the last 2 comparisons are turned into:
$$\cases{a+b>2b\\a+b>2a}\Leftrightarrow\cases{a>b\\b>a}$$
which of course is never true, so the test is guaranteed to fail as expected.
All in all, this saves a branch which would have cost 1 extra DECLE.
Full commented test code
ROMW 10 ; use 10-bit ROM width ORG $4800 ; map this program at $4800 ;; ------------------------------------------------------------- ;; ;; main code ;; ;; ------------------------------------------------------------- ;; main PROC SDBD ; set up an interrupt service routine MVII #isr, R0 ; to do some minimal STIC initialization MVO R0, $100 SWAP R0 MVO R0, $101 EIS ; enable interrupts MVII #$200, R4 ; R4 = pointer into backtab SDBD ; R5 = pointer into test cases MVII #tc, R5 MVII #13, R3 ; R3 = number of test cases @@loop MVI@ R5, R0 ; R0 = a MVI@ R5, R1 ; R1 = b MVI@ R5, R2 ; R2 = c PSHR R3 ; save R3 and R5 on the stack PSHR R5 CALL tr ; invoke our routine PULR R5 ; restore R3 and R5 PULR R3 MVII #$80, R0 ; R0 = '0' BC @@draw MVII #$88, R0 ; or '1' if the carry is not set @@draw MVO@ R0, R4 ; draw this character DECR R3 ; next test case BNEQ @@loop DECR R7 ; loop forever ;; ------------------------------------------------------------- ;; ;; test cases ;; ;; ------------------------------------------------------------- ;; tc PROC DECLE 1, 1, 1 ; true DECLE 1, 2, 3 ; false DECLE 2, 1, 3 ; false DECLE 1, 3, 2 ; false DECLE 3, 2, 1 ; false DECLE 3, 1, 2 ; false DECLE 2, 2, 2 ; true DECLE 3, 4, 5 ; true DECLE 3, 5, 4 ; true DECLE 5, 3, 4 ; true DECLE 5, 4, 3 ; true DECLE 10, 9, 3 ; true DECLE 100, 10, 10 ; false ENDP ;; ------------------------------------------------------------- ;; ;; ISR ;; ;; ------------------------------------------------------------- ;; isr PROC MVO R0, $0020 ; enable display CLRR R0 MVO R0, $0030 ; no horizontal delay MVO R0, $0031 ; no vertical delay MVO R0, $0032 ; no border extension MVII #$D, R0 MVO R0, $0028 ; light-blue background MVO R0, $002C ; light-blue border JR R5 ; return from ISR ENDP ;; ------------------------------------------------------------- ;; ;; our routine ;; ;; ------------------------------------------------------------- ;; tr PROC MOVR R0, R3 ; R3 = a ADDR R1, R3 ; R3 = a + b CMPR R3, R2 ; is R3 greater than c? ADCR R7 ; if not, skip the next instruction ADDR R2, R3 ; R3 = a + b + c (or still a + b if skipped) SLL R1 ; R1 = 2b CMPR R3, R1 ; is R3 greater than 2b? BC @@rtn ; if not, return with the carry set SLL R0 ; R0 = 2a CMPR R3, R0 ; is R3 greater than 2a? ; if not, the carry is set @@rtn JR R5 ; return ENDP
Output

screenshot from jzIntv
1. A CP-1610 opcode is encoded with a 10-bit value (0x000 to 0x3FF), known as a 'DECLE'.