Page 1 of 1

Disable Break key from within a BASIC program

Posted: Wed Nov 17, 2010 2:40 pm
by zephyr
Here is a routine to disable the BREAK key from within a Dragon BASIC program. The machine code routine is position independent, and compatible with all versions of DragonDOS, SuperDOS, DOSPlus, and DeltaDOS.

Code: Select all

10 'BREAK KEY DISABLE V1.0
20 'FOR THE DRAGON 32/64
30 'BY STEPHEN J WOOLHAM
40 '***************************
50 'BASIC EXAMPLE PROGRAM
60 '***************************
70 CLEAR200,32689
80 DATA 30,8D,0,26,BC,1,6B,27,20,B6,1,6A,A7,8D,0,1E,FC,1,6B,ED,8D,0,18,86,7E,B7,1,6A,BF,1,6B,30,8D,0,1A,B7,1,9A,BF,1,9B,39,D,6F,27,3,39,39,39,32,62,F,70,BD,B5,38,81,3,27,F9,39,32,62,1C,AF,8D,3,7E,84,A6,BD,BB,E5,27,2,97,87,39
90 FOR I=32690 TO 32767:READ MC$:X=VAL("&H"+MC$):CSUM=CSUM+X:POKEI,X:NEXT
100 IF CSUM<>7212 THEN CLS:PRINT"ERROR IN DATA LINE":END
110 EXEC32690

Code: Select all

10 'BREAK KEY DISABLE V1.0
20 'FOR THE DRAGON 32/64
30 'BY STEPHEN J WOOLHAM
40 '***************************
50 'BASIC EXAMPLE PROGRAM #2
60 '***************************
70 CLEAR200,32689
80 MC$="308D0026BC016B2720B6016AA78D001EFC016BED8D0018867EB7016ABF016B308D001AB7019ABF019B390D6F270339393932620F70BDB538810327F93932621CAF8D037E84A6BDBBE52702978739"
90 X=1:FOR I=32690TO32767:POKE I,VAL("&H"+MID$(MC$,X,2)):X=X+2:NEXT
100 EXEC32690

Re: Disable Break key from within a BASIC program

Posted: Wed Nov 17, 2010 2:40 pm
by zephyr
Here's an alternative method which restarts the BASIC program every time Break is pressed. The machine code routine is position independent.

Code: Select all

10 'BREAK-RUN V1.0
20 'FOR THE DRAGON 32/64
30 'BY STEPHEN J WOOLHAM
40 '***************************
50 'BASIC EXAMPLE PROGRAM
60 '***************************
70 START=1004
80 MC$="8C82F62609BD841FBD83ED7E849F39"
90 X=1:FOR I=START TO START+14:POKE I,VAL("&H"+MID$(MC$,X,2)):X=X+2:NEXT
100 POKE408,VAL("&H"+LEFT$(HEX$(START),LEN(HEX$(START))-2))
110 POKE409,VAL("&H"+RIGHT$(HEX$(START),2))
120 '
130 'POKE 407,126 TO ENABLE 
140 'POKE 407,57 TO DISABLE
150 '
160 POKE407,126 

Re: Disable Break key from within a BASIC program

Posted: Thu Nov 18, 2010 10:29 pm
by zephyr
This routine also restarts the BASIC program when an error is encountered, or the reset button pressed.

Code: Select all

10 'BREAK-RUN V2.0
20 'FOR THE DRAGON 32/64
30 'BY STEPHEN J WOOLHAM
40 '***************************
50 'BASIC EXAMPLE PROGRAM
60 '***************************
70 DATA CC,55,7E,30,8D,0,15,97,71,9F,72,F7,1,8E,BF,1,8F,30,8D,0,21,F7,1,97,BF,1,98,39,12,F,6F,F,E3,F,E4,B6,FF,3,8A,1,B7,FF,3,BD,84,1F,1C,AF,BD,83,ED,7E,84,9F,8C,82,F6,27,F0,39
80 CLEAR200,32707
90 FOR I=32708 TO 32767:READ MC$:X=VAL("&H"+MC$):CSUM=CSUM+X:POKEI,X:NEXT
100 IF CSUM<>6939 THEN CLS:PRINT"ERROR IN DATA LINE":END
110 EXEC32708

