You are on page 1of 12

PAROMA IDNT 1,2 OPT CL,MC,MD,MEX,CEX INCLUDE MACROS.

INC ENTRY RDHAND INTEGER*2 VARIABLE * reads the handshake data for SENSOR PP - hibyte = A0B0 / lobyte = A1B1 * FORTRAN CALLING SEQUENCE: CALL RDHAND(integer*2 VAR) RDHAND EQU * SAVREG LEA.L SPPH,A1 A1 loaded with addr SENSOR PP HAND. MOVEA.L 4(A5),A0 A0 loaded with address of first op MOVEQ #0,D0 zero out D0 MOVE.W (A1),(A0) store the result RSTREG FNRET 1 RDHAND return ENTRY FRDHND INTEGER*2 VARIABLE FRDHND EQU * PEA SCRLWRD JSR RDHAND MOVE.L (A7)+,D0 FNRET 1 FRDHND return * ENTRY RDHND0 INTEGER*1 VARIABLE ports A0&B0 * FORTRAN CALLING SEQUENCE: CALL RDHND0(integer*1 VAR) RDHND0 EQU * SAVREG LEA.L SPPH0,A1 A1 loaded with addr SENSOR PP HAND. MOVEA.L 4(A5),A0 A0 loaded with address of first op MOVEQ #0,D0 zero out D0 MOVE.B (A1),(A0) store the result RSTREG FNRET 1 RDHND0 return ENTRY FRDHN0 INTEGER*1 VARIABLE FRDHN0 EQU * PEA SCRLWRD JSR RDHND0 MOVE.L (A7)+,D0 FNRET 1 FRDHN0 return * ENTRY RDHND1 INTEGER*1 VARIABLE * FORTRAN CALLING SEQUENCE: CALL RDHND1(integer*1 VAR) RDHND1 EQU * SAVREG LEA.L SPPH1,A1 A1 loaded with addr SENSOR PP HAND. MOVEA.L 4(A5),A0 A0 loaded with address of first op MOVEQ #0,D0 zero out D0 MOVE.B (A1),(A0) store the result RSTREG FNRET 1 RDHND1 return ENTRY FRDHN1 INTEGER*1 VARIABLE FRDHN1 EQU * PEA SCRLWRD JSR RDHND1 MOVE.L (A7)+,D0 FNRET 1 FRDHN1 return * ENTRY WTCTRL INTEGER*2 VARIABLE * hibyte is A0/B0 control, lobyte is A1/B1 control * FORTRAN CALLING SEQUENCE: CALL WTCTRL(integer*2 VAR) * Within each control byte: BIT7 MUST BE 1 * BIT6 & BIT5 are A mode select: 00 = Mode 0,

* * * * * WTCTRL EQU * SAVREG LEA.L SPPC,A1 MOVEA.L 4(A5),A0 MOVEQ #0,D0 MOVE.W (A0),(A1) RSTREG FNRET 1 ENTRY WTCTL0 * FORTRAN CALLING SEQUENCE: WTCTL0 EQU * SAVREG LEA.L SPPC0,A1 MOVEA.L 4(A5),A0 MOVEQ #0,D0 MOVE.B (A0),(A1) RSTREG FNRET 1 ENTRY WTCTL1 * FORTRAN CALLING SEQUENCE: WTCTL1 EQU * SAVREG LEA.L SPPC1,A1 MOVEA.L 4(A5),A0 MOVEQ #0,D0 MOVE.B (A0),(A1) RSTREG FNRET 1 * ENTRY RDPPA * FORTRAN CALLING SEQUENCE: RDPPA EQU * SAVREG LEA.L SPPA,A1 MOVEA.L 4(A5),A0 MOVEQ #0,D0 MOVE.W (A1),(A0) RSTREG FNRET 1 ENTRY FRDPPA FRDPPA EQU * PEA SCRLWRD JSR RDPPA MOVE.L (A7)+,D0 FNRET 1 ENTRY RDPPA0 * FORTRAN CALLING SEQUENCE: RDPPA0 EQU * SAVREG LEA.L SPPA0,A1 MOVEA.L 4(A5),A0 MOVEQ #0,D0 MOVE.B (A1),(A0) RSTREG FNRET 1

