Only bit 7 of INPTx is used, the other 7 bits are undefined. On most consoles those remaining bits keep the last status they were in*, but results might vary and you shouldn't rely on their value. So when the joystick button is pressed, bit 7 will be zero, but the instruction "bne newcolubk" will take the branch only if all 8 bits are zero.
To only test one bit, you could mask the others with an AND instruction.
lda INPT4 ; INPT4 -> A
and #%10000000 ; clears bits 6-0 of A, leaves bit 7 untouched
If you only need to test bit 7 and/or bit 6, you can use the BIT instruction instead, which will save 2 bytes, leave the Accumulator unchanged and store bit 7 in the Negative (N) flag and bit 6 in the Overflow (V) flag, so that you can check them with bpl/bmi (for bit 7) and bvc/bvs (for bit 6):
bit INPT4 ;INPT4 bit 7 -> N flag
bmi skipjump ;branch if N=1
(*) In this case, the last value that was on the data bus is INPT4 address, that is $0c (%00001100). That's why you get $8c: bit 7 is determined by the actual status of the joystick button, the other bits are from the previous value ($0c). While this is what happens most of the time, you can sporadically experience a different behaviour on real hardware, so it's not something you can rely on. Stella has an option called "Drive unused TIA pins randomly on a read/peek" in the TIA tab of the debugger, which you'd better set when testing new code as it will make bugs related to those unused bits very evident.
Edited by alex_79, Sun May 21, 2017 2:45 AM.