/************************** I2ICE TUTORIAL SCREEN #31 **************************/ menu=1 define literally P = 'include scr.30 nolist' define literally R = 'include scr.31 nolist' define literally RTN = 'include scr.31 nolist' define literally N = 'include scr.32 nolist' define literally M = 'include scr.2 nolist' cls /*******************************************************************************/ ' ------------------------' 'To fix the bugs using a high-level patch, we need | SCR31: HI-LEVEL PATCH |' 'to define a break register that causes emulation to | M = Go to main menu |' 'break at line 70 and calls an I2ICE debug PROC. The | N = Next screen |' 'PROC has three jobs to accomplish: | P = Previous screen |' ' 1. Provide the correct algorithm for converting | Q = Quit tutorial |' ' ASCII code to a decimal number. | R = Rewrite SCR31 |' ' 2. Instruct the I2ICE system to skip lines 70 and | SCR# = Screen desired |' ' 71 when emulating. ------------------------' ' 3. Instruct the system to resume emulation after ' ' executing the patch.' 'Job 3 can be done using the command RETURN FALSE in our PROC. FALSE tells' 'the I2ICE software to resume emulation. (RETURN TRUE stops emulation.) Job' '2 requires that we know the address where emulation should resume. The two' 'lines of PL/M code that we wish to skip are in a loop that begins at line 66.' 'We want to resume emulation so that the program jumps back to line 66, where' 'the loop checks the value of NOT_DONE. To find the address where the loop' 'jumps back to line 66, we need to disassemble several lines of absolute code' 'starting at line 71. The ASM command will do this. Enter' ' ASM :CMAKER#71 LENGTH 8 ' 'The address we want to return to is :CMAKER#74 (JMP (#66)). ' '-------------------------------------------------------------------------------'