;---------------------------------------------------- ; ; MICRO/SYS, INC. ; ; INSTALL ADDITIONAL SB8420 DRIVERS ; AS DEVICES PTR:, PTP:, UR1:, UP1:, ; UR2:, UP2:, AND TTY: ; ; ACCESSIBLE AS LOGICAL DEVICES RDR:, PUN: ; ; USE: ; A>STAT RDR:=XXX: ; A>STAT PUN:=XXX: ; ; FOR ASSIGNMENT ; ; 4/15/81 JKF ; ;----------------------------------------------------- BASE3: EQU 0D0H ;CHAN 3/4 SB8420 ADDRESS BASE5: EQU 0D8H ;CHAN 5/6 SB8420 ADDRESS PTRSTA: EQU BASE3+1 ;PTR: STATUS PORT PTRDAT: EQU BASE3 ;PTR: DATA PORT PTPSTA: EQU BASE3+1 ;PTP: STATUS PORT PTPCOM: EQU PTPSTA ;PTP: COMMAND PORT PTPDAT: EQU BASE3 ;PTP: DATA PORT UR1STA: EQU BASE3+3 ;UR1: STATUS PORT UR1DAT: EQU BASE3+2 ;UR1: DATA PORT UP1STA: EQU BASE3+3 ;UP1: STATUS PORT UP1COM: EQU UP1STA ;UP1: COMMAND PORT UP1DAT: EQU BASE3+2 ;UP1: DATA PORT UR2STA: EQU BASE5+1 ;UR2: STATUS PORT UR2DAT: EQU BASE5 ;UR2: DATA PORT UP2STA: EQU BASE5+1 ;UP2: STATUS PORT UP2COM: EQU UP2STA ;UP2: COMMAND PORT UP2DAT: EQU BASE5 ;UP2: DATA PORT TTYSTA: EQU BASE5+3 ;TTY: STATUS PORT TTYCOM: EQU TTYSTA ;TTY: COMMAND PORT TTYDAT: EQU BASE5+2 ;TTY: DATA PORT RESET: EQU 40H ;USART RESET COMMAND AMODE: EQU 4EH ;ASYNC MODE COMMAND ENABLE: EQU 27H ;TX, RX ENABLE, RTS, DTR TXRDY: EQU 1 ;TRANSMIT READY FLAG RXRDY: EQU 2 ;RECEIVE READY FLAG IOBYTE: EQU 3 ;IOBYTE LOCATION PUNMSK: EQU 30H ;PUNCH MASK RDRMSK: EQU 0CH ;READER MASK ;-------------------------------------------------------- ; ; THE FOLLOWING CODE RELOCATES THE DRIVERS ; ORG'D AT 200H TO THE PROPER ADDRESSING ; DETERMINED BY THE PRESENT SYSTEM SIZE. ; THE DRIVERS ARE THEN MOVED TO MEMORY ABOVE BIOS. ; ;--------------------------------------------------------- ORG 100H INSTALL:LXI H,0 ;CLEAR HL DAD SP ;GET SP SHLD OLDSP ;SAVE IT LXI SP,100H ;INIT STACK LHLD 1 ;GET WARM BOOT ENTRY DCX H ;POINT TO START OF BIOS DCX H ;JUMP TABLE DCX H SHLD JMPTABL ;SAVE FOR LATER LXI D,500H ;OFFSET TO NEW DRIVERS DAD D ;CALCULATE SHLD DRIVERS ;SAVE FOR LATER CALL RELOC ;RELOCATE DRIVERS LXI D,PUNCH ;POINT TO SOURCE LHLD DRIVERS ;POINT TO DESTINATION MVI B,LENGTH;GET BYTE COUNT MOVBYT: LDAX D ;GET DRIVER BYTE MOV M,A ;PUT ABOVE CPM INX H ;NEXT DEST INX D ;NEXT SOURCE DCR B ;COUNT BYTES JNZ MOVBYT ;MORE TO DO LHLD JMPTABL ;GET BIOS JUMP TABLE LXI D,19 ;OFFSET TO PUNCH JUMP DAD D ;CALCULATE XCHG ;SAVE IN DE LHLD PUNADR ;GET PUNCH DRIVER ADDR XCHG ;HL POINTS TO JUMP TABLE MOV M,E ;PUT LOW ADDR INX H ;POINT TO HIGH MOV M,D ;PUT HIGH ADDR INX H INX H ;POINT TO READER JUMP XCHG ;SAVE IN DE LHLD RDRADR ;GET READER DRIVER ADDR XCHG ;HL POINTS TO JUMP TABLE MOV M,E ;PUT LOW ADDR INX H ;POINT TO HIGH MOV M,D ;PUT HIGH ADDR ;---------------------------------------------------------- ; ; SEND MODE AND COMMAND WORDS TO ADDED SB8420'S ; ;---------------------------------------------------------- MVI A,1 ;DUMMY MODE WORD IF NOT WRITTEN YET OUT PTPCOM OUT UP1COM OUT UP2COM OUT TTYCOM MVI A,RESET ;RESET USART COMMAND OUT PTPCOM OUT UP1COM OUT UP2COM OUT TTYCOM MVI A,AMODE ;ASYNC MODE COMMAND OUT PTPCOM OUT UP1COM OUT UP2COM OUT TTYCOM MVI A,ENABLE;RX, TX ENABLE, RTS, DTR OUT PTPCOM OUT UP1COM OUT UP2COM OUT TTYCOM EXIT: LHLD OLDSP ;GET SYSTEM SP SPHL ;RESTORE RET ;GO AWAY ;---------------------------------------------------------- RELOC: MOV A,H ;GET RELOCATE PAGE # STA REL1+2 ;MODIFY HIGH ADDRESS STA REL1A+2 ;BYTES AT ALL LOCATIONS STA REL2+2 ;AFFECTED BY RELOCATION STA REL3+2 STA REL4+2 STA REL5+2 STA REL6+2 STA REL7+2 STA REL8+2 STA REL9+2 STA REL10+2 STA PUNVEC+1 STA PUNVEC+3 STA PUNVEC+5 STA PUNVEC+7 STA RDRVEC+1 STA RDRVEC+3 STA RDRVEC+5 STA RDRVEC+7 LXI H,PUNCH ;GET ADDRESS OF PUNCH MOV H,A ;RELOCATE SHLD PUNADR ;SAVE FOR LATER LXI H,READER;GET ADDRESS OF READER MOV H,A ;RELOCATE SHLD RDRADR ;SAVE FOR LATER RET ;--------------------------------------------------- ; ; WORKING STORAGE ; ;--------------------------------------------------- JMPTABL:DS 2 ;BIOS JUMP TABLE ADDR DRIVERS:DS 2 ;RELOCATED DRIVERS ADDR PUNADR: DS 2 ;NEW PUNCH JUMP ADDRESS RDRADR: DS 2 ;NEW READER JUMP ADDRESS OLDSP: DS 2 ;SYSTEM STACK POINTER ;---------------------------------------------------- ; ; THESE ARE THE ADDITIONAL DRIVERS THAT ARE ; RELOCATED AND PLACED ABOVE BIOS ; ;----------------------------------------------------- ORG 200H ;DUMMY ORG, WILL BE ;RELOCATED TO NEW PAGE ;BY RELOC ROUTINE PUNCH: LDA IOBYTE ;GET IOBYTE ANI PUNMSK ;PUNCH FIELD RLC RLC RLC RLC ;PUT IN LOW 2 BITS ADD A ;X2 MOV E,A ;TO DE LOW MVI D,0 ;DE HIGH REL1: LXI H,PUNVEC;POINT TO PUNCH TABLE REL1A: JMP JMPIND ;INDIRECT JUMP TO ROUTINE READER: LDA IOBYTE ;GET IOBYTE ANI RDRMSK ;READER FIELD RRC RRC ;PUT IN LOW 2 BITS ADD A ;X2 MOV E,A ;TO DE LOW MVI D,0 ;DE HIGH REL2: LXI H,RDRVEC;POINT TO READER TABLE JMPIND: DAD D ;ADD OFFSET TO TABLE START MOV E,M ;GET LOW POINTER INX H ;POINT TO HIGH MOV D,M ;GET HIGH POINTER XCHG ;ADDRESS TO HL PCHL ;GO TO IT PUNVEC: DW TTYOUT DW PTP DW UP1 DW UP2 RDRVEC: DW TTYIN DW PTR DW UR1 DW UR2 TTYOUT: IN TTYSTA ;GET STAUS ANI TXRDY ;CHECK READY REL3: JZ TTYOUT ;WAIT FOR IT MOV A,C ;GET CHARACTER OUT TTYDAT ;SEND IT RET PTP: IN PTPSTA ANI TXRDY REL4: JZ PTP MOV A,C OUT PTPDAT RET UP1: IN UP1STA ANI TXRDY REL5: JZ UP1 MOV A,C OUT UP1DAT RET UP2: IN UP2STA ANI TXRDY REL6: JZ UP2 MOV A,C OUT UP2DAT RET TTYIN: IN TTYSTA ANI RXRDY REL7: JZ TTYIN IN TTYDAT ANI 7FH RET PTR: IN PTRSTA ANI RXRDY REL8: JZ PTR IN PTRDAT ANI 7FH RET UR1: IN UR1STA ANI RXRDY REL9: JZ UR1 IN UR1DAT ANI 7FH RET UR2: IN UR2STA ANI RXRDY REL10: JZ UR2 IN UR2DAT ANI 7FH RET LENGTH: EQU $-PUNCH AND 0FFH END