|
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: 9772 (0x262c) Types: TextFile Names: »PANEL.SRC«
└─⟦af81bc460⟧ Bits:30005550 8" CR80 Floppy CR80FD_0034 ( MATRIX Source and Abs-files ) └─⟦af81bc460⟧ Intel_ISIS_II └─ ⟦this⟧ »PANEL.SRC«
;******************************************************************************\r ;* *\r ;* D O R A A P P L I C A T I O N S / W *\r ;* *\r ;* DEVICE: MATRIX (I/F 104) *\r ;* *\r ;* MODULE: KEYBOARD PANEL PROCESS *\r ;* *\r ;******************************************************************************\r \r PUBLIC PANEL,OFFSET ;PANEL PROCESS\r PUBLIC STAC07\r ;\r EXTRN STATUS,CONDIT,COUNT2\r ;\r ; QUEUE HEADS :\r EXTRN QKT,QEK,QEMPTY\r ;\r EXTRN LOGSRC,LOGDST,ACTTYP,TEXT,DISPOS,DISADR,DISCOD\r EXTRN SUBDEQ,SUBENQ,SCOMMON,ESTABR\r EXTRN SYSRAM\r ;\r ; INPUT / OUTPUT PORTS :\r *************************\r PORT2 EQU 0020H\r PORT4 EQU 0030H\r PORT6 EQU 0031H\r PORT8 EQU 0032H\r PORT10 EQU 0034H\r PORT12 EQU 0040H\r PORT14 EQU 0041H\r PORT20 EQU 4020H\r PORT25 EQU 0010H\r PORT27 EQU 0012H\r PORT29 EQU 0018H\r PORT31 EQU 001AH\r ;\r KEYBOA EQU 6H ; KEYBOARD PROCESS\r KPANEL EQU 7H ; PANEL PROCESS\r STATNR EQU 8H ; INVESTIGATE PROCESS\r EXECUT EQU 9H ; EXECUTE PROCESS\r ;\r TOUT EQU 0002H\r LINK EQU 0\r ;\r DSEG\r \r OFFSET DS 2H\r DISPM DS 7H\r STAC07 DS 20H\r ;\r ; ACTIVATE MACRO\r ; PASSIVATE MACRO\r ;\r NLIST S\r ;\r ACTIVATE MACRO #ID,#NO\r ;DESRIP: THE MODULE ACTIVATES\r ; SPECIFIED PROCES.\r ; IF LINK IS SET AND PASSIV\r ; SPECIAL PROCESS IS ACTIVATED\r ; THE LINK-ELEMENT IS \r ; INCREMENTED\r ;DESTR: REG F,H,L\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 ENDM\r ;\r PASSIVATE MACRO #ID,#NO\r ;DESRIP: THE MODULE PASSIVATES\r ; SPECIFIED PROCES.\r ; IF LINK IS SET AND ACTIV\r ; SPECIAL PROCESS IS PASSIVATED\r ; THE LINK-ELEMENT IS \r ; DECREMENTED\r ;DESTR: REG F,H,L\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 ENDM\r ;\r LIST S\r ;\r CSEG\r ;\r *******************************************************************************\r * PANEL PROCESS *\r *******************************************************************************\r ;\r ; THE PANEL PROCESS UPDATES THE PANEL DISPLAYS AND LAMPS SPECIFIED\r ; BY THE INCOMMING BUFFER FROM QEK.\r ; WHEN QEK IS EMPTY, THE PANEL PROCESS IS PASSIVATED.\r ;\r ;\r ; E N T R Y :\r *******************************************************************************\r ;\r PANEL LD SP,STAC07+20H ; INIT. STACKPOINTER\r ;\r LD A,0FFH ; RESET WRITE-PULSES\r LD BC,PORT25\r OUT (C),A\r LD BC,PORT27\r OUT (C),A\r LD BC,PORT29\r OUT (C),A\r LD BC,PORT31\r OUT (C),A\r ;\r CALL JOKE\r \r LD HL,OFFSET ; BLANK ALL DISPLAYS ON PANEL\r LD (HL),37\r INC HL\r LD (HL),70\r INIDIS CALL DISP\r LD HL,OFFSET+1\r DEC (HL)\r JR NZ,INIDIS\r CALL DISP\r ;\r PAN1 CALL SCOMMON ; SCHEDULE\r EI\r ;\r PANDEQ LD HL,QEK ; DEQUEUE MESSAGE FROM EXECUTE-MODUL\r CALL SUBDEQ\r JR C,PAN2 ; IF QUEUE WAS EMPTY\r ; THEN BEGIN:\r LD HL,CONDIT ; SET CONDITION =\r RES 2,(HL) ; NOT BUSY\r RES 7,(HL) ; NO MANUEL OPERATION IN PROGRESS\r ;\r PASSIVATE S,KPANEL ; PASSIVATE KEYBOARD PANEL PROCESS\r \r JR PAN1 ; GO TO PANEL\r ; END\r ; ELSE BEGIN:\r PAN2 PUSH DE ; READ MESSAGE TYPE\r POP IX\r LD A,(IX+2)\r LD B,A\r AND 07H\r JR NZ,TEST ; TEST ROUTINE\r BIT 5,B\r JR NZ,LISTEN ; LISTEN ROUTINE\r ;\r LD A,(IX+3) ; (A) = SOURCE-NO.\r LD BC,38\r LD HL,LOGSRC\r CPIR\r JR NZ,PAN5\r AND A\r LD HL,37\r SBC HL,BC\r LD A,L\r LD (OFFSET),A ; UPDATE SOURCE OFFSET\r ;\r LD A,(IX+4) ; (A) = DESTINAION-OFFSET\r LD BC,80\r LD HL,LOGDST\r CPIR\r JR NZ,PAN5\r AND A\r LD HL,79\r SBC HL,BC\r LD A,L\r LD (OFFSET+1),A ; UPDATE DESTINATION-OFFSET\r ;\r LD A,(OFFSET+1) ; FIND ACTION TYPE\r LD B,00H\r LD C,A\r LD HL,ACTTYP\r ADD HL,BC\r LD A,(HL) ; (A) = ACTION CODE\r ;\r CP 04H\r JR Z,EXCP ; EXT. CP. ROUTINE\r CP 05H\r JR Z,TEXT3 ; TEXT3 ROUTINE\r CP 06H\r JR Z,TEXT4 ; TEXT4 ROUTINE\r ;\r JR DISPLA ; DISPLAY ROUTINE\r ; END\r ;\r PAN5 LD HL,QEMPTY ; RETURN BUFFER INTO QEMPTY\r CALL SUBENQ\r JP PANDEQ ; GO TO PANDEQ\r ;\r ;\r ; TEST ROUTINE:\r *******************************************************************************\r ;\r TEST BIT 6,B ; CHECK ACK/NACK\r JR Z,TEST1 ; IF MESSAGE = ACK\r ; THEN BEGIN:\r CPL ; TEST LAMP ON\r OR 0F8H\r JR TEST2 ; END\r ; ELSE BEGIN:\r TEST1 LD A,0FFH ; TEST LAMP OFF\r ; END\r TEST2 LD BC,PORT20\r OUT (C),A\r LD HL,QEMPTY ; RETURN BUFFER\r CALL SUBENQ\r JP PANDEQ ; GO TO PANDEQ\r ;\r ; LISTEN / EXT. DEST ROUTINE:\r *******************************************************************************\r ;\r LISTEN\r EXCP LD HL,QEMPTY ; RETURN BUFFER INTO QEMPTY\r CALL SUBENQ\r JP PANDEQ ; GO TO PANDEQ\r ;\r ; TEXT3 ROUTINE:\r *******************************************************************************\r ;\r TEXT3 LD A,(IX+2) ; CHECK ACK/NACK\r AND 0C0H\r CP 0C0H\r JR NZ,TEXT3A ; IF ESTABLISH+ACK\r ; THEN BEGIN:\r LD A,(OFFSET) ; TEXT3 LAMP ON\r LD B,00H\r LD C,A\r LD HL,TEXT\r ADD HL,BC\r LD A,(HL)\r OR 80H\r JR TEXT3B ; END\r ; ELSE BEGIN:\r TEXT3A LD A,0FFH ; TEXT3 LAMP OFF\r ; END\r TEXT3B LD BC,PORT12\r OUT (C),A\r LD HL,QEMPTY ; RETURN BUFFER INTO QEMPTY\r CALL SUBENQ\r JP PANDEQ ; GO TO PANDEQ\r ;\r ; TEXT4 ROUTINE:\r *******************************************************************************\r ;\r TEXT4 LD A,(IX+2) ; CHECK ACK/NACK\r AND 0C0H\r CP 0C0H\r JR NZ,TEXT4A ; IF ESTABLISH+ACK\r ; THEN BEGIN:\r LD A,(OFFSET) ; TEXT4 LAMP ON\r LD B,00H\r LD C,A\r LD HL,TEXT\r ADD HL,BC\r LD A,(HL)\r OR 80H\r JR TEXT4B ; END\r ; ELSE BEGIN:\r TEXT4A LD A,0FFH ; TEXT4 LAMP OFF\r ; END\r TEXT4B LD BC,PORT14\r OUT (C),A\r LD HL,QEMPTY ; RETURN BUFFER INTO QEMPTY\r CALL SUBENQ\r JP PANDEQ ; GO TO PANDEQ\r ;\r ; DISPLAY ROUTINE:\r *******************************************************************************\r ;\r DISPLA PUSH IX ; SAVE POINTER\r LD A,(IX+2) ; CHECK ACK/NACK\r AND 0C0H\r CP 0C0H\r JR Z,DIS1 ; IF NOT ESTABLISH+ACK, THEN\r ; BEGIN:\r LD HL,OFFSET ; BLANK DISPLAY\r LD (HL),37\r ; END\r DIS1 CALL DISP ; UPDATE DISPLAY\r \r BIT 4,(IX+2)\r JR NZ,DIS4 ; IF DISPLAY UPDATING GOTO DIS4\r ;\r ; CHECK ACK/NACK\r BIT 6,(IX+2)\r JR Z,DIS2 ; IF MESSAGE = ACK, THEN\r ; BEGIN:\r LD HL,CONDIT ; SET CONDITION =\r RES 3,(HL) ; NO SOURCE READY\r RES 4,(HL) ; NO DESTINATION READY\r LD HL,STATUS ;\r RES 4,(HL) ; SET STATUS = POSSIBLE CONNECTION\r ;\r LD A,0FFH ; SOURCE AND DESTINATION LAMPS OFF\r LD BC,PORT2\r OUT (C),A ; KRE1\r LD BC,PORT4\r OUT (C),A ; SET1\r LD BC,PORT6\r OUT (C),A ; SET2\r LD BC,PORT8\r OUT (C),A ; SET3\r LD BC,PORT10\r OUT (C),A ; SET4\r JR DIS3 ; END ELSE\r ; BEGIN\r DIS2 LD HL,STATUS ;\r SET 4,(HL) ; SET STATUS = IMPOSSIBLE CONNECTION\r LD BC,TOUT ;\r CALL ESTABR ; ESTABLISH TIMEOUT\r LD HL,COUNT2 ;\r LD (HL),5 ;\r ; END\r DIS3 ACTIVATE S,KEYBOA ; ACTIVATE KEYBOARD PROCESS\r \r DIS4: POP DE ; RESTORE POINTER\r LD HL,QEMPTY\r CALL SUBENQ\r JP PANDEQ ; GO TO PANDEQ\r ;\r *******************************************************************************\r ; END OF KEYBOARD PANEL PROCESS\r ;\r ;\r ; UPDATE DISPLAY :\r *******************************************************************************\r ;\r DISP LD HL,OFFSET+1 ; FIND DISPLAY POSS.\r LD D,00H\r LD E,(HL) ; (DE) = DEST. OFFSET\r LD HL,DISPOS\r ADD HL,DE\r LD A,(HL)\r LD (DISPM),A ; UPDATE DISPLAY POSS.\r ;\r LD HL,ACTTYP ; FIND PORT ADRESSES\r ADD HL,DE\r LD D,00H\r LD E,(HL)\r SLA E\r SLA E\r LD HL,DISADR\r ADD HL,DE ; (HL) = DISPLAY PORT ADRESS\r LD E,(HL)\r INC HL\r LD D,(HL)\r LD (DISPM+1),DE ; UPDATE PORT ADRESS A\r INC HL\r LD E,(HL)\r INC HL\r LD D,(HL)\r LD (DISPM+3),DE ; UPDATE PORT ADRESS I\r ;\r LD HL,OFFSET ; FIND ASCII CODE ADRESS\r LD D,00H\r LD E,(HL) ; (DE) = SOURCE OFFSET\r SLA E\r SLA E\r LD HL,DISCOD\r ADD HL,DE\r LD (DISPM+5),HL ; UPDATE ASCII CODE ADRESS\r ;\r LD B,04H ; COUNTER = 4\r ;\r DISPS PUSH BC\r LD HL,DISPM ; READ DISPLAY POSS.\r LD A,(HL)\r DEC (HL)\r ;\r LD BC,(DISPM+1)\r OUT (C),A ; SELECT DISPLAY POSS.\r ;\r LD HL,(DISPM+5) ; READ ASCII CODE\r LD A,(HL)\r SET 7,A\r INC HL\r LD (DISPM+5),HL\r ;\r LD BC,(DISPM+3) ; WRITE ASCII PORT ADDRESS\r OUT (C),A\r RES 7,A ; WRITE PULS ON\r OUT (C),A\r ;\r PUSH BC ; DELAY = CA. 20 USEC.\r LD B,06H\r DLAY1 NOP\r DJNZ DLAY1\r POP BC\r ;\r SET 7,A ; WRITE PULS OFF\r OUT (C),A\r POP BC\r \r PUSH BC ; DELAY = CA. 20 USEC.\r LD BC,06H\r DLAY2 NOP\r DJNZ DLAY2\r POP BC\r \r DJNZ DISPS\r RET ; RETURN\r ;\r *******************************************************************************\r ; END OF UPDATE DISPLAY ROUTINE\r ;\r JOKE: LD BC,00D0H\r IN A,(C)\r SRL A\r AND 03H\r AND A\r RET Z\r ADD A,37\r LD HL,OFFSET\r LD (HL),A\r INC HL\r LD (HL),70\r JOKE1: CALL DISP\r LD HL,OFFSET+1\r DEC (HL)\r JR NZ,JOKE1\r CALL DISP\r JOKE2: CALL SCOMMON\r EI\r LD HL,CONDIT\r BIT 6,(HL)\r RET Z\r LD A,(QEK+1)\r AND A\r JR Z,JOKE2\r RET\r END\r