Code: Select all

10 'BREAK-RUN V2.0
20 'FOR THE DRAGON 32/64
30 'BY STEPHEN J WOOLHAM
40 '***************************
50 'BASIC EXAMPLE PROGRAM #2
60 '***************************
70 CLEAR200,32707
80 MC$="CC557E308D001597719F72F7018EBF018F308D0021F70197BF019839120F6F0FE30FE4B6FF038A01B7FF03BD841F1CAFBD83ED7E849F8C82F627F039"
90 X=1:FOR I=32708 TO 32767:POKE I,VAL("&H"+MID$(MC$,X,2)):X=X+2:NEXT
100 EXEC32708

Re: Disable Break key from within a BASIC program

Posted: Sat Nov 20, 2010 1:45 am
by zephyr
Here's the same routine for Tandy Color Computer models 1, 2, and 3. The machine code routine is position independent, and DOS compatible.

Code: Select all

10 'BREAK-RUN V2.0
20 'FOR TANDY COLOR COMPUTER
30 'MODELS 1, 2, AND 3
40 'BY STEPHEN J WOOLHAM
50 '***************************
60 'BASIC EXAMPLE PROGRAM
70 '***************************
80 DATA 30,8D,0,1C,9C,72,27,17,86,55,97,71,9F,72,BF,1,92,BE,1,68,AF,8D,0,31,30,8D,0,28,BF,1,68,39,12,F,6F,F,E3,F,E4,B6,FF,3,8A
90 DATA 1,B7,FF,3,B6,BF,FF,81,1B,26,3,7F,FF,DF,BD,AD,21,1C,AF,BD,AC,EF,7E,AD,9E,D,6F,27,3,7E,82,73,D,0,2A,5,8C,AB,F3,27,E5,7E,95,AC
100 CLEAR200,32680
110 FOR I=32681 TO 32767:READ MC$:X=VAL("&H"+MC$):CSUM=CSUM+X:POKEI,X:NEXT
120 IF CSUM<>9485 THEN CLS:PRINT"ERROR IN DATA LINES":END
130 EXEC32681

Re: Disable Break key from within a BASIC program

Posted: Sun Nov 21, 2010 11:10 pm
by zephyr
Here's a Break key disable routine for Tandy Color Computer models 1, 2, and 3. The machine code routine is position independent, and DOS compatible.

Code: Select all

10 'BREAK KEY DISABLE V1.0
20 'FOR TANDY COLOR COMPUTER
30 'MODELS 1, 2, AND 3
40 'BY STEPHEN J WOOLHAM
50 '***************************
60 'BASIC EXAMPLE PROGRAM
70 '***************************
80 CLEAR200,32708
90 DATA 30,8D,0,15,9C,A9,27,10,9F,A9,BE,1,6B,AF,8D,0,1C,30,8D,0,13,BF,1,6B,39,B6,1,54,84,BF,B7,1,54,A6,9F,0,A6,7E,AA,1A,D,6F,27,3,7E,0,0,32,62,F,70,BD,A1,B1,81,3,27,F9,39
100 FOR I=32709 TO 32767:READ MC$:X=VAL("&H"+MC$):CSUM=CSUM+X:POKEI,X:NEXT
110 IF CSUM<>5366 THEN CLS:PRINT"ERROR IN DATA LINE":END
120 EXEC32709

Code: Select all

10 'BREAK KEY DISABLE V1.0
20 'FOR TANDY COLOR COMPUTER
30 'MODELS 1, 2, AND 3
40 'BY STEPHEN J WOOLHAM
50 '***************************
60 'BASIC EXAMPLE PROGRAM #2
70 '***************************
80 CLEAR200,32708
90 MC$="308D00159CA927109FA9BE016BAF8D001C308D0013BF016B39B6015484BFB70154A69F00A67EAA1A0D6F27037E000032620F70BDA1B1810327F939"
100 X=1:FOR I=32709TO32767:POKE I,VAL("&H"+MID$(MC$,X,2)):X=X+2:NEXT
110 EXEC32709

