; ------------------------------
; Relocate instr. like
;  lda #>foo; sta bar+1;
;  lda #<foo; sta bar;
;
; Check whether immediate data
; relocation is required.
;     No ERROR CHECKING!!
; ------------------------------
:yplus1  iny
         bne   :o1
         inc   :vim+1
:o1      rts
; -----------------------------
:do_imms ldy   #0             ; set Y for later
         ldx   #0             ; Set and keep X at 0
         lda   (:vim),y       ; get #pages
         sta   :lpages        ; save for LSB and
         sta   :mpages        ; MSB

:getnext jsr   :yplus1
         lda   (:vim),y       ; get next entry count
         beq   :nxtpage
         sta   :entries

:m1      jsr   :yplus1
         lda   (:vim),y       ; get pointer to
         sta   :foo           ; vimediate location
         lda   (:foo,x)       ; update lsb value
         sec
         sbc   :dif
         sta   (:foo,x)

         dec   :entries
         bne   :m1

:nxtpage inc   :foo+1         ; skip to next page
         dec   :lpages
         bne   :getnext


         lda   #>|R_START
         sta   :foo+1

:mgetnxt jsr   :yplus1
         lda   (:vim),y       ; get next entry count
         beq   :mnxtpage
         sta   :entries

:m2      jsr   :yplus1
         lda   (:vim),y       ; get pointer to
         sta   :foo           ; vimediate location
         jsr   :yplus1        ; y++ (16 Bit)
         lda   (:vim),y       ; get low value
         sec                  ; calc the carry
         sbc   :dif
         lda   (:foo,x)       ; update msb value
         sbc   :dif+1
         sta   (:foo,x)

         dec   :entries
         bne   :m2

:mnxtpage inc  :foo+1         ; skip to next page
         dec   :mpages
         bne   :mgetnxt
         rts                  ; all done


