File DEMO.

Directory of image this file is from
This file as a plain text file

	FILE	<P A G E 8   D E M O> 
	TITLE	PAGE8 DEMONSTRATION PROGRAM RUN
/
/	THIS PROGRAM SHOWS A LARGE NUMBER OF FEATURES IN PAGE8
/	IT OBVIOUSLY DOES NOT RUN (!) BUT IS WORTH STUDYING IN SOME DETAIL
/
/	NOTE THAT IN PAGE8, CONSTANTS ARE DECIMAL AND A LEADING ZERO SIGNIFIES
/	AN OCTAL CONSTANT. HOWEVER, A SINGLE 'RADIX 8' DIRECTIVE AT THE START
/	OF THE PROGRAM WILL FORCE ALL THOSE CONSTANTS TO BE OCTAL (AS IN PAL8)
/
	ORG	0200
	AS	84,-1		GENERATE 84 WORD BLOCK FILLED WITH -1
THIS:IS:A:VERY:LONG:SYMBOL:BUT:QUITE:LEGAL:IN:PAGE8 NOP
	DC	THIS:IS:A:VERY:LONG:SYMBOL:BUT:QUITE:LEGAL:IN:PAGE7	(OOPS)
  JMP THIS:IS:A:VERY:LONG:SYMBOL:BUT:QUITE:LEGAL:IN:PAGE8  GOT IT!
SKIP	SMA SZA SZL CLA		FLAGS INCORRECT OPERATING GROUPING
	DC	-1024/3		PERFORMS SIGNED ARITHMETIC
	DC	-5.LT.3		AND SIGNED RELATIONAL OPERATIONS
	DC	(-5.XO.04000).LT.(3.XO.04000) SHOWS HOW TO DO UNSIGNED COMPARE
	DC	11,011,B'11',X'11',"11,'1   ALL KINDS OF CONSTANTS

