|
DataMuseum.dkPresents historical artifacts from the history of: MIKADOS |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about MIKADOS Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 7584 (0x1da0) Notes: Mikados TextFile, Mikados_K Names: »PRINX«
└─⟦378be2382⟧ Bits:30005272 Diverse hjælpeprogrammer: L, L1, L2, A, A1, A2, LINK, ASM, PRINX, WBACK └─ ⟦this⟧ »PRINX«
;********************************************************************** ; ; MODUL PRINX: ; ; SUBDRIVER TIL SERIELLE X-ON, X-OFF STYREDE PRINTERE ; AA-10.06.1982 ; ; COPYRIGHT (C) 1981 BY DANSK DATA ELEKTRONIK APS ; ; FULD REENTRANT KODE ; ;********************************************************************** BRANCH ; SUBDRIVERNE PLACERES I GRENEN (MBANK) COND SYMB PRINK ; PRINX:: ; ;**************************************************************************** ; SUBDRIVER FOR SERIELLE X-ON,X-OFF PRINTERE ;**************************************************************************** ; ;AT ENTRY: -> PRINTBUFFER ON STACK PXXIN:: ; BUFFERLENGTH IN C IF PXX POP H MOV A,M CPI '<' JNZ UDPR1 ;JUMP IF NO COMMANDS CMLOP: INX H ;IGNORE COMMANDS DCR C MOV A,M CPI '>' JNZ CMLOP INX H DCR C UDPR1: CALL PRNT ;PRINT ;TERMINATE WITH LF LXI H,PRBUF CALL GETRN MVI M,LF MVI C,1 ;BUFFERLENGTH CALL PRNT JMP FEJL0 ;EXIT ;**************************************************************************** ; PRINT ROUTINE ;**************************************************************************** ; PRNT: ;C=BUFFERLENGTH, HL->BUFFERSTART XCHG LXI H,PBUFA CALL PUTX ;STORE BUFFERADDRESS FOR INTERRUPT ROUTINE XCHG MVI B,0 ;BC:=BUFFERLENGTH DCR C DAD B ;HL->BUFFER END INR C RZ ;RETURN ON EMPTY BUFFER MVI A,' ' PTSNÆ: ;SKIP TRAILING BLANKS CMP M JNZ PTSLU DCX H DCR C RZ ;RETURN ON EMPTY BUFFER JMP PTSNÆ PTSLU: ;C=BUFFERLENGTH LXI H,PBUFL CALL GETRN MOV M,C ;STORE BUFFERLENGTH FOR INTERRUPTROUTINE CALL FÅINHØ ;GET MESSAGE FROM POOL - ANSWER SEMAPHORE = AUX. SEM. PUSH D ;STACK -> BYTE -2 PUSH H ;STACK -> BYTE 2 LXI H,PMESG CALL PUTX ;STORE MESSAGE ADDRESS FOR INTERRUPTROUTINE POP H ;HL->BYTE 2 LXI D,#6000 ;WAIT FOR APP. 1 MINUTE ************* MOV M,E INX H MOV M,D INX H MVI M,1 ;STATUS:=1 CALL PIDENT ;REPORT PRINTER ACTIVE - A:=PRINTER NUMBER POP D ;CLEAR STACK RNZ ;UNKNOWN PRINTER PUSH D MOV B,A ;B:=PR. NUMBER DI LDA PINST ORA B STA PINST MVI A,15 CALL POUTI ;OPEN TRANSMITTER AND RECEIVER IF NOT+SPC1!PFLSE LDA IMASK ;GIV PRINTEREN LOV TIL AT AFBRYDE ORI 40 ;PÅ NIVEAU 60 STA IMASK OUT INTRP ENDIF IF NOT+PFLSE&SPC1 RIM ;READ INTERRUPT MASK ANI 6 ;TILLAD AFBRYDELSER PÅ NIVEAU 5.5 (BIT 0 = 0) ORI 8 SIM ;SET INTERRUPT MASK ENDIF EI LXI B,SLEEP ;SEND MESSAGE TO CLOCK POP H CALL SENDØ PTSLU2: CALL VENTH ;WAIT FOR MESSAGE FROM CLOCK ;DE->BYTE 0, HL->BYTE -2 DI PUSH H LXI D,6 DAD D ;HL->STATUS BYTE (4) MOV A,M ;A:=STATUS ORA A POP H PUSH PSW LXI B,POOL ;RETURN MESSAGE CALL SND2 POP PSW JNZ PFMEX ;PRINTING DID NOT SUCCEED EI ;PRINTING SUCCEEDED LXI H,PFEJL CALL GETRN MOV A,M ORA A RZ ;NO ERROR MESSAGE TO ERASE MVI M,0 LXI B,SLTLN ;ERASE ERROR MESSAGE JMP FJLSK PFMEX: ;WRITE ERROR MESSAGE MVI A,10 ;DISABLE TRANSMITTER AND RECEIVER CALL POUTI EI ;YOU CAN ENABLE SINCE THIS PRINTER IS DEAD !! ;SEND NEW MESSAGE TO THE CLOCK CALL FÅINHØ ;GET MESSAGE FROM POOL - ANSWER SEMAPHORE = AUX. SEM. PUSH D ;STACK -> BYTE -2 PUSH H ;STACK -> BYTE 2 LXI H,PMESG CALL PUTX ;STORE MESSAGE ADDRESS FOR INTERRUPTROUTINE POP H ;HL->BYTE 2 LXI D,#6000 ;WAIT FOR 60 SEC ************************* MOV M,E INX H MOV M,D INX H MVI M,1 ;STATUS:=1 LXI B,SLEEP POP H CALL SENDØ MVI A,14 ;ENABLE RECEIVER CALL POUTI LXI H,PFEJL CALL GETRN MOV A,M ; SE OM DER VAR EN FEJL OGSÅ SIDST ORA A JNZ PTSLU2 ; PRØV IGEN UDEN FEJLUDSKRIFT MVI M,1 ; HUSK AT DER ER EN SKRIVERFEJL LXI B,FJLMP ; BC->FEJLMEDDELELSE CALL FJLSK ; JMP PTSLU2 END