|
|
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: 4064 (0xfe0)
Types: TextFile
Notes: Mikados_K
Names: »DEALLO.K«
└─⟦33b8385fd⟧ Bits:30009009 PSAP1
└─⟦this⟧ »DEALLO.K«
;*************************************************************
;* PASCAL STANDARD ASSEMBLER PACKAGE. *
;* *
;* (C) 1980 DANSK DATA ELEKTRONIK APS. *
;*************************************************************
;
;*************************************************************
;* PROCEDURE NAME: DEALLO *
;*************************************************************
;
; CT 05-MAY-1980
;
;=============================================================
; DESCRIPTION:
; THIS PROCEDURE DEALLOCATES A MEMORY AREA PREVIOUSLY ALLO-
; CATED BY THE ALLOCA PROCEDURE.
; PLEASE REFER TO THE PASCAL STANDARD ASSEMBLER PACKAGE MANUAL
; SECTION 6.2 FOR DETAILS.
;
;-------------------------------------------------------------
; STACK CONTENTS ON ENTRY: I I
; I---------------I
; I RETURN ADR. I
; I---------------I
; I -> STATUS I
; I---------------I
; I ADDRESS I
; I---------------I
; I I
;-------------------------------------------------------------
; STACK CONTENTS ON EXIT: EMPTY
;-------------------------------------------------------------
; THE STACK CONTENTS NAMED 'ADDRESS' POINTS TO A DATA AREA
; TO BE RELEASED. THE BYTE IMMEDIATELY PRECEDING THIS AREA
; CONTAINS THE VALUE EE (HEX) IF THE AREA WAS INDEED ALLOCATED
; USING THE ALLOCA PROCEDURE. THIS IS THE SO-CALLED FLAG BYTE.
; THE TWO BYTES PRECEDING THE FLAG BYTE CONTAIN THE LENGTH OF
; THE AREA. IT IS THE ADDRESS OF THESE TWO BYTES THAT IS
; PASSED TO THE DELOC SUBROUTINE.
;=============================================================
SKIP
DEALLO::
;
;GET ADDRESS
;
POP B ;BC=RETURN ADDRESS
POP D ;DE->STATUS
POP H ;HL=ADDRESS
PUSH B
PUSH D
;THE STACK NOW LOOKS LIKE THIS:
; I I
; I---------------I
; I -> STATUS I
; I---------------I
; I RET. ADR. I
; I---------------I
; I I
;
;TEST FLAG BYTE
;
DCX H
MOV A,M ;A:=FLAG BYTE
CPI 0EE ;WAS AREA ALLOCATED BY ALLOCA?
JZ NOERR ;YES
LXI H,1 ;NO, SET ERROR CODE IN HL
JMP FIN
NOERR: MVI M,0 ;FLAG BYTE:=ZERO
;
;GET LENGTH OF AREA
;
DCX H
MOV D,M
DCX H
MOV E,M
XCHG ;DE->AREA TO BE RELEASED
;HL=LENGTH OF AREA
;
;DEALLOCATE!
;
CALL DELOC
;
;HL NOW CONTAINS STATUS VALUE
;
FIN: POP D
XCHG ;HL->STATUS
;DE=STATUS VALUE
MOV M,E ;STORE
INX H ; STATUS
MOV M,D ; VALUE
RET
END
>;*************************************************************>>;* PASCAL STANDARD ASSEMBLER PACKAGE. *>>;* *>>;* (C) 1980 DANSK DATA ELEKTRONIK APS. *>>;*************************************************************>▶01◀;▶01◀>;*************************************************************>>;* PROCEDURE NAME: DEALLO *>>;*************************************************************>▶01◀;▶01◀▶10◀; CT 05-MAY-1980▶10◀▶01◀;▶01◀>;=============================================================>▶0e◀; DESCRIPTION:▶0e◀;; THIS PROCEDURE DEALLOCATES A MEMORY AREA PREVIOUSLY ALLO-; ; CATED BY THE ALLOCA PROCEDURE. >; PLEASE REFER TO THE PASCAL STANDARD ASSEMBLER PACKAGE MANUAL>▶1a◀; SECTION 6.2 FOR DETAILS.▶1a◀▶01◀;▶01◀>;------------------------------------------------------------->0; STACK CONTENTS ON ENTRY: I I00; I---------------I00; I RETURN ADR. I00; I---------------I00; I -> STATUS I00; I---------------I00; I ADDRESS I00; I---------------I00; I I0>;------------------------------------------------------------->$; STACK CONTENTS ON EXIT: EMPTY$>;------------------------------------------------------------->:; THE STACK CONTENTS NAMED 'ADDRESS' POINTS TO A DATA AREA::; TO BE RELEASED. THE BYTE IMMEDIATELY PRECEDING THIS AREA:>; CONTAINS THE VALUE EE (HEX) IF THE AREA WAS INDEED ALLOCATED>>; USING THE ALLOCA PROCEDURE. THIS IS THE SO-CALLED FLAG BYTE.>=; THE TWO BYTES PRECEDING THE FLAG BYTE CONTAIN THE LENGTH OF=8; THE AREA. IT IS THE ADDRESS OF THESE TWO BYTES THAT IS8!; PASSED TO THE DELOC SUBROUTINE.!>;=============================================================>▶01◀ ▶01◀▶0b◀ SKIP▶0b◀▶08◀DEALLO::▶08◀▶01◀ ▶01◀▶01◀;▶01◀\f
;GET ADDRESS\f
▶01◀;▶01◀) POP B ;BC=RETURN ADDRESS)" POP D ;DE->STATUS"" POP H ;HL=ADDRESS"▶10◀ PUSH B▶10◀▶10◀ PUSH D▶10◀6 ;THE STACK NOW LOOKS LIKE THIS:68 ; I I88 ; I---------------I88 ; I -> STATUS I88 ; I---------------I88 ; I RET. ADR. I88 ; I---------------I88 ; I I8▶01◀ ▶01◀▶01◀;▶01◀▶0f◀;TEST FLAG BYTE▶0f◀▶01◀;▶01◀▶10◀ DCX H▶10◀$ MOV A,M ;A:=FLAG BYTE$5 CPI 0EE ;WAS AREA ALLOCATED BY ALLOCA?5▶1b◀ JZ NOERR ;YES▶1b◀0 LXI H,1 ;NO, SET ERROR CODE IN HL0▶12◀ JMP FIN▶12◀'NOERR: MVI M,0 ;FLAG BYTE:=ZERO'▶01◀ ▶01◀▶01◀;▶01◀▶13◀;GET LENGTH OF AREA▶13◀▶01◀;▶01◀▶10◀ DCX H▶10◀▶12◀ MOV D,M▶12◀▶10◀ DCX H▶10◀▶12◀ MOV E,M▶12◀/ XCHG ;DE->AREA TO BE RELEASED/) ;HL=LENGTH OF AREA)▶01◀ ▶01◀▶01◀;▶01◀\f
;DEALLOCATE!\f
▶01◀;▶01◀▶14◀ CALL DELOC▶14◀▶01◀ ▶01◀▶01◀;▶01◀▶1d◀;HL NOW CONTAINS STATUS VALUE▶1d◀▶01◀;▶01◀▶10◀FIN: POP D▶10◀" XCHG ;HL->STATUS"' ;DE=STATUS VALUE'▶1d◀ MOV M,E ;STORE▶1d◀ INX H ; STATUS ! MOV M,D ; VALUE!▶01◀ ▶01◀
RET
▶01◀ ▶01◀
END
▶00◀▶00◀cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc