DataMuseum.dkPresents historical artifacts from the history of: CR80 Hard and Floppy Disks |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CR80 Hard and Floppy Disks Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 27015 (0x6987) Types: TextFile Names: »IOMAT4.SRC«
└─⟦af81bc460⟧ Bits:30005550 8" CR80 Floppy CR80FD_0034 ( MATRIX Source and Abs-files ) └─⟦af81bc460⟧ Intel_ISIS_II └─ ⟦this⟧ »IOMAT4.SRC«
NLIST S\r ACTIVATE MACRO #ID,#NO\r NLIST M\r ;DESRIP: THE MODULE ACTIVATES\r ; SPECIFIED PROCES.\r ; IF LINK IS SET AND PASSIVE\r ; SPECIAL PROCESS IS ACTIVATED\r ; THE LINK-ELEMENT IS \r ; INCREMENTED\r ;DESTR: REG F,H,L\r ;%\r ;############### Activate macro ####################\r IF '#ID'.EQ.'S'\r LD HL,SYSRAM+200H+#NO*10H+5\r ;IMPLEMENT ADD OF STATUS-BIT\r IF LINK.EQ.1\r BIT 7,(HL) ;\r JR NZ,O#$YM ;IF PROCESS WAS NOT ACTIVE THEN\r LD HL,SYSRAM+0FBH ;BEGIN\r INC (HL) ;INC LINK-ELEMENT\r LD HL,SYSRAM+200H+#NO*10H+5\r ;END\r O#$YM: ENDIF\r ENDIF\r IF '#ID'.EQ.'N'\r LD HL,SYSRAM+200H+S*10H+#NO*20H+5\r ;IMPLEMENT ADD OF STATUS-BIT\r ENDIF\r SET 7,(HL) ;ACTIVATE\r ;################# End macro ######################\r ENDM\r \r \r PASSIVATE MACRO #ID,#NO\r NLIST M\r ;DESRIP: THE MODULE PASSIVATES\r ; SPECIFIED PROCES.\r ; IF LINK IS SET AND ACTIVE\r ; SPECIAL PROCESS IS PASSIVATED\r ; THE LINK-ELEMENT IS \r ; DECREMENTED\r ;DESTR: REG F,H,L\r ;%\r ;################# Passivate macro ####################\r IF '#ID'.EQ.'S'\r LD HL,SYSRAM+200H+#NO*10H+5\r ;IMPLEMENT ADD OF STATUS-BIT\r IF LINK.EQ.1\r BIT 7,(HL) ;\r JR Z,O#$YM ;IF PROCESS WAS NOT PASSIVE THEN\r LD HL,SYSRAM+0FBH ;BEGIN\r DEC (HL) ;DEC LINK-ELEMENT\r LD HL,SYSRAM+200H+#NO*10H+5\r ;END\r O#$YM: ENDIF\r ENDIF\r IF '#ID'.EQ.'N'\r LD HL,SYSRAM+200H+S*10H+#NO*20H+5\r ;IMPLEMENT ADD OF STATUS-BIT\r ENDIF\r RES 7,(HL) ;PASSIVATE\r ;############# End macro #############\r ENDM\r LIST S\r ;******************************************************************************\r ;* *\r ;* D O R A A P P L I C A T I O N S / W *\r ;* *\r ;* DEVICE: MATRIX *\r ;* *\r ;* MODULE: VIDEO-,PULSE-,CAM.DEL.- AND INTERCOM. MATRIX PROCESS *\r ;* *\r ;******************************************************************************\r \r ;\r PUBLIC IOMINI,IO1,IO2,IO3\r PUBLIC CDCONT,PRTSAV,TAB2PX,PXPORT,VXT1CK,VXCREC,VXCKCO\r PUBLIC VXCSEN,TABVID,TAB1VX,TAB2VX,VXAID,TAB3VX,VXPORT\r ;\r EXTRN SUBDEQ,SUBENQ,SYSRAM\r EXTRN SCOMMON\r EXTRN UPDATE,ESTABR\r EXTRN ESTABI\r EXTRN SUSPND\r EXTRN QEV,QME\r ;\r LINK EQU 0\r CTL EQU 2\r SOUR EQU 3\r DEST EQU 4\r ;\r CSEG\r ORG 890H\r IOMINI: LD SP,IOMSP ; SP := PRIVATE STACK\r \r LD E,5 ; 16 MSEC <= DELAY <= 24 MSEC\r LD BC,6 ; THIS TIMER ACTIVATES PROCESS 12.\r CALL UPDATE\r INC BC ; 8 MSEC <= DELAY <=16 MSEC\r LD E,4\r CALL UPDATE ; TIMER IO1: TERMINATES PULSE ACTION\r INC BC\r LD E,4\r CALL UPDATE ; " IO2: TERMINATES CAM. DELEG. ACTION\r INC BC\r LD E,4\r CALL UPDATE ; " IO3: TERMINATES VIDEO ACTION\r \r LOOP: PASSIVATE S,12\r CALL SCOMMON\r EI\r \r \r NXBUF: LD HL,QEV ; GET NEXT BUFFER\r CALL SUBDEQ\r JR NC,LOOP ; IF NO BUFFER THEN SCHEDULE\r \r LD (CURRBH),DE ;STORE ADDRESS OF CURRENT BUFF.HEAD\r LD IX,(CURRBH)\r \r \r ;******************************* PULSE MODULE *************************\r \r \r BIT 5,(IX+CTL) ; IF PULSE BIT = 1 THEN PERFORM PULSE MODULE\r JP Z,CAMBIT ; ELSE GO TO CAMERA DELEG. MODULE\r \r \r LD D,0 ;\r LD E,(IX+SOUR) ; SOURCE\r LD HL,TAB1PX ; TAB1PX\r ADD HL,DE ; TAB1PX+SOURCE, GET THE TABLE-VALUE\r \r LD A,(HL) ; TEST IF VALID SOURCE\r CP 0 ;\r JP Z,ERPXCM ;\r LD C,A ; TAB1PX-VALUE IN C-REGISTER\r LD A,(IX+CTL) ;\r \r AND 0CH ; MASK THE T-BITS FROM CTL (4*T)\r CP 0 ; TEST IF T=1,2 OR 3\r JP Z,ERPXCM ; IF NO, ERROR\r LD E,A ;\r LD A,C ;\r AND 07H ; GET SOURCE GROUP FROM TAB1PX-VALUE\r SLA A ;\r SLA A ; 4*GROUP\r ADD A,E ; 4*(T+GROUP)\r LD E,A ;\r LD D,0 ;\r LD HL,TAB2PX ; TAB2PX\r ADD HL,DE ; TAB2PX+(4*(T+GROUP))\r \r LD E,C ; TAB1PX-VALUE TO E-REGISTER\r \r LD C,(HL) ; LOWER PORT BYTE TO C-REGISTER\r INC HL ;\r LD B,(HL) ; UPPER PORT BYTE TO B-REGISTER\r \r LD (PXPORT),BC ; SAVE PORT ADDR FOR PULSE TERMINATION\r LD A,E ;\r AND 07H ;\r LD D,A ;\r LD A,(IX+CTL) ;\r AND 0CH ;\r SRL A ;\r SRL A ;\r ADD A,D ;\r LD (GROUP),A ;SAVE (GROUP+T)\r \r LD A,E ; TAB1PX-VALUE TO ACCU\r AND 0F0H ; MASK THE CONTENT BITS\r BIT 3,E ;\r JR Z,OUTPX ; SHIFT THE CONTENT BITS?\r SRL A ;\r SRL A ;\r SRL A ;\r SRL A ;\r \r OUTPX: LD (PXCONT),A ; SAVE PORT CONTENT\r CPL ;\r LD BC,(PXPORT) ;\r OUT (C),A ;OUTPUT\r LD D,A ;\r \r LD BC,(GROUP)\r LD B,0\r LD HL,PRTSAV-1\r ADD HL,BC\r AND (HL)\r LD (HL),A ;UPDATE THE ACTUAL OUTPUT-PORT STATUS\r \r BIT 2,(IX+CTL)\r JR Z,TP2 ;IF T2-PULSE GOTO TP2\r BIT 3,(IX+CTL)\r JR NZ,TP3 ;IF T3-PULSE GOTO TP3\r \r TP1: LD A,D ;T1-PULSE\r CPL ;\r LD D,A ;\r INC HL ;\r OR (HL) ;\r LD (HL),A ;UPDATE THE CORRESPONDING T2-PORT\r LD A,D ;\r INC HL ;\r OR (HL) ;\r LD (HL),A ;UPDATE THE CORRESPONDING T3-PORT\r JR PXEND ;\r \r TP2: LD A,D ;T2-PULSE\r CPL ;\r LD D,A ;\r DEC HL ;\r OR (HL) ;\r LD (HL),A ;UPDATE THE CORRESPONDING T1-PORT\r LD A,D ;\r INC HL ;\r INC HL ;\r OR (HL) ;\r LD (HL),A ;UPDATE THE CORRESPONDING T3-PORT\r JR PXEND ;\r \r TP3: LD A,D ;T3-PULSE\r CPL ;\r LD D,A ;\r DEC HL ;\r DEC HL ;\r OR (HL) ;\r LD (HL),A ;UPDATE THE CORRESPONDING T1-PORT\r LD A,D ;\r INC HL ;\r OR (HL) ;\r LD (HL),A ;UPDATE THE CORRESPONDING T3-PORT\r JR PXEND ;\r \r PXEND: LD BC,7 ; IO1 TIMER: TERMINATES PULSE ACTION\r CALL ESTABR ; AFTER DELAY (8-16 MSEC)\r \r LD IX,(CURRBH) ;\r \r \r ;******************************* CAMERA DELEGATION MODULE ************\r \r \r CAMBIT: BIT 4,(IX+CTL) ; IF CAM.DEL. BIT = 1 THEN PERFORM MODULE\r JR Z,INTBIT ; ELSE GO TO INTERCOM. MODULE\r \r \r LD A,(IX+SOUR) ;\r CP 14H ; SOURCE=20 (14H)?\r JP NZ,ERCDCM ; IF NO, ERROR\r \r LD BC,PORT68 ;\r IN A,(C) ; XXXX XXXX\r OR 3FH ; 0011 1111\r LD D,A ; XX11 1111\r LD E,(IX+CTL) ;\r \r LD A,(IX+DEST) ;\r CP 44H ; DEST=68 (44H)?\r JR Z,ST5CD ; IF YES, JUMP\r CP 12H ; DEST<18 (12H)?\r JP M,ERCDCM ; IF YES, ERROR\r CP 19H ; DEST>24 (18H)?\r JP P,CNR1CD ; IF YES, JUMP\r \r ST5CD: BIT 0,E ; ESTAB. OR DELETE?\r JR Z,X1 ;\r \r RES 0,D ; ESTABLISH ST-5 CAM. DELEG.\r JR OUTCD ;\r \r X1: RES 1,D ; DELETE ST-5 CAM. DELEG.\r JR OUTCD ;\r \r CNR1CD: CP 1CH ; DEST.<28 (1CH)?\r JP M,ERCDCM ; IF YES, ERROR\r CP 1EH ; DEST.>29 (1DH)?\r JP P,CNR2CD ; IF YES, JUMP\r \r BIT 0,E ; ESTAB. OR DELETE?\r JR Z,X2 ;\r \r RES 2,D ; ESTAB. CNR1 CAM. DELEG.\r JR OUTCD ;\r \r X2: RES 3,D ; DELETE CNR1 CAM. DELEG.\r JR OUTCD ;\r \r CNR2CD: CP 20H ; DEST.>31 (1FH)?\r JP P,ERCDCM ; IF YES, ERROR\r \r BIT 0,E ; ESTAB. OR DELETE?\r JR Z,X3 ;\r \r RES 4,D ; ESTAB. CNR2 CAM. DELEG\r JR OUTCD ;\r \r X3: RES 5,D ; DELETE CNR2 CAM. DELEG.\r \r OUTCD: OUT (C),D ;\r \r LD A,D ; SAVE PORT CONTENT FOR\r LD (CDCONT),A ; CAM. DELEG. CHECK (BIT 0-5)\r \r \r LD BC,8 ; IO2 TIMER: TERMINATES CAM. DELEG. ACTION\r CALL ESTABR ; AFTER DELAY (8-16 MSEC)\r \r LD IX,(CURRBH) ;\r \r \r ;******************************* INTERCOMMUNICATION MODULE ***********\r \r \r INTBIT: BIT 7,(IX+CTL) ; IF INT.COM. BIT = 1 THEN PERFORM MODULE\r JR Z,VIDBIT ; ELSE GO TO VIDEO MODULE\r \r \r LD A,(IX+SOUR) ;\r CP 13H ; SOURCE = 19 (13H)?\r JR NZ,IC1 ; IF NO, JUMP\r \r LD A,(IX+DEST) ;\r CP 43H ; DEST. = 67 (43H)?\r JP NZ,ERICCM ; IF NO, ERROR\r \r BIT 0,(IX+CTL) ; ESTAB OR DELETE?\r JR Z,Y1 ; IF DELETE, JUMP\r \r LD BC,PORT22 ; ESTAB. STM-ST5 INTERCOM\r IN A,(C) ;\r RES 1,A ;\r OUT (C),A ;\r \r LD BC,(PORT41) ;\r IN A,(C) ;\r RES 7,A ;\r OUT (C),A ;\r \r JR VIDBIT ;\r \r Y1: LD BC,PORT22 ; DELETE STM-ST5 INTERCOM\r IN A,(C) ;\r SET 1,A ;\r OUT (C),A ;\r \r LD BC,(PORT41) ;\r IN A,(C) ;\r SET 7,A ;\r OUT (C),A\r \r JR VIDBIT ;\r \r IC1: CP 14H ; SOURCE = 20 (14H)?\r JP NZ,ERICCM ; IF NO, ERROR\r \r LD A,(IX+DEST) ;\r CP 44H ; DEST. = 68 (44H)?\r JP NZ,ERICCM ; IF NO, ERROR\r \r LD BC,PORT22 ;\r IN A,(C) ;\r BIT 0,(IX+CTL) ; ESTAB. OR DELETE?\r JR Z,Y2 ; IF DELETE, JUMP\r RES 0,A ; ESTAB. STC-ST5 INTERCOM\r JR OUTIC ;\r \r Y2: SET 0,A ; DELETE STC-ST5 INTERCOM\r \r OUTIC: OUT (C),A\r \r \r ;******************************* VIDEO MODULE *************************\r \r \r VIDBIT: BIT 6,(IX+CTL) ; IF VIDEO BIT = 1 THEN PERFORM MODULE\r JP Z,WAIT ; ELSE GOTO WAITING POINT\r \r \r BIT 0,(IX+CTL) ; ESTAB. OR DELETE?\r JR NZ,ESTVX ; IF DELETE THEN\r LD D,0 ;\r LD E,(IX+DEST) ;\r LD HL,TABVID ; LOAD DYNAMIC VIDEO STATUS TABLE\r ADD HL,DE ; WITH TEST NO.(30)\r LD A,30 ;\r LD (HL),A ;\r LD A,(TAB1VX+1EH) ; SOURCE = TEST GEN (SOURCE 30)\r JR OUT1VX ;\r \r ESTVX: LD D,0 ;\r LD E,(IX+DEST) ;\r LD HL,TABVID ; LOAD DYNAMIC VIDEO STATUS TABLE\r ADD HL,DE ; WITH ACTUAL SOURCE NO.\r LD A,(IX+SOUR) ;\r LD (HL),A ;\r \r LD D,0 ; ELSE\r LD E,(IX+SOUR) ; GET SOURCE CODE\r LD HL,TAB1VX ; FROM TAB1VX\r ADD HL,DE ;\r LD A,(HL) ;\r \r CP 00 ;\r JP Z,ERVXCM ;\r \r OUT1VX: LD BC,PORT33 ; OUTPUT\r OUT (C),A ;\r \r LD BC,PORT34 ; OUTPUT\r OUT (C),A ;\r \r CALL PAUSE ; WAIT 16-24 MSEC\r \r LD IX,(CURRBH) ;\r \r LD D,0 ; DESTINATION:\r LD E,(IX+DEST) ;\r LD HL,TAB2VX ;\r ADD HL,DE ;\r LD E,(HL) ; TAB2VX-VALUE TO E-REG\r \r LD A,E ; DERIVE THE PORT CONTENT\r \r CP 00 ; IF ZERO THEN ERROR\r JP Z,ERVXCM ;\r \r AND 0F0H ; MASK THE CONTENT BITS\r BIT 3,E ; SHIFT?\r JR Z,V1 ;\r SRL A ;\r SRL A ;\r SRL A ;\r SRL A ;\r \r V1: CPL ;\r LD D,A ; PORT CONTENT IN D-REG.\r \r LD A,E ; FIND THE ACTUAL OUTPUT PORT\r AND 07H ;\r LD C,A ;\r LD (VXAID),A ; SAVE VXAID (VXAID IS DERIVED FROM THE\r ; TAB2VX AND POINTS TO THE TAB3VX,\r SLA C ; WHERE THE ACTUAL PORT ADDR. IS\r ; PLACED. THE VXAID IS USED, WHEN\r LD B,0 ; THE ACTION IS TERMINATED. IF \r LD HL,TAB3VX ; VXAID = 7, THEN THE PORT IS SHARED)\r ADD HL,BC ;\r LD C,(HL) ; LOWER PORT BYTE TO C-REG.\r INC HL\r LD B,(HL) ; UPPER PORT BYTE TO B-REG\r \r ; VXAID STILL IN A-REG\r CP 07H ; IS THE PORT SHARED?\r JR NZ,OUT2VX ; IF NO THEN OUTPUT\r \r IN A,(C) ; ELSE\r OR 7FH ; SAVE\r AND D ;\r LD D,A ;\r \r OUT2VX: LD (VXPORT),BC ; SAVE PORT ADDR. FOR VIDEO TERMINATION\r OUT (C),D ; OUTPUT\r \r LD BC,9 ; IO3 TIMER: TERMINATES VIDEO ACTION\r CALL ESTABR ; AFTER DELAY (8-16 MSEC)\r \r \r ;*********************************************************************\r \r ; START TIMER AND PASSIVATE\r WAIT: CALL PAUSE ; (WAIT 16-24 MSEC)\r \r \r ;*********************** *******************\r ;*********************** CONTROL OF MATRIX OPERATION *******************\r ;*********************** *******************\r \r \r LD IX,(CURRBH)\r \r \r ;******************************* CHECK PULSE ***************************\r \r \r BIT 5,(IX+CTL) ; IF PULSE BIT = 1 THEN CHECK PULSE OPERATION\r JR Z,CAMCK ; ELSE GO TO CAMERA DELEG. CHECK\r \r LD A,(IX+CTL)\r AND 0CH\r SRL A\r SRL A\r LD D,A\r LD A,(GROUP)\r SUB D ;FIND GROUP NO.\r LD E,A\r LD D,0\r SLA A\r SLA A\r ADD A,6\r LD C,A\r LD B,0\r LD HL,PRTSAV ;STARTADDRESS OF OUTPUT-PORT CONTENT SAV.CELL\r ADD HL,DE ;ADD GROUP NO.-DISPLACEMENT\r EX DE,HL\r LD HL,TAB2PX ;STARTADDRESS OF TAB2PX\r ADD HL,BC ;ADD GROUP NO.-DISPLACEMENT(FIND CHECK-PORT)\r LD A,3\r ;WHILE NOT ALL PULSE-BITS FOR THE ACTUAL\r CHP: PUSH AF ;SOURCE HAVE BEEN CHECKED DO\r LD C,(HL) ;BEGIN\r INC HL ;\r LD B,(HL) ;\r IN A,(C) ; GET CONTENT OF PULSE-CHECK INPUT PORT\r LD C,A ;\r LD A,(PXCONT) ;\r AND C ; MASK OUT IRRELEVANT BITS\r LD BC,3 ;\r ADD HL,BC ;\r PUSH HL ;\r LD C,A ;\r EX DE,HL ; GET ADDRESS OF OUTP.PORT CONT.SAVING CELL\r LD A,(PXCONT) ; GET CONTENT\r AND (HL) ; MASK OUT IRRELEVANT BITS\r INC HL ;\r EX DE,HL ;\r CP C ;\r JR NZ,ER1 ; IF NO IDENTITY GOTO ER1\r POP HL ;\r POP AF ;\r DEC A ;\r JR NZ,CHP ;\r JR CAMCK ;END\r \r ER1: POP HL\r POP AF\r JP ERRPX\r \r ;******************************* CHECK CAMERA DELEGATION ******************\r \r \r CAMCK: BIT 4,(IX+CTL) ; IF CAM.DEL. BIT = 1 THEN CHECK OPERATION\r JR Z,VIDCK ; ELSE GO TO VIDEO CHECK\r \r LD BC,PORT67 ; CAM. DELEG. CHECK PORT\r IN A,(C) ; E.G. OFF:XX01 0101 E.G. ON:XX01 1001\r AND 3FH ; 0011 1111 0011 1111\r ; RESULT: 0001 0101 0001 1001\r ; ^\r BIT 0,(IX+CTL) ; CAM. DELEG. ON OR OFF? CNR1 ON\r JR NZ,CDONCK ; IF ON THEN JUMP\r \r CP 15H ; CAM. DELEG. OFF\r JP NZ,ERRCD ; COMPARE INPUT WITH 0001 0101\r JR VIDCK ;\r \r CDONCK: LD D,A ; CAM. DELEG. ON\r LD A,(CDCONT) ; COMMAND E.G. XX11 1011 (CNR1 ON)\r AND 3FH ; MASK 0011 1111\r ; RESULT: 0011 1011\r \r CP 3EH ; IF ST-5 ON: 0011 1110 (NO)\r JR NZ,CD1 ; THEN ^\r LD A,D ; IF RECEIVED= 0001 0110\r CP 16H ; THEN OK\r JP NZ,ERRCD ; ELSE ERROR\r JR VIDCK ;\r \r CD1: CP 3BH ; IF CNR1 ON: 0011 1011 (YES)\r JR NZ,CD2 ; THEN ^\r LD A,D ; IF RECEIVED= 0001 1001\r CP 19H ; THEN OK\r JP NZ,ERRCD ; ELSE ERROR\r JR VIDCK ;\r \r CD2: CP 2FH ; IF CNR2 ON: 0010 1111\r JP NZ,ERCDCM ; THEN ^\r LD A,D ; IF RECEIVED= 0010 0101\r CP 25H ; THEN OK\r JP NZ,ERRCD ; ELSE ERROR\r \r \r ;******************************* CHECK VIDEO ***************************\r \r \r VIDCK: BIT 6,(IX+CTL) ; IF VIDEO BIT = 1 THEN PERFORM CHECK\r JP Z,ACK ; ELSE GOTO BUFFER RETURN AND "ACK"\r \r LD D,0 ; DESTINATION\r LD E,(IX+DEST) ;\r LD HL,VXT1CK ; TABLEADDR.\r \r ADD HL,DE ;\r LD A,(HL) ; GET DEST. GROUP AND CODE FOR DEST.\r \r CP 0 ; IF DEST. NOT VALID\r JP Z,ERVXCM ; THEN ERROR IN BUFFER\r \r BIT 7,A ;\r JR NZ,GRP45 ;\r \r BIT 6,A ;\r JR NZ,GRP2 ;\r \r GRP1: LD BC,PORT46 ; IF DEST.=1-20 (KRA 1-20)\r OUT (C),A ; THEN SET CODE FOR DEST.\r ; ON PORT 46\r LD BC,PORT42 ;\r LD E,1EH ; IF DELETE\r BIT 0,(IX+CTL) ; THEN SOURCE=TEST GEN.\r JR Z,NED1 ; ELSE\r \r LD E,(IX+SOUR) ; GET SOURCE\r NED1: LD D,0 ;\r LD HL,VXCREC ;\r ADD HL,DE ;\r LD A,(HL) ; GET EXPECTED CODE\r LD (VXCKCO),A ; SAVE\r \r LD HL,VXCSEN ; SET CODE FOR SOURCE (UNITS)\r ADD HL,DE ; ON PORT 42\r LD A,(HL) ;\r OUT (C),A ; OUTPUT\r \r CALL PAUSE ; WAIT 16-24 MSEC\r \r LD IX,(CURRBH) ;\r \r LD BC,PORT43 ;\r IN A,(C) ; E.G. XXXX 1110\r AND 0FH ; 0000 1111\r LD D,A ; = 0000 1110\r \r LD A,(VXCKCO) ; E.G. 1110 1110\r AND 0FH ; 0000 1111\r ; = 0000 1110\r \r CP D\r JP NZ,ERRVX ;\r \r JR ACK ;\r \r GRP2: LD BC,PORT47 ; IF DEST.=21-40 (KRA 21-40)\r OUT (C),A ; THEN SET CODE FOR DEST.\r ; ON PORT 47\r LD BC,PORT42 ;\r LD E,1EH ; IF DELETE\r BIT 0,(IX+CTL) ; THEN SOURCE=TEST GEN.\r JR Z,NED2 ; ELSE\r \r LD E,(IX+SOUR) ; GET SOURCE\r NED2: LD D,0 ;\r LD HL,VXCREC ;\r ADD HL,DE ;\r LD A,(HL) ; GET EXPECTED CODE\r LD (VXCKCO),A ; SAVE\r \r LD HL,VXCSEN ; SET CODE FOR SOURCE (UNITS)\r ADD HL,DE ; ON PORT 42\r LD A,(HL) ;\r OUT (C),A ; OUTPUT\r \r CALL PAUSE ; WAIT 16-24 MSEC\r \r LD IX,(CURRBH) ;\r \r LD BC,PORT43 ;\r IN A,(C) ; E.G. 1110 XXXX\r AND 0F0H ; 1111 0000\r LD D,A ; = 1110 0000\r \r LD A,(VXCKCO) ; E.G. 1110 1110\r AND 0F0H ; 1111 0000\r ; = 1110 0000\r CP D ;\r JR NZ,ERRVX ;\r \r JR ACK ;\r \r GRP45: LD BC,PORT48 ; IF DEST.=41-46,51-59 (KRA 41-46,51-59)\r OUT (C),A ; THEN SET CODE FOR DEST.\r ; ON PORT 48\r LD BC,PORT44 ;\r \r LD E,(IX+SOUR) ; GET SOURCE\r LD D,0 ;\r \r LD A,0FH ; IF DELETE\r \r BIT 0,(IX+CTL) ; THEN EXPECTED = RELEASE\r JR Z,NED3 ;\r \r LD HL,VXCREC ;\r ADD HL,DE ;\r LD A,(HL) ;\r NED3: LD (VXCKCO),A ;\r \r LD HL,VXCSEN ;SET CODE FOR SOURCE (UNITS)\r ADD HL,DE ; ON PORT 42\r LD A,(HL) ;\r OUT (C),A ; OUTPUT\r \r CALL PAUSE ; WAIT 16-24 MSEC\r \r LD IX,(CURRBH) ;\r \r LD BC,PORT45 ;\r IN A,(C) ;\r AND 0FH ;\r LD D,A ;\r \r LD A,(VXCKCO) ;\r AND 0FH ;\r \r CP D ;\r JR NZ,ERRVX ;\r \r JR ACK ;\r \r \r ;***********************************************************************\r ;***********************************************************************\r \r \r ACK: SET 0,(IX+CTL) ; SET "ACK" BIT IN BUFFER\r \r RETUR: LD DE,(CURRBH)\r LD HL,QME\r CALL SUBENQ ; RETURN CURRENT BUFFER\r ACTIVATE S,9 ; ACTIVATE EXEC. PROCESS ( NO. 9)\r \r JP NXBUF ; GO TO "NXBUF" IN START OF PROGRAM\r \r \r \r \r ;------------------------------- DEVICE ERROR --------------------------\r \r ERRPX: NOP ; ERROR IN PULSE MATRIX\r JR DVERR ;\r \r ERRCD: NOP ; ERROR IN CAM.DELEG. EQUIPMENT\r JR DVERR ;\r \r ERRVX: NOP ; ERROR IN VIDEO MATRIX\r JR DVERR ;\r \r \r DVERR: LD A,(IX+CTL) ; IF UNEXPECTED ANSWER FROM MATRIX\r LD (ERRCTL),A ; THEN\r LD A,(IX+SOUR) ; BEGIN\r LD (ERRSOU),A ; STORE CONTROL, SOURCE, DESTIN.\r LD A,(IX+DEST) ; CONCERNING CROSSPOINT.\r LD (ERRDST),A\r LD A,(DEVERR) ; INCREMENT ERROR COUNT\r INC A\r LD (DEVERR),A\r \r NAK: RES 0,(IX+CTL) ; RESET "ACK" BIT IN BUFFER\r JR RETUR ; GO TO "RETUR"\r ; END\r \r \r ;-------------------------------- BUFFER CODE ERRORS -------------------\r \r \r ERPXCM: NOP ; ERROR IN PULSE COMMAND.\r JR NAK\r \r ERCDCM: NOP ; ERROR IN CAM. DEL. COMMAND.\r JR NAK\r \r ERICCM: NOP ; ERROR IN INTERCOM. COMMAND\r JR NAK\r \r ERVXCM: NOP ; ERROR IN VIDEO COMMAND\r JR NAK\r \r \r ;------------------------------- --------------------------------\r ;------------------------------- TABLES --------------------------------\r ;------------------------------- --------------------------------\r \r \r ;------------------------------- TAB1PX --------------------------------\r \r TAB1PX: ; THIS TABLE GIVES ADDITIONAL INFORMATIONS\r DB 00 ; TO THE PULSE MODULE.\r SRC01P: DB 18H ; INPUT TO TABLE IS THE SOURCE NUMBER.\r SRC02P: DB 28H ;\r SRC03P: DB 48H ;\r SRC04P: DB 88H ; TABLE VALUE = X X X X X X X X\r SRC05P: DB 10H ; I I I I I I I I\r SRC06P: DB 20H ; OUTPUT PORT CONTENT -+-+-+-+ I I I I\r SRC07P: DB 40H ; CONTENT SHIFT BIT -------------+ I I I\r SRC08P: DB 80H ; SOURCE GROUP --------------------+-+-+\r SRC09P: DB 1BH ;\r SRC10P: DB 2BH ;\r SRC11P: DB 4BH ;\r SRC12P: DB 8BH ;\r SRC13P: DB 13H ;\r SRC14P: DB 23H ;\r SRC15P: DB 46H ;\r DB 00 ;\r DB 00 ;\r DB 00 ;\r SRC19P: DB 86H ;\r DB 00 ;\r DB 00 ;\r DB 00 ;\r DB 00 ;\r DB 00 ;\r DB 00 ;\r DB 00 ;\r SRC27P: DB 16H ;\r SRC28P: DB 26H ;\r DB 00 ;\r SRC30P: DB 43H ;\r SRC31P: DB 1EH ;\r SRC32P: DB 2EH ;\r SRC33P: DB 4EH ;\r SRC34P: DB 8EH ;\r DB 00 ;\r DB 00 ;\r DB 00 ;\r DB 00 ;\r DB 00 ;\r DB 00 ;\r \r \r ;------------------------------- TAB2PX --------------------------------\r \r TAB2PX:\r DW 0000 ; THIS TABLE SUPPLIES THE PULSE MODULE\r DW 0000 ; WITH ABSOLUTE PORT ADDRESSES\r PORT49: DW 4030H ; T1---\r PORT50: DW 4029H ; L1 I\r PORT51: DW 4031H ; T2 I---GROUP 0 = SOURCE NO'S 1-8\r PORT52: DW 402AH ; L2 I\r PORT53: DW 4032H ; T3 I\r PORT54: DW 402CH ; L3---\r PORT55: DW 4058H ; T1---\r PORT56: DW 4050H ; L1 I\r PORT57: DW 4059H ; T2 I---GROUP 3 = SOURCE NO'S 9-14,30\r PORT58: DW 4051H ; L2 I\r PORT59: DW 4060H ; T3 I\r PORT60: DW 4052H ; L3---\r PORT61: DW 4061H ; T1---\r PORT62: DW 4054H ; L1 I\r PORT63: DW 4062H ; T2 I---GROUP 6 = SOURCE NO'S 31-34,27,28,15,19\r PORT64: DW 405AH ; L2 I\r PORT65: DW 4064H ; T3 I\r PORT66: DW 405CH ; L3---\r \r \r ;------------------------------- TAB1VX --------------------------------\r \r TAB1VX: ;\r DB 7FH ; THIS TABLE CONNECTS SYMBOLIC SOURCE NUMBERS\r SRC01V: DB 0EEH ; WITH ACTUAL CODES FOR ADDRESSING OF\r SRC02V: DB 0EDH ; VIDEO MATRIX INPUTS\r SRC03V: DB 0ECH ;\r SRC04V: DB 0EBH ;\r SRC05V: DB 0EAH ;\r SRC06V: DB 0E9H ;\r SRC07V: DB 0E8H ;\r SRC08V: DB 0E7H ;\r SRC09V: DB 0E6H ;\r SRC10V: DB 0EFH ;\r SRC11V: DB 0DEH ;\r SRC12V: DB 0DDH ;\r SRC13V: DB 0DCH ;\r SRC14V: DB 0DBH ;\r SRC15V: DB 0DAH ;\r SRC16V: DB 0D9H ;\r SRC17V: DB 0D8H ;\r SRC18V: DB 0D7H ;\r SRC19V: DB 0D6H ;\r SRC20V: DB 0DFH ;\r SRC21V: DB 0BEH ;\r SRC22V: DB 0BDH ;\r SRC23V: DB 0BCH ;\r SRC24V: DB 0BBH ;\r SRC25V: DB 0BAH ;\r SRC26V: DB 0B9H ;\r SRC27V: DB 0B8H ;\r SRC28V: DB 0B7H ;\r SRC29V: DB 0B6H ;\r SRC30V: DB 0BFH ; TEST GENERATOR. USED WHEN DELETE X-POINT\r SRC31V: DB 7EH ;\r SRC32V: DB 7DH ;\r SRC33V: DB 7CH ;\r SRC34V: DB 7BH ;\r SRC35V: DB 7AH ;\r DB 00 ;\r DB 00 ;\r DB 7FH ;\r DB 00 ;\r DB 00 ;\r \r \r ;------------------------------- TAB2VX --------------------------------\r \r ; THIS TABLE GIVES ADDITIONAL INFORMATIONS TO\r ; THE VIDEO MODULE. INPUT TO TABLE IS\r ; THE DESTINATION NUMBER\r \r TAB2VX: ; CONTENT SHIFT PORT PORT CONTENT\r DB 00 ; 0 0 0\r DEST01: DB 19H ; 1 1 1 35 01H\r DEST02: DB 29H ; 2 1 1 35 02H\r DEST03: DB 49H ; 4 1 1 35 04H\r DEST04: DB 89H ; 8 1 1 35 08H\r DEST05: DB 11H ; 1 0 1 35 10H\r DEST06: DB 21H ; 2 0 1 35 20H\r DEST07: DB 41H ; 4 0 1 35 40H\r DEST08: DB 81H ; 8 0 1 35 80H\r DEST09: DB 1AH ; 1 1 2 36 01H\r DEST10: DB 2AH ; 2 1 2 36 02H\r DEST11: DB 4AH ; 4 1 2 36 04H\r DEST12: DB 8AH ; 8 1 2 36 08H\r DEST13: DB 12H ; 1 0 2 36 10H\r DEST14: DB 22H ; 2 0 2 36 20H\r DEST15: DB 42H ; 4 0 2 36 40H\r DEST16: DB 82H ; 8 0 2 36 80H\r DEST17: DB 1BH ; 1 1 3 37 01H\r DEST18: DB 2BH ; 2 1 3 37 02H\r DEST19: DB 4BH ; 4 1 3 37 04H\r DEST20: DB 8BH ;\r DEST21: DB 13H ;\r DEST22: DB 23H ;\r DEST23: DB 43H ; ETC.\r DEST24: DB 83H ;\r DEST25: DB 1CH ;\r DEST26: DB 2CH ;\r DEST27: DB 4CH ;\r DEST28: DB 8CH ;\r DEST29: DB 14H ;\r DEST30: DB 24H ;\r DEST31: DB 44H ;\r DEST32: DB 84H ;\r DEST33: DB 1DH ;\r DEST34: DB 2DH ;\r DEST35: DB 4DH ;\r DEST36: DB 8DH ;\r DEST37: DB 15H ;\r DB 00 ;\r DB 00 ;\r DEST40: DB 85H ;\r DEST41: DB 1EH ;\r DEST42: DB 2EH ;\r DEST43: DB 4EH ;\r DEST44: DB 8EH ;\r DEST45: DB 16H ;\r DEST46: DB 26H ;\r DB 00 ;\r DB 00 ;\r DB 00 ;\r DB 00 ;\r DEST51: DB 46H ;\r DEST52: DB 86H ;\r DEST53: DB 1FH ;\r DEST54: DB 2FH ;\r DEST55: DB 4FH ;\r DEST56: DB 8FH ;\r DEST57: DB 17H ;\r DEST58: DB 27H ;\r DEST59: DB 47H ;\r DB 00 ;\r \r \r ;------------------------------- TAB3VX --------------------------------\r \r TAB3VX:\r DW 0000 ; 0\r PORT35: DW 4034H ; 1 SET PULSE TO DEST. 1-8\r PORT36: DW 4038H ; 2 - " - 9-16\r PORT37: DW 4039H ; 3 - " - 17-24\r PORT38: DW 403AH ; 4 - " - 25-32\r PORT39: DW 403CH ; 5 - " - 33-37,40\r PORT40: DW 4021H ; 6 - " - 41-46,51-52\r PORT41: DW 4022H ; 7 - " - 53-59 + CAM. PIN 13\r ; (SHARED PORT)\r \r ;--------------------- TABLES FOR VIDEO MATRIX CHECK -------------------\r ;--------------------- DEST. CODE AND GROUP TABLE ----------------------\r \r ; GROUP CODE GROUP\r VXT1CK: DB 00 ; III\r DB 26H ; 1 19H DEST. 1 -- 0011 1001\r DB 27H ; 1 18H 2 I I IIII\r DB 28H ; 1 17H 3 I CODE\r DB 29H ; 1 16H 4 I\r DB 2AH ; 1 15H 5 I\r DB 2BH ; 1 14H 6 I\r DB 2CH ; 1 13H 7 I\r DB 2DH ; 1 12H 8 I\r DB 2EH ; 1 11H 9 -- KRA 1-20\r DB 2FH ; 1 10H 10 I GRP 1\r DB 36H ; 1 09H 11 I\r DB 37H ; 1 08H 12 I\r DB 38H ; 1 07H 13 I\r DB 39H ; 1 06H 14 I\r DB 3AH ; 1 05H 15 I\r DB 3BH ; 1 04H 16 I\r DB 3CH ; 1 03H 17 I\r DB 3DH ; 1 02H 18 I\r DB 3EH ; 1 01H 19 I\r DB 3FH ; 1 00H 20 --\r DB 46H ; 2 19H 21\r DB 47H ; 2 18H 22\r DB 48H ;\r DB 49H ;\r DB 4AH ;\r DB 4BH ;\r DB 4CH ;\r DB 4DH ;\r DB 4EH ;\r DB 4FH ;\r DB 56H ;\r DB 57H ;\r DB 58H ;\r DB 59H ;\r DB 5AH ;\r DB 5BH ;\r DB 5CH ;\r DB 00 ;\r DB 00 ;\r DB 5FH ;\r DB 86H ;\r DB 87H ;\r DB 88H ;\r DB 89H ;\r DB 8AH ;\r DB 8BH ;\r DB 00 ;\r DB 00 ;\r DB 00 ;\r DB 00 ;\r DB 0AEH ;\r DB 0AFH ;\r DB 0B6H ;\r DB 0B7H ;\r DB 0B8H ;\r DB 0B9H ;\r DB 0BAH ;\r DB 0BBH ;\r DB 0BCH ;\r DB 00 ;\r \r ;--------------------------- MATRIX INPUT (UNITS) SEND CODE ------------\r \r VXCSEN: DB 00 ; 0\r DB 0EEH ; SOURCE 1\r DB 0DDH ; 2\r DB 0CCH ; 3\r DB 0BBH ; 4\r DB 0AAH ; 5\r DB 99H ; 6\r DB 88H ; 7\r DB 77H ; 8\r DB 66H ; 9\r DB 0FFH ; 10\r DB 0EEH ; 11\r DB 0DDH ; 12\r DB 0CCH ; 13\r DB 0BBH ; 14\r DB 0AAH ; 15\r DB 99H ; 16\r DB 88H ; 17\r DB 77H ; 18\r DB 66H ; 19\r DB 0FFH ; 20\r DB 0EEH ; 21\r DB 0DDH ; 22\r DB 0CCH ; 23\r DB 0BBH ; 24\r DB 0AAH ; 25\r DB 99H ; 26\r DB 88H ; 27\r DB 77H ; 28\r DB 66H ; 29\r DB 0FFH ; 30\r DB 0EEH ; 31\r DB 0DDH ; 32\r DB 0CCH ; 33\r DB 0BBH ; 34\r DB 0AAH ; 35\r DB 00 ; 36\r DB 00 ; 37\r DB 00 ; 38\r DB 00 ; 39\r DB 00 ; 40\r \r ;----------------------- MATRIX INPUT (TENS) RECEIVE CODE --------------\r \r VXCREC: DB 00 ;\r DB 0EEH ; SOURCE 1\r DB 0EEH ; 2\r DB 0EEH ; 3\r DB 0EEH ; 4\r DB 0EEH ; 5\r DB 0EEH ; 6\r DB 0EEH ; 7\r DB 0EEH ; 8\r DB 0EEH ; 9\r DB 0EEH ; 10\r DB 0DDH ; 11\r DB 0DDH ; 12\r DB 0DDH ; 13\r DB 0DDH ; 14\r DB 0DDH ; 15\r DB 0DDH ; 16\r DB 0DDH ; 17\r DB 0DDH ; 18\r DB 0DDH ; 19\r DB 0DDH ; 20\r DB 0CCH ; 21\r DB 0CCH ; 22\r DB 0CCH ; 23\r DB 0CCH ; 24\r DB 0CCH ; 25\r DB 0CCH ; 26\r DB 0CCH ; 27\r DB 0CCH ; 28\r DB 0CCH ; 29\r DB 0CCH ; 30\r DB 0BBH ; 31\r DB 0BBH ; 32\r DB 0BBH ; 33\r DB 0BBH ; 34\r DB 0BBH ; 35\r DB 00 ; 36\r DB 00 ; 37\r DB 00 ; 38\r DB 00 ; 39\r DB 00 ; 40\r \r \r \r ;------------------------------- PORT TABLE ----------------------------\r \r PORT22: EQU 4042H ; THIS TABLE CONNECTS SYMBOLIC PORTNUMBERS\r ; WITH ABSOLUTE PORT ADDRESSES\r PORT33: EQU 0022H ;\r PORT34: EQU 0024H ;\r \r PORT42: EQU 4040H ;\r PORT43: EQU 4048H ;\r PORT44: EQU 0042H ;\r PORT45: EQU 004AH ;\r PORT46: EQU 4041H ;\r PORT47: EQU 4044H ;\r PORT48: EQU 0044H ;\r \r PORT67: EQU 4028H ;\r PORT68: EQU 4024H ;\r \r \r \r ;------------------------------- ---------------------------\r ;------------------------------- SUBROUTINES ---------------------------\r ;------------------------------- ---------------------------\r \r \r IO1: LD BC,(PXPORT) ; IO1 TIMER: TERMINATES PULSE ACTION\r LD A,0FFH ;\r OUT (C),A ; GET PORT ADDR. AND CONTENT\r ; AND TERMINATE ACTION.\r RET ; RETURN\r \r \r IO2: LD BC,PORT68 ; IO2 TIMER: TERMINATES CAM. DELEG. ACTION\r IN A,(C) ;\r OR 3FH ; GET PORT ADDR. AND CONTENT\r OUT (C),A ; AND TERMINATE ACTION.\r RET ; RETURN\r \r \r IO3: LD D,0FFH ; IO3 TIMER: TERMINATES VIDEO ACTION\r LD BC,PORT33 ;\r OUT (C),D ; GET PORT ADDR. AND CONTENT\r LD BC,PORT34 ;\r OUT (C),D ; AND TERMINATE VIDEO SOURCE\r \r LD BC,(VXPORT) ; GET PORT ADDR. AND CONTENT\r LD A,(VXAID) ;\r CP 07H ; IF PORT IS SHARED\r JR NZ,OUT3VX ;\r IN A,(C) ; THEN SAVE\r OR 7FH ;\r LD D,A ; TERMINATE VIDEO DESTINATION\r \r OUT3VX: OUT (C),D ; OUTPUT\r RET ; RETURN\r \r \r \r PAUSE: LD BC,6 ; WAIT 16-24 MSEC\r CALL ESTABR ;\r PASSIVATE S,12 ;\r CALL SCOMMON ;\r EI\r \r RET\r \r \r INIPX: LD (PXPORT),BC ; SAVE PORT ADDR. FOR PULSE TERMINATION\r OUT (C),A ; OUTPUT\r \r LD BC,7 ; IO1 TIMER: TERMINATES PULSE ACTION\r CALL ESTABR ; AFTER DELAY (8-16 MSEC)\r \r CALL PAUSE ; WAIT 16-24 MSEC\r \r RET\r \r \r ;---------------------------------------------------------------------\r \r DSEG\r \r TABVID DS 61 ; DYNAMIC VIDEO STATUS TABLE\r \r CURRBH: DS 2 ; ADDR. OF CURRENT BUFFER\r \r ERRCTL: DS 1 ; CONTROL BYTE FROM LAST DEVICE ERROR\r ERRSOU: DS 1 ; SOURCE " " "\r ERRDST: DS 1 ; DESTINATION " " "\r DEVERR: DS 1 ; NUMBER OF DETECTED DEVICE ERRORS\r \r DS 64 ; PRIVATE STACK ON 4 LEVELS\r IOMSP:\r \r PRTSAV: ; PULSE PORT STATUS BYTES\r P49SAV DS 1\r P51SAV DS 1\r P53SAV DS 1\r P55SAV DS 1\r P57SAV DS 1\r P59SAV DS 1\r P61SAV DS 1\r P63SAV DS 1\r P65SAV DS 1\r PXPORT: DS 2 ; PORT ADDR. FOR PULSE TERMINATION\r PXCONT: DS 1 ; PORT CONTENT FOR PULSE CHECK\r GROUP DS 1\r \r CDCONT: DS 1 ; PORT CONTENT FOR CAM. DELEG. CHECK\r \r VXAID: DS 1 ; AID BYTE FOR VIDEO TERMINATION\r VXPORT: DS 2 ; PORT ADDR. FOR VIDEO TERMINATION\r VXCKCO: DS 1 ; PORT CONTENT FOR VIDEO CHECK\r \r ;**********************************************************************\r \r END\r