10REM PROTECTION 3=&16 30VDU6:MODE7:Z%=0:E1%=0:E2%=0:ONERRORGOTO220 40REV$="Rev 2.0":*KEY10 60IFZ%=0THEN*KEY10CLS:FOR A%=&C00TO&3A80STEP4:!A%=0:NEXT:*KEY10¦M 70IF?&E8AA<>&4FTHEN130 80ONERRORGOTO100 90MODE7:VDU6:PROCBIG(0,8,"KEYPAD DRIVER WILL NOT WORK WITH"):PROCBIG(0,11,"OPERATING SYSTEM OS 0.1.") 100VDU6:ONERRORGOTO110 110IFZ%=1THENONERROROFF 120GOTO110 130VDU6:*FX200,2 140MODE7 150DIMROW%(4),COL%(3),KPOS%(14,2),ACHR%(40),ACHR$(40),KNUM%(14,1),KCHR$(14,1):MODE7:GOTO170 160MODE7:VDU23,1,0;0;0;0;:PROCBIG(5,10,"R E S T A R T"):FORN%=0TO3000:NEXT 170MODE7:VDU23,1,0;0;0;0;:PROCINTRO:MODE1:VDU23,1,0;0;0;0; 180PROCH1:PROCINS:PROCEDIT 190PROCMENU 200IFQ$="E"THENGOTO180 210IFQ$="F"THENPROCFIN:IFZ%=1THENSTOPELSEGOTO1350 220IFE1%=1THENPRINT'''"Error ";ERR;" in line ";ERL;" ";:REPORT:PRINT'':STOP 230IFERR<>17THENGOTO250 240IFE2%=0THEN160 ELSEE1%=1:GOTO220 250MODE7:PROCBIG(5,8,"SYSTEM ERROR"):PRINT''"Please quote this number ";ERL;"/";ERR 260ONERRORGOTO270 270IFZ%=1THENONERROROFF 280GOTO270 290DEFPROCINIT:*FX4,1 300CURKEY%=0:NEWKEY%=0:CURROW%=0:CURCOL%=0:?&FE62=&F0:F%=0:B$=STRING$(32," "):B%=0:A%=0 310RESTORE320:FORN%=0TO4:READROW%(N%):NEXT:FORN%=0TO3:READCOL%(N%):NEXT 320DATA 8,4,2,1,0,&60,&50,&30 330RESTORE340:FORN%=0TO14:KCHR$(N%,0)=" ":KCHR$(N%,1)=" ":FORM%=0TO2:READKPOS%(N%,M%):NEXT:NEXT 340DATA 1,22,128,10,22,128,19,22,128,1,17,128,10,17,128,19,17,128,1,12,128,10,12,128,19,12,128,1,7,128,10,7,129,19,7,128,1,1,129,10,1,131,19,1,129 350RESTORE370:FORN%=0TO40:READACHR%(N%):IFACHR%(N%)=-1N%=40:GOTO360:ELSEREADACHR$(N%) 360NEXT 370DATA 2,P ON,3,P OFF,4,T=TC,5,T=GC,6,VDUON,7,BEEP,8,BACK,9,TAB,10,DOWN,11,UP,12,CLS,13,RET,14,PAGE,15,SCROL,16,CLG,21,CLRLN,26,R-D-W,30,HOME,32,SPACE,127,DEL 380DATA&90,fO,&91,f1,&92,f2,&93,f3,&94,f4,&95,f5,&96,f6,&97,f7,&98,f8,&99,f9,&9A,f10,135,COPY,136,CUR <,137,CUR >,138,CUR V,139,CUR ^,0,ESC,-1 390RESTORE400:FORKP%=0TO1:FORN%=0TO14:READK%:KNUM%(N%,KP%)=K%:PROCCONV:NEXT:NEXT 400DATA &7F,&30,&D,&31,&32,&33,&34,&35,&36,&37,&38,&39,&38,&38,&38,127,138,0,136,30,137,135,139,12,&90,13,&91,13,13,13 410KP%=0:FI%=0:ENDPROC 420DEFPROCKEYPAD:VDU28,0,31,26,5:COLOUR131:CLS:COLOUR0:PRINTTAB(1,26);"( Copyright 1983 C.V.P.)";:FORN%=0TO14:PROCBKKEY:NEXT:ENDPROC 430DEFPROCBKKEY:COLOUR3:PROCkey:ENDPROC 440DEFPROCWTKEY:COLOUR0:PROCkey:PROCkchr:ENDPROC 450DEFPROCkey:COLOURKPOS%(N%,2):X%=KPOS%(N%,0):Y%=KPOS%(N%,1):PRINTTAB(X%,Y%);" ";:PRINTTAB(X%,Y%+1);" "; 460IFN%<>13PRINTKCHR$(N%,KP%);" ";ELSECOLOUR0:IFKP%=0PRINT"REAR";ELSEPRINT"SIDE"; 470PRINTTAB(X%,Y%+2); 480IFN%<>13ANDFI%=1COLOUR2:PRINT;" ";KCHR$(N%,1);" ";ELSEIFN%=13ANDFI%=1COLOUR1:PRINT" SIDE";:ENDPROC 490IFN%<>13ANDFI%=0PRINT;" "; 500ENDPROC 510DEFPROCkchr:PRINTTAB(KPOS%(N%,0),KPOS%(N%,1)+1);:ENDPROC 520DEFPROCEDIT:OK%=-1 530PROCKEYPAD:N%=CURKEY% 540PROCWTKEY 550PROCREADKP 560IFNEWKEY%<>CURKEY%THENNEWKEY%=CURKEY%:PROCBKKEY:N%=CURKEY%:PROCWTKEY:SOUND1,-10,180,5:OK%=-2 570K%=INKEY(5):*FX15,1 580F%=(F%+1)AND&7:IFF%>4THENPROCWTKEYELSEPROCBKKEY 590IFK%=17PROCBKKEY:ENDPROC 600IFK%=-1OROK%=K%THEN550 ELSEIFK%<>1THENOK%=K% 610IFK%=1THENSOUND1,-8,150,10:SOUND2,-8,158,10:KP%=(KP%+1)AND1:OK%=-2:GOTO530 620PROCCONV:PROCYEL:PROCSND:GOTO550 630DEFPROCCONV:IFK%>32ANDK%<127THENKCHR$(N%,KP%)=" "+CHR$(K%)+" ":S%=1:ENDPROC 640PROCSPECIAL:IFE%=-1THENS%=2:ENDPROCELSEPROCPAD:S%=1:ENDPROC 650DEFPROCPAD:IFLEN(KCHR$(N%,KP%))<3THENKCHR$(N%,KP%)=KCHR$(N%,KP%)+" " 660IFLEN(KCHR$(N%,KP%))<4THENKCHR$(N%,KP%)=KCHR$(N%,KP%)+" " 670IFLEN(KCHR$(N%,KP%))<5THENKCHR$(N%,KP%)=" "+KCHR$(N%,KP%) 680ENDPROC 690DEFPROCSND:SOUND1,-10,200DIVS%,S%:ENDPROC 700DEFPROCYEL:KNUM%(N%,KP%)=K%:IFN%<>10THENENDPROCELSEKCHR$(12,KP%)=KCHR$(10,KP%):KCHR$(14,KP%)=KCHR$(10,KP%):N%=12:PROCBKKEY:N%=14:PROCBKKEY:N%=10:ENDPROC 710DEFPROCSPECIAL 720FORC%=0TO40:IFACHR%(C%)=-1THENC%=40:E%=-1:GOTO740 730IFK%=ACHR%(C%)THENKCHR$(N%,KP%)=ACHR$(C%):C%=40:E%=1:GOTO740 740NEXT:ENDPROC 750DEFPROCREADKP:?&FE60=KP%*&80:IF?&FE60=(KP%*&80)+&FTHENCURROW%=5:CURCOL%=5:ENDPROC 760Y%=CURROW%:IFCURROW%=5THEN780 770X%=CURCOL%:?&FE60=(COL%(X%)+(&80*KP%)):IF(?&FE60ANDROW%(Y%))=0THENENDPROC 780X%=0 790Y%=0 800?&FE60=COL%(X%)+(&80*KP%) 810IF(?&FE60ANDROW%(Y%))=0THENCURCOL%=X%:CURROW%=Y%:CURKEY%=(3*CURROW%)+CURCOL%:ENDPROC 820Y%=Y%+1:IFY%<4THEN800 830X%=X%+1:IFX%<3THEN790 840ENDPROC 850DEFPROCA1:*FX4,1 860COLOUR2:COLOUR128:VDU26:ENDPROC 870DEFPROCH1:PROCA1:PRINT;STRING$(27,"_")''" VOLTMACE DELTA14 KEYPAD":COLOUR3:PRINT"WARNING: ";:COLOUR1:PRINT"Do not press BREAK"'SPC(9)"ESCAPE = Restart":ENDPROC 880DEFPROCA2:VDU28,28,31,39,0:COLOUR3:COLOUR128:CLS:ENDPROC 890DEFPROCINS:PROCA2:PRINT;"____________"'"INSTRUCTIONS____________"''"(1) SELECT"'"THE WANTED"'"KEYPAD KEY"'"BY PRESSING"'"THAT BUTTON"'"ON KEYPAD."''"(2) SELECT"'"CHARACTER"'"FOR THAT KEYBY PRESSING REQUIRED KEYON THE BBC'SKEYBOARD." 900PRINT''"(3) TOGGLE"'"BETWEEN"'"KEYPADS USE"'"CTRL A"'''"(4) TO LEAVEEDITOR TYPE"'"CTRL Q.":ENDPROC 910DEFPROCINTRO:CLS:PROCWARN:PROCHEAD:PROCBIG(6,5,CHR$(133)+"* DISC COMPATIBLE *"):PRINTTAB(0,7);CHR$(133);"(KEYPAD DRIVER WILL NOT RUN ON OS O.1)" 920PRINTTAB(14,4);REV$;:PRINTTAB(0,9);"THIS SOFTWARE IS SUPPLIED ON TAPE"'"AND CAN BE USED EITHER AS A TAPE BASED"'"UTILITY, OR IT MAY BE TRANSFERRED TO"'"DISK BY THE PURCHASER AND THEN DISK RUN." 930PRINT"THIS SOFTWARE REMAINS THE COPYRIGHT OF"':PROCBIG(0,15,CHR$(134)+"CUSTOM VIDEO PRODUCTIONS (C.V.P.)"):PRINT"AND MAY NOT BE COPIED OR DUPLICATED IN"'"ANY MANNER FOR RETAIL OR RESALE."''SPC(5);CHR$(131)"( Copyright (1983) C.V.P.)" 940PROCINIT:PROCCONT:PROCHEAD:PRINT'"'KEYPAD DRIVER'is a utility that"'"enables theKEYPADSofVOLTMACE DELTA14"'"Joysticksto be defined as programable"'"external keypads for the BBC Computer."' 950PRINT"This UTILITY generates a customised"'"Machine Code Driver that remains"'"resident in the computer's memory at"'"address &AOO to &AFF, running under"'"interrupt. (EVENT 4. VERTICAL SYNC.)"' 960PRINT"NOTE: EVENT 4 is enabled by the Driver." 970PROCCONT:PROCHEAD:PRINTSPC(4)"*** KEYPAD DEFINITION DETAILS ***"''"SupportsUpper&Lowercase characters"'"SupportsVDU 1toVDU 30&VDU 127"'"(only VDU commands with NO BYTES EXTRA)"'"eg CLEAR TEXT = VDU 12 ( CTRL L)" 980PRINT"therefore define key as CTRL L." 990PRINT"SupportsCURSOR KEYS etc."'"SupportsRED FUNCTION KEYSf0 to f9"'"( use CTRL f0 (not just f0) to define)"'"SupportsESCAPE(use CTRL @ to define)"' 1000PRINTSPC(5)"******** WARNING *********"'"Do NOT press BREAK"'" BREAK cannot be defined on KEYPAD." 1010PRINT"Note that CTRL [ ([ is key right of @)"'"(=VDU 27) is equivalent to ESCAPE"'"& will cause a RESTART.Be careful !.":PROCCONT:ENDPROC 1020DEFPROCHEAD:PROCBIG(0,2,CHR$(131)+"VOLTMACE DELTA14/B KEYPAD DRIVER"):ENDPROC 1030DEFPROCBIG(X%,Y%,B$):PRINTTAB(X%,Y%);CHR$(141);B$:PRINTTAB(X%,Y%+1);CHR$(141);B$:ENDPROC 1040DEFPROCWARN:PRINTTAB(0,24);CHR$(131)+"WARNING.";CHR$(134);"DO NOT PRESS BREAK (Protected)";SPC(9);CHR$(133);"PRESS ESCAPE TO RESTART";:VDU30:ENDPROC 1050DEFPROCCONT:PRINTTAB(1,22);"PRESS SPACE-BAR TO CONTINUE "; 1060*FX15,0 1070Q$=GET$:IFQ$=" "THENCLS:PROCWARN:ENDPROCELSE1060 1080DEFPROCMENU:PROCA2:PRINT"____________"'" OPTIONS"'"____________"'"S A E F"' 1090VDU17,129,17,0:PRINT" SOUND "'" Beep when "'" keypad is "'" pressed. "'" BBC KEY S "'" "'" BEEP ":VDU17,128:PROCONOFF 1100VDU17,129,17,0:PRINT''"AUTO REPEAT"'" BBC KEY A "'" "'" AUTO ":VDU17,128:PROCAUTO 1110PRINT':VDU17,130,17,0:PRINT" RE-EDIT "'" BBC KEY E ":VDU17,128,17,3:PRINT':VDU17,131,17,0:PRINT" FINISH "'" Make M/C "'" driver, "'" link it, "'" and then "'" finish "'" BBC KEY F ":VDU17,128,17,3 1120S%=1:PROCSND 1130Q%=INKEY(50):*FX15,1 1140IFQ%=-1THEN1130 1150Q$=CHR$(Q%AND&5F) 1160IFQ$="S"THENB%=(B%+1)AND1:PROCONOFF:GOTO1120 1170IFQ$="A"THENA%=(A%+1)AND1:PROCAUTO:GOTO1120 1180IFQ$<>"F"ANDQ$<>"E"GOTO1130 ELSECLS:ENDPROC 1190DEFPROCONOFF:VDU17,129,17,3:IFB%=0THENPRINTTAB(7,13);"ON ";ELSEPRINTTAB(7,13);"OFF"; 1200DEFPROCAUTO:VDU17,129,17,3:IFA%=0THENPRINTTAB(7,18);"ON ";ELSEPRINTTAB(7,18);"OFF"; 1210VDU17,128:ENDPROC 1220DEFPROCFIN:KP%=0:FI%=1:PROCA1:CLS:PRINT"To Save/Re-load M/C Driver"'SPC(10);"*TAPE (or *DISC)"'"SAVE M/C =*SAVE MC A00 +100"'"LOAD M/C =*LOAD MC"'"*KEY10 CALL&A00¦M";:COLOUR3:PRINT;" Do BREAK":PROCKEYPAD 1230PROCA2:PRINT"You may now"'"press BREAK"'" BUT"'"When you do"'"the screen"'"will clear."''"Ensure you"'"note the"'"definitions"'"of the"'"KEYPAD keys"''"TRY KEYPAD"'"BEFORE YOU"'"BREAK."'' 1240FORKP%=0TO1:FORP%=0TO11:IFKNUM%(P%,KP%)>=&87ANDKNUM%(P%,KP%)<=&8BTHENKNUM%(P%,KP%)=KNUM%(P%,KP%)+4 1250NEXT 1260FORP%=0TO11:IFKNUM%(P%,KP%)>=&90ANDKNUM%(P%,KP%)<&9BTHENKNUM%(P%,KP%)=KNUM%(P%,KP%)-&10 1270IFKNUM%(P%,KP%)=0THENKNUM%(P%,KP%)=&1B 1280NEXT 1290FORC%=0TO2:FORR%=0TO3:?(&ADD+4*C%+R%+12*KP%)=KNUM%(3*R%+C%,KP%):NEXT:NEXT:NEXT 1300IFA%=1THEN?&A67=&AD 1310IFB%=1THEN?&AF8=&F0 1320*FX4,0 1330CALL&A00 1340VDU23,1,1;0;0;0;:ENDPROC 1350FOR N%=PAGE TO PAGE+&1C00 STEP4:!N%=0:NEXT:!PAGE=&FF0D:*KEY10CALL&A00:VDU11,11:P.SPC(40);"KEYPAD OPERATIONAL"'¦M 1360IF?&E8AA<>&4F THEN *FX200,0 1370PAGE=&1900:!PAGE=&FF0D:END
Keypad editor (BBC BASIC front-end)
← Voltmace Delta 14B/1 KEYPAD loader and resident driver disassembly
