Greets, I have looked at your code, and although it is pretty straightforward to convert to a 1684, it will be time consuming. May I suggest that in future you make your code a little easier to understand, and easier to port. For example, this is your delay routine. It uses three variables 7, 8, 9, and one constant, 0x05. 7, 8, and 9 are not available on a 1684, so you have to change 6 values. Time consuming and error prone.
; * * * subroutine * * *
delay clrf 7
clrf 8
movlw 0x05 ; one second
movwf 9
dly decfsz 7
goto dly
decfsz 8
goto dly
decfsz 9
goto dly
retlw 0
Better is to use named variables:
;------ Delay variables
count1 equ 7
count2 equ 8
count3 equ 9
;------ Constant
time equ 0x05 ;one second delay
;------ Delay subroutine
delay clrf count1
clrf count2
movlw time
movwf count3
dly decfsz count1
goto dly
decfsz count2
goto dly
decfsz count3
goto dly
retlw 0
now, to change to a 1684, just change the equates to available ram.
Also with your i/o lines,
bcf 6,4 ; go on hook
pretty obscure? Better is to use named constant:
;------ i/o lines
hook equ 4
;------ code
bcf GPIO,hook
now, for a 1684, just change GPIO to Port_A, or whatever and update the equate.
Hope this is some help.