|
|
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: 5088 (0x13e0)
Types: TextFile
Notes: Mikados_K
Names: »NEXT.K«
└─⟦38ff28550⟧ Bits:30004682 Pascal Standard Assembler til MIKADOS
└─⟦this⟧ »NEXT.K«
;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
0x0000…0035 Line {l1=0x33, l2=»;PASCAL DIRECT INPUT INTERFACE ROUTINES - RM-800317«, l3=0x33}
0x0035…006a Line {l1=0x33, l2=»; CT-800514«, l3=0x33}
0x006a…006d Line {l1=0x01, l2=»;«, l3=0x01}
[…0x1…]
0x0070…00b8 Line {l1=0x46, l2=»;*********************************************************************«, l3=0x46}
0x00b8…00e4 Line {l1=0x2a, l2=»; AVAIL - TEST IF NEXT CHARACTER AVAILABLE«, l3=0x2a}
0x00e4…00e7 Line {l1=0x01, l2=»;«, l3=0x01}
0x00e7…0103 Line {l1=0x1a, l2=»; FUNCTION AVAIL: BOOLEAN;«, l3=0x1a}
0x0103…014b Line {l1=0x46, l2=»;*********************************************************************«, l3=0x46}
0x014b…014e Line {l1=0x01, l2=»;«, l3=0x01}
0x014e…0163 Line {l1=0x13, l2=»AVAIL::LHLD SPIL«, l3=0x13}
0x0163…0177 Line {l1=0x12, l2=» MOV A,M«, l3=0x12}
0x0177…018b Line {l1=0x12, l2=» MVI C,0«, l3=0x12}
0x018b…019d Line {l1=0x10, l2=» ANA A«, l3=0x10}
0x019d…01b3 Line {l1=0x14, l2=» JZ AVAI1«, l3=0x14}
0x01b3…01c5 Line {l1=0x10, l2=» INR C«, l3=0x10}
0x01c5…01f7 Line {l1=0x30, l2=»AVAI1: POP H ;RETURN ADDRESS TO PASCAL«, l3=0x30}
0x01f7…0209 Line {l1=0x10, l2=» POP D«, l3=0x10}
[…0x3…]
0x023f…0266 Line {l1=0x25, l2=» PUSH B ;LOGICAL VALUE«, l3=0x25}
0x0266…0273 Line {l1=0x0b, l2=» PCHL«, l3=0x0b}
0x0273…0276 Line {l1=0x01, l2=»;«, l3=0x01}
[…0x1…]
0x0279…02c1 Line {l1=0x46, l2=»;*********************************************************************«, l3=0x46}
0x02c1…02eb Line {l1=0x28, l2=»; NEXT - WAIT FOR AND GET NEXT CHARACTER«, l3=0x28}
0x02eb…02ee Line {l1=0x01, l2=»;«, l3=0x01}
0x02ee…0306 Line {l1=0x16, l2=»; FUNCTION NEXT: CHAR;«, l3=0x16}
0x0306…034e Line {l1=0x46, l2=»;*********************************************************************«, l3=0x46}
0x034e…0351 Line {l1=0x01, l2=»;«, l3=0x01}
0x0351…038c Line {l1=0x39, l2=»NEXT:: LHLD SPIL ;ADDRESS OF DIRECT INPUT SEMAPHORE«, l3=0x39}
0x038c…03a0 Line {l1=0x12, l2=» MOV B,H«, l3=0x12}
0x03a0…03b4 Line {l1=0x12, l2=» MOV C,L«, l3=0x12}
0x03b4…03c9 Line {l1=0x13, l2=» CALL WAIT«, l3=0x13}
0x03c9…03cc Line {l1=0x01, l2=»;«, l3=0x01}
0x03cc…03e1 Line {l1=0x13, l2=» LHLD BPIL«, l3=0x13}
0x03e1…03f5 Line {l1=0x12, l2=» MOV E,M«, l3=0x12}
0x03f5…0409 Line {l1=0x12, l2=» MVI D,0«, l3=0x12}
0x0409…041b Line {l1=0x10, l2=» INX H«, l3=0x10}
0x041b…042f Line {l1=0x12, l2=» MOV A,M«, l3=0x12}
0x042f…0441 Line {l1=0x10, l2=» INR A«, l3=0x10}
0x0441…0457 Line {l1=0x14, l2=» JNZ NEXT1«, l3=0x14}
0x0457…045a Line {l1=0x01, l2=»;«, l3=0x01}
0x045a…046c Line {l1=0x10, l2=» INX H«, l3=0x10}
0x046c…0480 Line {l1=0x12, l2=» MOV A,M«, l3=0x12}
0x0480…0492 Line {l1=0x10, l2=» INX H«, l3=0x10}
0x0492…04a6 Line {l1=0x12, l2=» MOV H,M«, l3=0x12}
0x04a6…04ba Line {l1=0x12, l2=» MOV L,A«, l3=0x12}
0x04ba…04cf Line {l1=0x13, l2=»NEXT1: SHLD BPIL«, l3=0x13}
0x04cf…04d2 Line {l1=0x01, l2=»;«, l3=0x01}
0x04d2…0510 Line {l1=0x3c, l2=» POP H ;RETURN ADDRESS TO PASCAL INTERPRETER«, l3=0x3c}
0x0510…0522 Line {l1=0x10, l2=» POP B«, l3=0x10}
[…0x3…]
0x0558…0580 Line {l1=0x26, l2=» PUSH D ;FUNCTION VALUE«, l3=0x26}
0x0580…058d Line {l1=0x0b, l2=» PCHL«, l3=0x0b}
0x058d…0590 Line {l1=0x01, l2=»;«, l3=0x01}
[…0x1…]
0x0593…05db Line {l1=0x46, l2=»;*********************************************************************«, l3=0x46}
0x05db…05fe Line {l1=0x21, l2=»; SETUP - INITIALIZE DIRECT INPUT«, l3=0x21}
0x05fe…0601 Line {l1=0x01, l2=»;«, l3=0x01}
0x0601…0644 Line {l1=0x41, l2=»; PROCEDURE SETUP( VAR BUFFER: PACKED ARRAY( 1..LENGTH ) OF CHAR;«, l3=0x41}
0x0644…066b Line {l1=0x25, l2=»; LENGTH: INTEGER );«, l3=0x25}
0x066b…06b3 Line {l1=0x46, l2=»;*********************************************************************«, l3=0x46}
0x06b3…06b6 Line {l1=0x01, l2=»;«, l3=0x01}
0x06b6…06ed Line {l1=0x35, l2=»SETUP::POP B ;RETURN ADDRESS TO INTERPRETER«, l3=0x35}
0x06ed…0714 Line {l1=0x25, l2=» POP D ;BUFFER LENGTH«, l3=0x25}
0x0714…073c Line {l1=0x26, l2=» POP H ;BUFFER POINTER«, l3=0x26}
0x073c…0773 Line {l1=0x35, l2=» PUSH B ;RETURN ADDRESS TO INTERPRETER«, l3=0x35}
0x0773…079b Line {l1=0x26, l2=» PUSH H ;BUFFER POINTER«, l3=0x26}
0x079b…07b0 Line {l1=0x13, l2=» SHLD BPIL«, l3=0x13}
0x07b0…07b3 Line {l1=0x01, l2=»;«, l3=0x01}
0x07b3…07c7 Line {l1=0x12, l2=» MOV B,H«, l3=0x12}
0x07c7…07db Line {l1=0x12, l2=» MOV C,L«, l3=0x12}
0x07db…0822 Line {l1=0x45, l2=» DCR E ;LAST 3 CHARACTERS OF BUFFER USED FOR OVERHEAD«, l3=0x45}
0x0822…0834 Line {l1=0x10, l2=» DCR E«, l3=0x10}
[…0x1…]
0x0846…0878 Line {l1=0x30, l2=»G1: MVI M,0 ;ZERO REMAINDER OF BUFFER«, l3=0x30}
0x0878…088a Line {l1=0x10, l2=» INX H«, l3=0x10}
0x088a…089c Line {l1=0x10, l2=» DCR E«, l3=0x10}
0x089c…08af Line {l1=0x11, l2=» JNZ G1«, l3=0x11}
0x08af…08b2 Line {l1=0x01, l2=»;«, l3=0x01}
0x08b2…08e8 Line {l1=0x34, l2=» MVI M,0FF ;SET UP BUFFER STOP CHARACTER«, l3=0x34}
0x08e8…08fa Line {l1=0x10, l2=» INX H«, l3=0x10}
0x08fa…0933 Line {l1=0x37, l2=» MOV M,C ; AND POINTER TO START OF BUFFER«, l3=0x37}
0x0933…0945 Line {l1=0x10, l2=» INX H«, l3=0x10}
0x0945…0959 Line {l1=0x12, l2=» MOV M,B«, l3=0x12}
0x0959…095c Line {l1=0x01, l2=»;«, l3=0x01}
0x095c…098c Line {l1=0x2e, l2=» LXI H,6 ;GET AREA FOR SEMAPHORE«, l3=0x2e}
0x098c…09a2 Line {l1=0x14, l2=» CALL ALLOC«, l3=0x14}
0x09a2…09d9 Line {l1=0x35, l2=» MOV A,D ;SEE IF WE GOT ANYTHING AT ALL«, l3=0x35}
0x09d9…09eb Line {l1=0x10, l2=» ORA E«, l3=0x10}
0x09eb…0a00 Line {l1=0x13, l2=» JZ GERR«, l3=0x13}
0x0a00…0a03 Line {l1=0x01, l2=»;«, l3=0x01}
0x0a03…0a10 Line {l1=0x0b, l2=» XCHG«, l3=0x0b}
0x0a10…0a4c Line {l1=0x3a, l2=» PUSH H ;POINTER TO START OF SEMAPHORE AREA«, l3=0x3a}
0x0a4c…0a61 Line {l1=0x13, l2=» SHLD SPIL«, l3=0x13}
0x0a61…0a99 Line {l1=0x36, l2=» MOV A,E ;NUMBER OF CHARACTERS ALLOCATED«, l3=0x36}
0x0a99…0aae Line {l1=0x13, l2=» STA SLEN«, l3=0x13}
0x0aae…0adb Line {l1=0x2b, l2=» MVI E,6 ;LENGTH OF SEMAPHORE«, l3=0x2b}
0x0adb…0b08 Line {l1=0x2b, l2=»G2: MVI M,0 ;ZERO SEMAPHORE AREA«, l3=0x2b}
0x0b08…0b1a Line {l1=0x10, l2=» INX H«, l3=0x10}
0x0b1a…0b2c Line {l1=0x10, l2=» DCR E«, l3=0x10}
0x0b2c…0b3f Line {l1=0x11, l2=» JNZ G2«, l3=0x11}
0x0b3f…0b42 Line {l1=0x01, l2=»;«, l3=0x01}
0x0b42…0b70 Line {l1=0x2c, l2=» CALL FÅINI ;GET A MESSAGE BUFFER«, l3=0x2c}
0x0b70…0ba4 Line {l1=0x32, l2=» MVI M,9 ;DEFINE DIRECT INPUT OPCODE«, l3=0x32}
0x0ba4…0bb6 Line {l1=0x10, l2=» INX H«, l3=0x10}
[…0x1…]
0x0bc8…0bf6 Line {l1=0x2c, l2=» POP B ;POINTER TO SEMAPHORE«, l3=0x2c}
0x0bf6…0c0a Line {l1=0x12, l2=» MOV M,C«, l3=0x12}
0x0c0a…0c1c Line {l1=0x10, l2=» INX H«, l3=0x10}
0x0c1c…0c30 Line {l1=0x12, l2=» MOV M,B«, l3=0x12}
0x0c30…0c33 Line {l1=0x01, l2=»;«, l3=0x01}
0x0c33…0c47 Line {l1=0x12, l2=» LXI B,4«, l3=0x12}
0x0c47…0c59 Line {l1=0x10, l2=» DAD B«, l3=0x10}
0x0c59…0c81 Line {l1=0x26, l2=» POP B ;BUFFER POINTER«, l3=0x26}
0x0c81…0c95 Line {l1=0x12, l2=» MOV M,C«, l3=0x12}
0x0c95…0ca7 Line {l1=0x10, l2=» INX H«, l3=0x10}
0x0ca7…0cbb Line {l1=0x12, l2=» MOV M,B«, l3=0x12}
0x0cbb…0cbe Line {l1=0x01, l2=»;«, l3=0x01}
0x0cbe…0cd4 Line {l1=0x14, l2=» LHLD CSEMA«, l3=0x14}
0x0cd4…0ce8 Line {l1=0x12, l2=» MOV B,H«, l3=0x12}
0x0ce8…0cfc Line {l1=0x12, l2=» MOV C,L«, l3=0x12}
0x0cfc…0d09 Line {l1=0x0b, l2=» XCHG«, l3=0x0b}
0x0d09…0d36 Line {l1=0x2b, l2=» CALL SEND ;DEFINE DIRECT INPUT«, l3=0x2b}
0x0d36…0d39 Line {l1=0x01, l2=»;«, l3=0x01}
0x0d39…0d45 Line {l1=0x0a, l2=» RET«, l3=0x0a}
0x0d45…0d48 Line {l1=0x01, l2=»;«, l3=0x01}
[…0x1…]
0x0d4b…0d70 Line {l1=0x23, l2=»GERR: POP H ;CLEAR STACK«, l3=0x23}
0x0d70…0d87 Line {l1=0x15, l2=» MVI A,-#10«, l3=0x15}
0x0d87…0dad Line {l1=0x24, l2=» STA IORSLT ;SET IORESULT«, l3=0x24}
0x0dad…0db9 Line {l1=0x0a, l2=» RET«, l3=0x0a}
0x0db9…0dbc Line {l1=0x01, l2=»;«, l3=0x01}
[…0x1…]
0x0dbf…0e07 Line {l1=0x46, l2=»;*********************************************************************«, l3=0x46}
0x0e07…0e30 Line {l1=0x27, l2=»; FINIS - CANCEL DIRECT INPUT CONDITION«, l3=0x27}
0x0e30…0e33 Line {l1=0x01, l2=»;«, l3=0x01}
0x0e33…0e47 Line {l1=0x12, l2=»; PROCEDURE FINIS;«, l3=0x12}
0x0e47…0e8f Line {l1=0x46, l2=»;*********************************************************************«, l3=0x46}
0x0e8f…0e92 Line {l1=0x01, l2=»;«, l3=0x01}
0x0e92…0ec0 Line {l1=0x2c, l2=»FINIS::CALL FÅINI ;GET A MESSAGE BUFFER«, l3=0x2c}
0x0ec0…0ed2 Line {l1=0x10, l2=» PUSH D«, l3=0x10}
0x0ed2…0f02 Line {l1=0x2e, l2=» MVI M,7 ;DEFINE BREAK SEMAPHORE«, l3=0x2e}
0x0f02…0f14 Line {l1=0x10, l2=» INX H«, l3=0x10}
[…0x1…]
0x0f26…0f65 Line {l1=0x3d, l2=» LXI B,OPMES ;OPERATOR COMMUNICATION MAIN SEMAPHORE«, l3=0x3d}
0x0f65…0f79 Line {l1=0x12, l2=» MOV M,C«, l3=0x12}
0x0f79…0f8b Line {l1=0x10, l2=» INX H«, l3=0x10}
0x0f8b…0f9f Line {l1=0x12, l2=» MOV M,B«, l3=0x12}
0x0f9f…0fb3 Line {l1=0x12, l2=» LXI B,4«, l3=0x12}
0x0fb3…0fc5 Line {l1=0x10, l2=» DAD B«, l3=0x10}
0x0fc5…1008 Line {l1=0x41, l2=» LXI D,TMPIL ;PUT POINTER TO TERMINAL AREA INTO MESSAGE«, l3=0x41}
0x1008…101c Line {l1=0x12, l2=» MVI B,2«, l3=0x12}
0x101c…1031 Line {l1=0x13, l2=» CALL MOVE«, l3=0x13}
0x1031…1047 Line {l1=0x14, l2=» LHLD CSEMA«, l3=0x14}
0x1047…105b Line {l1=0x12, l2=» MOV B,H«, l3=0x12}
0x105b…106f Line {l1=0x12, l2=» MOV C,L«, l3=0x12}
0x106f…1081 Line {l1=0x10, l2=» POP H«, l3=0x10}
0x1081…10c7 Line {l1=0x44, l2=» CALL SEND ;DEFINE BREAK SEMAPHORE (CANCEL DIRECT INPUT)«, l3=0x44}
0x10c7…10ca Line {l1=0x01, l2=»;«, l3=0x01}
0x10ca…10fd Line {l1=0x31, l2=» LHLD SPIL ;DEALLOCATE SEMAPHORE AREA«, l3=0x31}
0x10fd…110a Line {l1=0x0b, l2=» XCHG«, l3=0x0b}
0x110a…111f Line {l1=0x13, l2=» LDA SLEN«, l3=0x13}
0x111f…1133 Line {l1=0x12, l2=» MOV L,A«, l3=0x12}
0x1133…1147 Line {l1=0x12, l2=» MVI H,0«, l3=0x12}
0x1147…115d Line {l1=0x14, l2=» CALL DELOC«, l3=0x14}
0x115d…1160 Line {l1=0x01, l2=»;«, l3=0x01}
0x1160…116c Line {l1=0x0a, l2=» RET«, l3=0x0a}
0x116c…116f Line {l1=0x01, l2=»;«, l3=0x01}
[…0x2…]
0x1175…11ba Line {l1=0x43, l2=»BPIL: DS 2 ;ADDRESS WHERE NEXT CHARACTER WILL BE PLACED«, l3=0x43}
0x11ba…11cc Line {l1=0x10, l2=»SPIL: DS 2«, l3=0x10}
0x11cc…11de Line {l1=0x10, l2=»SLEN: DS 1«, l3=0x10}
0x11de…11e1 Line {l1=0x01, l2=»;«, l3=0x01}
[…0x1…]
0x11e4…11f0 Line {l1=0x0a, l2=» END«, l3=0x0a}
0x11f0…1200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ┆ ┆
0x1200…1220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ┆ ┆
[…0xd…]
0x13c0…13e0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 63 ┆ c┆