1             ORG   $300
                2    A1L      =     $3C        ;MOVE source start
                3    A1H      =     $3D
                4    PTR      =     A1L        ;Ptr for fixing links
                5    A2L      =     $3E        ;MOVE source end
                6    A2H      =     $3F
                7    DIFF     =     $40        ;Offset for move (at A3L,A3H)
                8    A4L      =     $42        ;MOVE dest start
                9    A4H      =     $43
                10   LINNUM   =     $50        ;GETADR puts address here
                11   TXTTAB   =     $67        ;Ptr to prog start
                12   VARTAB   =     $69        ;Ptr to vars start
                13   HIGHDS   =     $94        ;BLTUC dest end
                14   HIGHTR   =     $96        ;BLTUC source end
                15   LOWTR    =     $9B        ;BLTUC source start
                16   PRGEND   =     $AF        ;Ptr to prog end
                17   TXTPTR   =     $B8        ;Ptr to token being interpreted
                18   BLTUC    =     $D39A      ;Block move up
                19   CLEARC   =     $D66C      ;CLEAR statement
                20   NEWSTT   =     $D7D2      ;Execute next statement
                21   FRMNUM   =     $DD67      ;Eval numeric expr
                22   CHKCOM   =     $DEBE      ;Parse comma
                23   GETADR   =     $E752      ;Convert FAC to address
                24   MOVE     =     $FE2C      ;Block move down
0300: 20 BE DE  25            JSR   CHKCOM     ;Check for comma
0303: 20 67 DD  26            JSR   FRMNUM     ;Parse number
0306: 20 52 E7  27            JSR   GETADR     ;Convert to addr in LINNUM
0309: A5 50     28            LDA   LINNUM     ;DIFF = how far to move
030B: 38        29            SEC
030C: E5 67     30            SBC   TXTTAB
030E: 85 40     31            STA   DIFF
0310: A5 51     32            LDA   LINNUM+1
0312: E5 68     33            SBC   TXTTAB+1
0314: 85 41     34            STA   DIFF+1
0316: 05 40     35            ORA   DIFF       ;DIFF=0?
0318: F0 22     36            BEQ   DONE1      ;If so, nothing to do
031A: B0 22     37            BCS   UP         ;If moving up, use BLTUC
031C: A5 67     38            LDA   TXTTAB     ;Else moving down--set up MOVE
031E: 85 3C     39            STA   A1L
0320: A5 68     40            LDA   TXTTAB+1
0322: 85 3D     41            STA   A1H
0324: A5 AF     42            LDA   PRGEND     ;Moves 1 byte too many, but who cares?
0326: 85 3E     43            STA   A2L
0328: A5 B0     44            LDA   PRGEND+1
032A: 85 3F     45            STA   A2H
032C: A5 50     46            LDA   LINNUM
032E: 85 42     47            STA   A4L
0330: A5 51     48            LDA   LINNUM+1
0332: 85 43     49            STA   A4H
0334: A0 00     50            LDY   #0
0336: 20 2C FE  51            JSR   MOVE       ;Move (returns Y unchanged)
0339: 98        52            TYA
033A: F0 1E     53            BEQ   FIXLNK     ;(Always taken)
033C: F0 70     54   DONE1    BEQ   DONE       ;(Because DONE is too far to reach from above)
033E: A5 67     55   UP       LDA   TXTTAB     ;Moving up--set up BLTUC
0340: 85 9B     56            STA   LOWTR
0342: A5 68     57            LDA   TXTTAB+1
0344: 85 9C     58            STA   LOWTR+1
0346: A5 AF     59            LDA   PRGEND
0348: 85 96     60            STA   HIGHTR
034A: 18        61            CLC
034B: 65 40     62            ADC   DIFF
034D: 85 94     63            STA   HIGHDS
034F: A5 B0     64            LDA   PRGEND+1
0351: 85 97     65            STA   HIGHTR+1
0353: 65 41     66            ADC   DIFF+1
0355: 85 95     67            STA   HIGHDS+1
0357: 20 9A D3  68            JSR   BLTUC      ;Move (returns Y=0)
035A: A5 50     69   FIXLNK   LDA   LINNUM     ;Fix line links
035C: 85 3C     70            STA   PTR        ;LINNUM points to 1st link
035E: A5 51     71            LDA   LINNUM+1
0360: 85 3D     72            STA   PTR+1
0362: C8        73            INY              ;Now Y=1
0363: B1 3C     74   FIX1     LDA   (PTR),Y    ;Is link hi byte 0?
0365: F0 17     75            BEQ   FIXPTRS    ;If so, all links fixed
0367: 88        76            DEY
0368: B1 3C     77            LDA   (PTR),Y    ;Add DIFF to link
036A: 18        78            CLC
036B: 65 40     79            ADC   DIFF
036D: 91 3C     80            STA   (PTR),Y
036F: AA        81            TAX
0370: C8        82            INY
0371: B1 3C     83            LDA   (PTR),Y
0373: 65 41     84            ADC   DIFF+1
0375: 91 3C     85            STA   (PTR),Y
0377: 85 3D     86            STA   PTR+1      ;Point at next link
0379: 86 3C     87            STX   PTR
037B: 98        88            TYA
037C: D0 E5     89            BNE   FIX1       ;(Always taken)
037E: A5 51     90   FIXPTRS  LDA   LINNUM+1   ;Fix prog & var pointers
0380: 85 68     91            STA   TXTTAB+1   ;LINNUM -> TXTTAB
0382: A5 50     92            LDA   LINNUM
0384: 85 67     93            STA   TXTTAB
0386: D0 02     94            BNE   DLO
0388: C6 51     95            DEC   LINNUM+1
038A: C6 50     96   DLO      DEC   LINNUM     ;Go back a byte
038C: 88        97            DEY
038D: 98        98            TYA
038E: 91 50     99            STA   (LINNUM),Y ;Zero out byte before prog
0390: A5 AF     100           LDA   PRGEND     ;PRGEND+DIFF -> PRGEND & VARTAB
0392: 18        101           CLC
0393: 65 40     102           ADC   DIFF
0395: 85 AF     103           STA   PRGEND
0397: 85 69     104           STA   VARTAB
0399: A5 B0     105           LDA   PRGEND+1
039B: 65 41     106           ADC   DIFF+1
039D: 85 B0     107           STA   PRGEND+1
039F: 85 6A     108           STA   VARTAB+1
03A1: A5 B8     109           LDA   TXTPTR     ;TXTPTR+DIFF -> TXTPTR
03A3: 18        110           CLC
03A4: 65 40     111           ADC   DIFF
03A6: 85 B8     112           STA   TXTPTR
03A8: A5 B9     113           LDA   TXTPTR+1
03AA: 65 41     114           ADC   DIFF+1
03AC: 85 B9     115           STA   TXTPTR+1
03AE: 20 6C D6  116  DONE     JSR   CLEARC     ;Clear vars & stack
03B1: 4C D2 D7  117           JMP   NEWSTT     ;Continue program at new loc


--End assembly, 180 bytes, Errors: 0