|
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) Notes: Mikados TextFile, Mikados_K Names: »DEALLO«
└─⟦38ff28550⟧ Bits:30004682 Pascal Standard Assembler til MIKADOS └─ ⟦this⟧ »DEALLO«
;************************************************************* ;* 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