BIT4 BIT2 BIT1 BITS

A B B 3

01 = Mode 1, 1X = Mode 2 direction: 0 = Output, 1 = Input mode control: 0 = Mode 0, 1 = Mode 1 direction: 0 = Output, 1 = Input & 0 are port C control and thus irrelevant A1 loaded with addr SENSOR PP CTRL. A0 loaded with address of first op zero out D0 store the result

WTCTRL return INTEGER*1 VARIABLE CALL WTCTL0(integer*1 VAR) A1 loaded with addr SENSOR PP CTRL.0 A0 loaded with address of first op zero out D0 store the result WTCTL0 return INTEGER*1 VARIABLE CALL WTCTL1(integer*1 VAR) A1 loaded with addr SENSOR PP CTRL.1 A0 loaded with address of first op zero out D0 store the result WTCTL1 return INTEGER*2 VARIABLE CALL RDPPA(integer*2 VAR) A1 loaded with addr SENSOR PP A PORT A0 loaded with address of first op zero out D0 store the result RDPPA return

FRDPPA return INTEGER*1 VARIABLE CALL RDPPA0(integer*1 VAR) A1 loaded with addr SENSOR PP A0 PORT A0 loaded with address of first op zero out D0 store the result RDPPA0 return

ENTRY FRPPA0 FRPPA0 EQU * PEA SCRLWRD JSR RDPPA0 MOVE.L (A7)+,D0 FNRET 1 * ENTRY RDPPA1 * FORTRAN CALLING SEQUENCE: RDPPA1 EQU * SAVREG LEA.L SPPA1,A1 MOVEA.L 4(A5),A0 MOVEQ #0,D0 MOVE.B (A1),(A0) RSTREG FNRET 1 ENTRY FRPPA1 FRPPA1 EQU * PEA SCRLWRD JSR RDPPA1 MOVE.L (A7)+,D0 FNRET 1 ENTRY RDPPB * FORTRAN CALLING SEQUENCE: RDPPB EQU * SAVREG LEA.L SPPB,A1 MOVEA.L 4(A5),A0 MOVEQ #0,D0 MOVE.W (A1),(A0) RSTREG FNRET 1 ENTRY FRDPPB FRDPPB EQU * PEA SCRLWRD JSR RDPPB MOVE.L (A7)+,D0 FNRET 1 * ENTRY RDPPB0 * FORTRAN CALLING SEQUENCE: RDPPB0 EQU * SAVREG LEA.L SPPB0,A1 MOVEA.L 4(A5),A0 MOVEQ #0,D0 MOVE.B (A1),(A0) RSTREG FNRET 1 ENTRY FRPPB0 FRPPB0 EQU * PEA SCRLWRD JSR RDPPB0 MOVE.L (A7)+,D0 FNRET 1 * ENTRY RDPPB1 * FORTRAN CALLING SEQUENCE: RDPPB1 EQU *

FRPPA0 return INTEGER*1 VARIABLE CALL RDPPA1(integer*1 VAR) A1 loaded with addr SENSOR PP A1 PORT A0 loaded with address of first op zero out D0 store the result RDPPA1 return

FRPPA1 return INTEGER*2 VARIABLE CALL RDPPB(integer*2 VAR) A1 loaded with addr SENSOR PP B PORT A0 loaded with address of first op zero out D0 store the result RDPPB return

FRDPPB return INTEGER*1 VARIABLE CALL RDPPB0(integer*1 VAR) A1 loaded with addr SENSOR PP B0 PORT A0 loaded with address of first op zero out D0 store the result RDPPB0 return

FRPPB0 return INTEGER*1 VARIABLE CALL RDPPB1(integer*1 VAR)

