;I/O BYTE IMPLEMENTED FOR NORTH STAR CONIN: MVI E,1 ;CONSOLE INPUT CALL REDIR ; IOBYTE: 76543210 DW TTYIN ;CON: = TTY: XXXXXX00 DW CRTIN ;CON: = CRT: XXXXXX01 DW RDRIN ;CON: = BAT: XXXXXX10 DW UC1IN ;CON: = UC1: XXXXXX11 CONOUT: MVI E,1 ;CONSOLE OUTPUT CALL REDIR ; IOBYTE: 76543210 DW TTYOUT ;CON: = TTY: XXXXXX00 DW CRTOUT ;CON: = CRT: XXXXXX01 DW LSTOUT ;CON: = BAT: XXXXXX10 DW UC1OUT ;CON: = UC1: XXXXXX11 CONIST: MVI E,1 ;CONSOLE INPUT STATUS CALL REDIR ; IOBYTE: 76543210 DW TTYIST ;CON: = TTY: XXXXXX00 DW CRTIST ;CON: = CRT: XXXXXX01 DW RDRIST ;CON: = BAT: XXXXXX10 DW UC1IST ;CON: = UC1: XXXXXX11 RDRIN: MVI E,7 ;READER INPUT CALL REDIR ; IOBYTE: 76543210 DW TTYIN ;RDR: = TTY: XXXX00XX DW PTRIN ;RDR: = PTR: XXXX01XX DW UR1IN ;RDR: = UR1: XXXX10XX DW UR2IN ;RDR: = UR2: XXXX11XX RDRIST: MVI E,7 ;READER INPUT STATUS CALL REDIR ; IOBYTE: 76543210 DW TTYIST ;RDR: = TTY: XXXX00XX DW PTRIST ;RDR: = PTR: XXXX01XX DW UR1IST ;RDR: = UR1: XXXX10XX DW UR2IST ;RDR: = UR2: XXXX11XX PUNOUT: MVI E,5 ;PUNCH OUTPUT CALL REDIR ; IOBYTE: 76543210 DW TTYOUT ;PUN: = TTY: XX00XXXX DW PTPOUT ;PUN: = PTP: XX01XXXX DW UP1OUT ;PUN: = UP1: XX10XXXX DW UP2OUT ;PUN: = UP2: XX11XXXX LSTOUT: MVI E,3 ;LIST OUTPUT CALL REDIR ; IOBYTE: 76543210 DW TTYOUT ;LST: = TTY: 00XXXXXX DW CRTOUT ;LST: = CRT: 01XXXXXX DW LPTOUT ;LST: = LPT: 10XXXXXX DW UL1OUT ;LST: = UL1: 11XXXXXX LSTOST: MVI E,3 ;LIST OUTPUT STATUS CALL REDIR ; IOBYTE: 76543210 DW TTYOST ;LST: = TTY: 00XXXXXX DW CRTOST ;LST: = CRT: 01XXXXXX DW LPTOST ;LST: = LPT: 10XXXXXX DW UL1OST ;LST: = UL1: 11XXXXXX REDIR: LDA IOBYTE ;GET THE INTEL STANDARD IOBYTE REDIR0: RLC ;SHIFT THE NEXT FIELD IN DCR E ;BUMP THE SHIFT COUNT JNZ REDIR0 REDIR1: ANI 110B ;MASK THE REDIRECTION FIELD MOV E,A ;MAKE THE WORD TABLE OFFSET MVI D,0 POP H ;GET THE TABLE BASE DAD D ;OFFSET INTO OUR TABLE MOV A,M ;LOAD THE LOW LEVEL I/O ROUTINE POINTER INX H MOV H,M MOV L,A PCHL ;EXECUTE THE LOW LEVEL I/O DRIVER ************************************************************************* * * * CONYTP: 6 NORTH STAR * * * * THE FOLLOWING CODE IMPLEMENTS THE NORTH STAR CONSOLE I/O SYSTEM. * * THIS SYSTEM IS FOR USERS WHO PURCHASE A MORROW DESIGNS DISK * * SYSTEM TO REPLACE THEIR NORTH STAR DISK SYSTEM. THE MAPPING OF * * THE LOGICAL TO PHYSICAL ENTRY POINTS IS PERFORMED AS FOLLOWS: * * * * DEVICE NAME LEFT RIGHT PARALLEL * * SERIAL SERIAL PORT * * * * CONSOLE CON: = TTY: CRT: UC1: * * READER RDR: = TTY: PTR: UR1: * * PUNCH PUN: = TTY: PTP: UP1: * * LIST LST: = TTY: CRT: UL1: * * * * FOR EXAMPLE, TO USE A PRINTER CONNECTED TO THE RIGHT SERIAL PORT, * * USE THE CP/M COMMAND: * * * * STAT LST:=CRT: * * * * LIKEWISE, THE CP/M COMMAND "STAT LST:=UL1:" IS USED IF YOU HAVE A * * PRINTER CONNECTED TO THE PARALLEL PORT. * * * ************************************************************************* NSLDAT EQU 2 ;LEFT SERIAL PORT DATA PORT NSLSTA EQU 3 ;LEFT SERIAL PORT STATUS PORT NSRDAT EQU 4 ;RIGHT SERIAL PORT DATA PORT NSRSTA EQU 5 ;RIGHT SERIAL PORT STATUS PORT NSSTBE EQU 1 ;TRANSMITTER BUFFER EMPTY STATUS BIT NSSRBR EQU 2 ;RECIEVER BUFFER READY STATUS BIT ;SEE THE 8251 DATA SHEETS FOR MORE ; CONFIGURATION INFORMATION. NSLIN1 EQU 0CEH ;LEFT SERIAL PORT INITIALIZATION # 1 NSRIN1 EQU 0CEH ;RIGHT SERIAL PORT INITIALIZATION # 1 ;76543210 BIT DEFINATIONS ;11001110 DEFAULT CONFIGURATION ;XXXXXX00 SYNCHRONOUS MODE ;XXXXXX01 1X CLOCK RATE ;XXXXXX10 16X CLOCK RATE ;XXXXXX11 64X CLOCK RATE ;XXXX00XX 5 BIT CHARACTERS ;XXXX01XX 6 BIT CHARACTERS ;XXXX10XX 7 BIT CHARACTERS ;XXXX11XX 8 BIT CHARACTERS ;XXX0XXXX PARITY DISBABLE ;XXX1XXXX PARITY ENABLE ;XX0XXXXX ODD PARITY GENERATION/CHECK ;XX1XXXXX EVEN PARITY GENERATION/CHECK ;00XXXXXX INVALID ;01XXXXXX 1 STOP BIT ;10XXXXXX 1.5 STOP BITS ;11XXXXXX 2 STOP BITS NSLIN2 EQU 37H ;LEFT SERIAL PORT INITIALIZATION # 2 NSRIN2 EQU 37H ;RIGHT SERIAL PORT INITIALIZATION # 2 ;76543210 BIT DEFINATIONS ;00110111 DEFAULT CONFIGURATION ;XXXXXXX1 ENABLE TRANSMITTER ;XXXXXX1X ASSERT DTR* ;XXXXX1XX ENABLE RECIEVER ;XXXX1XXX SEND BREAK CHARACTER, TXD LOW ;XXX1XXXX RESET PE, OE, FE ERROR FLAGS ;XX1XXXXX ASSERT RTS* ;X1XXXXXX INTERNAL RESET ;1XXXXXXX ENTER HUNT MODE (FOR SYNC) NSPDAT EQU 0 ;PARALLEL DATA PORT NSPSTA EQU 6 ;PARALLEL STATUS PORT NSPRBR EQU 1 ;RECIEVER BUFFER READY STATUS BIT NSPTBE EQU 2 ;TRANSMITTER BUFFER EMPTY STATUS BIT NSRAM EQU 0C0H ;NORTH STAR MEMORY PARITY PORT, ; SET TO 0 FOR NO NORTH STAR RAM ************************************************************************* * * * LEFT SERIAL PORT ROUTINES. USE TTY: DEVICE. * * * ************************************************************************* TTYIN: ;READ A CHARACTER IN NSLSTA ANI NSSRBR JZ TTYIN ;WAIT TILL A CHARACTER IS READY IN NSLDAT ;GET THE CHARACTER ANI 7FH ;STRIP PARITY RET TTYOUT: ;WRITE A CHARACTER IN NSLSTA ANI NSSTBE JZ TTYOUT ;WAIT TILL THE BUFFER IS EMPTY MOV A,C ;WRITE THE CHARACTER OUT NSLDAT RET TTYIST: ;RETURN INPUT BUFFER STATUS IN NSLSTA ANI NSSRBR RZ ;RETURN NOT READY MVI A,0FFH RET ;THERE IS A CHARACTER READY TTYOST: ;RETURN OUTPUT BUFFER STATUS IN NSLSTA ANI NSSTBE RZ ;RETURN NOT READY MVI A,0FFH RET ;RETURN READY ************************************************************************* * * * RIGHT SERIAL PORT ROUTINES. USE CRT:, PTR:, AND PTP: DEVICES. * * * ************************************************************************* CRTIN: ;READ A CHARACTER PTRIN: IN NSRSTA ANI NSSRBR JZ CRTIN ;WAIT TILL A CHARACTER IS READY IN NSRDAT ;GET THE CHARACTER ANI 7FH ;STRIP PARITY RET CRTOUT: ;WRITE A CHARACTER PTPOUT: IN NSRSTA ANI NSSTBE JZ CRTOUT ;WAIT TILL THE BUFFER IS EMPTY MOV A,C ;WRITE THE CHARACTER OUT NSRDAT RET CRTIST: ;RETURN INPUT BUFFER STATUS PTRIST: IN NSRSTA ANI NSSRBR RZ ;RETURN NOT READY MVI A,0FFH RET ;THERE IS A CHARACTER READY CRTOST: ;RETURN OUTPUT BUFFER STATUS IN NSRSTA ANI NSSTBE RZ ;RETURN NOT READY MVI A,0FFH RET ;RETURN READY ************************************************************************* * * * PARALLEL PORT ROUTINES. USE UC1:, UR1:, UR2:, UP1:, UP2:, LPT:, * * AND UL1: DEVICES. * * * ************************************************************************* UC1IN: ;READ A CHARACTER UR1IN: UR2IN: IN NSPSTA ANI NSPRBR JZ UC1IN ;WAIT TILL A CHARACTER IS READY IN NSPDAT ;GET THE CHARACTER PUSH PSW MVI A,30H ;RESET THE PARALLEL INPUT FLAG OUT NSPSTA POP PSW ANI 7FH ;STRIP PARITY RET UC1OUT: ;WRITE A CHARACTER UP1OUT: UP2OUT: LPTOUT: UL1OUT: IN NSPSTA ANI NSPTBE JZ UC1OUT ;WAIT TILL THE BUFFER IS EMPTY MVI A,20H ;RESET THE PARALLEL OUTPUT FLAG OUT NSPSTA MOV A,C ;WRITE THE CHARACTER, STROBE BIT 7 NSPOUT: ORI 80H OUT NSPDAT ANI 7FH OUT NSPDAT ORI 80H OUT NSPDAT RET UC1IST: ;RETURN INPUT BUFFER STATUS UR1IST: UR2IST: IN NSPSTA ANI NSPRBR RZ ;RETURN NOT READY MVI A,0FFH RET ;RETURN READY LPTOST: ;RETURN OUTPUT BUFFER STATUS UL1OST: IN NSPSTA ANI NSPTBE RZ ;RETURN NOT READY MVI A,0FFH RET ;RETURN READY