Fixed the graphical glitches and attached the source so you can see what it's doing (basically nothing, just writes to CHBASE, VSCROL and occasionally updating the LMS all in immediate VBL). I think for the levels, treating the DL as a queue where on coarse scroll all the LMS operands are moved up a line and an appropriate LMS operand for the next selected line added to the last LMS would suffice. Given that the basic structure repeats every 12 lines and the "platform lines" could be selected from a small set, having a table of distinct lines, and a table of their corresponding LMS addresses would do, with lines being reused down the screen. Also, all these lines can be read only, as with the char sets (so a 400/5200 version would be easy).
I've also attached the tiles so you can marvel at my artistic skills

Even better, you could send me something less hideous.
The char structure for a basic 12 line set is:
-------Column 1-------- ======Column 2===== --- Col 3 ----- == Col 4 == ----- MID ----- == Col 5 == --- Col 6 ----- ======Column 7===== -------Column 8--------
.BYTE $04,$08,$0C,$10,$14,$18,$1C,$1F,$22,$25,$28,$2B,$2D,$2F,$31,$33,$35,$37,$00,$00,$00,$00,$39,$3B,$3D,$3F,$41,$43,$45,$47,$4A,$4D,$50,$53,$56,$5A,$5E,$62,$66,$6A
.BYTE $05,$09,$0D,$11,$15,$19,$1D,$20,$23,$26,$29,$2C,$2E,$30,$32,$34,$36,$38,$00,$00,$00,$00,$3A,$3C,$3E,$40,$42,$44,$46,$48,$4B,$4E,$51,$54,$57,$5B,$5F,$63,$67,$6B
.BYTE $06,$0A,$0E,$12,$16,$1A,$1E,$21,$24,$27,$2A,$2B,$2D,$2F,$31,$33,$35,$37,$00,$00,$00,$00,$39,$3B,$3D,$3F,$41,$43,$45,$49,$4C,$4F,$52,$55,$58,$5C,$60,$64,$68,$6C
.BYTE $07,$0B,$0F,$13,$17,$1B,$1C,$1F,$22,$25,$28,$2C,$2E,$30,$32,$34,$36,$38,$00,$00,$00,$00,$3A,$3C,$3E,$40,$42,$44,$46,$47,$4A,$4D,$50,$53,$59,$5D,$61,$65,$69,$6D
.BYTE $04,$08,$0C,$10,$14,$18,$1D,$20,$23,$26,$29,$2B,$2D,$2F,$31,$33,$35,$37,$00,$00,$00,$00,$39,$3B,$3D,$3F,$41,$43,$45,$48,$4B,$4E,$51,$54,$56,$5A,$5E,$62,$66,$6A
.BYTE $05,$09,$0D,$11,$15,$19,$1E,$21,$24,$27,$2A,$2C,$2E,$30,$32,$34,$36,$38,$00,$00,$00,$00,$3A,$3C,$3E,$40,$42,$44,$46,$49,$4C,$4F,$52,$55,$57,$5B,$5F,$63,$67,$6B
.BYTE $06,$0A,$0E,$12,$16,$1A,$1C,$1F,$22,$25,$28,$2B,$2D,$2F,$31,$33,$35,$37,$00,$00,$00,$00,$39,$3B,$3D,$3F,$41,$43,$45,$47,$4A,$4D,$50,$53,$58,$5C,$60,$64,$68,$6C
.BYTE $07,$0B,$0F,$13,$17,$1B,$1D,$20,$23,$26,$29,$2C,$2E,$30,$32,$34,$36,$38,$00,$00,$00,$00,$3A,$3C,$3E,$40,$42,$44,$46,$48,$4B,$4E,$51,$54,$59,$5D,$61,$65,$69,$6D
.BYTE $04,$08,$0C,$10,$14,$18,$1E,$21,$24,$27,$2A,$2B,$2D,$2F,$31,$33,$35,$37,$00,$00,$00,$00,$39,$3B,$3D,$3F,$41,$43,$45,$49,$4C,$4F,$52,$55,$56,$5A,$5E,$62,$66,$6A
.BYTE $05,$09,$0D,$11,$15,$19,$1C,$1F,$22,$25,$28,$2C,$2E,$30,$32,$34,$36,$38,$00,$00,$00,$00,$3A,$3C,$3E,$40,$42,$44,$46,$47,$4A,$4D,$50,$53,$57,$5B,$5F,$63,$67,$6B
.BYTE $06,$0A,$0E,$12,$16,$1A,$1D,$20,$23,$26,$29,$2B,$2D,$2F,$31,$33,$35,$37,$00,$00,$00,$00,$39,$3B,$3D,$3F,$41,$43,$45,$48,$4B,$4E,$51,$54,$58,$5C,$60,$64,$68,$6C
.BYTE $07,$0B,$0F,$13,$17,$1B,$1E,$21,$24,$27,$2A,$2C,$2E,$30,$32,$34,$36,$38,$00,$00,$00,$00,$3A,$3C,$3E,$40,$42,$44,$46,$49,$4C,$4F,$52,$55,$59,$5D,$61,$65,$69,$6D
so as you can see it uses up to $6D in the char set at the moment. Column 1 is offset 4 scanlines per frame, column 2 by 3, column 3 by 2 and column 4 by 1, plus the one scanline offset from the vertical scroll. As there's some chars left over now after resizing column 2 I think what this game really needs is conveyor belts (or is that just evil?).
Anyone have any thoughts on whether it would be better to have the background in psuedo-graphics 9 (16 shades) rather than multicolor text mode? It makes no difference programmatically, it's purely an aesthetic choice.
Anyway, I think I should probably try and remember where I put the Jag so I can try out the reference version!