MCS BASIC-52 V1.1 provides a simple, but yet effective way for the user to add COMMANDS and/or STATEMENTS to the ones that are provided on the chip. All the user must do is write a few simple programs that will reside in external code memory. The step by step approach is as follows:
STEP 1
The user must first inform the MCS BASIC-52 device that the expansion options are available. This is done by putting the character 5AH in CODE memory location 2002H. When MCS BASIC-52 enters the command mode it will examine CODE memory location 2002H. If a 5AH is in this location, MCS BASIC- 52 will CALL external CODE memory location 2048H. The user must then write a short routine to SET BIT 45 (2DH), which is bit 5 of internal memory location 37 (decimal) and place this routine at code memory location 2048H. Setting BIT 45 tells MCS BASIC-52 that the expansion option is available. The following simple code will accomplish all that is stated above:
ORG 2002H DB 5AH ; ORG 2048H SETB 45 RET
STEP 2
With BIT 45 SET, MCS BASIC-52 will CALL external CODE memory location 2078H everytime it attempts to tokenize a line that has been entered. At location 2078H, the user must load the DPTR (Data Pointer) with the address of the user supplied lookup table, complete with tokens.
STEP 3
The user needs the following information to generate a user token table:
1) THE USER TOKENS ARE THE NUMBRES 10H THROUGH 1FH (16 TOKENS AVAILABLE)
2) THE USER TOKEN TABLE BEGINS WITH THE TOKEN, FOLLOWED BY THE ASCII TEXT THAT IS TO BE REPRESENTED BY THAT TOKEN, FOLLOWED BY A ZERO (00H) INDICATING THE END OF THE ASCII, FOLLOWED BY THE NEXT TOKEN.
3) THE TABLE IS TERMINATED WITH THE CHARACTER 0FFH.
EXAMPLE:
ORG 2078H ; MOV DPTR,#USER_TABLE RET ; ORG 2200H ; THIS DOES NOT NEED TO BE ; ; IN THIS LOCATION USER_TABLE: ; DB 10H ; FIRST TOKEN DB 'DISPLAY' ; USER KEYWORD DB 00H ; KEYWORD TERMINATOR DB 11H ; SECOND TOKEN DB 'TRANSFER' ; SECOND USER KEYWORD DB 00H ; KEYWORD TERMINATOR DB 12H ; THIRD TOKEN (UP TO 16) DB 'ROTATE' ; THIRD USER KEYWORD DB 0FFH ; END OF USER TABLE
This same user table is used when MCS BASIC-52 "de-tokenizes" a line during a LIST.
STEP 4
Step 3 tokenizes the user keyword, this means that MCS BASIC-52 translates the user keyword into the user token. So, in the preceding example, the keyword TRANSFER would be replaced with the token 11H. When MCS BASIC-52 attempts to execute the user token, it first makes sure that the user expansion option BIT is set (BIT 45), then CALLS location 2070H to get the address of the user vector table. This address is placed in the DPTR. The user vector table consist of series of Data Words that define the address of the user assembly language routines.
EXAMPLE:
ORG 2070H ; LOCATION BASIC CALLS TO ; GET USER LOOKUP ; MOV DPTR,#VECTOR_TABLE ; VECTOR_TABLE: ; DW RUN_DISPLAY ; ADDRESS OF DISPLAY ; ROUTINE, TOKEN (10H) DW RUN_TRANSFER ; ADDRESS OF TRANSFER ; ROUTINE, TOKEN (11H) DW RUN_ROTATE ; ADDRESS OF ROTATE ; ROUTINE, TOKEN (12H) ; ORG 2300H ; AGAIN, THESE ROUTINES ; MAY BE PLACED ANYWHERE ; RUN DISPLAY: ; ; USER ASM CODE FOR DISPLAY GOES HERE ; RUN TRANSFER: ; ; USER ASM CODE FOR TRANSFER GOES HERE ; RUN_ROTATE: ; ;USER ASM CODE FOR ROTATE GOES HERE ;
Note that the ordinal position of the DATA WORDS in the user vector table must correspond to the token, so the user statement with the token 10H must be the first DW entry in the vector table, 11H, the second, 12H, the third, and so on. The order of the tokens in the user table is not important!! The following user lookup table would function properly with the previous example:
EXAMPLE:
; USER_TABLE: ; DB 13H ; THE TOKENS DO NOT HAVE DB 'ROTATE' ; TO BE IN ORDER IN THE DB 00H ; USER LOOKUP TABLE DB 10H DB 'DISPLAY' DB 00H DB 12H DB 'TRANSFER' DB 0FFH ; END OF TA8LE
The user may also use the command/statement extension option to re-define the syntax of MCS BASIC- 52. This is done simply by placing your own syntax in the user table and placing the appropriate BASIC token in front of your re-defined keyword. A complete listing of all MCS BASIC-52 tokens and keywords are provided in the back of this chapter. MCS BASIC-52 will always list out the program using the user defined systax, but it will still accept the standard keyword as a valid instruction. As an example, suppose that the user would like to substitute the keyword HEXOUT for PH1., then the user would generate the following entry in the user table:
EXAMPLE:
; USER_TABLE: DB 8FH ; TOKEN FOR PH1. DB 'HEXOUT' ; TO BE IN ORDER IN THE DB 00H ; USER LOOKUP TABLE ; DB 10H D8 'DISPLAY' D8 00H ; REST OF USER_TABLE ; DB 0FFH ; END OF TABLE
MCS BASIC-52 will now accept the keyword HEXOUT and it will function in a manner identical to PH1 . PH1 will still function correctly, however HEXOUT will be displayed when the user LIST a program.
TOKEN KEYWORD TOKEN KEYWORD TOKEN KEYWORD 80H LET 080H ABS 0ECH <= 81H CLEAR 081H INT 0EDH <> 82H PUSH 0B2H SGN 0EEH < 83H GOTO 083H NOT 0EFH > 84H PWM 084H COS 0FOH RUN 85H PH0. 085H TAN 0FlH LIST 86H UI 0B6H SIN 0F2H NULL 87H UO 087H SOR 0F3H NEW 88H POP 088H CBY 0F4H CONT 89H PRINT 089H EXP 0F3H PROG 89H P. 08AH ATN 0F6H XFER 89H ? (V1.1 ONLY) 088H LOG 0F7H RAM 8AH CALL 08CH DBY 0F8H ROM 88H DIM 08DH XBY 0F9H FPROG 8CH STRING 08EH PI 0FAH-0FFH NOT USED 8DH BAUD 08FH RND 8EH CLOCK 0C0H GET 8FH PH1. 0C1H FREE 90H STOP 0C2H LEN 91H ONTIME 0C3H XTAL 92H ONEX1 0C4H MTOP 93H RETI 0C5H TIME 94H DO 0C6H IE 95H RESTORE 0C7H IP 96H REM 0C8H TIMER0 97H NEXT 0C9H TIMER1 98H ONERR 0CAH TIMER2 99H ON 0C8H T2CON 9AH INPUT 0CCH TCON 98H READ 0CDH TMOD 9CH DATA 0CEH RCAP2 9DH RETURN 0CFH PORT1 9EH IF 0D0H PCON 9FH GOSUB 0D1H ASC( 0A0H FOR 0D2H USING( 0A1H WHILE 0D2H U.( 0A2H UNTIL 0D3H CHR( 0A3H END 0D4H-0DFH NOT USED 0A4H TAB 0E0H ( 0A5H THEN 0E1H ** 0A6H TO 0E2H * 0A7H STEP 0E3H + 0A8H ELSE 0E4H / 0A9H SPC 0E5H - 0AAH CR 0E6H .XOR. 0A8H IDLE 0E7H .AND. 0ACH ST@ (V1.1 ONLY) 0E8H .OR. 0ADH LD@ (V1.1 ONLY) 0E9H - (NEGATE) 0AEH PGM (V1.1 ONLY) 0EAH = 0AFH RROM(V1.1 ONLY) 0EBH >=