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: 14529 (0x38c1) Types: TextFile Names: »TLF1.SRC«
└─⟦af81bc460⟧ Bits:30005550 8" CR80 Floppy CR80FD_0034 ( MATRIX Source and Abs-files ) └─⟦af81bc460⟧ Intel_ISIS_II └─ ⟦this⟧ »TLF1.SRC«
\r NLIST S\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 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 CREATE MACRO #ID,#NO,#NAME,#PRIO\r ;DESCRIP: THE MODULE CREATES SPECIFIED\r ; PROCESS IE LOADS STARTADDRESS\r ; (#NAME) IN PROCESS-DESCRIPTION\r ; BYTE 6,7. IF NORMAL PROCESS IS\r ; ENCOUNTERED PRIORITY IS LOADED\r ; TO BYTE 5 IN PROCESS-DESCRIPTION\r ; AND THE PROCESS IS ENQUEUED IN\r ; APPROPRIATE PRIO-QUEUE.\r ; FINALLY THE SPECIFIED PROCESS\r ; IS ACTIVATED\r ;DESTR: IF NORMAL PROCESS\r ; REG. A,F,B,C,D,E,H,L\r ; IF SPECIAL PROCESS\r ; REG. F,H,L\r LD HL,#NAME ;\r IF '#ID'.EQ.'S'\r LD (SYSRAM+200H+#NO*10H+6),HL\r ;STARTADD TO PROCESS-DESCRIP\r ENDIF\r IF '#ID'.EQ.'N'\r LD (SYSRAM+200H+S*10H+#NO*20H+6),HL\r ;STARTADD TO PROCESS-DESCRIP\r LD HL,SYSRAM+200H+S*10H+#NO*20H+5\r LD (HL),#PRIO ;PRIORTY TO PROCESS\r LD HL,SYSRAM+#PRIO*8 ;ADDRESS OF PRIO-QUEUE\r LD DE,SYSRAM+200H+S*10H+#NO*20H ;ADDRESS OF PROCESS-DESCRIP\r CALL SUBENQ\r ENDIF\r ACTIVATE #ID,#NO ;ACTIVATE PROCESS\r ENDM\r \r \r LESTAB MACRO #PRNUM\r LD BC,#PRNUM\r CALL ESTABR\r ENDM\r \r LSUSPN MACRO #PRNUM\r LD BC,#PRNUM\r CALL SUSPND\r ENDM\r \r GESTAM MACRO\r LD HL,ONOFF\r LD (HL),0FFH\r ENDM\r \r GSUSPM MACRO\r LD HL,ONOFF\r LD (HL),0\r ENDM\r \r UPDATM MACRO #PRNUM,#NO\r LD HL,DELAY+#PRNUM\r LD (HL),#NO\r ENDM\r \r IDEPAS MACRO\r NOP\r ENDM\r \r OGEPAS MACRO #NO\r NOP\r ENDM\r \r ODEPAS MACRO #NO\r NOP\r ENDM\r \r OGEPAC MACRO \r NOP\r ENDM\r \r ODEPAC MACRO\r NOP\r ENDM\r \r OGEPA MACRO #NO\r NOP\r ENDM\r \r ODEPA MACRO #NO\r NOP\r ENDM\r \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: TFK MATRIX PROCESS *\r ;* *\r ;******************************************************************************\r \r LINK DEFL 0\r SIO2C DEFL 0E3H\r SIO2D DEFL 0E1H\r \r SIOXCMD MACRO #N\r ;THE SIOXCMD MACRO TRANSMITS THE CONTENTS OF THE REG\r ;TO REG NIMBER N IN THE SIO, THE SIO ADDRESS IS \r ;SITUATED IN THE C REG\r LD A,#N\r OUT (C),A ;POINT AT TEG\r OUT (C),E ;OUTPUT COMMAND\r ENDM\r \r PUBLIC TLFQH,EA,TRXPNT,TRXBUF,RECPNT,RECBUF,QELM\r PUBLIC TFMINI,TRXINT,RECINT,SALOUT,TABTFK\r EXTRN SCOMMON,SUBDEQ,SUBENQ,SYSRAM,ESTABR,SUSPND\r EXTRN QEA,QME,QUEST,QAQEST,DELAY,CONDIT\r \r CSEG\r TFMINI: LD SP,PSTACK ;INITIALIZE STACKPOINTER\r LD HL,TRXBUF ;INIT TRXBUF POINTER\r LD (TRXPNT),HL\r LD HL,RECBUF ;INIT RECBUF POINTER\r LD A,0\r LD (HL),A\r LD (RECPNT),HL\r UPDATM 5,100 ;UPDATE TIMEOUT-DELAY = 0.8 SEC.\r \r *******************************************************************************\r * TRANSMITTER PART *\r *******************************************************************************\r GETELM: PASSIVATE S,11\r CALL SCOMMON\r EI\r GET0: LD HL,QEA\r CALL SUBDEQ\r JR NC,GET1 ;IF BUFFER IN QEA THEN\r LD (EA),DE ;BEGIN\r PUSH DE ;\r POP IX ;\r LD HL,QME ;\r PUSH HL ; SAVE OUTG.Q-HEAD ADDRESS(QME)\r LD HL,CONDIT ;\r BIT 6,(HL) ;\r JR Z,CASE2 ; IF INITIALIZATION IN PROGRESS\r LD A,(IX+3) ;\r CP 30 ; AND\r JR NZ,CASE2 ; SOURCE = TEST THEN\r LD (IX+2),00 ; INSERT RELEASE COMMAND CODE\r JR CASE2 ;END\r GET1: LD HL,QAQEST\r CALL SUBDEQ\r JR NC,GETELM ;IF BUFFER IN QAQEST THEN\r LD (EA),DE ;BEGIN\r PUSH DE ;\r POP IX ;\r LD HL,QUEST ;\r PUSH HL ; SAVE OUTG.Q-HEAD ADDRESS(QUEST)\r LD A,(IX+2) ;\r CP 02H ; IF A QUESTION COMMAND THEN\r JR Z,CASE1 ; DO CASE1 ELSE\r JR CASE2 ; DO CASE2\r ;END\r \r ;--------------------------------------------------------------------------\r CASE1: ;QUESTION COMMAND\r LD IY,TRXBUF\r LD (IY),'Q' ;INSERT ASCII COMMAND CODE\r INC IY\r LD B,0\r LD C,(IX+4) ;GET DESTINATION NO.\r LD HL,DSTTAB\r ADD HL,BC\r CALL PAIR ;CONVERT DEST.NO. TO ASCII AND INSERT\r LD (IY),0 ;INSERT STOP\r JP TRANSM\r \r ;-----------------------------------------------------------------------------\r CASE2: ;EXECUTION COMMAND\r LD A,(IX+2) ;GET COMMAND CODE\r CP 00\r JR NZ,Q ;IF COMMAND CODE = RELEASE THEN\r ;BEGIN\r LD (IX+2),01 ;\r LD (IX+3),38 ; INSERT RELEASE CODE(MTC)\r LD A,01 ;END\r Q: LD HL,CMDTAB\r LD BC,3\r CPIR\r JR Z,Q2 ;IF COMMAND ERROR THEN\r RES 0,(IX+2) ;RESET ACK-BIT IN BUFFER AND\r JP CNTRL ;RETURN\r \r Q2: LD HL,CODTAB\r ADD HL,BC\r LD A,(HL) ;GET ASCII COMMAND CODE\r LD IY,TRXBUF\r LD (IY),A ;INSERT ASCII COMMAND CODE\r INC IY\r LD B,0\r LD C,(IX+3) ;GET SOURCE NO.\r CP 'L'\r JR Z,Q21 ;IF ORDINARY CP THEN\r LD HL,SRCTAB ;USE SRCTAB\r JR Q22 ;ELSE\r Q21: LD HL,LSTTAB ;USE LSTTAB\r Q22: ADD HL,BC\r CALL PAIR ;CONVERT SOURCE NO. TO ASCII AND INSERT\r LD (IY),'D'\r INC IY\r \r LD B,0\r LD C,(IX+4) ;GET DESTINATION NO.\r LD HL,DSTTAB\r ADD HL,BC\r CALL PAIR ;CONVERT DEST.NO. TO ASCII AND INSERT\r LD HL,TRXBUF\r LD A,(HL)\r CP 'L'\r JR Z,TRANSM ;IF NOT A "LISTEN"-COMMAND THEN\r ;BEGIN\r LD (IY),'G' ;\r INC IY ; INSERT "GO"\r LD (IY),'O' ;\r INC IY ;\r LD HL,TABTFK ;\r LD B,0 ;\r LD C,(IX+4) ;\r ADD HL,BC ;\r LD A,(IX+3) ;\r CP 31 ;\r JR Z,Q31 ; IF SOURCE = 31,32,33,34,35 OR MTC THEN\r CP 32 ; SET (A) = 0\r JR Z,Q31 ;\r CP 33 ;\r JR Z,Q31 ;\r CP 34 ;\r JR Z,Q31 ;\r CP 35 ;\r JR Z,Q31 ;\r CP 38 ;\r JR NZ,Q32 ;\r Q31: LD A,0 ;\r Q32: LD B,A ;\r LD A,58 ; BEGIN\r CP C ;\r JR Z,Q33 ;\r INC A ;\r CP C ;\r JR NZ,Q34 ; IF DESTIN. = 58 OR 59 THEN\r Q33: LD A,0 ; SKIP IF SOURCE IS NOT ONE OF 1-12\r CP B ;\r JR Z,TRANSM ;\r LD A,12 ;\r CP B ;\r JR C,TRANSM ;\r ; END ELSE\r Q34: LD (HL),B ; UPDATE LOCAL STATUS TABLE\r JR TRANSM ;END\r \r \r ;-----------------------------------------------------------------------------\r TRANSM: LD (IY),0 ;INSERT STOP\r LD HL,TRXBUF\r LD (TRXPNT),HL ;RESET TRX POINTER\r DI\r CALL TRX ;TRANSMIT FIRST CHAR.\r EI\r LESTAB 5 ;RESTART TIMEOUT-TIMER\r \r ******************************************************************************\r * RECEIVER PART *\r ******************************************************************************\r WAIT: PASSIVATE S,11 ;\r CALL SCOMMON ;\r EI ;\r LD HL,RECBUF ;WAIT FOR REPLY\r LD A,0FFH ;\r CP (HL) ;\r JR NZ,WAIT ;\r LSUSPN 5 ;SUSPEND TIMEOUT-TIMER\r \r AVL: LD IX,(EA)\r LD IY,RECBUF\r LD (IY),0 ;RESET BUFFER AVAILABLE FLAG\r LD A,'M'\r CP (IY+1)\r JR NZ,AVL1 ;IF THE COMMAND HAS NOT BEEN EXECUTED THEN\r RES 0,(IX+2) ;RESET ACK-BIT IN BUFFER AND\r JR CNTRL ;RETURN\r ;ELSE\r AVL1: SET 0,(IX+2) ;SET ACK-BIT IN BUFFER\r BIT 1,(IX+2)\r JR Z,CNTRL ;IF QUESTION COMMAND THEN\r ;BEGIN\r INC IY ;\r INC IY ; ADDRESS OF FIRST ASCII CHAR. OF SOURCE\r PUSH IX ;\r POP HL ;\r LD BC,3 ;\r ADD HL,BC ; ADDRESS OF SOURCE BYTE IN BUFFER\r ;\r LD BC,39 ;\r LD DE,SRCTAB ;\r CALL TWOASC ; CONVERT ASCII SOURCE TO LOGIC SOURCE NO.\r ;\r INC IY ;\r INC HL ;\r LD BC,86 ;\r LD DE,DSTTAB ;\r CALL TWOASC ; CONVERT ASCII DESTIN. TO LOGIC DESTIN. NO.\r ;END\r CNTRL: POP HL ;GET OUTGOING Q-HEAD ADDRESS\r PUSH HL\r LD A,QME.LOW.\r CP L\r JR NZ,CNT1\r LD A,QME.HIGH.\r CP H\r JR NZ,CNT1\r ACTIVATE S,9\r CNT1: POP HL\r LD DE,(EA)\r CALL SUBENQ ;ENQUE BUFFER IN OUTGOING Q-HEAD\r JP GET0\r \r \r *****************************************************************************\r ; TRANSMITTER INTERRUPT :\r \r TRXINT: EXX ;SAVE REGISTERS\r EX AF,AF' ;\r CALL TRX ;TRANSMIT CHAR.\r EXX ;\r EX AF,AF' ;\r EI ;\r RETI ;\r \r \r TRX: LD HL,(TRXPNT) ;IF CHAR = EOT THEN\r LD A,(HL) ;\r CP 00 ;\r JR NZ,PRCED ;\r EOT: LD C,SIO2C ;RESET TRANSMITTER INTERRUPT PENDING\r LD E,28H ;\r SIOXCMD 0 ;\r LD HL,TRXBUF ;\r LD (TRXPNT),HL ;\r RET ;\r PRCED: OUT (SIO2D),A ;OUTPUT CHAR\r INC HL ;UPDATE TRXPNT\r LD (TRXPNT),HL ;\r RET ;\r \r *****************************************************************************\r ; RECEIVER INTERRUPT :\r \r RECINT: EXX ;SAVE REGISTERS\r EX AF,AF' ;\r CALL REC ;\r EXX ;RESTORE REGISTERS\r EX AF,AF' ;\r EI ;\r RETI ;\r \r \r REC: IN A,(SIO2D) ;GET CHAR.\r AND 7FH ;\r CP 'R' ;IF CHAR'S NOT END OF MESSAGE\r JR Z,EOR ;THEN\r LD HL,(RECPNT) ;PUT CHAR INTO REC BUFFER\r LD (HL),A ;\r INC HL ;UPDATE BUFFER POINTER\r LD (RECPNT),HL ;\r RET ;\r EOR: LD HL,RECBUF ;\r LD A,0FFH ;PUT BUFFER AVAILABLE\r LD (HL),A ;\r LD (RECPNT),HL ;RE-INITIALIZE RECEIVER POINTER\r ACTIVATE S,11 ;ACTIVATE TFK PROCESS\r RET ;\r \r \r ****************************************************************************\r ; TIMEOUT ROUTINE :\r \r SALOUT: LD IX,RECBUF\r LD (IX),0FFH ;PUT BUFFER AVAILABLE\r LD (IX+1),'M' ;INSERT "MISSING"-CHAR.\r LD (RECPNT),IX ;RE-INITIALIZE RECEIVER POINTER\r ACTIVATE S,11 ;ACTIVATE TFK PROCESS\r RET\r \r \r ;----------------------------------------------------------------------------\r ; PAIR - CONVERTS 1 BYTE TO ASCII :\r \r PAIR: LD A,(HL)\r AND 0F0H\r RRC A\r RRC A\r RRC A\r RRC A\r CALL CONV ;CONVERT MSB NIBBLE TO ASCII\r LD (IY),A\r LD A,(HL)\r AND 0FH\r INC IY\r CALL CONV ;CONVERT LSB NIBBLE TO ASCII\r LD (IY),A\r INC HL\r INC IY\r RET\r \r ;----------------------------------------------------------------------\r ; CONV - CONVERTS 4 BIT TO ONE ASCII CHAR. :\r \r CONV: AND 0FH\r OR 30H\r CP 3AH\r RET M ;RETURN IF CIFFER 0-9\r ADD A,7\r RET\r \r \r ;-----------------------------------------------------------------------------\r ; TWOASC - CONVERTS TWO ASCII HEX CHAR. TO BINARY LOGIC NO.'S :\r ;\r ; ENTRY : 'IY' POINTER TO FIRST ASCII CHAR\r ; 'HL' POINTER TO PLACE RESULT\r ;\r ; EXIT : 'IY' = 'IY' + 2\r \r TWOASC: LD A,(IY)\r SUB 30H\r CP 0AH\r JP M,TWO00\r SUB 07\r TWO00: RLD\r INC IY\r LD A,(IY)\r SUB 30H\r CP 0AH\r JP M,TWO01\r SUB 07\r TWO01: RLD\r INC IY\r \r PUSH HL ;SAVE PLACE RESULT POINTER\r LD A,(HL)\r EX DE,HL ;STARTADDR. OF TABLE IN (HL)\r PUSH BC\r POP DE\r CPIR\r JR NZ,N1\r EX DE,HL\r DEC HL\r AND A\r SBC HL,BC\r LD A,L\r JR N2\r N1: LD A,0\r N2: POP HL\r LD (HL),A\r RET\r \r \r *****************************************************************************\r * TABLES : *\r *****************************************************************************\r \r CMDTAB: DB 01H ;INPUT CMND CODES TO THE INTERFACE\r DB 80H ;\r DB 02H ;\r \r CODTAB: DB 'Q' ;ASCII CODED CMNDS\r DB 'L' ;\r DB 'S' ;\r \r \r \r SRCTAB: ;DECODE TABLE FOR SOURCE ADDRESSES\r DB 00H ;\r DB 01H ;\r DB 02H ;\r DB 03H ;\r DB 04H ;\r DB 05H ;\r DB 06H ;\r DB 07H ;\r DB 08H ;\r DB 09H ;\r DB 10H ;\r DB 11H ;\r DB 12H ;\r DB 13H ;\r DB 14H ;\r DB 15H ;\r DB 16H ;\r DB 17H ;\r DB 18H ;\r DB 19H ;\r DB 20H ;\r DB 21H ;\r DB 22H ;\r DB 23H ;\r DB 24H ;\r DB 25H ;\r DB 26H ;\r DB 27H ;\r DB 28H ;\r DB 29H ;\r DB 30H ;\r DB 40H ;\r DB 40H ;\r DB 40H ;\r DB 40H ;\r DB 40H ;\r DB 36H ;\r DB 37H ;\r DB 40H ;\r \r \r LSTTAB: ;DECODE TABLE FOR LISTEN ADDRESSES\r DB 00H ;\r DB 01H ;\r DB 02H ;\r DB 03H ;\r DB 04H ;\r DB 05H ;\r DB 06H ;\r DB 07H ;\r DB 08H ;\r DB 09H ;\r DB 10H ;\r DB 11H ;\r DB 12H ;\r DB 13H ;\r DB 14H ;\r DB 15H ;\r DB 16H ;\r DB 17H ;\r DB 18H ;\r DB 19H ;\r DB 20H ;\r DB 21H ;\r DB 22H ;\r DB 23H ;\r DB 24H ;\r DB 25H ;\r DB 26H ;\r DB 27H ;\r DB 28H ;\r DB 29H ;\r DB 33H ;\r DB 34H ;\r DB 57H ;\r DB 58H ;\r DB 59H ;\r DB 60H ;\r DB 38H ;\r DB 39H ;\r DB 0 ;\r DB 0 ;\r DB 51H ;\r DB 30H ;\r DB 31H ;\r DB 32H ;\r DB 35H ;\r DB 36H ;\r DB 37H ;\r DB 40H ;\r DB 41H ;\r DB 0 ;\r DB 0 ;\r DB 42H ;\r DB 43H ;\r DB 44H ;\r DB 45H ;\r DB 46H ;\r DB 47H ;\r DB 48H ;\r DB 49H ;\r DB 50H ;\r DB 0 ;\r DB 52H ;\r DB 53H ;\r DB 54H ;\r DB 55H ;\r DB 56H ;\r \r \r DSTTAB: ;DECODE TABLE FOR DESTINATION ADDRESSES\r DB 00H ;\r DB 01H ;\r DB 02H ;\r DB 03H ;\r DB 04H ;\r DB 05H ;\r DB 06H ;\r DB 07H ;\r DB 08H ;\r DB 09H ;\r DB 10H ;\r DB 11H ;\r DB 12H ;\r DB 13H ;\r DB 14H ;\r DB 15H ;\r DB 16H ;\r DB 17H ;\r DB 18H ;\r DB 19H ;\r DB 20H ;\r DB 21H ;\r DB 22H ;\r DB 23H ;\r DB 24H ;\r DB 25H ;\r DB 26H ;\r DB 27H ;\r DB 28H ;\r DB 29H ;\r DB 30H ;\r DB 31H ;\r DB 32H ;\r DB 33H ;\r DB 34H ;\r DB 35H ;\r DB 36H ;\r DB 37H ;\r DB 38H ;\r DB 39H ;\r DB 40H ;\r DB 41H ;\r DB 42H ;\r DB 43H ;\r DB 44H ;\r DB 45H ;\r DB 46H ;\r DB 47H ;\r DB 48H ;\r DB 49H ;\r DB 50H ;\r DB 51H ;\r DB 52H ;\r DB 53H ;\r DB 54H ;\r DB 55H ;\r DB 56H ;\r DB 57H ;\r DB 58H ;\r DB 59H ;\r DB 60H ;\r DB 65H ;\r DB 66H ;\r DB 67H ;\r DB 68H ;\r DB 69H ;\r DB 70H ;\r DB 71H ;\r DB 72H ;\r DB 73H ;\r DB 74H ;\r DB 75H ;\r DB 77H ;\r DB 78H ;\r DB 79H ;\r DB 80H ;\r DB 81H ;\r DB 82H ;\r DB 83H ;\r DB 84H ;\r DB 85H ;\r DB 86H ;\r DB 88H ;\r DB 89H ;\r DB 90H ;\r DB 91H ;\r \r \r \r DSEG\r ORG 430H\r TABTFK DS 86 ;DYNAMIC DESTINATION TABLE\r TLFQH DS 6 ;COMMAND BUFFER\r EA DS 2 ;SAVE LOCATION FOR THE COMMAND BUFFER ADDRESS\r TRXPNT DS 2 ;POINTER TO THE INT ROUT INPUT BUFFER\r TRXBUF DS 10 ;INPUT BUFFER TO THE INT ROUT\r RECPNT DS 2 ;POINTER TO THE INT ROUT OUTPUT BUFFER\r RECBUF DS 10 ;OUTPUT BUFFER FROM THE INT ROUT\r QELM DS 5 ;TEST ELEMENT\r DS 63\r PSTACK DS 1 ;PRIVAT STACK\r \r END\r