SAVREG LEA.L SPPB1,A1 MOVEA.L 4(A5),A0 MOVEQ #0,D0 MOVE.B (A1),(A0) RSTREG FNRET 1 ENTRY FRPPB1 FRPPB1 EQU * PEA SCRLWRD JSR RDPPB1 MOVE.L (A7)+,D0 FNRET 1 * ENTRY WTPPA * FORTRAN CALLING SEQUENCE: WTPPA EQU * SAVREG LEA.L SPPA,A1 MOVEA.L 4(A5),A0 MOVEQ #0,D0 MOVE.W (A0),(A1) RSTREG FNRET 1 ENTRY WTPPA0 * FORTRAN CALLING SEQUENCE: WTPPA0 EQU * SAVREG LEA.L SPPA0,A1 MOVEA.L 4(A5),A0 MOVEQ #0,D0 MOVE.B (A0),(A1) RSTREG FNRET 1 ENTRY WTPPA1 * FORTRAN CALLING SEQUENCE: WTPPA1 EQU * SAVREG LEA.L SPPA1,A1 MOVEA.L 4(A5),A0 MOVEQ #0,D0 MOVE.B (A0),(A1) RSTREG FNRET 1 ENTRY WTPPB * FORTRAN CALLING SEQUENCE: WTPPB EQU * SAVREG LEA.L SPPB,A1 MOVEA.L 4(A5),A0 MOVEQ #0,D0 MOVE.W (A0),(A1) RSTREG FNRET 1 ENTRY WTPPB0 * FORTRAN CALLING SEQUENCE: WTPPB0 EQU * SAVREG LEA.L SPPB0,A1 MOVEA.L 4(A5),A0

A1 loaded with addr SENSOR PP B1 PORT A0 loaded with address of first op zero out D0 store the result RDPPB1 return

FRPPB1 return INTEGER*2 VARIABLE CALL WTPPA(integer*2 VAR) A1 loaded with addr SENSOR PP A PORT A0 loaded with address of first op zero out D0 store the result WTPPA return INTEGER*1 VARIABLE CALL WTPPA0(integer*1 VAR) A1 loaded with addr SENSOR PP A0 PORT A0 loaded with address of first op zero out D0 store the result WTPPA0 return INTEGER*1 VARIABLE CALL WTPPA1(integer*1 VAR) A1 loaded with addr SENSOR PP A1 PORT A0 loaded with address of first op zero out D0 store the result WTPPA1 return INTEGER*2 VARIABLE CALL WTPPB(integer*2 VAR) A1 loaded with addr SENSOR PP B PORT A0 loaded with address of first op zero out D0 store the result WTPPB return INTEGER*1 VARIABLE CALL WTPPB0(integer*1 VAR) A1 loaded with addr SENSOR PP B0 PORT A0 loaded with address of first op

MOVEQ #0,D0 zero out D0 MOVE.B (A0),(A1) store the result RSTREG FNRET 1 WTPPB0 return ENTRY WTPPB1 INTEGER*1 VARIABLE * FORTRAN CALLING SEQUENCE: CALL WTPPB1(integer*1 VAR) WTPPB1 EQU * SAVREG LEA.L SPPB1,A1 A1 loaded with addr SENSOR PP B1 PORT MOVEA.L 4(A5),A0 A0 loaded with address of first op MOVEQ #0,D0 zero out D0 MOVE.B (A0),(A1) store the result RSTREG FNRET 1 WTPPB1 return * * IGETHS EQU * MOVEA.L 8(A7),A0 MOVEA.L (A0),A0 BRA.S INGETHS GETHS EQU * MOVEA.L 8(A7),A0 XDEF GETHS,IGETHS INGETHS EQU * MOVEA.L 4(A7),A1 MOVE.L (A1),D1 SUBQ.L #1,D1 LSL.L #2,D1 PERILOUSGARD LEA.L SENPPBASE,A1 FOR.L D2 = #0 TO D1 BY #4 DO.S MOVE.W 4(A1),D0 SWAP D0 MOVE.W 4(A1),D0 MOVE.L D0,0(A0,D2.L) ENDF FNRET 2 * * IGTRHS EQU * MOVEA.L 8(A7),A0 MOVEA.L (A0),A0 BRA.S INGETRHS GETRHS EQU * MOVEA.L 8(A7),A0 XDEF GETRHS,IGTRHS INGETRHS EQU * MOVEA.L 4(A7),A1 MOVE.L (A1),D1 SUBQ.L #1,D1 LSL.L #2,D1 PERILOUSGARD LEA.L SENPPBASE,A1 FOR.L D2 = #0 TO D1 BY #4 DO.S MOVE.W 4(A1),D0 SWAP D0 MOVE.W 4(A1),D0 MOVE.L D0,0(A0,D2.L)

