;************************************************************** ; ; This is the equate table for 8052 basic. ; ;************************************************************** ; ; The register to direct equates for CJNE instructions. ; R0B0 EQU 0 R1B0 EQU 1 R2B0 EQU 2 R3B0 EQU 3 R4B0 EQU 4 R5B0 EQU 5 R6B0 EQU 6 R7B0 EQU 7 ; ; Register bank 1 contains the text pointer ; and the arg stack pointer. ; TXAL EQU 8 ;R0 BANK 1 = TEXT POINTER LOW ASTKA EQU 9 ;R1 BANK 1 = ARG STACK TXAH EQU 10 ;R2 BANK 1 = TEXT POINTER HIGH ; ; Now five temporary locations that are used by basic. ; TEMP1 EQU 11 TEMP2 EQU 12 TEMP3 EQU 13 TEMP4 EQU 14 TEMP5 EQU 15 ; newpage ; Register bank 2 contains the read text pointer ; and the control stack pointer. ; RTXAL EQU 16 ;R0 BANK 2 = READ TEXT POINTER LOW CSTKA EQU 17 ;R1 BANK 2 = CONTROL STACK POINTER RTXAH EQU 18 ;R2 BANK 2 = READ TEXT POINTER HIGH ; ; Now some internal system equates. ; BOFAH EQU 19 ;START OF THE BASIC PROGRAM, HIGH BYTE BOFAL EQU 20 ;START OF THE BASIC PROGRAM, LOW BYTE NULLCT EQU 21 ;NULL COUNT PHEAD EQU 22 ;PRINT HEAD POSITION FORMAT EQU 23 ; ; Register bank 3 is for the user and can be loaded ; by basic ; ; ; ; Now everything else is used by basic. ; First the bit locations, these use bytes 34, 35, 36, 37 and 38 ; newpage OTS BIT 16 ;34.0-ON TIME INSTRUCTION EXECUTED INPROG BIT 17 ;34.1-INTERRUPT IN PROCESS INTBIT BIT 18 ;34.2-INTERRUPT SET BIT ON_ERR BIT 19 ;34.3-ON ERROR EXECUTED OTI BIT 20 ;34.4-ON TIME INTERRUPT IN PROGRESS LINEB BIT 21 ;34.5-LINE CHANGE OCCURED INTPEN BIT 22 ;34.6-INTERRUPT PENDING BIT CONB BIT 23 ;34.7-CAN CONTINUE IF SET GTRD BIT 24 ;35.0-READ GET LOCATION LPB BIT 25 ;35.1-PRINT TO LINE PRINTER PORT CKS_B BIT 26 ;35.2-FOR PWM INTERRUPT COB BIT 27 ;35.3-CONSOLE OUT BIT ; 0 = SERIAL PORT ; 1 = LINE PRINTER COUB BIT 28 ;35.4-USER CONSOLE OUT BIT ; 0 = SERIAL PORT ; 1 = USER DRIVER INBIT BIT 29 ;35.5-INITIALIZATION BIT CIUB BIT 30 ;35.6-USER CONSOLE IN BIT ; 0 = SERIAL PORT ; 1 = USER ROUTINE SPINT BIT 31 ;35.7-SERIAL PORT INTERRUPT STOPBIT BIT 32 ;36.0-PROGRAM STOP ENCOUNTERED U_IDL BIT 33 ;36.1-USER IDLE BREAK INP_B BIT 34 ;36.2-SET DURING INPUT INSTRUCTION ;DCMPXZ BIT 35 ;36.3-DCMPX ZERO FLAG ARGF BIT 36 ;36.4-ARG STACK HAS A VALUE RETBIT BIT 37 ;36.5-RET FROM INTERRUPT EXECUTED I_T0 BIT 38 ;36.6-TRAP INTERRUPT ZERO TO MON UPB BIT 39 ;36.7-SET WHEN @ IS VALID JKBIT BIT 40 ;37.0-WB TRIGGER ENDBIT BIT 41 ;37.1-GET END OF PROGRAM UBIT BIT 42 ;37.2-FOR DIM STATEMENT ISAV BIT 43 ;37.3-SAVE INTERRUPT STATUS BO BIT 44 ;37.4-BUBBLE OUTPUT XBIT BIT 45 ;37.5-EXTERNAL PROGRAM PRESENT C_BIT BIT 46 ;37.6-SET WHEN CLOCK RUNNING DIRF BIT 47 ;37.7-DIRECT INPUT MODE NO_C BIT 48 ;38.0-NO CONTROL C DRQ BIT 49 ;38.1-DMA ENABLED BI BIT 50 ;38.2-BUBBLE INPUT INTELB BIT 51 ;38.3-INTELLIGENT PROM PROGRAMMING C0ORX1 BIT 52 ;38.4-PRINT FROM ROM OR RAM CNT_S BIT 53 ;38.5-CONTROL S ENCOUNTERED ZSURP BIT 54 ;38.6-ZERO SUPRESS HMODE BIT 55 ;38.7-HEX MODE PRINT LP BIT P1.7 ;SOFTWARE LINE PRINTER DACK BIT P1.6 ;DMA ACK PROMV BIT P1.5 ;TURN ON PROM VOLTAGE PROMP BIT P1.4 ;PROM PULSE ALED BIT P1.3 ;ALE DISABLE T_BIT BIT P1.2 ;I/O TOGGLE BIT ; newpage ; ; The next location is a bit addressable byte counter ; BABC EQU 39 ; ; Now floating point and the other temps ; ; FP Uses to locations 03CH ; ; Now the stack designators. ; SPSAV EQU 3EH S_LEN EQU 3FH T_HH EQU 40H T_LL EQU 41H INTXAH EQU 42H INTXAL EQU 43H MT1 EQU 45H MT2 EQU 46H MILLIV EQU 47H ;TIMER LOCATIONS TVH EQU 48H TVL EQU 49H SAVE_T EQU 4AH SP_H EQU 4BH ;SERIAL PORT TIME OUT SP_L EQU 4CH CMNDSP EQU 4DH ;SYSTEM STACK POINTER IRAMTOP EQU 0FFH ;TOP OF RAM STACKTP EQU 0FEH ;ARG AND CONTROL STACK TOPS ; ; The character equates ; CR EQU 0DH ;CARRIAGE RETURN LF EQU 0AH ;LINE FEED BELL EQU 07H ;BELL CHARACTER BS EQU 08H ;BACK SPACE CNTRLC EQU 03H ;CONTROL C CNTRLD EQU 04H ;CONTROL D NULL EQU 00H ;NULL ; newpage ; ; The internal system equates ; LINLEN EQU 73 ;THE LENGTH OF AN INPUT LINE EOF EQU 01 ;END OF FILE CHARACTER ASTKAH EQU 01 ;ASTKA IS IN PAGE 1 OF RAM CSTKAH EQU 00 ;CSTKA IS IN PAGE 0 OF RAM FTYPE EQU 01 ;CONTROL STACK "FOR" GTYPE EQU 02 ;CONTROL STACK "GOSUB" DTYPE EQU 03 ;DO-WHILE/UNTIL TYPE ROMADR EQU 8000H ;LOCATION OF ROM ; ; The floating point equates ; FPSIZ EQU 6 ;NO. OF BYTES IN A FLOATING NUM DIGIT EQU FPSIZ-2 ;THE MANTISSA OF A FLOATING NUM STESIZ EQU FPSIZ+3 ;SIZE OF SYMBOL ADJUSTED TABLE ELEMENT FP_BASE EQU 1993H ;BASE OF FLOATING POINT ROUTINES PSTART EQU 512 ;START OF A PROGRAM IN RAM FSIZE EQU FPSIZ+FPSIZ+2+2+1 ; newpage ;************************************************************** ; USENT: ; User entry jump table ; ;************************************************************** ; DW CMND1 ;(00, 00H)COMMAND MODE JUMP DW IFIX ;(01, 01H)CONVERT FP TO INT DW PUSHAS ;(02, 02H)PUSH VALUE ONTO ARG STACK DW POPAS ;(03, 03H)POP VALUE OFF ARG STACK DW PG1 ;(04, 04H)PROGRAM A PROM DW INLINE ;(05, 05H)INPUT A LINE DW UPRNT ;(06, 06H)PRINT A LINR DW CRLF ;(07, 07H)OUTPUT A CRLF ; ;************************************************************** ; ; This is the operation jump table for arithmetics ; ;************************************************************** ; OPTAB: DW ALPAR ;(08, 08H)LEFT PAREN DW AEXP ;(09, 09H)EXPONENTAION DW AMUL ;(10, 0AH)FP MUL DW AADD ;(11, 0BH)FLOATING POINT ADD DW ADIV ;(12, 0CH)FLOATING POINT DIVIDE DW ASUB ;(13, 0DH)FLOATING POINT SUBTRACTION DW AXRL ;(14, 0EH)XOR DW AANL ;(15, 0FH)AND DW AORL ;(16, 10H)OR DW ANEG ;(17, 11H)NEGATE DW AEQ ;(18, 12H)EQUAL DW AGE ;(19, 13H)GREATER THAN OR EQUAL DW ALE ;(20, 14H)LESS THAN OR EQUAL DW ANE ;(21, 15H)NOT EQUAL DW ALT ;(22, 16H)LESS THAN DW AGT ;(23, 17H)GREATER THAN ; newpage ;*************************************************************** ; ; This is the jump table for unary operators ; ;*************************************************************** ; DW AABS ;(24, 18H)ABSOLUTE VALUE DW AINT ;(25, 19H)INTEGER OPERATOR DW ASGN ;(26, 1AH)SIGN OPERATOR DW ANOT ;(27, 1BH)ONE'S COMPLEMENT DW ACOS ;(28, 1CH)COSINE DW ATAN ;(29, 1DH)TANGENT DW ASIN ;(30, 1EH)SINE DW ASQR ;(31, 1FH)SQUARE ROOT DW ACBYTE ;(32, 20H)READ CODE DW AETOX ;(33, 21H)E TO THE X DW AATAN ;(34, 22H)ARC TANGENT DW ALN ;(35, 23H)NATURAL LOG DW ADBYTE ;(36, 24H)READ DATA MEMORY DW AXBYTE ;(37, 25H)READ EXTERNAL MEMORY DW PIPI ;(38, 26H)PI DW ARND ;(39, 27H)RANDOM NUMBER DW AGET ;(40, 28H)GET INPUT CHARACTER DW AFREE ;(41, 29H)COMPUTE #BYTES FREE DW ALEN ;(42, 2AH) COMPUTE LEN OF PORGRAM DW AXTAL ;(43, 2BH) CRYSTAL DW PMTOP ;(44, 2CH)TOP OF MEMORY DW ATIME ;(45, 2DH) TIME DW A_IE ;(46, 2EH) IE DW A_IP ;(47, 2FH) IP DW ATIM0 ;(48, 30H) TIMER 0 DW ATIM1 ;(49, 31H) TIMER 1 DW ATIM2 ;(50, 32H) TIMER 2 DW AT2CON ;(51, 33H) T2CON DW ATCON ;(52, 34H) TCON DW ATMOD ;(53, 35H) ATMOD DW ARCAP2 ;(54, 36H) RCAP2 DW AP1 ;(55, 37H) P1 DW APCON ;(56, 38H) PCON DW EXPRB ;(57, 39H) EVALUATE AN EXPRESSION DW AXTAL1 ;(58, 3AH) CALCULATE CRYSTAL DW LINE ;(59, 3BH) EDIT A LINE DW PP ;(60, 3CH) PROCESS A LINE DW UPPL-3 ;(61, 3DH) UNPROCESS A LINE DW VAR ;(62, 3EH) FIND A VARIABLE DW GC ;(63, 3FH) GET A CHARACTER DW GCI ;(64, 40H) GET CHARACTER AND INCREMENT DW INCHAR ;(65, 41H) INPUT A CHARACTER DW CRUN ;(66, 42H) RUN A PROGRAM newpage OPBOL: DB 1 ; ; DB 15 ;LEFT PAREN DB 14 ;EXPONENTIAN ** DB 10 ;MUL DB 8 ;ADD DB 10 ;DIVIDE DB 8 ;SUB DB 3 ;XOR DB 5 ;AND DB 4 ;OR DB 12 ;NEGATE DB 6 ;EQ DB 6 ;GT DB 6 ;LT DB 6 ;NE DB 6 ;LE DB 6 ;GE ; UOPBOL: DB 15 ;AABS DB 15 ;AAINT DB 15 ;ASGN DB 15 ;ANOT DB 15 ;ACOS DB 15 ;ATAN DB 15 ;ASIN DB 15 ;ASQR DB 15 ;ACBYTE DB 15 ;E TO THE X DB 15 ;AATAN DB 15 ;NATURAL LOG DB 15 ;DBYTE DB 15 ;XBYTE ; newpage ;*************************************************************** ; ; The ASCII printed messages. ; ;*************************************************************** ; STP: DB "STOP",'"' ; IAN: DB "TRY AGAIN",'"' ; RDYS: DB "READY",'"' ; INS: DB " - IN LINE ",'"' ; ;************************************************************** ; ; This is the command jump table ; ;************************************************************** ; CMNDD: DW CRUN ;RUN DW CLIST ;LIST DW CNULL ;NULL DW CNEW ;NEW DW CCONT ;CONTINUE DW CPROG ;PROGRAM A PROM DW CXFER ;TRANSFER FROM ROM TO RAM DW CRAM ;RAM MODE DW CROM ;ROM MODE DW CIPROG ;INTELLIGENT PROM PROGRAMMING ; newpage ;*************************************************************** ; ; This is the statement jump table. ; ;************************************************************** ; STATD: ; DW SLET ;LET 80H DW SCLR ;CLEAR 81H DW SPUSH ;PUSH VAR 82H DW SGOTO ;GO TO 83H DW STONE ;TONE 84H DW SPH0 ;PRINT MODE 0 85H DW SUI ;USER INPUT 86H DW SUO ;USER OUTPUT 87H DW SPOP ;POP VAR 88H DW SPRINT ;PRINT 89H DW SCALL ;CALL 8AH DW SDIMX ;DIMENSION 8BH DW STRING ;STRING ALLO 8CH DW SBAUD ;SET BAUD 8DH DW SCLOCK ;CLOCK 8EH DW SPH1 ;PRINT MODE 1 8FH ; ; No direct mode from here on ; DW SSTOP ;STOP 90H DW SOT ;ON TIME 91H DW SONEXT ;ON EXT INT 92H DW SRETI ;RET FROM INT 93H DW S_DO ;DO 94H DW SRESTR ;RESTOR 95H DW WCR ;REM 96H DW SNEXT ;NEXT 97H DW SONERR ;ON ERROR 98H DW S_ON ;ON 99H DW SINPUT ;INPUT 9AH DW SREAD ;READ 9BH DW FINDCR ;DATA 9CH DW SRETRN ;RETURN 9DH DW SIF ;IF 9EH DW SGOSUB ;GOSUB 9FH DW SFOR ;FOR A0H DW SWHILE ;WHILE A1H DW SUNTIL ;UNTIL A2H DW CMND1 ;END A3H DW I_DL ;IDLE A4H DW ST_A ;STORE AT A5H DW LD_A ;LOAD AT A6H DW PGU ;PGM A7H DW RROM ;RUN A ROM A9H ; newpage ;************************************************************** ; TOKTAB: ; This is the basic token table ; ;************************************************************** ; ; First the tokens for statements ; DB 80H ;LET TOKEN DB "LET" ; DB 81H ;CLEAR TOKEN DB "CLEAR" ; DB 82H ;PUSH TOKEN DB "PUSH" ; T_GOTO EQU 83H ; DB 83H ;GO TO TOKEN DB "GOTO" ; DB 84H ;TOGGLE TOKEN DB "PWM" ; DB 85H ;PRINT HEX MODE 0 DB "PH0." ; DB 86H ;USER IN TOKEN DB "UI" ; DB 87H ;USER OUT TOKEN DB "UO" ; DB 88H ;POP TOKEN DB "POP" ; newpage DB 89H ;PRINT TOKEN DB "PRINT" DB 89H DB "P." ;P. ALSO MEANS PRINT DB 89H ;? ALSO DB '?' ; DB 8AH ;CALL TOKEN DB "CALL" ; DB 8BH ;DIMENSION TOKEN DB "DIM" ; DB 8CH ;STRING TOKEN DB "STRING" ; DB 8DH ;SET BAUD RATE DB "BAUD" ; DB 8EH ;CLOCK DB "CLOCK" ; DB 8FH ;PRINT HEX MODE 1 DB "PH1." ; T_STOP EQU 90H ;STOP TOKEN DB T_STOP DB "STOP" ; T_DIR EQU T_STOP ;NO DIRECT FROM HERE ON ; DB T_STOP+1 ;ON TIMER INTERRUPT DB "ONTIME" ; DB T_STOP+2 ;ON EXTERNAL INTERRUPT DB "ONEX1" ; DB T_STOP+3 ;RETURN FROM INTERRUPT DB "RETI" ; DB T_STOP+4 ;DO TOKEN DB "DO" ; DB T_STOP+5 ;RESTORE TOKEN DB "RESTORE" ; newpage T_REM EQU T_STOP+6 ;REMARK TOKEN DB T_REM DB "REM" ; DB T_REM+1 ;NEXT TOKEN DB "NEXT" ; DB T_REM+2 ;ON ERROR TOKEN DB "ONERR" ; DB T_REM+3 ;ON TOKEN DB "ON" ; DB T_REM+4 ;INPUT DB "INPUT" ; DB T_REM+5 ;READ DB "READ" ; T_DATA EQU T_REM+6 ;DATA DB T_DATA DB "DATA" ; DB T_DATA+1 ;RETURN DB "RETURN" ; DB T_DATA+2 ;IF DB "IF" ; T_GOSB EQU T_DATA+3 ;GOSUB DB T_GOSB DB "GOSUB" ; DB T_GOSB+1 ;FOR DB "FOR" ; DB T_GOSB+2 ;WHILE DB "WHILE" ; DB T_GOSB+3 ;UNTIL DB "UNTIL" ; DB T_GOSB+4 ;END DB "END" ; newpage T_LAST EQU T_GOSB+5 ;LAST INITIAL TOKEN ; T_TAB EQU T_LAST ;TAB TOKEN DB T_TAB DB "TAB" ; T_THEN EQU T_LAST+1 ;THEN TOKEN DB T_THEN DB "THEN" ; T_TO EQU T_LAST+2 ;TO TOKEN DB T_TO DB "TO" ; T_STEP EQU T_LAST+3 ;STEP TOKEN DB T_STEP DB "STEP" ; T_ELSE EQU T_LAST+4 ;ELSE TOKEN DB T_ELSE DB "ELSE" ; T_SPC EQU T_LAST+5 ;SPACE TOKEN DB T_SPC DB "SPC" ; T_CR EQU T_LAST+6 DB T_CR DB "CR" ; DB T_CR+1 DB "IDLE" ; DB T_CR+2 DB "ST@" ; DB T_CR+3 DB "LD@" ; DB T_CR+4 DB "PGM" ; DB T_CR+5 DB "RROM" ; newpage ; Operator tokens ; T_LPAR EQU 0E0H ;LEFT PAREN DB T_LPAR DB '(' ; DB T_LPAR+1 ;EXPONENTIAN DB "**" ; DB T_LPAR+2 ;FP MULTIPLY DB '*' ; T_ADD EQU T_LPAR+3 DB T_LPAR+3 ;ADD TOKEN DB '+' ; DB T_LPAR+4 ;DIVIDE TOKEN DB '/' ; T_SUB EQU T_LPAR+5 ;SUBTRACT TOKEN DB T_SUB DB '-' ; DB T_LPAR+6 ;LOGICAL EXCLUSIVE OR DB ".XOR." ; DB T_LPAR+7 ;LOGICAL AND DB ".AND." ; DB T_LPAR+8 ;LOGICAL OR DB ".OR." ; T_NEG EQU T_LPAR+9 ; T_EQU EQU T_LPAR+10 ;EQUAL DB T_EQU DB '=' ; DB T_LPAR+11 ;GREATER THAN OR EQUAL DB ">=" ; DB T_LPAR+12 ;LESS THAN OR EQUAL DB "<=" ; DB T_LPAR+13 ;NOT EQUAL DB "<>" ; DB T_LPAR+14 ;LESS THAN DB '<' ; DB T_LPAR+15 ;GREATER THAN DB '>' ; ; T_UOP EQU 0B0H ;UNARY OP BASE TOKEN ; DB T_UOP ;ABS TOKEN DB "ABS" ; DB T_UOP+1 ;INTEGER TOKEN DB "INT" ; DB T_UOP+2 ;SIGN TOKEN DB "SGN" ; DB T_UOP+3 ;GET TOKEN DB "NOT" ; DB T_UOP+4 ;COSINE TOKEN DB "COS" ; DB T_UOP+5 ;TANGENT TOKEN DB "TAN" ; DB T_UOP+6 ;SINE TOKEN DB "SIN" ; DB T_UOP+7 ;SQUARE ROOT TOKEN DB "SQR" ; DB T_UOP+8 ;CBYTE TOKEN DB "CBY" ; DB T_UOP+9 ;EXP (E TO THE X) TOKEN DB "EXP" ; DB T_UOP+10 DB "ATN" ; DB T_UOP+11 DB "LOG" ; DB T_UOP+12 ;DBYTE TOKEN DB "DBY" ; DB T_UOP+13 ;XBYTE TOKEN DB "XBY" ; T_ULAST EQU T_UOP+14 ;LAST OPERATOR NEEDING PARENS ; DB T_ULAST DB "PI" ; DB T_ULAST+1 ;RND TOKEN DB "RND" ; DB T_ULAST+2 ;GET TOKEN DB "GET" ; DB T_ULAST+3 ;FREE TOKEN DB "FREE" ; DB T_ULAST+4 ;LEN TOKEN DB "LEN" ; T_XTAL EQU T_ULAST+5 ;CRYSTAL TOKEN DB T_XTAL DB "XTAL" ; T_MTOP EQU T_ULAST+6 ;MTOP DB T_MTOP DB "MTOP" ; T_IE EQU T_ULAST+8 ;IE REGISTER DB T_IE DB "IE" ; T_IP EQU T_ULAST+9 ;IP REGISTER DB T_IP DB "IP" ; TMR0 EQU T_ULAST+10 ;TIMER 0 DB TMR0 DB "TIMER0" ; TMR1 EQU T_ULAST+11 ;TIMER 1 DB TMR1 DB "TIMER1" ; TMR2 EQU T_ULAST+12 ;TIMER 2 DB TMR2 DB "TIMER2" ; T_TIME EQU T_ULAST+7 ;TIME DB T_TIME DB "TIME" ; TT2C EQU T_ULAST+13 ;T2CON DB TT2C DB "T2CON" ; TTC EQU T_ULAST+14 ;TCON DB TTC DB "TCON" ; TTM EQU T_ULAST+15 ;TMOD DB TTM DB "TMOD" ; TRC2 EQU T_ULAST+16 ;RCAP2 DB TRC2 DB "RCAP2" ; T_P1 EQU T_ULAST+17 ;P1 DB T_P1 DB "PORT1" ; T_PC EQU T_ULAST+18 ;PCON DB T_PC DB "PCON" ; T_ASC EQU T_ULAST+19 ;ASC TOKEN DB T_ASC DB "ASC(" ; T_USE EQU T_ULAST+20 ;USING TOKEN DB T_USE DB "USING(" DB T_USE DB "U.(" ; T_CHR EQU T_ULAST+21 ;CHR TOKEN DB T_CHR DB "CHR(" ; newpage T_CMND EQU 0F0H ;COMMAND BASE ; DB 0F0H ;RUN TOKEN DB "RUN" ; DB 0F1H ;LIST TOKEN DB "LIST" ; DB 0F2H ;NULL TOKEN DB "NULL" ; DB 0F3H ;NEW TOKEN DB "NEW" ; DB 0F4H ;CONTINUE TOKEN DB "CONT" ; DB 0F5H ;PROGRAM TOKEN DB "PROG" ; DB 0F6H ;TRANSFER TOKEN DB "XFER" ; DB 0F7H ;RAM MODE DB "RAM" ; DB 0F8H ;ROM MODE DB "ROM" ; DB 0F9H ;INTELLIGENT PROM PROGRAMMING DB "FPROG" ; DB 0FFH ;END OF TABLE ;