Relaunch64
                                
                                 Relaunch64 copied to clipboard
                                
                                    Relaunch64 copied to clipboard
                            
                            
                            
                        Refactor - Extract Subroutine
Yeah total pie in the sky request but
- select code
- right click, extract as subroutine
- then it prompts you to name the subroutine
- put a JSR where the code was 
- back up till before the current non local label ( not a 100% but easy enough for the programmer to find and move if needed.
- inserts 
- inserts the code
- inserts rts
Could you post a code snippet that shows how the asm-code would look like before vs. after doing this? Including local labels etc., so I get a concrete picture of what you mean.
So you start with this code
buildTimerFractions
    jsr cleartimerPreShiftsBase
    lda # <kVectors.timerPreShiftsBase
    sta pointer1
    lda # >kVectors.timerPreShiftsBase
    sta pointer1+1
    lda #0
    sta NormalTemp1
_loopMakeFirstDigit
    ldx # size(ByteBuffer)-1
    lda #0
-   sta ByteBuffer,x
    dex
    bpl -
_loopShiftDigit 
    ldx NormalTemp1 
    ldy #0
_copyLoop
    lda kFont.digitsPointer,x
    sta ByteBuffer,y
    inx
    iny
    iny
    cpy #10
    bcc _copyLoop
    ldy #3 ; num times to shift
    ldx #0
_rowLoop
    lsr ByteBuffer,x
    ror ByteBuffer+1,x
    inx 
    inx
    cpx #11
    bcc _rowLoop
    dey
    bpl shiftBuffer5RowsRight16Bit
    lda ByteBuffer+2    
    ora #%01100000 ; the :
    sta ByteBuffer+2
    lda ByteBuffer+6
    ora #%01100000
    sta ByteBuffer+6
    lda #4
    sta NormalTemp2
To which I decide that I need to do _loopMakeFirstDigit part again, it clears the buffer, so I pull it out into its own function like so
clearByteBuffer
    ldx # size(ByteBuffer)-1
    lda #0
-   sta ByteBuffer,x
    dex
    bpl -
    rts
So I would select the LDX line to the BPL line This then makes the above code become
buildTimerFractions
    jsr cleartimerPreShiftsBase
    lda # <kVectors.timerPreShiftsBase
    sta pointer1
    lda # >kVectors.timerPreShiftsBase
    sta pointer1+1
    lda #0
    sta NormalTemp1
_loopMakeFirstDigit
    jsr clearByteBuffer
_loopShiftDigit 
    ldx NormalTemp1 
    ldy #0
_copyLoop
    lda kFont.digitsPointer,x
    sta ByteBuffer,y
    inx
    iny
    iny
    cpy #10
    bcc _copyLoop
    ldy #3 ; num times to shift
    ldx #0
_rowLoop
    lsr ByteBuffer,x
    ror ByteBuffer+1,x
    inx 
    inx
    cpx #11
    bcc _rowLoop
    dey
    bpl shiftBuffer5RowsRight16Bit
    lda ByteBuffer+2    
    ora #%01100000 ; the :
    sta ByteBuffer+2
    lda ByteBuffer+6
    ora #%01100000
    sta ByteBuffer+6
    lda #4
    sta NormalTemp2
Then the next bit of code copies the char I want, which I need to do again elsewhere so I pull it out into a function, which will get inserted after the clearByteBuffer function like so
clearByteBuffer
    ldx # size(ByteBuffer)-1
    lda #0
-   sta ByteBuffer,x
    dex
    bpl -
    rts
copyCharTOBuffer
    ldy #0
_copyLoop
    lda kFont.digitsPointer,x
    sta ByteBuffer,y
    inx
    iny
    iny
    cpy #10
    bcc _copyLoop
    rts
buildTimerFractions
    jsr cleartimerPreShiftsBase
    lda # <kVectors.timerPreShiftsBase
    sta pointer1
    lda # >kVectors.timerPreShiftsBase
    sta pointer1+1
    lda #0
    sta NormalTemp1
_loopMakeFirstDigit
    jsr clearByteBuffer
_loopShiftDigit 
    ldx NormalTemp1 
    jsr copyCharTOBuffer
    ldy #3 ; num times to shift
    ldx #0
_rowLoop
    lsr ByteBuffer,x
    ror ByteBuffer+1,x
    inx 
    inx
    cpx #11
    bcc _rowLoop
    dey
    bpl shiftBuffer5RowsRight16Bit
    lda ByteBuffer+2    
    ora #%01100000 ; the :
    sta ByteBuffer+2
    lda ByteBuffer+6
    ora #%01100000
    sta ByteBuffer+6
    lda #4
    sta NormalTemp2