MOVE.B D2,D0 ANDI.B #$3F,D0 BNE.S RNOTDO MOVE.W (A1),D0 RNOTDO EQU * ENDF FNRET 2 * * IGTWHS EQU * MOVEA.L 8(A7),A0 MOVEA.L (A0),A0 BRA.S INGETWHS GETWHS EQU * MOVEA.L 8(A7),A0 XDEF GETWHS,IGTWHS INGETWHS EQU * MOVEA.L 4(A7),A1 MOVE.L (A1),D1 SUBQ.L #1,D1 LSL.L #2,D1 PERILOUSGARD LEA.L SENPPBASE,A1 FOR.L D2 = #0 TO D1 BY #4 DO.S MOVE.W 4(A1),D0 SWAP D0 MOVE.W 4(A1),D0 MOVE.L D0,0(A0,D2.L) MOVE.B D2,D0 ANDI.B #$3F,D0 BNE.S WNOTDO MOVE.W #0,2(A1) WNOTDO EQU * ENDF FNRET 2 * * IGTBHS EQU * MOVEA.L 8(A7),A0 MOVEA.L (A0),A0 BRA.S INGETBHS GETBHS EQU * MOVEA.L 8(A7),A0 XDEF GETBHS,IGTBHS INGETBHS EQU * MOVEA.L 4(A7),A1 MOVE.L (A1),D1 SUBQ.L #1,D1 LSL.L #2,D1 PERILOUSGARD LEA.L SENPPBASE,A1 FOR.L D2 = #0 TO D1 BY #4 DO.S MOVE.W 4(A1),D0 SWAP D0 MOVE.W 4(A1),D0 MOVE.L D0,0(A0,D2.L) MOVE.B D2,D0 ANDI.B #$3F,D0

BNE.S BNOTDO MOVE.W (A1),D0 MOVE.W #0,2(A1) BNOTDO EQU * ENDF FNRET 2 * STATMSK DC.L $0FFFF PARMSK EQU * MOVEA.L 4(A7),A0 MOVE.L (A0),D0 BRA.S MASKPAR MSKPAR EQU * XDEF MSKPAR,PARMSK,MSKPON,MSKOFF,MSKPOF,MSKP01,MSKTON,MSKT01,MSKQON MOVEA.L 4(A7),A0 MOVE.L (A0),D0 ANDI.L #1,D0 BEQ.S MASKPAR MOVEI.L #$0000FFFF,D0 MASKPAR EQU * MOVE.L D0,STATMSK FNRET 1 MSKPON EQU * MOVE.L #$0FFFF,D0 MOVE.L D0,STATMSK RTS MSKPOF EQU * MSKOFF EQU * XOR.L D0,D0 MOVE.L D0,STATMSK RTS MSKP01 EQU * MOVEQ.L #$1,D0 MOVE.L D0,STATMSK RTS MSKT01 EQU * MOVEQ.L #$1,D0 AND.L STATMSK(PC),D0 MOVE.L D0,STATMSK RTS MSKTON EQU * MOVE.L #$0FFFF,D0 AND.L STATMSK(PC),D0 MOVE.L D0,STATMSK RTS MSKQON EQU * MOVE.L STATMSK(PC),D0 CMPI.W #0,D0 BEQ.S MSKQON99 MOVE.L #$0FFFF,D0 MOVE.L D0,STATMSK MSKQON99: RTS * * R2DTST EQU * MOVEI.L #$7006,D0 BRA.S INTSTEQU R2LTST EQU * MOVEI.L #$7106,D0 BRA.S INTSTEQU

TSTSYN EQU MOVEI.L BRA.S TSTEQU EQU XDEF XOR.L INTSTEQU OR.W OR.W ANDI.W MOVE.W ST2TSTQ MOVE.W RTS TSTEXG EQU XOR.L MOVE.W MOVE.W MOVE.W RTS ST2TST EQU MOVEA.L MOVE.L MOVEA.L MOVE.L ANDI.W BRA.S ST1TST EQU MOVEA.L MOVE.L MOVEA.L MOVE.L ANDI.W MOVE.W RTS * STATRD2 DC.W STATREA DC.W XDEF TSTREA EQU MOVEA.L MOVE.L MOVEA.L MOVE.L BRA.S REATST EQU XDEF MOVEA.L MOVE.L MOVEA.L MOVE.L ANDI.L BEQ.S TSTR2D EQU REA2PAR EQU MOVEI.W BRA.S TSTR1D EQU REA1PAR EQU MOVEI.W REA0PAR EQU ANDI.W