/ / NORMALLY, CONSTANTS HAVE 'DC' IN OPERATION CODE FIELD, HOWEVER, / PAL8 FREE FORM (NO OPERATION CODE) IS PERMITTED AS SHOWN BELOW: / 4 5*39.XO.-1 TAGX 07777.AN.037 THIS IS THE NORMAL SYNTAX IN PAGE8 / TAGY, 07777&037 / BUT WE CAN MAKE IT LOOK LIKE PAL8 IF WE WISH / * ASTERISK IS ALSO PERMITTED TO START A COMMENT LINE / ORG 0372 TAD =5 CURRENT PAGE LITERALS JMP *+5 NOTE ADDRESS RECALCULATION PERFORMED BY PAGE8 TAG NOP JMP TAG-1 IN BOTH DIRECTIONS OF COURSE TAD TEMP FIELD ADDRESSING ERROR HERE CDF %TEMP SYMBOLIC FIELD ADDRESSING TAD TEMP STILL WON'T WORK TADI =TEMP THIS IS THE CORRECT FORM AFIELD 7 TELL PAGE8 WHERE DATA FIELD IS NOW TAD TAG-2 NOW THIS IS ILLEGAL AFIELD %* SET IT BACK AGAIN TAD TAG-2 NOW THIS IS LEGAL AGAIN RADIX 4 NOT TOO USEFUL(!) BUT ALLOWED DC 211131 A QUARTERNARY (?) CONSTANT RADIX D'10' (THIS IS WHY THERE ARE TYPED DECIMAL CONSTANTS) / JMP 2F LOCAL SYMBOLS HERE TAD 2F 2H DC 4 NOTE REFERENCE COUNT OF 3 POSTED TAD 2B (BACKWARDS REFERENCE) PART PARTITION LOCAL SYMBOLS TAD 2B GENERATES 'U' ERROR BECAUSE OF PARTITION / LOAD 0600 START A RELOCATED CODE SECTION DC TEMP NOTE '*' SIGNIFIES RELOCATED ADDRESSES NOP ORG * RESET LOCATION NOW / TAD #TEMP PAGE ZERO LITERAL / CIF %TEMP ONE WAY TO CROSS FIELDS JMPI =TEMP JMPX TEMP ANOTHER WAY TO DO THE SAME THING CIF %TEMP ERROR FLAGGED ON NEXT STATEMENT BECAUSE OF NOP POTENTIAL PAGE BREAK PROBLEM (WE COULD GET JMPI =TEMP A PAGE BREAK AFTER THE NOP! TITLE DEMONSTRATION OF EQU/SET, DSEC DSEC JMP TAG PAGING LINKS AND TAD =4 LITERALS ARE NOW FORCED THROUGH PAGE 0 ISEC 0 NOTE THAT NO PAGE ALIGNMENT OCCURS LISTC ALLOW CONDITIONAL CODE TO LIST / AIF 2+2.EQ.3+1,.TRUE SHOULD BE TRUE AND WE WILL BRANCH NOP LISTED (BECAUSE OF LISTC) GROPE NO 'O' ERROR BECAUSE IT MIGHT BE A MACRO .TRUE ANOP WHOSE DEFINITION WAS ALSO CONDITIONALIZED OUT / TEMP2 EQU 4 NORMAL WAY TO EQUATE SYMBOLS TEMP2 EQU 5 CAN'T REDEFINE A SYMBOL DEFINED WITH EQU TEMP2 SET 6 ALSO ILLEGAL IF FIRST DEFINED WITH EQU / TEMP3 SET 9 BUT IF IT IS DEFINED WITH SET TEMP3 SET 2 WE ARE PERMITTED TO REDEFINE IT TEMP3 EQU 4 AS LONG AS WE ALWAYS USE SET AND NOT EQU / LABEL QUT 5,01234 WE CAN EQUATE TO 15 BIT ADDRESS DC %LABEL AND REFERENCE THE FIELD ADDRESS OF THAT SYMBOL / TITLE DEMONSTRATION OF PAGE BREAK PROTECTION ORG 0771 NOP TEXT /PAGE8 DOESN'T BREAK TEXT STRINGS/ ORG 01171 NOP
DC 1,2,3,4,5,6,7,8,9 AND DOESN'T BREAK CONSTANT LISTS ORG 01371 NOP JMSX LABEL,1,2,3,4,5,6 OR IN-LINE SUBROUTINE CALLS TITLE DEMONSTRATION OF RUN-TIME '&' OPERATOR / NOW GENERATE A TEXT STRING THAT CONTAINS THE DATE ON WHICH / THIS PROGRAM WAS ASSEMBLED (USES & FEATURE) / DATE QUT 1,07666 EQUATE TO OS/8 DATE WORD ADDRESS MONTH EQU (&DATE.AN.07400).RS.8 THIS IS THE BINARY MONTH DAY EQU (&DATE.AN.0370).RS.3 AND THIS IS THE BINARY DAY / TEXT 'PROGRAM ASSEMBLED ON: ' BYTE (MONTH/10)+"@0,(MONTH.MO.10)+"@0 BYTE "@/,DAY/10+"@0 BYTE DAY.MO.10+"@0,"@/ BYTE "@7,(&DATE.AN.7)+"@0 DC 0 / / ANOTHER EXAMPLE OF & FEATURE. CREATE A RUN-TIME OPTION (/Z) TO CANCEL / THE EFFECT OF EJECT STATEMENTS (TO COMPRESS LISTINGS) / SWITCH QUT 1,07645 POINT AT DECODER SWITCHES AIF (&SWITCH.AN.02000).EQ.0,.NOZ BRANCH IF /Z NOT SET / / (WE USED /Z TO ASSEMBLE THIS PROGRAM SO WE WILL GET HERE) / ALIGN UNLINK EJECT REMOVE EJECT DEFINITION MACRO EJECT ; REDEFINE EJECT AS A MACRO ANOP ; THAT DOESN'T DO ANYTHING MSKIP ; ALLOW SKIP OF COURSE TO PRECEDE MEND .NOZED ANOP / EJECT NOTE THAT EJECT CARD JUST LOOKS LIKE A COMMENT LINK EJECT NOW RESTORE 'EJECT' TO PAGE8 OP CODE TABLES AIF (*.XO.04000).LT.(01000.XO.04000),.OK WE CAN DO OUR OWN CHECKS ERROR: PROGRAM HAS GONE ABOVE LOCATION 1000 .OK ANOP TITLE DEMONSTRATION OF SUBROUTINES/COROUTINES IN PAGE8 / SUBROUTINE EXAMPLES / OCTAL SUB NORMAL ENTRY NOP RET OCTAL NORMAL ON-PAGE RETURN ALIGN RET OCTAL NORMAL OFF-PAGE RETURN INC OCTAL WATCH!: THIS SUBROUTINE MUST HAVE MORE THAN 1 RET OCTAL EXIT POINT BECAUSE OF DESTRUCTIVE REFERENCE / JMS OCTAL ERROR POSTED BECAUSE OF UNPROTECTED CALL JMP GOOD (WE COULD GET A PAGE BREAK AFTER THE JMS JMP BAD / ROOM 4 BUT IF WE PROTECT IT PROPERLY JMS OCTAL WE DON'T GET THE ERROR GOOD JMP GOOD BAD JMP BAD / DECMAL SUB *+4 WE CAN FILL SECOND LOCATION WITH WHAT WE LIKE INCI DECMAL DESTRUCTIVE REFERENCES INVOLVING DECMAL INC DECMAL+1 DCAI DECMAL BUT NONE OF THEM ACTUALLY AFFECT THE RETURN RET DECMAL POINT ADDRESS JMS DECMAL NO ERROR POSTED (PAGE8 IS QUITE SMART!)
/ / COROUTINES ARE VERY CONVENIENT IN PAGE8. THIS IS WHAT THEY LOOK LIKE / ENTRY SUB ENTRY TO ONE COROUTINE EXIT SUB START EXIT HAS INITIAL COROUTINE LINKAGE RET ENTRY RETURN FROM THIS COROUTINE / START NOP MAIN LINE CODE IN THIS COROUTINE JMS EXIT CALL OTHER COROUTINE NOP JMS EXIT CALL OTHER COROUTINE JMP START TITLE DEMONSTRATION OF SEMANTIC AND SYNTACTIC ERROR DETECTION ORG UNDEFINED NOTE PHASE ERROR PROTECTION ON ILLEGAL REF. UNDEFINED EQU 05000 PAGE8 RECOGNIZES THE ERROR IN ALL PASSES / / DC ((((4+3)*-(7+1)+9.LT.3)) BALANCE OF PARENTHESES IS CHECKED DCA =TEMP A FEW SEMANTIC ODDITIES ARE ALSO FLAGGED DCAI =TEMP THIS OF COURSE IS REASONABLE JMP =TEMP BUT THIS ISN'T JMP -TEMP AND THIS IS CLEARLY WRONG TAD -TEMP AS IS THIS TAD =-TEMP BUT THIS IS FINE / DC 3564 WARNS THAT INTERNALLY, THIS IS A NEGATIVE # JMPI *+4 WARNS THAT WE MAY GET 'A' ERROR ON LATER / ASSEMBLIES IF PAGE BREAKS BADLY / TAD 460 GENERATES ERROR BECAUSE WE PROBABLY WANTED-- TAD =460 A LITERAL TAD $460 IF WE REALLY WANTED IT (SHAME) WE CAN DO IT JMP BUMP+2 ALSO HANDLES PREMATURELY BREAKING PAGES TAD TAG,4 ALSO CHECKS FOR SUPERFLOUS
SYTR QUT 6 AND MISSING FIELDS BUMP DC 01291 AND ALWAYS CHECKS FOR LEGAL DIGITS IN RADIX ALIGN NOCREF CANCEL CREF ACCUMULATION DC DECMAL,TEMP,TAG THESE REFERENCES ARE NOT IN THE CREF LIST CREF BACK ON AGAIN / AIF ?SYMB,.DEFINED IS SYMBOL DEFINED IN PRIOR STATEMENT? NOP NOTE: SYMB IS NOT DEFINED AND THERE IS NO PHASE ERROR .DEFINED ANOP SYMB EQU 1 NOW WE DEFINE THE SYMBOL AIF ?SYMB,.OK BUT IT IS NOW NOP ERROR: ASSEMBLER ERROR IF WE GET ERROR STARS HERE!!! .OK ANOP TITLE DEMONSTRATION OF PROGRAM SECTIONING FIELD 2 ORG 0200 / TEMP DC 0 JMS DECMAL SEMANTIC ERROR BECAUSE OF CROSS FIELD REF JMSX DECMAL THIS IS LEGAL JMSI =DECMAL LEGAL (PAGE8 WILL NOT CHECK FOR PRECEDING CIF) ALIGN FIELD 1 CAN'T GO BACKWARDS IN AN AREA ISEC 1 BUT WE CAN SWITCH ISEC AREAS FIELD 1 AND IT IS NOW LEGAL TO GO "BACK" ORG 02000 DC 4 MAINTAINS SEPARATE LOCATION COUNTERS ISEC 0 (AND PAGE MAP TABLES) DC 3 ISEC 1 DC 5 ISEC 0 NOP $SYMBOL EQU 4 SYMBOL IS MARKED AS GLOBAL DC SYMBOL DOLLAR ONLY APPEARS ON DEFINITION POINT EJECT FIELD 3 / / WE CAN EVEN 'RESERVE' OBJECT GAPS WHICH WILL BE SKIPPED OVER DURING / AUTOMATIC PAGING. / GAP 3,0600,256 SKIP 256 WORDS AT LOCATION 600 IN FIELD 3 / ORG 0370 FREE 4 FORCE AT LEAST 4 FREE LOCATIONS ON EACH NOP PAGE HERE NOP NOP NOP NOP NOP NOP NOP NOP FREE 0 RESTORE OPTIMAL PACKING DENSITY NOW ORG 0574 NOP NOP NOP (NOW AT 1200 BECAUSE OF 'GAP' DIRECTIVE ABOVE) NOP NOP NOP
TITLE DEMONSTRATION OF MACRO PROCESSOR / / FOLLOWING MACRO DEMONSTRATES A NESTED MACRO, AND A BACKWARDS ASSEMBLY / TRANSFER. IT SETS UP A TABLE OF 10 WORDS AS HEX DIGITS IN WHICH / EACH DIGIT IS ONE GREATER THAN THE PREVIOUS DIGIT, VIZ. X'012', X'345' / X'678', X'9AB', X'CDE', X'F01' ETC. THIS MACRO ALSO DEMONSTRATES / GENERATION OF NUMERIC STRINGS FROM SYMBOLIC ARGUMENTS (\ OPERATOR) / MACRO .TABLE :L SET 0 ; INITIALIZE LOOP COUNTER .LOOP .HEX \:L,\:L+1,\:L+2 ; GENERATE HEX NUMBER :L SET :L+3 ; ADVANCE COUNTER AIF :L.LT.30,.LOOP ; LOOP BACK IF MORE TO GO MEND / / THIS MACRO TAKES THREE ARGUMENTS AND GENERATES A 3, HEX DIGIT WORD / MACRO .HEX <ONE><TWO><THREE> ; THREE ARGUMENTS ARE THE DIGITS LISTM ; LIST THE ARGUMENTS DC ((<ONE>&X'F').LS.8)+((<TWO>&X'F').LS.4)+(<THREE>&X'F') NOLISTM ; MACRO EXPANSION LISTING OFF MEND / / NOW CALL THE MACRO TO GENERATE THE TABLE / .TABLE EJECT / / FOLLOWING MACRO DEMONSTRATES SYNTHESIS OF SYMBOLS FROM NUMERIC / ARGUMENTS AND SHOWS THE CHARACTER SCANNING DIRECTIVE ('MSCAN') / MACRO GENERATES A DISPATCH TABLE BASED ON FIRST TWO LETTERS OF ARGUMENT / MACRO .DISPAT <ARG> ; ARGUMENT IS THE TEXT STRING :A MSCAN 0,<ARG> ; SCAN OFF FIRST CHAR IN ARGUMENT :B MSCAN 1,<ARG> ; SCAN OFF 2ND CHAR IN ARGUMENT ! DC -"[:A[:B ; GENERATE MINUS 6-BIT ASCII VALUE JMP COM:[:A[:B ; GENERATE JUMP TO ROUTINE ADDRESS MEND / .DISPAT OPEN A NEW FILE .DISPAT CLOSE EXISTING FILE .DISPAT RETURN TO MONITOR / COM:OP HLT THESE ARE THE THREE ROUTINES THAT COM:CL HLT WILL BE CALLED BY THE ABOVE MACROS COM:RE HLT / TITLE DEMONSTRATION OF TOTAL PHASE ERROR PROTECTION FIELD 4 / / ONE FINAL AMUSING NOTE ON FORWARD REFERENCE ERROR CHECKING / THE FOLLOWING PAL8 CODE GENERATES DIFFERENT CODE AND DEFINITIONS / ON EACH OF THE THREE PASSES!! WITHOUT FLAGGING ANY ERRORS / / *200 / ZBLOCK T / T=. / / ON PASS 1, T HAS A VALUE OF 200 / ON PASS 2, T HAS A VALUE OF 400 / ON PASS 3, T HAS A VALUE OF 600 !!! / / THIS PARTICULAR EXAMPLE IS NOT LIKELY (!) BUT INCORRECT HANDLING / OF ZBLOCK BY PAL8 CAN CAUSE HORRENDOUS ERRORS ON QUITE LEGITIMATE / CODE / / THE PARALLEL PAGE8 CODE IS: / ORG 0200 AS T FORWARD REFERENCE IS KICKED OUT OF COURSE T EQU * AND WE DON'T EVEN GET A PHASE ERROR



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search