**************************************************************** * * * * * PINTERP : 8080/Z80 P_CODE INTERPRETER. * * (C) COPYRIGHT 1978, STANFORD LINEAR ACCELERATOR CENTER. * * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * * * THIS IS AN 8080/Z80 INTERPRETER FOR THE P_CODE GENERATED * BY THE SLAC MICRO PASCAL COMPILER/POST_PROCESSOR. IT ALSO * 'DEFINES' THE SIMULATED STACK COMPUTER, THE SO CALLED "P" * MACHINE, ITS ORGANIZATION AS WELL AS ITS INSTRUCTION SET. * * IN ORDER TO RELOCATE THIS PROGRAM AND/OR CHANGE THE AREA * ALLOCATED FOR THE P_CODE BEING INTERPRETED, LOOK UNDER THE * "GLOBAL DEFINITIONS" HEADING. BOTH THE INTERPRETER AND * THE P_CODE AREA MAY BE RELOCATED FREELY AND THE * INTERPRETER DOES NOT USE ANY OF THE "RST" INSTRUCTIONS. * * THE FOUR ROUTINES "GCH", "PCHG", "OPN", AND "CLS" ARE ARE * PROTOTYPES FOR SPECIFYING THE NECCESSARY I/O INTERFACE AND * THEY HAVE TO BE REPLACED BY THE ACTUAL ENTRY POINTS * PROVIDED BY THE HOST MACHINE'S FILE SYSTEM. THESE ROUTINES * BASICALLY PROVIDE GET, PUT, OPEN AND CLOSE OPERATIONS ON * PASCAL FILES. NOTE THAT A "255" (HEX FF) INPUT VALUE IS * USED TO INDICATE THE "END OF FILE" CONDITION ON THE * CORRESPONDING FILE. * * THE FLOATING POINT INSTRUCTIONS OF THE "P" MACHINE ARE NOT * IMPLEMENTED IN THIS VERSION OF THE INTERPRETER. * * * SASSAN HAZEGHI * LICHEN WANG * * STANFORD LINEAR ACCELERATOR CENTER * STANFORD, CA 94305. * * MARCH 1978. * * * * * **************************************************************** * * TITL 8080/Z80 P_CODE INTERPRETER * *************************************************** * * GLOBAL DEFINITIONS, INCLUDING STORAGE LAYOUT * *************************************************** * INTRPORG EQU 07A00H ORIGIN FOR THE INTERPRETER (THIS PROG.) PCODORG EQU 00100H BEGINING OF USER P_CODE *PCODORG EQU 0D000H FOR 64K FULL SIZED SYSTEMS. ** IOCOM(UNICATION) AREA IS DEFINED ** AT THE END OF THE INTERPRETER CODE AND TO AVOIDE FORWARD ** REFERENCE PROBLEM THE FOLLOWING SYMBOLS ARE (RE) DEFINED ** THERE. **IOCOM EQU INTERPORG+940H I/O COMMUNICATION AREA **STNDXIT EQU IOCOM+040H **ERRXIT EQU IOCOM+040H INTERPRETER ERROR EXIT ** HEAPEND EQU 07AH LAST PAGE AVAILABLE TO THE PASCAL PROGRAM *ISTK EQU OPCTBL INTERPRETER'S STACK GROWS FROM THE * BEGINING OF OPCODE TABLE TOWARDS * THE LOW MEMORY. * *PSTK EQU ? PCODE STACK GROWS UP FROM END OF * USER PROGRAM TOWARDS HIGH MEMORY. * * ************************************************************ * * INTERPRETERS LOCAL VARIABLES AND CONSTANTS * ************************************************************ * * EPADR EQU PCODORG ADDRESS OF THE ENTRY POINT TO USER PROG PCODLEN EQU EPADR+2 LENGTH OF THE USER PROGRAM PSTKORG EQU EPADR+4 LENGTH OF USER PROC. TABLE PSTKEND EQU EPADR+6 SIZE OF THE USER STACK AREA MSTAREA EQU 8 ENDLINE EQU 1 ENDFILE EQU 3 BUFAREA EQU 8 FLGAREA EQU BUFAREA SPACE FOR EOF/ELN FLAGS ENTAREA EQU 10 TRUE EQU 1 FALSE EQU 0 READOPN EQU 0 'OPEN' CODE FOR READ WRITOPN EQU 1 'OPEN' CODE FOR WRITE BIASS EQU 32 BIASS VALUE, CONVERT ASCII TO INT. CODE SPACE EQU 32 ASCZER EQU 48 ASCNIN EQU 57 ASCPLU EQU 43 ASCMIN EQU 45 LF EQU 10 ASCII 'LF' CR EQU 13 ASCII 'CR' EOT EQU 4 ASCII 'EOT' ASCEOF EQU 0FFH END OF FILE CHAR * * END OF INTERPRETERS LOCAL CONSTANTS AND VARIABLS * * ************************************************************ * * BODY OF THE P_CODE INTERPRETER * ************************************************************ * ORG INTRPORG * INTERP LXI H,0 DAD SP LXI SP,ISTK INITIALIZE INTERPRETER STACK POINTER PUSH H SAVE OLD STAK POINTER * CALL SETUP SET UP THE ENVIRONMENT FOR P_P MACHINE * *** FETCH *** * * FETCH THE NEXT Z_CODE AND DECODE * BC IS Z_PC, DE IS Z_SP * FETCH INX B FET1 LDAX B MVI H,