Blame | Last modification | View Log | Download | RSS feed
;**************************************************************;; This is the equate table for 8052 basic.;;**************************************************************;; The register to direct equates for CJNE instructions.;R0B0 EQU 0R1B0 EQU 1R2B0 EQU 2R3B0 EQU 3R4B0 EQU 4R5B0 EQU 5R6B0 EQU 6R7B0 EQU 7;; Register bank 1 contains the text pointer; and the arg stack pointer.;TXAL EQU 8 ;R0 BANK 1 = TEXT POINTER LOWASTKA EQU 9 ;R1 BANK 1 = ARG STACKTXAH EQU 10 ;R2 BANK 1 = TEXT POINTER HIGH;; Now five temporary locations that are used by basic.;TEMP1 EQU 11TEMP2 EQU 12TEMP3 EQU 13TEMP4 EQU 14TEMP5 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 LOWCSTKA EQU 17 ;R1 BANK 2 = CONTROL STACK POINTERRTXAH EQU 18 ;R2 BANK 2 = READ TEXT POINTER HIGH;; Now some internal system equates.;BOFAH EQU 19 ;START OF THE BASIC PROGRAM, HIGH BYTEBOFAL EQU 20 ;START OF THE BASIC PROGRAM, LOW BYTENULLCT EQU 21 ;NULL COUNTPHEAD EQU 22 ;PRINT HEAD POSITIONFORMAT 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;newpageOTS BIT 16 ;34.0-ON TIME INSTRUCTION EXECUTEDINPROG BIT 17 ;34.1-INTERRUPT IN PROCESSINTBIT BIT 18 ;34.2-INTERRUPT SET BITON_ERR BIT 19 ;34.3-ON ERROR EXECUTEDOTI BIT 20 ;34.4-ON TIME INTERRUPT IN PROGRESSLINEB BIT 21 ;34.5-LINE CHANGE OCCUREDINTPEN BIT 22 ;34.6-INTERRUPT PENDING BITCONB BIT 23 ;34.7-CAN CONTINUE IF SETGTRD BIT 24 ;35.0-READ GET LOCATIONLPB BIT 25 ;35.1-PRINT TO LINE PRINTER PORTCKS_B BIT 26 ;35.2-FOR PWM INTERRUPTCOB BIT 27 ;35.3-CONSOLE OUT BIT; 0 = SERIAL PORT; 1 = LINE PRINTERCOUB BIT 28 ;35.4-USER CONSOLE OUT BIT; 0 = SERIAL PORT; 1 = USER DRIVERINBIT BIT 29 ;35.5-INITIALIZATION BITCIUB BIT 30 ;35.6-USER CONSOLE IN BIT; 0 = SERIAL PORT; 1 = USER ROUTINESPINT BIT 31 ;35.7-SERIAL PORT INTERRUPTSTOPBIT BIT 32 ;36.0-PROGRAM STOP ENCOUNTEREDU_IDL BIT 33 ;36.1-USER IDLE BREAKINP_B BIT 34 ;36.2-SET DURING INPUT INSTRUCTION;DCMPXZ BIT 35 ;36.3-DCMPX ZERO FLAGARGF BIT 36 ;36.4-ARG STACK HAS A VALUERETBIT BIT 37 ;36.5-RET FROM INTERRUPT EXECUTEDI_T0 BIT 38 ;36.6-TRAP INTERRUPT ZERO TO MONUPB BIT 39 ;36.7-SET WHEN @ IS VALIDJKBIT BIT 40 ;37.0-WB TRIGGERENDBIT BIT 41 ;37.1-GET END OF PROGRAMUBIT BIT 42 ;37.2-FOR DIM STATEMENTISAV BIT 43 ;37.3-SAVE INTERRUPT STATUSBO BIT 44 ;37.4-BUBBLE OUTPUTXBIT BIT 45 ;37.5-EXTERNAL PROGRAM PRESENTC_BIT BIT 46 ;37.6-SET WHEN CLOCK RUNNINGDIRF BIT 47 ;37.7-DIRECT INPUT MODENO_C BIT 48 ;38.0-NO CONTROL CDRQ BIT 49 ;38.1-DMA ENABLEDBI BIT 50 ;38.2-BUBBLE INPUTINTELB BIT 51 ;38.3-INTELLIGENT PROM PROGRAMMINGC0ORX1 BIT 52 ;38.4-PRINT FROM ROM OR RAMCNT_S BIT 53 ;38.5-CONTROL S ENCOUNTEREDZSURP BIT 54 ;38.6-ZERO SUPRESSHMODE BIT 55 ;38.7-HEX MODE PRINTLP BIT P1.7 ;SOFTWARE LINE PRINTERDACK BIT P1.6 ;DMA ACKPROMV BIT P1.5 ;TURN ON PROM VOLTAGEPROMP BIT P1.4 ;PROM PULSEALED BIT P1.3 ;ALE DISABLET_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 3EHS_LEN EQU 3FHT_HH EQU 40HT_LL EQU 41HINTXAH EQU 42HINTXAL EQU 43HMT1 EQU 45HMT2 EQU 46HMILLIV EQU 47H ;TIMER LOCATIONSTVH EQU 48HTVL EQU 49HSAVE_T EQU 4AHSP_H EQU 4BH ;SERIAL PORT TIME OUTSP_L EQU 4CHCMNDSP EQU 4DH ;SYSTEM STACK POINTERIRAMTOP EQU 0FFH ;TOP OF RAMSTACKTP EQU 0FEH ;ARG AND CONTROL STACK TOPS;; The character equates;CR EQU 0DH ;CARRIAGE RETURNLF EQU 0AH ;LINE FEEDBELL EQU 07H ;BELL CHARACTERBS EQU 08H ;BACK SPACECNTRLC EQU 03H ;CONTROL CCNTRLD EQU 04H ;CONTROL DNULL EQU 00H ;NULL;newpage;; The internal system equates;LINLEN EQU 73 ;THE LENGTH OF AN INPUT LINEEOF EQU 01 ;END OF FILE CHARACTERASTKAH EQU 01 ;ASTKA IS IN PAGE 1 OF RAMCSTKAH EQU 00 ;CSTKA IS IN PAGE 0 OF RAMFTYPE EQU 01 ;CONTROL STACK "FOR"GTYPE EQU 02 ;CONTROL STACK "GOSUB"DTYPE EQU 03 ;DO-WHILE/UNTIL TYPEROMADR EQU 8000H ;LOCATION OF ROM;; The floating point equates;FPSIZ EQU 6 ;NO. OF BYTES IN A FLOATING NUMDIGIT EQU FPSIZ-2 ;THE MANTISSA OF A FLOATING NUMSTESIZ EQU FPSIZ+3 ;SIZE OF SYMBOL ADJUSTED TABLE ELEMENTFP_BASE EQU 1993H ;BASE OF FLOATING POINT ROUTINESPSTART EQU 512 ;START OF A PROGRAM IN RAMFSIZE EQU FPSIZ+FPSIZ+2+2+1;newpage;**************************************************************;USENT: ; User entry jump table;;**************************************************************;DW CMND1 ;(00, 00H)COMMAND MODE JUMPDW IFIX ;(01, 01H)CONVERT FP TO INTDW PUSHAS ;(02, 02H)PUSH VALUE ONTO ARG STACKDW POPAS ;(03, 03H)POP VALUE OFF ARG STACKDW PG1 ;(04, 04H)PROGRAM A PROMDW INLINE ;(05, 05H)INPUT A LINEDW UPRNT ;(06, 06H)PRINT A LINRDW CRLF ;(07, 07H)OUTPUT A CRLF;;**************************************************************;; This is the operation jump table for arithmetics;;**************************************************************;OPTAB: DW ALPAR ;(08, 08H)LEFT PARENDW AEXP ;(09, 09H)EXPONENTAIONDW AMUL ;(10, 0AH)FP MULDW AADD ;(11, 0BH)FLOATING POINT ADDDW ADIV ;(12, 0CH)FLOATING POINT DIVIDEDW ASUB ;(13, 0DH)FLOATING POINT SUBTRACTIONDW AXRL ;(14, 0EH)XORDW AANL ;(15, 0FH)ANDDW AORL ;(16, 10H)ORDW ANEG ;(17, 11H)NEGATEDW AEQ ;(18, 12H)EQUALDW AGE ;(19, 13H)GREATER THAN OR EQUALDW ALE ;(20, 14H)LESS THAN OR EQUALDW ANE ;(21, 15H)NOT EQUALDW ALT ;(22, 16H)LESS THANDW AGT ;(23, 17H)GREATER THAN;newpage;***************************************************************;; This is the jump table for unary operators;;***************************************************************;DW AABS ;(24, 18H)ABSOLUTE VALUEDW AINT ;(25, 19H)INTEGER OPERATORDW ASGN ;(26, 1AH)SIGN OPERATORDW ANOT ;(27, 1BH)ONE'S COMPLEMENTDW ACOS ;(28, 1CH)COSINEDW ATAN ;(29, 1DH)TANGENTDW ASIN ;(30, 1EH)SINEDW ASQR ;(31, 1FH)SQUARE ROOTDW ACBYTE ;(32, 20H)READ CODEDW AETOX ;(33, 21H)E TO THE XDW AATAN ;(34, 22H)ARC TANGENTDW ALN ;(35, 23H)NATURAL LOGDW ADBYTE ;(36, 24H)READ DATA MEMORYDW AXBYTE ;(37, 25H)READ EXTERNAL MEMORYDW PIPI ;(38, 26H)PIDW ARND ;(39, 27H)RANDOM NUMBERDW AGET ;(40, 28H)GET INPUT CHARACTERDW AFREE ;(41, 29H)COMPUTE #BYTES FREEDW ALEN ;(42, 2AH) COMPUTE LEN OF PORGRAMDW AXTAL ;(43, 2BH) CRYSTALDW PMTOP ;(44, 2CH)TOP OF MEMORYDW ATIME ;(45, 2DH) TIMEDW A_IE ;(46, 2EH) IEDW A_IP ;(47, 2FH) IPDW ATIM0 ;(48, 30H) TIMER 0DW ATIM1 ;(49, 31H) TIMER 1DW ATIM2 ;(50, 32H) TIMER 2DW AT2CON ;(51, 33H) T2CONDW ATCON ;(52, 34H) TCONDW ATMOD ;(53, 35H) ATMODDW ARCAP2 ;(54, 36H) RCAP2DW AP1 ;(55, 37H) P1DW APCON ;(56, 38H) PCONDW EXPRB ;(57, 39H) EVALUATE AN EXPRESSIONDW AXTAL1 ;(58, 3AH) CALCULATE CRYSTALDW LINE ;(59, 3BH) EDIT A LINEDW PP ;(60, 3CH) PROCESS A LINEDW UPPL-3 ;(61, 3DH) UNPROCESS A LINEDW VAR ;(62, 3EH) FIND A VARIABLEDW GC ;(63, 3FH) GET A CHARACTERDW GCI ;(64, 40H) GET CHARACTER AND INCREMENTDW INCHAR ;(65, 41H) INPUT A CHARACTERDW CRUN ;(66, 42H) RUN A PROGRAMnewpageOPBOL: DB 1 ;;DB 15 ;LEFT PARENDB 14 ;EXPONENTIAN **DB 10 ;MULDB 8 ;ADDDB 10 ;DIVIDEDB 8 ;SUBDB 3 ;XORDB 5 ;ANDDB 4 ;ORDB 12 ;NEGATEDB 6 ;EQDB 6 ;GTDB 6 ;LTDB 6 ;NEDB 6 ;LEDB 6 ;GE;UOPBOL: DB 15 ;AABSDB 15 ;AAINTDB 15 ;ASGNDB 15 ;ANOTDB 15 ;ACOSDB 15 ;ATANDB 15 ;ASINDB 15 ;ASQRDB 15 ;ACBYTEDB 15 ;E TO THE XDB 15 ;AATANDB 15 ;NATURAL LOGDB 15 ;DBYTEDB 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 ;RUNDW CLIST ;LISTDW CNULL ;NULLDW CNEW ;NEWDW CCONT ;CONTINUEDW CPROG ;PROGRAM A PROMDW CXFER ;TRANSFER FROM ROM TO RAMDW CRAM ;RAM MODEDW CROM ;ROM MODEDW CIPROG ;INTELLIGENT PROM PROGRAMMING;newpage;***************************************************************;; This is the statement jump table.;;**************************************************************;STATD: ;DW SLET ;LET 80HDW SCLR ;CLEAR 81HDW SPUSH ;PUSH VAR 82HDW SGOTO ;GO TO 83HDW STONE ;TONE 84HDW SPH0 ;PRINT MODE 0 85HDW SUI ;USER INPUT 86HDW SUO ;USER OUTPUT 87HDW SPOP ;POP VAR 88HDW SPRINT ;PRINT 89HDW SCALL ;CALL 8AHDW SDIMX ;DIMENSION 8BHDW STRING ;STRING ALLO 8CHDW SBAUD ;SET BAUD 8DHDW SCLOCK ;CLOCK 8EHDW SPH1 ;PRINT MODE 1 8FH;; No direct mode from here on;DW SSTOP ;STOP 90HDW SOT ;ON TIME 91HDW SONEXT ;ON EXT INT 92HDW SRETI ;RET FROM INT 93HDW S_DO ;DO 94HDW SRESTR ;RESTOR 95HDW WCR ;REM 96HDW SNEXT ;NEXT 97HDW SONERR ;ON ERROR 98HDW S_ON ;ON 99HDW SINPUT ;INPUT 9AHDW SREAD ;READ 9BHDW FINDCR ;DATA 9CHDW SRETRN ;RETURN 9DHDW SIF ;IF 9EHDW SGOSUB ;GOSUB 9FHDW SFOR ;FOR A0HDW SWHILE ;WHILE A1HDW SUNTIL ;UNTIL A2HDW CMND1 ;END A3HDW I_DL ;IDLE A4HDW ST_A ;STORE AT A5HDW LD_A ;LOAD AT A6HDW PGU ;PGM A7HDW RROM ;RUN A ROM A9H;newpage;**************************************************************;TOKTAB: ; This is the basic token table;;**************************************************************;; First the tokens for statements;DB 80H ;LET TOKENDB "LET";DB 81H ;CLEAR TOKENDB "CLEAR";DB 82H ;PUSH TOKENDB "PUSH";T_GOTO EQU 83H;DB 83H ;GO TO TOKENDB "GOTO";DB 84H ;TOGGLE TOKENDB "PWM";DB 85H ;PRINT HEX MODE 0DB "PH0.";DB 86H ;USER IN TOKENDB "UI";DB 87H ;USER OUT TOKENDB "UO";DB 88H ;POP TOKENDB "POP";newpageDB 89H ;PRINT TOKENDB "PRINT"DB 89HDB "P." ;P. ALSO MEANS PRINTDB 89H ;? ALSODB '?';DB 8AH ;CALL TOKENDB "CALL";DB 8BH ;DIMENSION TOKENDB "DIM";DB 8CH ;STRING TOKENDB "STRING";DB 8DH ;SET BAUD RATEDB "BAUD";DB 8EH ;CLOCKDB "CLOCK";DB 8FH ;PRINT HEX MODE 1DB "PH1.";T_STOP EQU 90H ;STOP TOKENDB T_STOPDB "STOP";T_DIR EQU T_STOP ;NO DIRECT FROM HERE ON;DB T_STOP+1 ;ON TIMER INTERRUPTDB "ONTIME";DB T_STOP+2 ;ON EXTERNAL INTERRUPTDB "ONEX1";DB T_STOP+3 ;RETURN FROM INTERRUPTDB "RETI";DB T_STOP+4 ;DO TOKENDB "DO";DB T_STOP+5 ;RESTORE TOKENDB "RESTORE";newpageT_REM EQU T_STOP+6 ;REMARK TOKENDB T_REMDB "REM";DB T_REM+1 ;NEXT TOKENDB "NEXT";DB T_REM+2 ;ON ERROR TOKENDB "ONERR";DB T_REM+3 ;ON TOKENDB "ON";DB T_REM+4 ;INPUTDB "INPUT";DB T_REM+5 ;READDB "READ";T_DATA EQU T_REM+6 ;DATADB T_DATADB "DATA";DB T_DATA+1 ;RETURNDB "RETURN";DB T_DATA+2 ;IFDB "IF";T_GOSB EQU T_DATA+3 ;GOSUBDB T_GOSBDB "GOSUB";DB T_GOSB+1 ;FORDB "FOR";DB T_GOSB+2 ;WHILEDB "WHILE";DB T_GOSB+3 ;UNTILDB "UNTIL";DB T_GOSB+4 ;ENDDB "END";newpageT_LAST EQU T_GOSB+5 ;LAST INITIAL TOKEN;T_TAB EQU T_LAST ;TAB TOKENDB T_TABDB "TAB";T_THEN EQU T_LAST+1 ;THEN TOKENDB T_THENDB "THEN";T_TO EQU T_LAST+2 ;TO TOKENDB T_TODB "TO";T_STEP EQU T_LAST+3 ;STEP TOKENDB T_STEPDB "STEP";T_ELSE EQU T_LAST+4 ;ELSE TOKENDB T_ELSEDB "ELSE";T_SPC EQU T_LAST+5 ;SPACE TOKENDB T_SPCDB "SPC";T_CR EQU T_LAST+6DB T_CRDB "CR";DB T_CR+1DB "IDLE";DB T_CR+2DB "ST@";DB T_CR+3DB "LD@";DB T_CR+4DB "PGM";DB T_CR+5DB "RROM";newpage; Operator tokens;T_LPAR EQU 0E0H ;LEFT PARENDB T_LPARDB '(';DB T_LPAR+1 ;EXPONENTIANDB "**";DB T_LPAR+2 ;FP MULTIPLYDB '*';T_ADD EQU T_LPAR+3DB T_LPAR+3 ;ADD TOKENDB '+';DB T_LPAR+4 ;DIVIDE TOKENDB '/';T_SUB EQU T_LPAR+5 ;SUBTRACT TOKENDB T_SUBDB '-';DB T_LPAR+6 ;LOGICAL EXCLUSIVE ORDB ".XOR.";DB T_LPAR+7 ;LOGICAL ANDDB ".AND.";DB T_LPAR+8 ;LOGICAL ORDB ".OR.";T_NEG EQU T_LPAR+9;T_EQU EQU T_LPAR+10 ;EQUALDB T_EQUDB '=';DB T_LPAR+11 ;GREATER THAN OR EQUALDB ">=";DB T_LPAR+12 ;LESS THAN OR EQUALDB "<=";DB T_LPAR+13 ;NOT EQUALDB "<>";DB T_LPAR+14 ;LESS THANDB '<';DB T_LPAR+15 ;GREATER THANDB '>';;T_UOP EQU 0B0H ;UNARY OP BASE TOKEN;DB T_UOP ;ABS TOKENDB "ABS";DB T_UOP+1 ;INTEGER TOKENDB "INT";DB T_UOP+2 ;SIGN TOKENDB "SGN";DB T_UOP+3 ;GET TOKENDB "NOT";DB T_UOP+4 ;COSINE TOKENDB "COS";DB T_UOP+5 ;TANGENT TOKENDB "TAN";DB T_UOP+6 ;SINE TOKENDB "SIN";DB T_UOP+7 ;SQUARE ROOT TOKENDB "SQR";DB T_UOP+8 ;CBYTE TOKENDB "CBY";DB T_UOP+9 ;EXP (E TO THE X) TOKENDB "EXP";DB T_UOP+10DB "ATN";DB T_UOP+11DB "LOG";DB T_UOP+12 ;DBYTE TOKENDB "DBY";DB T_UOP+13 ;XBYTE TOKENDB "XBY";T_ULAST EQU T_UOP+14 ;LAST OPERATOR NEEDING PARENS;DB T_ULASTDB "PI";DB T_ULAST+1 ;RND TOKENDB "RND";DB T_ULAST+2 ;GET TOKENDB "GET";DB T_ULAST+3 ;FREE TOKENDB "FREE";DB T_ULAST+4 ;LEN TOKENDB "LEN";T_XTAL EQU T_ULAST+5 ;CRYSTAL TOKENDB T_XTALDB "XTAL";T_MTOP EQU T_ULAST+6 ;MTOPDB T_MTOPDB "MTOP";T_IE EQU T_ULAST+8 ;IE REGISTERDB T_IEDB "IE";T_IP EQU T_ULAST+9 ;IP REGISTERDB T_IPDB "IP";TMR0 EQU T_ULAST+10 ;TIMER 0DB TMR0DB "TIMER0";TMR1 EQU T_ULAST+11 ;TIMER 1DB TMR1DB "TIMER1";TMR2 EQU T_ULAST+12 ;TIMER 2DB TMR2DB "TIMER2";T_TIME EQU T_ULAST+7 ;TIMEDB T_TIMEDB "TIME";TT2C EQU T_ULAST+13 ;T2CONDB TT2CDB "T2CON";TTC EQU T_ULAST+14 ;TCONDB TTCDB "TCON";TTM EQU T_ULAST+15 ;TMODDB TTMDB "TMOD";TRC2 EQU T_ULAST+16 ;RCAP2DB TRC2DB "RCAP2";T_P1 EQU T_ULAST+17 ;P1DB T_P1DB "PORT1";T_PC EQU T_ULAST+18 ;PCONDB T_PCDB "PCON";T_ASC EQU T_ULAST+19 ;ASC TOKENDB T_ASCDB "ASC(";T_USE EQU T_ULAST+20 ;USING TOKENDB T_USEDB "USING("DB T_USEDB "U.(";T_CHR EQU T_ULAST+21 ;CHR TOKENDB T_CHRDB "CHR(";newpageT_CMND EQU 0F0H ;COMMAND BASE;DB 0F0H ;RUN TOKENDB "RUN";DB 0F1H ;LIST TOKENDB "LIST";DB 0F2H ;NULL TOKENDB "NULL";DB 0F3H ;NEW TOKENDB "NEW";DB 0F4H ;CONTINUE TOKENDB "CONT";DB 0F5H ;PROGRAM TOKENDB "PROG";DB 0F6H ;TRANSFER TOKENDB "XFER";DB 0F7H ;RAM MODEDB "RAM";DB 0F8H ;ROM MODEDB "ROM";DB 0F9H ;INTELLIGENT PROM PROGRAMMINGDB "FPROG";DB 0FFH ;END OF TABLE;