Disable Break key from within a BASIC program

Hardware Hacking, Programming and Game Solutions/Cheats
Post Reply
zephyr
Posts: 1474
Joined: Mon Jul 21, 2008 1:18 am

Disable Break key from within a BASIC program

Post 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
Last edited by zephyr on Mon Nov 29, 2010 2:04 pm, edited 2 times in total.
zephyr
Posts: 1474
Joined: Mon Jul 21, 2008 1:18 am

Re: Disable Break key from within a BASIC program

Post 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 
zephyr
Posts: 1474
Joined: Mon Jul 21, 2008 1:18 am

Re: Disable Break key from within a BASIC program

Post 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
zephyr
Posts: 1474
Joined: Mon Jul 21, 2008 1:18 am

Re: Disable Break key from within a BASIC program

Post 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
zephyr
Posts: 1474
Joined: Mon Jul 21, 2008 1:18 am

Re: Disable Break key from within a BASIC program

Post 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
zephyr
Posts: 1474
Joined: Mon Jul 21, 2008 1:18 am

Re: Disable Break key from within a BASIC program

Post 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
Last edited by zephyr on Mon Nov 29, 2010 9:28 pm, edited 4 times in total.
zephyr
Posts: 1474
Joined: Mon Jul 21, 2008 1:18 am

Re: Disable Break key from within a BASIC program

Post 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
zephyr
Posts: 1474
Joined: Mon Jul 21, 2008 1:18 am

Re: Disable Break key from within a BASIC program

Post 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
Post Reply