.TITLE PFISC - FIS CODE IMPLEMENTATION .IDENT /790801/ ; REGISTER USAGE ; R0,R1 - SCRATCH ; .PSECT $$$210::;POP THE FIS STACK TO THE ADDRESS AT SP+2 ; MOV R0,-(SP) ;SAVE R0 MOV R1,-(SP) ;SAVE R1 MOV REG,R1 ;CURRENT TOP OF FIS STACK CMP R1,#FISHGH ;IS THE STACK EMPTY?? BHI FISERH MOV 6(SP),R0 ;ADDRESS TO STORE TOP VALUE MOV (R1)+,(R0)+ ;MOVE HIGH PART MOV (R1)+,(R0)+ ;MOVE LOW PART MOV R1,REG ;NEW CURRENT TOP OF FIS STACK FISRET: MOV (SP)+,R1 ;RESTORE R1 MOV (SP)+,R0 ;RESTORE R0 MOV (SP)+,(SP) ;PUSH DOWN RETURN ADDRESS RTS PC ;RETURN TO CALLER FISERH: WARN BR FISRET $$$211::;PUSH ON THE FIS STACK THE FLOATING OPERAND POINTED ;TO BY THE ADDRESS AT SP+2 ; MOV R0,-(SP) ;SAVE R0 MOV R1,-(SP) ;SAVE R1 MOV REG,R1 ;CURRENT TOP OF FIS STACK CMP R1,#FISLOW+4 ;IS THERE ROOM FOR ANOTHER VALUE BLO FISERL MOV 6(SP),R0 ;ADDRESS OF VALUE MOV 2(R0),-(R1) ;PUSH LOW PART MOV (R0),-(R1) ;PUSH HIGH PART MOV R1,REG ;NEW CURRENT TOP OF FIS STACK BR FISRET FISERL: WARN BR FISRET $$$212::;PUSH DOWN FIS STACK POINTER AND RETURN ADDRESS OF ;THE CURRENT TOP OF THE FIS STACK ; MOV (SP),-(SP) ;PUSH UP RETURN TO MAKE ROOM MOV R0,-(SP) ;SAVE R0 MOV REG,R0 ;CURRENT TOP OF FIS STACK CMP R0,#FISLOW+4 ;IS THERE ENOUGH ROOM FOR VALUE BLO FISERL CMP -(R0),-(R0) ;ADJUST FIS STACK POINTER MOV R0,4(SP) ;RETURN THE ADDRESS OF TOP OF FIS STACK MOV R0,REG ;NEW CURRENT TOP OF FIS STACK MOV (SP)+,R0 ;RESTORE R0 RTS PC $$$213::;PUSH ON THE FIS STACK THE FLOATING OPERAND ;ON TOP OF THE STACK MOV R1,-(SP) ;SAVE R1 MOV REG,R1 ;CURRENT TOP OF FIS STACK CMP R1,#FISLOW+4 ;IS THERE ROOM FOR ANOTHER VALUE BLO FISERL ;NO MOV 6(SP),-(R1) ;PUSH LOW PART MOV 4(SP),-(R1) ;PUSH HIGH PART MOV R1,REG ;NEW CURRENT TOP OF FIS STACK MOV (SP)+,R1 ;RESTORE R1 MOV (SP)+,2(SP) ;PUSH DOWN RETURN TST (SP)+ ;POP OFF OTHER WORD RTS PC $$$214::;POP FROM FIS STACK TO SP STACK MOV (SP),-(SP) ;MAKE ROOM FOR VALUE MOV (SP),-(SP) ;; MOV R1,-(SP) ;SAVE R1 MOV REG,R1 ;CURRENT TOP OF FIS STACK CMP R1,#FISHGH ;IS THE STACK EMPTY? BHI FISERH ;YES MOV (R1)+,4(SP) ;MOVE HIGH PART MOV (R1)+,6(SP) ;MOVE LOW PART MOV R1,REG ;NEW CURRENT TOP OF FIS STACK MOV (SP)+,R1 ;RESTORE R1 RTS PC ;FLOATING ADD,SUB,MUL,DIV, AND SQR OPERATIONS ;THEY USE A COMMON ENTRY AND EXIT ROUTINE FSET: MOV (SP),-(SP) ;MAKE PLACE TO STORE R0 MOV R0,2(SP) ;SAVE R0 MOV REG,R0 ;CURRENT TOP OF FIS STACK RTS PC FRET: MOV R0,REG ;NEW CURRENT TOP OF FIS STACK MOV (SP)+,R0 ;RESTORE R0 RTS PC $$$215::;FLOATING ADD JSR PC,FSET ;SET UP FIS STACK POINTER FADD R0 ;ADD TWO TOP ELEMENTS OF STACK BR FRET ;RETURN $$$216::;FLOATING SUBTRACT JSR PC,FSET ;SET UP FIS STACK POINTER FSUB R0 ;SUBTRACT TOP ELEMENT OF STACK BR FRET ;RETURN $$$217::;FLOATING MULTIPLY JSR PC,FSET ;SET UP FIS STACK POINTER FMUL R0 ;MULTIPLY TOP ELEMENTS OF STACK BR FRET ;RETURN $$$218::;FLOATING DIVIDE JSR PC,FSET ;SET UP FIS STACK POINTER FDIV R0 ;DIVIDE TOP ELEMENT OF STACK BR FRET ;RETURN $$$202::;FLOATING SQUARE JSR PC,FSET MOV 2(R0),-(R0) ;ADD COPY OF VALUE TO STACK MOV 2(R0),-(R0) ;; FMUL R0 ;TOP VALUE IS NOW SQUARE OF FORMER BR FRET ;RETURN .PAGE .EVEN ; FOLLOWING PSECT DEFINES THE FIS STACK STRUCTURE .PSECT $$$FIS,RW,GBL,OVR REG: .WORD FISHGH FISLOW: .BLKW 100. FISHGH=. .END