* #$0100,D0 INTSTEQU * TSTEQU,TSTSYN,R2DTST,R2LTST,TSTEXG,ST1TST,ST2TST D0,D0 STATREA(PC),D0 STATRD2(PC),D0 #$71DF,D0 D0,STATREA D0,STATRD2 * D0,D0 STATREA(PC),D0 STATRD2(PC),STATREA D0,STATRD2 * 4(A7),A0 (A0),D0 (A7)+,A0 A0,(A7) #$71DF,D0 ST2TSTQ * 4(A7),A0 (A0),D0 (A7)+,A0 A0,(A7) #$71DF,D0 D0,STATREA $07002 $07006 ;$7006 = start 2D scan/$7002 = start 1D scan STATREA,STATRD2 * 4(A7),A0 (A0),D0 (A7)+,A0 A0,(A7) REA0PAR * REATST,TSTREA,TSTR1D,TSTR2D,TSTR1L,TSTR2L,TSTSTP,TSTNUL 4(A7),A0 (A0),D0 (A7)+,A0 A0,(A7) #1,D0 REA1PAR * * #$7006,D0 REA0PAR * * #$7002,D0 * #$71DF,D0

TSTNUL TSTSTP TSTR1L TSTR2L

MOVE.W ANDI.W MOVE.W RTS EQU XOR.L BRA.S EQU MOVEI.W BRA.S EQU MOVEI.W BRA.S EQU MOVEI.W BRA.S

D0,STATREA #$71DB,D0 D0,STATRD2 * D0,D0 REA0PAR * #$7000,D0 REA0PAR * #$7102,D0 REA0PAR * #$7106,D0 REA0PAR

* STACOUNT DS.W 1 STAPAR EQU * XDEF STAPAR MOVE.W #3,STACOUNT PUSH.L D3 STAREPEAT EQU * PERILOUSGARD LEA.L -2300(A7),A0 MOVE.L #700,D1 CMP.W #3,STACOUNT BNE.S STARETRY MOVE.L #164,D1 STARETRY EQU * LEA.L SENPPBASE,A1 FOR.L D2 = #4 TO D1 BY #4 DO.S MOVE.W 4(A1),D0 SWAP D0 MOVE.W 4(A1),D0 ANDI.L #STAMSKL,D0 MOVE.L D0,0(A0,D2.L) MOVE.B D2,D0 ANDI.B #$3F,D0 BNE.S SBNOTDO MOVE.W (A1),D0 MOVE.W #0,2(A1) MOVE.B D2,D0 ANDI.B #$7F,D0 BNE.S SBNOTDO MOVE.W STATRD2(PC),2(A1) ;start 1D (or stop) scanning MOVE.B D2,D0 ANDI.B #$FF,D0 BNE.S SBNOTDO MOVE.W STATREA(PC),2(A1) ;start 2D (or 1D or stop) scanning SBNOTDO EQU * ENDF MOVE.L D1,D3 ANDI.L #$0FFFFFC,D3 MOVE.L #1500,D1 LEA.L SENPPBASE,A1 FOR.L D2 = D3 TO D1 BY #2 DO.S MOVE.W 4(A1),D0

