Edit Key - M.Loftus (Your Spectrum-Issue 16-Page 56)


Cast your minds back - many moons (and issues ago), YS projects
manager, Penny Page, set you all a small task. How, she asked,
could you alter the Speccy's editing facilities so that the cursor
could be moved up and down an edit line, as well as from left to
right. At last, we bring you a solution to the problem.
        To get it going just type in the loader program, run it and save it
as usual. Then to start the routine type RANDOMIZE USR 65123. To
disable it, type RANDOMIZE USR 65133. You can also change the
speed of the cursor simply by entering:
POKE 65053, new value
POKE 65065, new value.
The new value is the number of characters to be moved each time.
OK, put on the green eye shade (just like the one I wear! Ed) and
get editing.

[NOTE: The hex loader routine printed in the magazine was wrong in that]
[both the FOR loop and the checksum ignored the last nine bytes of the ]
[machine code routine, so that the loader appeared to work but the end ]
[of the routine was omitted. The file "Hex Loader" on EDIT_KEY.TAP has ]
[been corrected.                                                       ]


0100 K48   DEFL 0FDFFH
0150       ORG  K48
0200 VECTR DEFW K48+2
0250       RST 38H
Line 250        Calls the ROM routine that reads the keyboard and updates
                the system variable FRAMES.
0300       DI
0350       PUSH AF
0400       PUSH HL
0450       PUSH BC
0500       PUSH DE
0550       LD   A,(23560)
Line 550        Loads 'A' with the value of the last key or the 'NO-KEY'
                value.
0600       CP   10
0650       JR   Z,START
Lines 600-650   Check if the last key was Cursor Down. If so jump to START.
0700       CP   11
0750       JR   Z,START
Lines 700-750   If the last key pressed was Cursor Up then also jump to START.
0800       JP   END
Line 800        If neither Up or Down was pressed then jump to END.
0850 START CP   10
0900       JR   Z,ADD
Lines 850-900   If Down was being pressed then jump to ADD.
0950       LD   HL,(23643)
1000       LD   BC,31
1050       AND  A
1100       SBC  HL,BC
1150       PUSH HL
1200       JR   TEST
Lines 950-1200  Assuming that Up must have been pressed read the cursor
                position, move 31 characters down the line and jump to TEST.
1250 ADD   LD   HL,(23643)
1300       LD   BC,31
1350       ADD  HL,BC
1400       PUSH HL
Lines 1250-1400 Read the cursor position. Move 31 characters up the line.
1450 TEST  LD   HL,(23649)
1500       DEC  HL
1550       DEC  HL
1600       POP  BC
1650       PUSH BC
1700       AND  A
1750       SBC  HL,BC
1800       JR   C,END1
Lines 1450-1800 Test to see if the cursor is going off the end of the line,
                and if so jump to END1.
1850       LD   HL,(23641)
1900       POP  BC
1950       PUSH BC
2000       AND  A
2050       SBC  HL,BC
2100       JR   NC,END1
2150       POP  HL
Lines 1850-2100 Test to see if the cursor is going too far up the line, if
                so then jump to END1.
2200       LD   (23643),HL
Line 2200       Stores the new cursor position.
2250       LD   A,(23560)
2300       CP   10
2350       JR   NZ,UP
Lines 2250-2350 If Down wasn't the last key pressed then jump to UP.
2400       LD   A,9
2450       LD   (23560),A
2500       JR   END
Lines 2400-2500 Make Basic think that the Cursor Right was pressed
                and jump to END.
2550 UP    LD   A,8
2600       LD   (23560),A
Lines 2550-2600 Make Basic think that Cursor Left was pressed.
2650 END   POP  DE
2700       POP  BC
2750       POP  HL
2800       POP  AF
2850       EI
2900       RET
2950 END1  POP  HL
3000       JR   END
Lines 2650-2900 Restore all preserved registers, enable interrupts and return
                to Basic.
3050 GO    LD   A,(VECTR+1)
3055       SUB  1
3100       LD   I,A
3150       IM2
3200       RET
Lines 3050-3200 Set up the interrupt routine, set interrupt mode 2 and return
                to Basic.
3250 STOP  LD   A,3FH
3300       LD   I,A
3350       IM1
3400       RET
3450       END
Lines 3250-3400 Switch the routine off by setting interrupt mode 1 and return
                to Basic.

------------------------------------------------------------------------------
TYPE: Utility 

COMMENT: 


This info file was typed by Jim Grimwood

Downloaded from:
Desert Island Disks -- http://www.image.dk/~frankie/
Maintained by:
Michael Bruhn -- frankie@image.dk
