DataMuseum.dk

Presents historical artifacts from the history of:

MIKADOS

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about MIKADOS

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦cef46e44e⟧

    Length: 7584 (0x1da0)
    Notes: Mikados TextFile, Mikados_K
    Names: »PRINX«

Derivation

└─⟦378be2382⟧ Bits:30005272 Diverse hjælpeprogrammer: L, L1, L2, A, A1, A2, LINK, ASM, PRINX, WBACK
    └─ ⟦this⟧ »PRINX« 

Text

;**********************************************************************
;
; 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