ANDI.W #STBMSK,D0 MOVE.W D0,0(A0,D2.L) MOVE.B D2,D0 ANDI.B #$3F,D0 BNE.S SBN0TD0 MOVE.W (A1),D0 MOVE.W #0,2(A1) SBN0TD0 EQU * ENDF DOLOROUSGARD SUBQ.L #6,D1 CMPI.W #3,STACOUNT BNE.S HAVEPOWER FOR.L D2 = #6 TO D1 BY DO.S MOVE.W 0(A0,D2.L),D0 CMPI.W #NOCONN,D0 BNE.S HAVECONN ENDF MOVEQ.L #4,D0 AND.L STATMSK(PC),D0 POP.L D3 RTS HAVECONN EQU * FOR.L D2 = #6 TO D1 BY DO.S MOVE.W 0(A0,D2.L),D0 ANDI.W #STBMSK,D0 MOVE.W D0,0(A0,D2.L) CMPI.W #READY,D0 BNE.S HAVEPOWER ENDF MOVEQ.L #2,D0 AND.L STATMSK(PC),D0 POP.L D3 RTS HAVEPOWER EQU * FOR.L D2 = #6 TO D1 BY DO.S MOVE.W 0(A0,D2.L),D0 ANDI.W #STBMSK,D0 MOVE.W D0,0(A0,D2.L) CMPI.W #BTHPEND,D0 BEQ.S BOTHPEND CMPI.W #REAPEND,D0 BEQ.S READPEND ENDF SUBI.W #1,STACOUNT BGE.L STAREPEAT MOVEQ.L #7,D0 AND.L STATMSK(PC),D0 POP.L D3 RTS READPEND EQU * BOTHPEND EQU * ANDI.L #$0FFFFFC,D2 MOVE.L D2,D3 FOR.L D2 = D3 TO D1 BY DO.S MOVE.W 0(A0,D2.L),D0

#2

#2

#2

#2

CMPI.W #WRIPEND,D0 BEQ.S RUNNING CMPI.W #READY,D0 BEQ.S RUNNING ENDF MOVE D3,D2 ANDI.L #$0FFFFFC,D2 MOVEQ.L #0,D3 FOR.L D2 = D2 TO D1 BY #2 DO.S MOVE.W 0(A0,D2.L),D0 CMPI.W #REAPEND,D0 BNE.S NOTIDEL ADDQ.B #1,D3 CMPI.W #73,D3 BEQ.S IDLEING NOTIDEL EQU * ENDF SUBI.W #1,STACOUNT BGE.L STAREPEAT IDLEING EQU * MOVEQ.L #1,D0 AND.L STATMSK(PC),D0 POP.L D3 RTS RUNNING MOVEQ.L #0,D0 POP.L D3 RTS * STQCOUNT DS.W 1 STQPAR EQU * XDEF STQPAR MOVE.W #1,STQCOUNT PUSH.L D3 STQREPEAT EQU * JSR STAPAR(PC) PUSH.W D0 OLDTESTS ANDI.B #1,D0 CMPI.B #1,D0 BEQ.S MORETESTS POP.W D0 POP.L D3 AND.L STATMSK(PC),D0 RTS MORETESTS EQU * POP.W D0 LEA.L -1200(A7),A0 MOVE.L #1024,D1 PERILOUSGARD LEA.L SENPPBASE,A1 MOVE.W STATREA(PC),2(A1) FOR.L D2 = #0 TO D1 BY #4 DO.S MOVE.W 4(A1),D0 SWAP D0 MOVE.W 4(A1),D0 ANDI.L #STBMSKL,D0 MOVE.L D0,0(A0,D2.L) MOVE.B D2,D0 ANDI.B #$7F,D0

BNE.S QBNOTDO MOVE.W (A1),D0 QBNOTDO EQU * ENDF DOLOROUSGARD FOR.L D2 = #32 TO D1 BY #2 DO.S MOVE.W 0(A0,D2.L),D0 CMPI.W #REAPEND,D0 BEQ.S NEXTTEST CMPI.W #BTHPEND,D0 BEQ.S NEXTTEST ENDF SUBI.W #1,STQCOUNT BGE.L STQREPEAT POP.L D3 MOVEQ.L #2,D0 AND.L STATMSK(PC),D0 RTS NEXTTEST EQU * FOR.L D2 = D2 TO D1 BY #2 DO.S MOVE.W 0(A0,D2.L),D0 CMPI.W #READY,D0 BEQ.L RUNNING CMPI.W #WRIPEND,D0 BEQ.L RUNNING ENDF SUBI.W #1,STQCOUNT BGE.L STQREPEAT POP.L D3 MOVEQ.L #3,D0 AND.L STATMSK(PC),D0 RTS * * BASE DS.L 2 SCRLWRD DS.L 1 Q1STORAGE END

You might also like