|
|
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 - metrics - download
Length: 5088 (0x13e0)
Notes: Mikados TextFile, Mikados_K
Names: »NEXT«
└─⟦38ff28550⟧ Bits:30004682 Pascal Standard Assembler til MIKADOS
└─⟦this⟧ »NEXT«
;PASCAL DIRECT INPUT INTERFACE ROUTINES - RM-800317
; CT-800514
;
;
;*********************************************************************
; AVAIL - TEST IF NEXT CHARACTER AVAILABLE
;
; FUNCTION AVAIL: BOOLEAN;
;*********************************************************************
;
AVAIL::LHLD SPIL
MOV A,M
MVI C,0
ANA A
JZ AVAI1
INR C
AVAI1: POP H ;RETURN ADDRESS TO PASCAL
POP D
POP D
POP D
POP D
PUSH B ;LOGICAL VALUE
PCHL
;
;
;*********************************************************************
; NEXT - WAIT FOR AND GET NEXT CHARACTER
;
; FUNCTION NEXT: CHAR;
;*********************************************************************
;
NEXT:: LHLD SPIL ;ADDRESS OF DIRECT INPUT SEMAPHORE
MOV B,H
MOV C,L
CALL WAIT
;
LHLD BPIL
MOV E,M
MVI D,0
INX H
MOV A,M
INR A
JNZ NEXT1
;
INX H
MOV A,M
INX H
MOV H,M
MOV L,A
NEXT1: SHLD BPIL
;
POP H ;RETURN ADDRESS TO PASCAL INTERPRETER
POP B
POP B
POP B
POP B
PUSH D ;FUNCTION VALUE
PCHL
;
;
;*********************************************************************
; SETUP - INITIALIZE DIRECT INPUT
;
; PROCEDURE SETUP( VAR BUFFER: PACKED ARRAY( 1..LENGTH ) OF CHAR;
; LENGTH: INTEGER );
;*********************************************************************
;
SETUP::POP B ;RETURN ADDRESS TO INTERPRETER
POP D ;BUFFER LENGTH
POP H ;BUFFER POINTER
PUSH B ;RETURN ADDRESS TO INTERPRETER
PUSH H ;BUFFER POINTER
SHLD BPIL
;
MOV B,H
MOV C,L
DCR E ;LAST 3 CHARACTERS OF BUFFER USED FOR OVERHEAD
DCR E
DCR E
G1: MVI M,0 ;ZERO REMAINDER OF BUFFER
INX H
DCR E
JNZ G1
;
MVI M,0FF ;SET UP BUFFER STOP CHARACTER
INX H
MOV M,C ; AND POINTER TO START OF BUFFER
INX H
MOV M,B
;
LXI H,6 ;GET AREA FOR SEMAPHORE
CALL ALLOC
MOV A,D ;SEE IF WE GOT ANYTHING AT ALL
ORA E
JZ GERR
;
XCHG
PUSH H ;POINTER TO START OF SEMAPHORE AREA
SHLD SPIL
MOV A,E ;NUMBER OF CHARACTERS ALLOCATED
STA SLEN
MVI E,6 ;LENGTH OF SEMAPHORE
G2: MVI M,0 ;ZERO SEMAPHORE AREA
INX H
DCR E
JNZ G2
;
CALL FÅINI ;GET A MESSAGE BUFFER
MVI M,9 ;DEFINE DIRECT INPUT OPCODE
INX H
INX H
POP B ;POINTER TO SEMAPHORE
MOV M,C
INX H
MOV M,B
;
LXI B,4
DAD B
POP B ;BUFFER POINTER
MOV M,C
INX H
MOV M,B
;
LHLD CSEMA
MOV B,H
MOV C,L
XCHG
CALL SEND ;DEFINE DIRECT INPUT
;
RET
;
;
GERR: POP H ;CLEAR STACK
MVI A,-#10
STA IORSLT ;SET IORESULT
RET
;
;
;*********************************************************************
; FINIS - CANCEL DIRECT INPUT CONDITION
;
; PROCEDURE FINIS;
;*********************************************************************
;
FINIS::CALL FÅINI ;GET A MESSAGE BUFFER
PUSH D
MVI M,7 ;DEFINE BREAK SEMAPHORE
INX H
INX H
LXI B,OPMES ;OPERATOR COMMUNICATION MAIN SEMAPHORE
MOV M,C
INX H
MOV M,B
LXI B,4
DAD B
LXI D,TMPIL ;PUT POINTER TO TERMINAL AREA INTO MESSAGE
MVI B,2
CALL MOVE
LHLD CSEMA
MOV B,H
MOV C,L
POP H
CALL SEND ;DEFINE BREAK SEMAPHORE (CANCEL DIRECT INPUT)
;
LHLD SPIL ;DEALLOCATE SEMAPHORE AREA
XCHG
LDA SLEN
MOV L,A
MVI H,0
CALL DELOC
;
RET
;
;
;
BPIL: DS 2 ;ADDRESS WHERE NEXT CHARACTER WILL BE PLACED
SPIL: DS 2
SLEN: DS 1
;
;
END