10 REM > lcd/s v1.10
   20 REM Redirect VDU to 40x4 LCD display
   30 REM Syntax: lcd (ON|OFF)
   40 :
   50 REM Sends characters to existing VDU driver, then if in MODE 7 and
   60 REM VPOS is in top four lines physical lines, copies display to LCD.
   70 :
   80 base%=&FC80
   90 FOR P=0 TO 1
  100   P%=&900
  110   [OPT P*3
  120   .start
  130   JSR old:PHA                :\ Send to old WRCH
  140   LDA &355:CMP #7:BNE ignore :\ Not mode 7
  150   LDA &319:CMP #4:BCS ignore :\ Not top four lines
  160   TYA:PHA:TXA:PHA
  170   :
  180   LDX #0                     :\ First controller
  190   LDY #0                     :\ Start of screen memory
  200   .loop
  210   LDA #&80+0+0*64            :\ Set address to (0,0)
  220   .home
  230   BIT base%+0,X:BMI home:STA base%+0,X
  240   .char
  250   BIT base%+0,X:BMI char     :\ Wait until not busy
  260   \ Need to translate #_`
  270   LDA &7C00,Y:STA base%+1,X  :\ Write character
  280   INY                        :\ Step to next character
  290   CPY #40:BEQ line1          :\ Move to next line, first controller
  300   CPY #120:BEQ line1         :\ Move to next line, second controller
  310   CPY #80:BNE next           :\ Set to next character
  320   LDX #2:BNE loop            :\ Step to second controller
  330   .line1
  340   LDA #&80+0+1*64            :\ Set address to (0,1)
  350   .wait
  360   BIT base%+0,X:BMI wait:STA base%+0,X
  370   .next
  380   CPY #160:BNE char          :\ Loop back to do next character
  390   PLA:TAX:PLA:TAY
  400   .ignore
  410   PLA:RTS
  420   :
  430   .old
  440   JMP (oldv)
  450   :
  460   .go%
  470   LDA #1:LDX #&A8:LDY #0:JSR &FFDA
  480   LDA (&A8),Y:CMP #13:BEQ link_on
  490   INY:LDA (&A8),Y:AND #&DF
  500   CMP #ASC"F":BNE link_on
  510   LDA oldv+0:STA &20E
  520   LDA oldv+1:STA &20F
  530   RTS
  540   .link_on
  550   LDA &20E:STA oldv+0
  560   LDA &20F:STA oldv+1
  570   LDA #start AND 255:STA &20E
  580   LDA #start DIV 256:STA &20F
  590   RTS
  600   .oldv
  610 ]NEXT
  620 PRINT"*SAVE lcd FFFF0900 ";~P%OR&FFFF0000;" ";~go%OR&FFFF0000