> On Dec 31, 2017, at 10:21 AM, Paul Koning via cctalk <cctalk@classiccmp.org> > wrote: > > ... >> >> Ah; it must busy loop at loops spread across the address space? Clever! >> (Perhaps using the mapping hardware so that it doesn't use too much _actual_ >> memory.) Is the source available? > > Correct, it uses the MMU so it only needs 64 bytes of table space to get the > low order bits right. See attached.
Ok, so the list stripped the attachment. Try it this way. paul .INCLUDE /CMN:COMMON/ TITLE LIGHTS,<FANCY NULL JOB>,0A,10-MAY-91,MHB/ABC/WBN ; ; COPYRIGHT (c) 1974, 1991 BY ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ; ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE ; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER ; COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ; OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY ; TRANSFERRED. ; ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE ; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT ; CORPORATION. ; ; DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. ; .SBTTL EDIT HISTORY FOR LIGHTS ;+ ; ; 000 RRF 06-MAR-81 CREATION - COPIED FROM V7.0-07 ; ;- DEFORG LIGHTS .SBTTL A FANCY NULL JOB ; NEEDED DEFINITIONS SISDR0 = 172200 ;SUPERVISOR INSTRUCTION DESC REG 0 SISAR0 = 172240 ;SUPERVISOR INSTRUCTION ADDR REG 0 PS = 177776 ;PROCESSOR STATUS ORG NULJOB ; INITIAL ENTRY POINT NULJOB: BIT #004000,@#PS ;DO WE HAVE SUPERVISOR MODE (2 REG SETS)? BNE 30$ ;YES, DO IT FANCY... ; THE SIMPLE NULL JOB 10$: MOV R2,R1 ;RELOAD THE WAIT COUNTER 20$: WAIT ;DISPLAY THE LIGHTS (R0) A WHILE SOB R1,20$ ;KEEP WAITING ROL R0 ;ELSE SHIFT PATTERN 1 PLACE LEFT BR 10$ ; AND AROUND AGAIN... ; FANCY NULL JOB SETUP 30$: MOV #176000,R3 ;PRE-SET THE MEM ADR LIGHT PATTERN MOV (PC)+,R4 ;GET DESC REG VALUE FOR .BYTE 4!2,128.-1 ; R/W AND 4K MOV #SISDR0,R5 ;POINT TO SUPERVISOR DESC REGS MOV R4,(R5)+ ;LOAD SISDR0 WITH 4K AND R/W MOV R4,(R5)+ ;LOAD SISDR1 WITH 4K AND R/W MOV R4,(R5)+ ;LOAD SISDR2 WITH 4K AND R/W MOV R4,(R5)+ ;LOAD SISDR3 WITH 4K AND R/W MOV #177600,SISAR0-SISDR0(R5) ;LOAD PAR4 FOR THE I/O PAGE MOV R4,(R5)+ ;LOAD SISDR4 WITH 4K AND R/W MOV #40$,R1 ;FORM A MMU ADDRESS ASH #-6,R1 ; THAT WILL MAP OUR CODE BIC #^C<001777>,R1 ; IN SUPERVISOR MODE MOV R1,SISAR0-SISDR0(R5) ;LOAD MMU ADDRESS FOR PAR5 (CODE) MOV (PC)+,(R5)+ ;LOAD SISDR5 WITH .BYTE 2,128.-1 ; R-O AND 4K CLR (R5)+ ;LOAD SISDR6 WITH "ABORT" MOV R4,(R5)+ ;LOAD SISDR7 WITH 4K AND R/W MOV #000340,@#PS ;;;WE CAN'T AFFORD AN INTERRUPT HERE MOV #054040,-(SP) ;;;NEW PS OF SUPERVISOR MODE @ PR1 MOV #40$,-(SP) ;;;NEW PC OF OUR ROUTINE BIC #^C<77>,(SP) ;;; CORRECTED FOR RUNNING BIS #120000,(SP) ;;; OUT OF PAR5 RTI ;;;DROP INTO SUPERVISOR MODE!!! ; THE FANCY NULL JOB 40$: MOV R3,R1 ;COPY PATTERN FOR MEM ADR LIGHTS BIC #^C<077776>,R1 ; AND ENSURE AN HONEST ADDRESS CLR R4 ;CLEAR A HIGH ORDER MOV R1,R5 ; AND SET LOW ORDER AS ADDRESS ASHC #3,R4 ;EXTRACT THE APR # ASL R4 ; AND FORM APR # TIMES 2 ADD #SISAR0-160000+100000,R4 ;FIND PAR TO USE (I/O PAGE = PAR4) ASH #-3,R5 ;CORRECT THE VIRTUAL ADDRESS BIC #^C<017700>,R5 ; AND ISOLATE OFFSET WITHIN PAR NEG R5 ;SUBTRACT OFFSET WITHIN PAR ADD #70$,R5 ; FROM OUR WORK TABLE ASH #-6,R5 ;FIND THAT AS A MMU ADDRESS BIC #^C<001777>,R5 ; WITH NO SIGN EXTENSION MOV R5,(R4) ;LOAD CORRECT PAR WITH CORRECT ADDRESS BIT R4,#16 ;ARE WE USING PAR0? BNE 50$ ;NO ADD #20,R4 ;YES, CORRECT FOR PAR7 NEXT 50$: SUB #200,R5 ;GO BACKWARDS 4K MOV R5,-(R4) ; AND LOAD NEXT LOWER PAR WITH THAT MOV (PC)+,(R1) ;LOAD THE RETURN INSTRUCTION JMP (R4) ; WHICH IS JUMP THROUGH R4 MOV (PC)+,-(R1) ;LOAD THE WAITING INSTRUCTION WAIT ; WHICH IS WAIT MOV R2,R5 ;REFRESH WAIT COUNTER MOV PC,R4 ;SET THE RETURN ADDRESS CMP (R4)+,(R4)+ ; FOR WAITING DONE (PIC) 60$: JMP (R1) ;GO OFF AND DISPLAY LIGHTS... SOB R5,60$ ;DO UNTIL TIME'S UP ASL R0 ;SHIFT LIGHTS 1 PLACE LEFT ROR R3 ; AND BACK THROUGH MEMORY LIGHTS ADC R0 ; WITH A CARRY BR 40$ ;FROM THE TOP... .BLKB 100 ;RESERVE WORK SPACE 70$: .BLKB 100 ;RESERVE WORK SPACE .END