|
|
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
0x000…040 Line {l1=0x3e, l2=»;*************************************************************«, l3=0x3e}
0x040…080 Line {l1=0x3e, l2=»;* PASCAL STANDARD ASSEMBLER PACKAGE. *«, l3=0x3e}
0x080…0c0 Line {l1=0x3e, l2=»;* *«, l3=0x3e}
0x0c0…100 Line {l1=0x3e, l2=»;* (C) 1980 DANSK DATA ELEKTRONIK APS. *«, l3=0x3e}
0x100…140 Line {l1=0x3e, l2=»;*************************************************************«, l3=0x3e}
0x140…143 Line {l1=0x01, l2=»;«, l3=0x01}
0x143…183 Line {l1=0x3e, l2=»;*************************************************************«, l3=0x3e}
0x183…1c3 Line {l1=0x3e, l2=»;* PROCEDURE NAME: DEALLO *«, l3=0x3e}
0x1c3…203 Line {l1=0x3e, l2=»;*************************************************************«, l3=0x3e}
0x203…206 Line {l1=0x01, l2=»;«, l3=0x01}
0x206…218 Line {l1=0x10, l2=»; CT 05-MAY-1980«, l3=0x10}
0x218…21b Line {l1=0x01, l2=»;«, l3=0x01}
0x21b…25b Line {l1=0x3e, l2=»;=============================================================«, l3=0x3e}
0x25b…26b Line {l1=0x0e, l2=»; DESCRIPTION:«, l3=0x0e}
0x26b…2a8 Line {l1=0x3b, l2=»; THIS PROCEDURE DEALLOCATES A MEMORY AREA PREVIOUSLY ALLO-«, l3=0x3b}
0x2a8…2ca Line {l1=0x20, l2=»; CATED BY THE ALLOCA PROCEDURE.«, l3=0x20}
0x2ca…30a Line {l1=0x3e, l2=»; PLEASE REFER TO THE PASCAL STANDARD ASSEMBLER PACKAGE MANUAL«, l3=0x3e}
0x30a…326 Line {l1=0x1a, l2=»; SECTION 6.2 FOR DETAILS.«, l3=0x1a}
0x326…329 Line {l1=0x01, l2=»;«, l3=0x01}
0x329…369 Line {l1=0x3e, l2=»;-------------------------------------------------------------«, l3=0x3e}
0x369…39b Line {l1=0x30, l2=»; STACK CONTENTS ON ENTRY: I I«, l3=0x30}
0x39b…3cd Line {l1=0x30, l2=»; I---------------I«, l3=0x30}
0x3cd…3ff Line {l1=0x30, l2=»; I RETURN ADR. I«, l3=0x30}
0x3ff…431 Line {l1=0x30, l2=»; I---------------I«, l3=0x30}
0x431…463 Line {l1=0x30, l2=»; I -> STATUS I«, l3=0x30}
0x463…495 Line {l1=0x30, l2=»; I---------------I«, l3=0x30}
0x495…4c7 Line {l1=0x30, l2=»; I ADDRESS I«, l3=0x30}
0x4c7…4f9 Line {l1=0x30, l2=»; I---------------I«, l3=0x30}
0x4f9…52b Line {l1=0x30, l2=»; I I«, l3=0x30}
0x52b…56b Line {l1=0x3e, l2=»;-------------------------------------------------------------«, l3=0x3e}
0x56b…591 Line {l1=0x24, l2=»; STACK CONTENTS ON EXIT: EMPTY«, l3=0x24}
0x591…5d1 Line {l1=0x3e, l2=»;-------------------------------------------------------------«, l3=0x3e}
0x5d1…60d Line {l1=0x3a, l2=»; THE STACK CONTENTS NAMED 'ADDRESS' POINTS TO A DATA AREA«, l3=0x3a}
0x60d…649 Line {l1=0x3a, l2=»; TO BE RELEASED. THE BYTE IMMEDIATELY PRECEDING THIS AREA«, l3=0x3a}
0x649…689 Line {l1=0x3e, l2=»; CONTAINS THE VALUE EE (HEX) IF THE AREA WAS INDEED ALLOCATED«, l3=0x3e}
0x689…6c9 Line {l1=0x3e, l2=»; USING THE ALLOCA PROCEDURE. THIS IS THE SO-CALLED FLAG BYTE.«, l3=0x3e}
0x6c9…708 Line {l1=0x3d, l2=»; THE TWO BYTES PRECEDING THE FLAG BYTE CONTAIN THE LENGTH OF«, l3=0x3d}
0x708…742 Line {l1=0x38, l2=»; THE AREA. IT IS THE ADDRESS OF THESE TWO BYTES THAT IS«, l3=0x38}
0x742…765 Line {l1=0x21, l2=»; PASSED TO THE DELOC SUBROUTINE.«, l3=0x21}
0x765…7a5 Line {l1=0x3e, l2=»;=============================================================«, l3=0x3e}
0x7a5…7a8 Line {l1=0x01, l2=» «, l3=0x01}
0x7a8…7b5 Line {l1=0x0b, l2=» SKIP«, l3=0x0b}
0x7b5…7bf Line {l1=0x08, l2=»DEALLO::«, l3=0x08}
0x7bf…7c2 Line {l1=0x01, l2=» «, l3=0x01}
0x7c2…7c5 Line {l1=0x01, l2=»;«, l3=0x01}
0x7c5…7d3 Line {l1=0x0c, l2=»;GET ADDRESS«, l3=0x0c}
0x7d3…7d6 Line {l1=0x01, l2=»;«, l3=0x01}
0x7d6…801 Line {l1=0x29, l2=» POP B ;BC=RETURN ADDRESS«, l3=0x29}
0x801…825 Line {l1=0x22, l2=» POP D ;DE->STATUS«, l3=0x22}
0x825…849 Line {l1=0x22, l2=» POP H ;HL=ADDRESS«, l3=0x22}
0x849…85b Line {l1=0x10, l2=» PUSH B«, l3=0x10}
0x85b…86d Line {l1=0x10, l2=» PUSH D«, l3=0x10}
0x86d…8a5 Line {l1=0x36, l2=» ;THE STACK NOW LOOKS LIKE THIS:«, l3=0x36}
0x8a5…8df Line {l1=0x38, l2=» ; I I«, l3=0x38}
0x8df…919 Line {l1=0x38, l2=» ; I---------------I«, l3=0x38}
0x919…953 Line {l1=0x38, l2=» ; I -> STATUS I«, l3=0x38}
0x953…98d Line {l1=0x38, l2=» ; I---------------I«, l3=0x38}
0x98d…9c7 Line {l1=0x38, l2=» ; I RET. ADR. I«, l3=0x38}
0x9c7…a01 Line {l1=0x38, l2=» ; I---------------I«, l3=0x38}
0xa01…a3b Line {l1=0x38, l2=» ; I I«, l3=0x38}
0xa3b…a3e Line {l1=0x01, l2=» «, l3=0x01}
0xa3e…a41 Line {l1=0x01, l2=»;«, l3=0x01}
0xa41…a52 Line {l1=0x0f, l2=»;TEST FLAG BYTE«, l3=0x0f}
0xa52…a55 Line {l1=0x01, l2=»;«, l3=0x01}
0xa55…a67 Line {l1=0x10, l2=» DCX H«, l3=0x10}
0xa67…a8d Line {l1=0x24, l2=» MOV A,M ;A:=FLAG BYTE«, l3=0x24}
0xa8d…ac4 Line {l1=0x35, l2=» CPI 0EE ;WAS AREA ALLOCATED BY ALLOCA?«, l3=0x35}
0xac4…ae1 Line {l1=0x1b, l2=» JZ NOERR ;YES«, l3=0x1b}
0xae1…b13 Line {l1=0x30, l2=» LXI H,1 ;NO, SET ERROR CODE IN HL«, l3=0x30}
0xb13…b27 Line {l1=0x12, l2=» JMP FIN«, l3=0x12}
0xb27…b50 Line {l1=0x27, l2=»NOERR: MVI M,0 ;FLAG BYTE:=ZERO«, l3=0x27}
0xb50…b53 Line {l1=0x01, l2=» «, l3=0x01}
0xb53…b56 Line {l1=0x01, l2=»;«, l3=0x01}
0xb56…b6b Line {l1=0x13, l2=»;GET LENGTH OF AREA«, l3=0x13}
0xb6b…b6e Line {l1=0x01, l2=»;«, l3=0x01}
0xb6e…b80 Line {l1=0x10, l2=» DCX H«, l3=0x10}
0xb80…b94 Line {l1=0x12, l2=» MOV D,M«, l3=0x12}
0xb94…ba6 Line {l1=0x10, l2=» DCX H«, l3=0x10}
0xba6…bba Line {l1=0x12, l2=» MOV E,M«, l3=0x12}
0xbba…beb Line {l1=0x2f, l2=» XCHG ;DE->AREA TO BE RELEASED«, l3=0x2f}
0xbeb…c16 Line {l1=0x29, l2=» ;HL=LENGTH OF AREA«, l3=0x29}
0xc16…c19 Line {l1=0x01, l2=» «, l3=0x01}
0xc19…c1c Line {l1=0x01, l2=»;«, l3=0x01}
0xc1c…c2a Line {l1=0x0c, l2=»;DEALLOCATE!«, l3=0x0c}
0xc2a…c2d Line {l1=0x01, l2=»;«, l3=0x01}
0xc2d…c43 Line {l1=0x14, l2=» CALL DELOC«, l3=0x14}
0xc43…c46 Line {l1=0x01, l2=» «, l3=0x01}
0xc46…c49 Line {l1=0x01, l2=»;«, l3=0x01}
0xc49…c68 Line {l1=0x1d, l2=»;HL NOW CONTAINS STATUS VALUE«, l3=0x1d}
0xc68…c6b Line {l1=0x01, l2=»;«, l3=0x01}
0xc6b…c7d Line {l1=0x10, l2=»FIN: POP D«, l3=0x10}
0xc7d…ca1 Line {l1=0x22, l2=» XCHG ;HL->STATUS«, l3=0x22}
0xca1…cca Line {l1=0x27, l2=» ;DE=STATUS VALUE«, l3=0x27}
0xcca…ce9 Line {l1=0x1d, l2=» MOV M,E ;STORE«, l3=0x1d}
0xce9…d0b Line {l1=0x20, l2=» INX H ; STATUS«, l3=0x20}
0xd0b…d2e Line {l1=0x21, l2=» MOV M,D ; VALUE«, l3=0x21}
0xd2e…d31 Line {l1=0x01, l2=» «, l3=0x01}
0xd31…d3d Line {l1=0x0a, l2=» RET«, l3=0x0a}
0xd3d…d40 Line {l1=0x01, l2=» «, l3=0x01}
0xd40…d4c Line {l1=0x0a, l2=» END«, l3=0x0a}
0xd4c…d60 00 00 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 ┆ cccccccccccccccccc┆
0xd60…d80 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 ┆cccccccccccccccccccccccccccccccc┆
[…0x13…]
>;*************************************************************>>;* 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