Re: Disable Break key from within a BASIC program

Posted: Mon Nov 22, 2010 11:40 pm
by zephyr
This more complex routine also disables Shift+@ just like the Dragon version in my first post. The machine code routine is position independent, and DOS compatible.

Code: Select all

10 'BREAK KEY DISABLE V2.0
20 'FOR TANDY COLOR COMPUTER
30 'MODELS 1, 2, AND 3
40 'BY STEPHEN J WOOLHAM
50 '***************************
60 'BASIC EXAMPLE PROGRAM
70 '***************************
80 CLEAR200,32602
90 DATA 30,8D,0,8E,BC,1,6B,27,1F,FC,1,6B,ED,8D,0,87,BF,1,6B,30,8D,0,12,BF,1,9B,30,8D,0,5F,BF,1,A4,BE,A0,0,AF,8D,0,63,39,32,62,1C,AF,8D,5B,9E,A6,9F,2F,A6,80,27
100 DATA 7,81,3A,27,25,7E,B2,77,A6,81,97,0,26,3,7E,AE,15,EC,80,DD,68,9F,A6,96,AF,27,F,86,5B,BD,A2,82,96,68,BD,BD,CC,86,5D,BD,A2,82,9D,9F,1F,A9,81,98,27,B,81,97,27,C
110 DATA 1F,9A,BD,AD,C6,20,B8,BD,83,1A,20,B3,BD,8C,62,20,AE,AE,62,8C,AC,9D,26,5,30,8C,D9,AF,62,39,BD,0,0,27,2,97,87,39,D,6F,27,3,7E,0,0,32,62,F,70,BD,A1,B1,81,3,27,F9,39
120 FOR I=32603 TO 32767:READ MC$:X=VAL("&H"+MC$):CSUM=CSUM+X:POKEI,X:NEXT
130 IF CSUM<>17467 THEN CLS:PRINT"ERROR IN DATA LINES":END
140 EXEC32603

Re: Disable Break key from within a BASIC program

Posted: Mon Nov 22, 2010 11:50 pm
by zephyr
I'm curious as to whether an effective Break key disable routine was ever written for the CoCo in the past. If there is one, please let me know.

Regards,
Steve

Re: Disable Break key from within a BASIC program

Posted: Sun Apr 29, 2012 12:11 am
by zephyr
Version 3.0 for the Tandy CoCo with Extended Color Basic. The machine code routine is position independent, and DOS compatible.

Code: Select all

10 'BREAK KEY DISABLE V3.0
20 'FOR TANDY COLOR COMPUTER
30 'MODELS 1, 2, AND 3
40 'BY STEPHEN J WOOLHAM
50 '***************************
60 'BASIC EXAMPLE PROGRAM
70 '***************************
80 CLEAR200,32617:S=32618:E=S+49
90 DATA 33,8D,0,2E,FF,1,9B,C6,61,8E,82,B9,BD,A5,9A,86,7E,A7,C4,CC,83,1A,ED,41
100 DATA 30,C8,D7,AF,52,30,88,BF,AF,E,30,C8,EA,BF,1,A4,39,AD,9F,A0,0,27,F9,7E,AD,F8
110 FOR I=S TO E:READ MC$:X=VAL("&H"+MC$):CSUM=CSUM+X:POKEI,X:NEXT
120 IF CSUM=6701 THEN EXEC S ELSE CLS:PRINT"ERROR IN DATA LINES":END
130 '
140 'DISABLE BREAK AND SHIFT+@
150 'POKE E,248
160 '
170 'DISABLE BREAK
180 'POKE E,244
190 '
200 'ENABLE BREAK AND SHIFT+@
210 'POKE E,240