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: 18443 (0x480b) Types: TextFile Names: »CCAWPC.SRC«
└─⟦519079be6⟧ Bits:30005500 8" CR80 Floppy CR80FD_0029 ( WBOOTL.SYS W.D bootload program 81 10 01 ??? ) └─⟦519079be6⟧ Intel_ISIS_II └─ ⟦this⟧ »CCAWPC.SRC«
;*** CCAWPC *** 81 07 24 **** LPO ***************************************\r ;ALL FILES CONTAINED HERE\r ;************************************************************************\r \r PUBLIC CCA_SCAN\r EXTRN SYSRAM,SUB_WAIT,SUB_SIGNAL,SRELEASE\r EXTRN WCA_TABLE_ADDRESS,CCA_TABLE_ADDRESS\r \r ;POINTER REGISTER CONVENTION:\r ; (IX+D) RELEATED TO WCA_TA,CCA_TA\r ; (IY+D) RELEATED TO WPC_TA\r ;REGISTER E USED ERROR COUNTER\r ;REGISTER B USED FOR COMPARE\r \r ; WCA_TABLE_ADDRESSES:\r ; COMMAND BYTE IX+00H\r ; SECTION 1 IX+01H\r ; IX+02H\r T01; SECTION 2 IX+03H\r ; IX+04H\r ; TABLE CTRL STATUS IX+05H\r ; COMMUNICATION STATUS IX+06H\r ; PARAMETER 1 IX+07H\r ; 2 IX+08H\r ; 3 IX+09H\r ; 4 IX+0AH\r \r \r \r T011; CCA_TABLE_ADDRESSES:\r ; COMMAND BYTE IX+00H\r ; SECTION 1 IX+01H\r ; IX+02H\r ; IX+03H\r ; NOT USED IX+04H\r ; TABLE CTRL STATUS IX+05H\r ; CHANNEL NUMBER IX+06H\r ; CCA ADDRESS IX+07H\r ; PARAMETER 1 IX+08H\r ; RESULT 1 IX+09H\r ; RESULT 2 IX+0AH\r \r \r \r ;*** CCA_SCAN ********************************************************\r ;SCANING OF CCA TABLE IS PERFORMED\r ;********************************************************************\r \r CSEG\r PUBLIC CCA_SCAN\r PUBLIC COUT\r \r CCA_SCAN\r T02 LD IX,CCA_TA ;CCA_TABLE_ADDRESS\r LD IY,WPC_TA ;WPC_TABLE_ADDRESS\r LD (IY+0BH),0 ;CLEAR ERR CTRL INFO\r LD (IY+07H),04H ;SET CCA ID FOR ERRD\r LD A,(IX+00H) ;GET COMMAND BYTE\r CP 0 ;COMPARE ACC WITH 0\r JR Z,CCA1 ;ACC=0, Z=1, GO TO WPC_SCAN\r CP 01H ;\r JR Z,CCA2 ;ACC=01H, REPLACE LTU\r CCA5: CP 02H ;\r JR Z,CCA3 ;ACC=02H, READ CCA STATUS\r CCA6: CP 05H ;\r JR Z,CCA4 ;ACC=05H, TRANSFER C_PAR TO CCA\r JP COUT ;\r CCA2: CALL SWITCH_LTU ;\r JP CCA5 ;\r CCA3: CALL CCA_STATUS ;\r JP CCA6 ;\r CCA4: CALL C_PAR1 ;\r COUT\r LD A,(IY+0BH) ;GET ERR CTRL INFO\r CP A,01H ;\r JP Z,CCA1 ;\r LD IX,CCA_TA ;\r LD (IX+00H),03H ;COMMAND EXECUTED\r JP CCA1 ;\r CCA1: JP WPC_SCAN ;\r \r \r \r ;*** CCA_STATUS *******************************************************\r ;CCA STATUS OF MONITORING BITS, M1 TO M4, AND ANALOG SIGNALS\r ;6 TX/RX SEQUENCES ARE PERFORMED\r ;**********************************************************************\r \r \r PUBLIC CCA_STATUS\r ;ACTUAL MODULE NOT APPLICABLE IN THE PRESENT APPLICATION\r \r CCA_STATUS\r RET ;TO CCA_SCAN\r \r \r \r ;*** SWITCH_LTU *******************************************************\r ;SWITCH TO/FROM SPARE LTU\r ;PERFORMANCE: \r ; 5 SEQUENCES USED\r ; SEND 2 BYTES\r ; RECEIVE 2 BYTES\r ; TEST 2. BYTE RECEIVED\r ;**********************************************************************\r \r \r \r PUBLIC SWITCH_LTU\r \r ;REGISTERS: E ERROR COUNTER\r \r SWITCH_LTU\r \r ;SEND CCA ADDR AND POINTER IE BANK NR OR DEVICES\r SWL1 LD E,0 ;CLEAR ERR COUNTER\r SWL11 LD IX,CCA_TA ;CCA_TABLE_ADDRESS\r LD A,(IX+01H) ;GET CCA ADDR, SECTION 1, BYTE 1\r CALL WCATX ;TX1\r LD A,(IX+02H) ;GET COMMAND (POINTER), SEC 1, BYTE 2\r LD B,A ;SAVE\r CALL WCATX ;TX2\r CALL WCARX ;RX 1. BYTE\r CALL WCARX ;RX 2. BYTE\r LD IY,WPC_TA ;WPC_TABLE_ADDRESS\r LD A,(IY+06H) ;GET 2. BYTE RECEIVED, RX DATA\r CP B ;COMPARE TX2 WITH RX2\r JR Z,SWL2 ;IF EQUAL, NEXT\r INC E ;ERR COUNTER\r BIT 2,E ;TEST IF BIT SET\r JR Z,SWL11 ;REPEAT THIS SEQUENCE\r CALL CERR1 ;ERR ROUTINE\r RET ;TO CCA_SCAN\r \r ;SEND CCA ADDR AND LTU ADDR\r SWL2 LD E,0 ;RESET ERR COUNTER\r SWL21 LD A,(IX+01H) ;CCA ADDR\r CALL WCATX ;TX1\r LD A,(IX+03H) ;LTU ADDR\r AND 0FH ;MASK OUT UPPER NIBLE\r OR 20H ;ORL A,20H (SET BIT 5)\r LD B,A ;SAVE\r CALL WCATX ;TX2\r CALL WCARX ;RX1\r CALL WCARX ;RX2\r LD A,(IY+06H) ;RX DATA\r CP B ;TX=RX\r JR Z,SWL3 ;NEXT\r INC E ;\r BIT 2,E ;\r JR Z,SWL21 ;\r CALL CERR1 ;\r RET ;\r \r ;SEND CCA ADDR AND STROBE\r SWL3 LD E,0 ;\r SWL31 LD A,(IX+01H) ;CCA ADDR\r CALL WCATX ;\r LD A,40H ;LOAD STROBE\r CALL WCATX ;\r CALL WCARX ;RX1\r CALL WCARX ;RX2\r LD A,(IY+06H) ;RX DATA\r CP 40H ;COMPARE TX,RX\r JR Z,SWL4 ;NEXT\r INC E ;\r BIT 2,E ;\r JR Z,SWL31 ;\r CALL CERR1 ;\r RET ;\r \r ;TRANCEIVE CCA ADDR AND LTU ADDR WITH ENABLE\r SWL4 LD E,0 ;\r SWL41 LD A,(IX+01H) ;CCA ADDR\r CALL WCATX ;TX1\r LD A,(IX+03H) ;LTU ADDR\r AND 0FH ;MASK OUT UPPER NIBLE\r OR 30H ;SET SPARE ENABLE ENABLE BITS 5,4\r LD B,A ;\r CALL WCATX ;TX2\r CALL WCARX ;RX1\r CALL WCARX ;RX2\r LD A,(IY+06H) ;RX DATA\r CP B ;COMPARE TX,RX\r JR Z,SWL5 ;IF OK NEXT\r INC E ;\r BIT 2,E ;\r JR Z,SWL41 ;\r CALL CERR1 ;\r RET ;\r \r ;SEND CCA ADDR AND STROBE\r SWL5 LD E,0 ;\r SWL51 LD A,(IX+01H) ;\r CALL WCATX ;\r LD A,40H ;\r CALL WCATX ;\r CALL WCARX ;\r CALL WCARX ;\r LD A,(IY+06H) ;\r CP 40H ;\r JR Z,SWL6 ;\r INC E ;\r BIT 2,E ;\r JR Z,SWL51 ;\r CALL CERR1 ;\r \r SWL6 RET ;RET TO CCA_SCAN\r \r \r \r \r ;*** C_PAR *************************************************************\r ;THIS MODULE CONTROLS THE 4 SWITCHES OF A CCA\r ;***********************************************************************\r \r \r PUBLIC C_PAR1 \r \r C_PAR1\r ; THIS MODULE CONTROLES THE 4 SWITCHES OF CCA 0\r T03 LD IY,WPC_TA ;WPC_TABLE_ADDRESS\r LD IX,CCA_TA ;CCA_TABLE_ADDRESS\r LD A,(IX+07H) ;GET CCA ADDR\r LD (IY+00H),A ;SAVE CCA ADDR\r LD (IY+08H),08H ;SET POINTER 3\r LD A,(IX+08H) ;GET PAR1 BYTE\r AND 0FH ;MASK BITS 3,2,1,0\r OR 20H ;ADD ENABLE BIT\r LD (IY+09H),A ;SWITCH DATA TO THE CCA\r LD A,(IX+08H) ;GET PAR1 BYTE\r AND 0FH ;MASK\r OR 40H ;ADD STROBE BIT\r LD (IY+0AH),A ;STROBE AND DATA FOR SWITCH 1\r CALL C_COM1 ;TRANCEIVE\r RET ;TO CCA_SCAN\r \r \r \r ;*** CCOM1 ************************************************************\r ;COMMUNICATION ROUTINE FOR W_PARS\r ;PERFORMANCE:\r ; 3 SEQUENCES ARE CONDUCTED\r ; 1. SEND 2 BYTES\r ; 2. RECEIVE 2 BYTES\r ; 3. TEST 2. BYTE RECEIVED\r ;**********************************************************************\r \r \r \r PUBLIC C_COM1\r \r ;REGISTERS: E ERROR COUNTER\r \r C_COM1\r ;LOAD CCA ADDR AND POINTER (CTRL REG)\r CC1 LD E,0 ;RESET ERR COUNTER\r LD IY,WPC_TA ;WPC_TABLE_ADDRESS\r CC11 LD A,(IY+00H) ;CCA ADDR\r CALL WCATX ;TX1\r LD A,(IY+08H) ;LOAD POINTER 3\r CALL WCATX ;SEND P3\r CALL WCARX ;RX1\r CALL WCARX ;RX2\r LD A,(IY+06H) ;LOAD RECEIVED DATA\r CP 08H ;COMPARE TX2,RX2\r JR Z,CC2 ;IF TX=RX, JMP TO NEXT SEQUENCE\r INC E ;ERR COUNT\r BIT 2,E ;TEST BIT 2\r JR Z,CC11 ;IF NOT SET REPEAT\r CALL CERR1 ;ERR REPORT\r RET ;TO C_PAR1\r \r ;CCA ADDR AND COMMAND DATA\r CC2 LD E,0 ;RESET ERR COUNTER\r CC21 LD A,(IY+00H) ;CCA ADDR\r CALL WCATX ;TX1\r LD A,(IY+09H) ;LOAD COMMAND DATA WITH ENABLE BIT\r LD B,A ;SAVE\r CALL WCATX ;TX2\r CALL WCARX ;RX1\r CALL WCARX ;RX2\r LD A,(IY+06H) ;RX DATA\r CP B ;COMPARE TX,RX\r JR Z,CC3 ;IF OK NEXT STEP\r INC E ;ERR COUNT\r BIT 2,E ;\r JR Z,CC21 ;\r CALL CERR1 ;\r RET ;\r \r ;CCA ADDR AND STROBE\r CC3 LD E,0 ;\r CC31 LD A,(IY+00H) ;CCA ADDR\r CALL WCATX ;TX1\r LD A,(IY+0AH) ;LOAD STROBE AND DATA\r LD B,A ;SAVE FOR COMPARE\r CALL WCATX ;TX2\r CALL WCARX ;RX1\r CALL WCARX ;RX2\r LD A,(IY+06H) ;RX STROBE AND DATA\r CP B ;COMPARE TX,RX\r JR Z,CC4 ;\r INC E ;\r BIT 2,E ;\r JR Z,CC31 ;\r CALL CERR1 ;\r \r CC4 RET ;TO C_PAR1\r \r \r \r ;*** WPC_SCAN *********************************************************\r ;SCANING OF THE WPC TABLE IS PERFORMED\r ;**********************************************************************\r \r \r PUBLIC WPC_SCAN\r \r WPC_SCAN\r LD IX,WCA_TABLE_ADDRESS ;\r LD IY,WPC_TABLE_ADDRESS ;\r LD (IY+0BH),0 ;CLEAR ERR CTRL INFO\r LD (IY+07H),08H ;WPC ID FOR ERRD\r LD A,(IX+00H) ;COMMAND BYTE\r CP 0 ;COMPARE WITH 0\r JR Z,WPC3 ;IF ACC=0 Z=1,NO COMMAND\r CP 01H ;ACC=1, READ STATUS\r JR Z,WPC2 ;\r WPC1 CALL SRELEASE ;LEAVE WCA DRIVER\r JP CCA_SCAN ;JMP TO START\r WPC2 CALL WPC_STATUS ;DELIVER WPC LTU STATUS\r WPC3 LD A,(IX+05H) ;GET CRTL STATUS WORD\r CP 0 ;\r JR Z,WPC1 ;IF 0, REST OF TABLE INVALID\r CALL W_PAR1 ;\r CALL W_PAR2 ;\r CALL W_PAR3 ;\r CALL W_PAR4 ;\r \r WOUT LD A,(IY+0BH) ;ERR CTRL INFO\r CP A,01H ;\r JP Z,WPC1 ;\r LD (IX+00H),02H ;COMMAND EXECUTED\r LD (IX+07H),01H ;COMMUNICATION OK\r JP WPC1 ;\r \r \r \r ;*** WPC_STATUS *******************************************************\r ;READ AND DELIVER FRONT PANEL STATUS\r ;**********************************************************************\r \r \r PUBLIC WPC_STATUS\r \r ;ACTUAL MODULE NOT APPLICABLE\r \r WPC_STATUS\r RET ;TO WPC_SCAN\r \r \r \r ;*** W_PAR *************************************************************\r ;WPC PAREMETERS IS EXECUTED\r ;***********************************************************************\r \r \r PUBLIC W_PAR1,W_PAR2,W_PAR3,W_PAR4\r \r W_PAR1 ;\r T04 LD IY,WPC_TA ;WPC_TABLE_ADDRESS\r LD IX,WCA_TA ;WCA_TABLE_ADDRESS\r LD A,(IX+08H) ;W_PAR1 BYTE\r AND 07H ;MASK BITS 2,1,0\r LD (IY+04H),A ;STATUS DATA TO BE DISPLAYED\r LD (IY+03H),30H ;WRLH UPPER ADDR PART=30H\r LD (IY+02H),06H ;WRLH LOWER ADDR PART=06H\r CALL WCOM1 ;EXECUTE COMMUNICATION\r LD A,(IX+08H) ;\r AND 38H ;MASK BITS 5,4,3\r LD (IY+04H),A ;STATUS DATA\r LD (IY+02H),02H ;WRLH ADDR LOWER PART=02H\r CALL WCOM1 ;COMMUNICATION ROUTINE\r RET ;TO WPC_SCAN\r \r W_PAR2\r T05 LD A,(IX+09H) ;W_PAR2 BYTE\r AND 07H ;MASK BITS 2,1,0\r LD (IY+04H),A ;DATA\r LD (IY+02H),07H ;WRLH ADDR LOWER PART=07\r CALL WCOM1 ;EXECUTE COMMUNICATION\r LD A,(IX+09H) ;\r AND 38H ;MASK BITS 5,4,3\r LD (IY+04H),A ;DATA\r LD (IY+02H),05H ;WRLH ADDR LOWER PART=05\r CALL WCOM1 ;\r RET ;\r \r W_PAR3\r T06 LD A,(IX+0AH) ;W_PAR3 BYTE\r AND 0FH ;MASK BITS 3,2,1,0\r LD (IY+04H),A ;DATA\r LD (IY+02H),08H ;WRLH ADDR LOWER PART=08\r CALL WCOM1 ;\r LD A,(IX+0AH) ;\r AND 0F0H ;MASK BITS 7.6.5.4\r LD (IY+04H),A ;DATA\r LD (IY+02H),09H ;WRLH ADDR LOWER PART=09\r CALL WCOM1 ;\r RET ;\r \r W_PAR4\r T07 LD A,(IX+0BH) ;W_PAR4 BYTE\r AND 03H ;MASK BITS 1,0\r LD (IY+04H),A ;DATA\r LD (IY+02H),0BH ;WRLH ADDR LOWER PART=0BH\r CALL WCOM1 ;EXECUTE COMMUNICATION\r LD A,(IX+0BH) ;\r AND 1CH ;MASK BITS 4,3,2\r LD (IY+04H),A ;DATA\r LD (IY+02H),0AH ;WRLH ADDR LOWER PART=0AH\r CALL WCOM1 ;\r RET ;\r \r \r \r ;*** WCOM1 ************************************************************\r ;THIS MODULE COMMUNICATES VIA THE WPC WITH FRONTPANEL\r ;PERFORMANCE:\r ; 4 SEQUENSES IS CONDUCTED\r ; 1. SEND 2 BYTES\r ; 2. RECEIVE 2BYTES\r ; 3. TEST 1. BYTE RECEIVED\r ;**********************************************************************\r \r \r PUBLIC WCOM1\r \r WCOM1\r \r ;SEND STATUS DATA TO BE DISPLAYED TO PAM 122\r WC1 LD E,0 ;CLEAR ERR COUNTER\r WC11 LD IY,WPC_TA ;WPC_TABLE_ADDRESS\r LD A,(IY+04H) ;GET STATUS DATA\r LD B,A ;SAVE FOR COMPARE\r LD A,122D ;ADDR PAM 122\r CALL WCATX ;TX1\r LD A,B ;STATUS DATA\r CALL WCATX ;TX2\r CALL WCARX ;RX1\r LD A,(IY+06H) ;RX DATA BYTE\r PUSH AF ;SAVE\r CALL WCARX ;RX2\r POP AF ;\r CP B ;COMP TX2,RX1\r JR Z,WC2 ;IF A=B, Z=1, JMP WP2\r INC E ;ERR COUNTER\r BIT 2,E ;\r JR Z,WC11 ;REPEAT\r CALL WERR1 ;REPEAT 3 TIMES\r RET ;TO ACTUAL W_PAR\r \r ;SEND UPPER ADDR PART OF WPC WRLH TO PAM 121\r WC2 LD E,0 ;\r WC21 LD A,121D ;ADDR PAM 121\r CALL WCATX ;TX1\r LD A,(IY+03H) ;WRLH ADDR UPPER PART\r LD B,A ;SAVE\r CALL WCATX ;TX2\r CALL WCARX ;RX1\r LD A,(IY+06H) ;RX DATA\r PUSH AF ;\r CALL WCARX ;RX2\r POP AF ;\r CP B ;COMP TX,RX\r JR Z,WC3 ;\r INC E ;\r BIT 2,E ;\r JR Z,WC21 ;\r CALL WERR1 ;\r RET ;\r \r ;TX/RX LOWER ADDR PART OF WRLH WITH HS TO PAM 120\r ;WAIT UNTIL WPC HS IS SET\r WC3 LD E,0 ;\r WC31 LD A,120D ;ADDR PAM 120\r CALL WCATX ;TX1\r LD A,(IY+02H) ;LOVER WRLH ADDR PART\r OR 20H ;ADD HAND SHAKE BIT\r LD B,A ;\r CALL WCATX ;TX2\r CALL WCARX ;RX1\r LD A,(IY+06H) ;RX DATA\r PUSH AF ;\r CALL WCARX ;RX2\r POP AF ;\r CP B ;\r JR Z,WC4 ;\r INC E ;\r BIT 5,E ;20H IS MAX REPEAT\r JR Z,WC31 ;\r CALL WERR2 ;\r RET ;\r \r ;TX/RX LOWER ADDR PART OF WRLH, NO HS TO PAM 120\r ;WAIT UNTILL WPC HS IS REMOVED\r WC4 LD E,0 ;\r WC41 LD A,120D ;PAM 120\r CALL WCATX ;TX1\r LD A,(IY+02H) ;ADDR WITHOUT HS\r LD B,A ;SAVE FOR COMPARE\r CALL WCATX ;TX2\r CALL WCARX ;RX1\r LD A,(IY+06H) ;RX DATA\r PUSH AF ;\r CALL WCARX ;RX2\r POP AF ;\r CP B ;\r JR Z,WC5 ;\r INC E ;\r BIT 5,E ;\r JR Z,WC41 ;\r CALL WERR2 ;\r \r WC5 RET ;TO ACTUAL W_PAR\r \r \r \r ;*** ERRCW ************************************************************\r ;DIV ERROR ROUTINES\r ;**********************************************************************\r \r \r \r PUBLIC ERRD,CERR1,CERR2,WERR1,WERR2\r \r ;REGISTERS: E ERROR COUNTER\r \r ;DETERMINE CCA OR WPC TYPE\r ;ONLY USED BY TTXE,TRXF\r ERRD\r LD IY,WPC_TA ;WPC_TABLE_ADDRESS\r LD A,(IY+07H) ;GET CCA/WPC ID\r CP 04H ;CCA ID\r JP Z,CERR2 ;\r CP 08H ;WPC ID\r JP Z,WERR2 ;\r \r ;CCA COMMUNICATION ERROR, RX UNEQUAL TX, BIT 2 SET IN COMMAND BYTE\r CERR1\r T09 LD E,0 ;CLEAR E\r LD IY,WPC_TA ;WPC_TABLE_ADDRESS\r LD (IY+0BH),01H ;SET ERR CTRL INFO\r LD IX,CCA_TA ;CCA_TABLE_ADDRESS\r LD (IX+00H),04H ;COMMUNICATION ERROR\r ; LD (IX+07H),02 ;RX UNEQUAL TX\r RET ;\r \r ;CCA COMMUNICATION NOT ESTABLISHED, BIT 0 SET IN COMMAND BYTE\r CERR2\r T0A LD E,0 ;\r LD IY,WPC_TA ;\r LD (IY+0BH),01H ;\r LD IX,CCA_TA ;\r LD (IX+00H),04H ;COMMUNICATION NOT ESTABLISHED\r ; LD (IX+07H),0 ;COMMUNICATION ERROR\r RET ;\r \r ;WPC COMMUNICATION ERROR, RX UNEQUAL TX, BIT 2 SET IN COMMAND BYTE\r WERR1\r T0B LD E,0 ;\r LD IY,WPC_TA ;\r LD (IY+0BH),01H ;\r LD IX,WCA_TA ;\r LD (IX+00H),03H ;WPC COMMUNICATION ERROR\r LD (IX+07H),02H ;COMMUNICATION ERROR\r RET ;\r \r ;WPC COMMUNICATION NOT ESTABLISHED, BIT 0 SET IN COMMAND BYTE\r WERR2\r T0C LD E,0 ;\r LD IY,WPC_TA ;\r LD (IY+0BH),01H ;\r LD IX,WCA_TA ;\r LD (IX+00H),03H ;WPC COMMUNICATION ERROR\r LD (IX+07H),0 ;COMMUNICATION NOT ESTABLISHED\r RET ;\r \r \r \r ;*** WCATX ************************************************************\r ;SEND ONE BYTE\r ;**********************************************************************\r \r \r PUBLIC WCATX\r \r WCATX\r T0D LD IY,WPC_TA ;\r LD (IY+05H),A ;SAVE DATA TO BE SEND\r CALL RCD ;RESET COMMAND DECODER\r CALL TTXE1 ;TEST IF TX EMPTY\r CALL TXBY ;LOAD AND TX ONE BYTE\r RET ;TO C/WCOMM1\r \r \r ;*** RCD *************************************************************\r ;SUB MODULE CALLED FRO WCATRC\r ;RESET COMMAND DECODER\r ;3 TO 8 BIT DECODER + CLK\r ;COMM CRTL INPUTS: OPC0 TO OPC3\r ;PRODUCE A LOW SQUARE PULSE\r ;*********************************************************************\r \r CSEG\r PUBLIC RCD\r \r RCD\r T0E LD C,22H ;LOAD POINTER\r LD A,0F0H ;SET LOWER NIBBLE LOW\r OUT (C),A ;PORT C\r LD A,0F8H ;SET BIT 3\r OUT (C),A ;PORT C\r RET ;\r \r \r \r ;*** TTXE1 *************************************************************\r ;TEST IF TX EMPTY, CALLED FROM WCATX\r ;***********************************************************************\r \r \r PUBLIC TTXE1\r \r TTXE1\r T0F LD IY,WPC_TA ;\r LD C,22H ;LOAD POINTER, PORT C\r IN A,(C) ;GET DATA, ICP4=1\r BIT 4,A ;TEST IF BIT 4=1, THEN Z=0\r RET NZ ;IF TX EMPTY RET TO WCATX\r DI ;\r LD (IY+00H),01H ;TEST EVERY 8. MS\r LD (IY+01H),0 ;MAX TIME CA 8 MS\r EI ;\r PUSH BC ;\r \r LD HL,SYSRAM+400H+14D*8 ;OPEMAC\r DI ;\r LD (SYSRAM+0E4H),HL ;\r CALL SUB_WAIT ;QUEUE 14 USED\r \r POP BC ;REPEAT TEST OF TX\r IN A,(C) ;ICP4\r BIT 4,A ;\r RET NZ ;TO WCATX\r CALL ERRD ;ERR ROUTINE\r RET ;TO WCATX\r \r \r \r ;*** TXBY ************************************************************\r ;SEND ONE BYTE INCL STROBE TO UART\r ;*********************************************************************\r \r PUBLIC TXBY\r \r TXBY\r T11 LD IY,WPC_TA ;\r LD C,22H ;LOAD POINTER, PORT C\r LD A,0F5H ;MODE COMMAND\r OUT (C),A ;LOAD UART TX\r LD C,20H ;LOAD POINTER, PORT A\r LD A,(IY+05H) ;LOAD DATA TO BE SEND\r OUT (C),A ;\r LD C,22H ;LOAD POINTER, PORT C\r LD A,0FDH ;LOAD UART TX + UART STROBE\r OUT (C),A ;TX IS EXECUTED\r RET ;TO WCATX\r \r \r \r ;*** WCARX ************************************************************\r ;RECEIVE ONE BYTE\r ;**********************************************************************\r \r \r PUBLIC WCARX\r \r WCARX\r T12 LD IY,WPC_TA ;\r CALL RCD ;RESET COMMAND DECODER\r CALL TRXF1 ;TEST IF RX FULL\r CALL PURC ;POINT AT UART AND CLK\r CALL RXBY ;RECEIVE ONE BYTE\r LD (IY+006H),A ;SAVE RX DATA\r RET ;TO C/WCOMM1\r \r \r \r ;*** TRXF1 **********************************************************\r ;TEST IF UART RX FULL. TRUE: JMP TO RXBY, I E RECEIVE BYTE\r ; FALSE: WAIT CA 20 MSEC, THEN ERR REPORT\r ;********************************************************************\r \r \r PUBLIC TRXF1\r \r TRXF1\r T13 LD IY,WPC_TA ;WPC_TABLE_ADDRESS\r LD C,22H ;POINTER PORT C\r IN A,(C) ;GET COMMAND NIBBLE, IPC5\r BIT 5,A ;IF RX FULL BIT 5=1, Z=0\r RET NZ ;IF RX FULL, RET TO WCARX\r DI ;\r LD (IY+00H),04H ;TEST FROM OPEMAC EVERY 8. MS\r LD (IY+01H),0 ;MAX TIME CA 32MS\r EI ;\r PUSH BC ;\r \r LD HL,SYSRAM+400H+14D*8 ;\r DI ;\r LD (SYSRAM+0E4H),HL ;\r CALL SUB_WAIT ;OPEMAC QUEUE 14\r \r POP BC ;\r IN A,(C) ;\r BIT 5,A ;\r RET NZ ;\r CALL ERRD ;ERR ROUTINE\r RET ;TO WCARX\r \r \r \r ;*** PURC ************************************************************\r ;POINT AT UART READ AND CLK\r ;*********************************************************************\r \r \r PUBLIC PURC\r \r PURC\r T14 LD C,22H ;SET POINTER\r LD A,0F6H ;UART COMMAND READ\r OUT (C),A ;\r LD A,0FEH ;CLK UART\r OUT (C),A ;\r RET ;TO WCARX\r \r \r \r ;*** RXBY ************************************************************\r ;RECEIVE BYTE FROM UART\r ;*********************************************************************\r \r \r PUBLIC RXBY\r \r RXBY\r T15 LD C,21H ;POINTER PORT B\r IN A,(C) ;GET BYTE\r RET ;WCARX\r \r \r \r ;*** TIMER1 *************************************************************\r ;TIMER USED OF TTXE1, CALLED FROM OPEMAC\r ;************************************************************************\r \r PUBLIC TIMER1\r \r TIMER1 ;\r T16 LD IY,WPC_TABLE_ADDRESS ;\r LD L,(IY+00H) ;LOADED FROM TTXE1\r LD H,(IY+01H) ;DO\r LD A,L ;\r OR H ;IF ZERO, Z=1\r RET Z ;TO OPEMAC\r DEC HL ;\r LD (IY+00H),L ;\r LD (IY+01H),H ;\r LD A,L ;\r OR H ;\r RET NZ ;\r LD HL,SYSRAM+400H+14D*8 ;#QHEAD=14\r CALL SUB_SIGNAL ;QUEUE 14\r RET ;TO OPEMAC\r \r \r \r ;***********************************************************************\r ; WCA DRIVER TABLE\r ;***********************************************************************\r \r DSEG\r LIST S\r PUBLIC WPC_TABLE_ADDRESS\r \r WPC_TABLE_ADDRESS\r \r T17 DW 1 ;TIMER1 LOWER BYTE 0000H\r ;TIMER1 UPPER BYTE 0001H\r DS 1 ;WRLH LOWER ADDR BYTE 0002H\r DS 1 ;WRLH UPPER ADDR BYTE 0003H\r DS 1 ;WPC DATA 0004H\r DS 1 ;TX DATA 0005H\r DS 1 ;RX DATA 0006H\r DS 1 ;CCA/WPC ID 0007H\r DS 1 ;POINTER 0008H\r DS 1 ;CCA SWITCH DATA 0009H\r DS 1 ;STROBE 000AH\r DB 1 ;ERR CTRL INFO 000BH\r \r END\r