ASMB,R,B,L,T,C HED BCS DRIVER FOR <91200> VIDEO GENERATOR * * NAME: BCS DRIVER FOR 91200 VIDEO GENERATORTOR * SOURCE: 91200-18005 * BINARY: 91200-16005 * PGMR: JOHN FLORES * * NAM D.13 91200-16005 REV 1633 SPC 1 ENT D.13,I.13 EXT DMAC1,DMAC2,IOERR SUP PRESS EXTRANEOUS LISTING SPC 1 * THIS DRIVER IS RESPONSIBLE FOR PROCESSING EXEC I/O CALLS FOR * THE <91200> VIDEO DISPLAY GENERATOR. IT RECOGNIZES WRITE AND * CONTROL REQUESTS. SPC 1 * WRITE REQUESTS WILL INITIATE A DMA TRANSFER OF YX * COORDINATES OF POINTS TO BE WRITTEN ON OR ERASED FROM * THE VIDEO MONITOR SCREEN BY THE <91200>. * Y=BITS 15-8, X=BITS 7-0. SPC 1 * CONTROL REQUESTS ARE USED TO:- * SET COLOR (BLACK FOR SELECTIVE ERASE) * SET SENSE (VIDEO POLARITY) * PERFORM A BULK ERASE. SPC 1 * THE FUNCTION BITS FOR CONTROL REQUESTS ARE DEFINED AS FOLLOWS:- SPC 1 * BITS 10, 9, & 6 SELECT COLOR AS FOLLOWS: SPC 1 * 00 XX0 WHITE * 00 XX1 BLACK (SELECTIVE ERASE) * 01 XX0 RED -----\ * 01 XX1 GREEN \ * 10 XX0 BLUE \ NOT FOR 1 CARD * 10 XX1 YELLOW (RED & GREEN / SYSTEMS * 11 XX0 MAGENTA (RED & BLUE) / * 11 XX1 CYAN (BLUE & GREEN) -----/ SPC 1 * BIT 7 IS THE SENSE BIT, IF SET TO 1 IT CAUSES THE VIDEO * OUTPUT OF THE CARD TO INVERT. SPC 1 * BIT 8 SET TO 1 CAUSES BULK ERASE (TO SENSE PREVIOUSLY SET). SPC 1 * WHEN BIT 8 OF THE CONTROL WORD IS SET (TO ERASE), BITS * 6, 7, 9, & 10 OF THE CONTROL WORD ARE IGNORED. SPC 1 SKP * INITIATION SECTION SPC 1 D.13 NOP STA SAVA SAVE EQT ENTRY ADDRESS STB SAVB SAVE REQUEST (WORD 2) ADDRESS. LDA SAVA,I GET FIRST WORD OF EQT. AND M77 ISOLATE DEVICE SELECT CODE. STA TVSC SAVE IT IN TVSC. * * DRIVER BUSY TEST * DXX.1 LDB DFLG IF DRIVER BUSY, SZB (DFLG NOT=0, THEN JMP REJB REJECT REQUEST. * * CHECK FOR CONTROL REQUEST * LDA SAVB,I GET WORD 2 OF USER REQUEST. ALF ROTATE REQUEST CODE TO LOW A REG. AND M17 AND ISOLATE CODE. CPA B3 CONTROL REQUEST ??? JMP CNTRL YES, PROCESS CONTROL REQUEST. * * ILLEGAL READ CHECK * B10 SLA IF A=1 ,RETURN CODE IS RIGHT JMP D.13,I TO SHOW ILLEGAL READ. SPC 1 * * CHECK FOR AVAILABLE DMA CHANNEL * LDB DMAC1 GET DMA INDICATOR WORD. CCE,SZB,RSS IS DMA DEFINED ? JMP NODMA NO SET ERROR EXIT. SSB YES,IS DMAC1 BUSY ? JMP CH2 YES, TRY DMAC2. STB A SAVE DMA CH NO. RBL,ERB SET THIS DMA CH. STB DMAC1 BUSY. JMP SDMA CH2 LDB DMAC2 GET DMA INDICATOR WORD. SZB,RSS IS DMAC2 DEFINED ? JMP *+3 NO,REJECT SSB,RSS IS DMAC2 BUSY ? JMP *+7 NO. CLB,INB YES,SET DMA BUSY INDICATOR. JMP REJB+1 AND REJECT. NODMA CCB SET B TO FWA ADB SAVB OF USER CALL. LDB B3 SET A=3 TO SAY NO DMA JMP IOERR AND HALT. STB A SAVE DMA CH NO. RBL,ERB SET THIS DMA CH. STB DMAC2 BUSY. SKP * * SET DMA COMPLETION INTERRUPT LINK * SDMA LDB TVSC,I GET THE CONTENTS OF THE DEVICE INTERRUPT STB A,I LOCATION AND PLUG INTO DMA INTERRUPT LOC. STA CHAN SAVE DMA NO. * * CONFIGURE DMA INSTRUCTIONS. * * IOR OTA0 102606/7 STA DMAO XOR B4 102602/3 STA DMAO1 STA DMAO2 IOR B300 102702/3 STA DMAS IOR B1200 103702/3 ADA B4 103706/7 STA DMASC XOR B5000 106706/7 STA DMACX XOR B4 106702/3 STA DMAC END DMA CONFIGURATION * * SET THE DEVICE BUSY FLAG * LDA SAVA GET ADDRESS OF FIRST EQT WORD. STA EQT1 AND SAVE IT. ISZ SAVA SET ADDRESS TO WORD 2 OF EQT. LDB M15 ENTRY, SET BIT 15 ON ( A FIELD = 2) LDA SAVA,I TO SAY BUSY IOR B AND STA SAVA,I RESTORE. * * INITIALIZE TRANSMSSION LOG. * LDA SAVA SET ADDRESS OF INA EQT WORD 3 STA EQTA IN EQTA STB EQTA,I INITIALIZE XMISSION LOG. SPC 1 * * OUTPUT DMA CONTROL WORD. * LDA TVSC ASSIGN TV CARD TO DMA AND IOR BIT15 ASK STC AFTER EACH TRANSFER, DMAO OTA DMA BUT NO FINAL CLC. IOR STF0 CONFGR STF FOR TV STA STF1 SKP * * OUTPUT USER BUFFER ADDRESS * ISZ SAVB INDEX ADDRESS TO WORD 4. ISZ SAVB OF USER REQUEST. LDA SAVB GET WORD 4 OF LDA A,I REQUEST. RAL,CLE,SLA,ERA (IF INDIRECT, JMP *-2 GET EFFECTIVE ADDRESS DMAC CLC DMA-4 SEND BUFFER ADDRESS DIRECTLY. DMAO1 OTA DMA-4 TO ADDRESS REGISTER. * * OUTPUT USER WORD COUNT * ISZ SAVB INDEX TO WORD 5 OF REQUEST LDA SAVB,I GET WORD 5-BUFFER LENGTH STA CHC SAVE WORD COUNT CMA,INA SET WORD COUNT TO NEG. DMAS STC DMA-4 SEND TWO'S COMPLEMENT OF DMAO2 OTA DMA-4 BUFFER LENGTH TO WORD COUNT REG. * * FOLLOWING INSTRUCTIONS START DATA TRANSMISSION. * STA DFLG SET DFLG BUSY (NOT=0) CLA A=0, INDICATES OPERATION INITIATE. STF1 STF TVGEN READY TV CARD DMASC STC DMA,C TURN ON DMA, BUT DMACX CLC DMA PREVENT INTERRUPT FROM IT. CLA JMP D.13,I EXIT TO IOC. * * CONFIGURE I-0 INSTRUCTIONS FOR TV CARD CONTROL WORD. * CNTRL LDA TVSC CONFIGURE I/O INSTRUCTIONS IOR MIA0 1024 STA ERASE IOR B1200 1036 STA OTATV IOR B100 1037 STA STCTV XOR B5000 1067 STA CLCTV END I/O CONFIGURATION * * SET EQT BUSY FLAG * LDA SAVA GET ADDRESS OF EQT1 STA EQT1 AND SAVE. ISZ SAVA SET ADDRESS LDA SAVA,I WORD 2 OF EQT ENTRY. IOR M15 SET BIT 15 STA SAVA,I OF WORD 2 = 1 LDA SAVA (A-FIELD=2) TO DAY BUSY AND RESTORE. SKP * * STORE ADDRESS OF EQT 3 IN DRIVER * INA SET ADDRESS OF EQT WORD 3 STA EQTA IN EQTA * * CHECK THE USER CONTROL WORD AND RE-CONFIGURE * IT FOR THE TV CARD. * SPC 1 LDA SAVB,I GET CONTROL WORD (ICNWD). AND =B3700 ISOLATE CONTROL BITS. STA B SAVE IT IN B REG. BLF,BLF CHECK BIT 8 SLB JMP ERASE DO BULK 'ERASE' SPC 1 LDA EQT1,I AND MASK CHECK FOR SZA,RSS NON-ZERO SUB-CHANNEL JMP GO.ON IS ZERO - SO COLOR LDA B NOT ZERO - KILL COLOR RAR,ERA IS COLOR NOT SEZ,SLA,RSS WHITE OR BLACK? JMP GO.ON YES - SO OK! LDA B NO - SO KILL COLOR TO AND MASK2 WHITE ONLY STA B SPC 1 GO.ON CLE,ELB CALL IS TO SET OR CHANGE BRS,BRS COLOR AND/OR SENSE. CLA POSITION ELA,RAL CONTROL BITS RBR,ERB 6, 9, & 10 RBL,RBL FOR TESTING SSB,SLB,RSS CYAN OR GREEN? JMP *+3 NEITHER IOR B1 IT IS CYAN OR GREEN JMP *+4 WHICH? SLB,RSS MAGENTA OR RED? JMP *+5 NEITHER IOR B4 IT IS CYAN/MAGENTA OR GREEN/RED SEZ,RSS CYAN/MAGENTA OR GREEN/RED? IOR B10 IT IS GREEN OR RED JMP CLCTV DONE SSB,RSS YELLOW OR BLACK? JMP *+5 NEITHER (IT IS BLUE OR WHITE) IOR B10 IT IS YELLOW OR BLACK SKP SEZ,RSS YELLOW OR BLACK? IOR B5 IT IS BLACK JMP CLCTV DONE SEZ BLUE OR WHITE? IOR B5 IT IS BLUE CLCTV CLC TVGEN SWITCH MODE FF OTATV OTA TVGEN,C TO STEER OUTPUT TO MODE REG. LDB EQT1 GET ADDRESS OF FIRST EQT WORD. INB SET TO ADDRESS OF SECOND WORD. LDA B,I GET SECOND WORD. AND =B77777 CLEAR DEVICE BUSY FLAG AND STA B,I RESTORE IT. LDA M15 DO IMMEDIATE JMP D.13,I COMPLETION * * REJECT SECTION * RCER CLB,RSS REQUEST CODE ERROR,(B)=0 RCER2 CLB,INB CHARACTER REQUEST ILLEGAL FOR BLS,SLB DRIVER, SETB=2. REJB LDB M15 DRIVER-DEVICE BUSY,(B) SIGN=1, CLA,INA SET(A) NON-ZERO. JMP D.13,I EXIT TO IOC AND REJECT. * * ERASE SECTION * ERASE MIA TVGEN ANY INPUT WILL BULK ERASE STCTV STC TVGEN,C INTERRUPT NEEDED TO COMPLETE. CLA STB ERFLG SET ERASE FLAG SO THAT I.13 KNOWS STB DFLG INTERRUPT WAS CAUSED BY ERASE. JMP D.13,I ALSO SET DRIVER BUSY FLAG (DFLG) SKP * * CONSTANTS AND STORAGE SECTION * TVSC NOP STORE CURRENT IO SELECT CODE. BIT12 OCT 10000 BIT15 OCT 100000 OTA0 OTA 0 STF0 STF 0 CLC0 CLC 0,C MIA0 MIA 0 B1 OCT 1 B3 OCT 3 B4 OCT 4 B5 OCT 5 B6 OCT 6 B7 OCT 7 B100 OCT 100 B300 OCT 300 B1200 OCT 1200 B5000 OCT 5000 BIT11 OCT 4000 MASK OCT 700 MASK2 OCT 137771 SAVA OCT 0 SAVB OCT 0 M15 OCT 100000 M17 OCT 17 M77 OCT 77 CHAN OCT 0 USED TO SAVE DMA CHANNEL. DFLG OCT 0 SET CONDITION INDICATES DRIVER BUSY. EQTA OCT 0 EQT1 OCT 0 ERFLG OCT 0 SET CONDITION INDICATES BULK ERASE. SKP * CONTINUATOR SECTION. SPC 1 * * ENTERED BY THE TV CARD INTERRUPT AFTER * COMPLETION OF DMA OR A BULK ERASE. * I.13 NOP STA SAVAX SAVE A-REG STB SAVBX SAVE B-REG ERA,ALS SAVE E, SOC AND STA SAVEX OVERFLOW LDA TVSC CONFIGURE CLC ON TV CARD IOR CLC0 BEFORE STA TVCLC EXIT. * * CHECK FOR COMPLETION OF A BULK ERASE OPERATION * LDA ERFLG DOES ERASE FLAG INDICATE BULK ERASE? SZA JMP RSTOR YES, SO RESTORE REGS,CLEAR FLAGS & RETURN. * * DISMANTLE DMA-DRIVER INTERRUPT LINKAGE * LDA DMACX NO,STORE A CLC INST. IN STA CHAN,I THE DMA INTERRUPT LOCATION. * * CLEAR DMA CHANNEL BUSY FLAG. * LDA CHAN GET DMA CHANNEL NO. CPA B6 WAS CH NO.1 USED ? STA DMAC1 YES,CLEAR CH NO.1 BUSY FLAG. CPA B7 WAS CH NO. 2 USED.? STA DMAC2 YES,CLEAR CH NO.2 BUSY FLAG. * * RESTORE WORD 3 OF EQT ENTRY AND CLEAR DRIVER BUSY FLAG. * RSTOR LDA EQTA,I SET A=WORD 3 OF EQT ENTRY LDB CHC SET B=WORD COUNT ADA B PUT WORD COUNT IN A AND STA EQTA,I RESTORE WORD 3 IN EQT. CLA CLEAR THE DRIVER STA DFLG BUSY FLAG STA ERFLG AND THE ERASE FLAG. * * CLEAR DEVICE BUSY FLAG * LDB EQT1 GET ADDRESS OF FIRST EQT WORD. INB SET TO ADDRESS OF WORD 2. LDA B,I GET SECOND EQT WORD. AND =B77777 CLEAR DEVICE BUSY BIT. STA B,I AND RESTORE WORD. SKP * * RESTORE REGISTER SECTION * LDA SAVEX RESTORE CLO E SLA,ELA OVERFLOW, STF 1 A, LDA SAVAX AND B AT TIME OF LDB SAVBX INTERRUPT. TVCLC CLC TVGEN,C CLEAR CONROL & CLEAR FLAG ON TY CARD JMP I.13,I RETURN TO IOC. SPC 3 * * CONSTANTS AND STORAGE SECTION * A EQU 0 A-REG. B EQU 1 B-REG. TVGEN EQU 0 DUMMY SELECT CODE. DMA EQU 6 NOMINAL DMA CHANNEL SAVAX OCT 0 SAVEX OCT 0 SAVBX OCT 0 CHC OCT 0 TEMP OCT 0 SPC 2 END