DataMuseum.dk

Presents historical artifacts from the history of:

MIKADOS

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about MIKADOS

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦53fe74eac⟧ TextFile

    Length: 5600 (0x15e0)
    Types: TextFile
    Notes: Mikados_K
    Names: »PURGEF.K«

Derivation

└─⟦33b8385fd⟧ Bits:30009009 PSAP1
    └─⟦this⟧ »PURGEF.K« 

Mikados K File

;*************************************************************
;*         PASCAL STANDARD ASSEMBLER PACKAGE.                *
;*                                                           *
;* (C) 1980 DANSK DATA ELEKTRONIK APS.                       *
;*************************************************************
;
;*************************************************************
;* PROCEDURE NAME:      PURGEF                               *
;*************************************************************
;
; CT 07-MAY-1980/22-SEP-1980
;
;=============================================================
; DESCRIPTION:
; THIS PROCEDURE PURGES A MIKADOS FILE.
; PLEASE REFER TO THE PASCAL STANDARD ASSEMBLER PACKAGE MANUAL
; SECTION 8.4 FOR DETAILS.
;
;-------------------------------------------------------------
; STACK CONTENTS ON ENTRY:     I               I
;                              I---------------I
;                              I  RETURN ADR.  I
;                              I---------------I
;                              I  -> FILENAME  I
;                              I---------------I
;                              I               I
;-------------------------------------------------------------
; STACK CONTENTS ON EXIT:      EMPTY
;=============================================================
 
       SKIP
       SYMB
 
PURGEF::
 
;
;GET AND SAVE POINTER FROM STACK
;
       POP     D       ;DE=RETURN ADDRESS
       POP     H       ;HL->FILENAME
       SHLD    FILPTR  ;SAVE ADDRESS OF FILENAME
       PUSH    D       ;PUT RETURN ADDRESS BACK ON STACK
 
;
;CHECK THAT THERE IS ROOM ON THE HEAP FOR THE DCB
;
       LHLD    NP      ;HL->NEXT VACANT IN HEAP
       XCHG            ;DE->NEXT VACANT IN HEAP
       LXI     H,-#256-#48-#40-#10 ;HL:=REQUIRED DISTANCE
                                   ; BETWEEN STACK AND HEAP
       DAD     SP
       MOV     A,L     ;CALCULATE DISTANCE
       SUB     E
       MOV     A,H
       SBB     D       ;IS IT SUFFICIENT?
       JNC     SUFF    ;YES
       MVI     E,'K'   ;(SET UP ERROR CODE FOR UNSIFFICENT
                       ;  STACK LENGTH)
       JMP     XEQRR   ;NO. TERMINATE WITH RUN TIME ERROR K
       
SUFF:  XCHG            ;YES. HL->TOP OF HEAP
       SHLD    DCBADR  ;THIS SHOULD BE THE DATA CONTROL BLOCK
       LXI     D,#256+#48 ;RESERVE ROOM
       DAD     D          ;   ON HEAP
       SHLD    NP         ;      FOR DCB
       
;
;THE FOLLOWING CODE BUILDS AND PUSHES THE PARAMETERS FOR THE
;PURGE SUBROUTINE
;
       LXI     D,1     ;DCB SIZE
       PUSH    D
 
;
;BLANK FILNAM
;
       MVI     A,#8     ;A=LENGTH OF FIELD TO BE BLANKED
       LXI     H,FILNAM ;HL->FIELD TO BE BLANKED
       CALL    E0LIN    ;BLANK IT!
 
;
;MOVE CURRENT FILE NAME TO FILNAM. THE CURRENT FILE NAME IS
;TERMINATED BY A ':'
;
       LXI     B,FILNAM ;BC->FILNAM
       LHLD    FILPTR   ;HL->FILENAME PARAMETER
       INX     H        ;SKIP LENGTH OF FILENAME PARAMETER
NEXFIL:MOV     A,M      ;A:=A CHARACTER FROM THE FILE NAME
       CPI     ':'      ;IS IT A COLON?
       JZ      GETDSC   ;YES, WE ARE FINISHED
       STAX    B        ;NO, STORE IT IN FILNAM
       INX     H        ;POINT TO
       INX     B        ;   NEXT CHARACTER
       JMP     NEXFIL   ;AND DO IT ONCE MORE
 
;
;GET DISC ID
;
GETDSC:INX     H        ;HL->DISC ID IN FILENAME PARAMETER
       MOV     C,M      ;GET
       INX     H        ;  DISC ID
       MOV     B,M      ;    INTO BC
       INX     H        ;SKIP THE SUBSEQUENT COLON
       PUSH    B        ;PUSH DISC ID
 
;
;GET FILE TYPE
;
       INX     H        ;HL->FILE TYPE
       MOV     B,M      ;B:=FILE TYPE
       PUSH    B        ;PUSH FILE TYPE IN MSB.
 
;
;SET UP REMAINING PARAMETERS FOR PURGE SUBROUTINE
;
       LXI     B,FILNAM
       PUSH    B        ;PUSH ADDRESS OF FILE NAME
       LHLD    DCBADR
       PUSH    H        ;PUSH ADDRESS OF DCB
       MVI     M,0      ;INDICATE
       LXI     B,DKÅBN  ;  FILE
       DAD     B        ;    CLOSED
       MVI     M,0
 
;
;DELETE THAT FILE!
;
       CALL    PURGE
 
;
;SET IORESULT
;
       STA     IORSLT
 
;
;RELEASE DCB AREA FROM HEAP
;
       LHLD    DCBADR  ;HL->TOP OF HEAP BEFORE RESERVATION
       SHLD    NP      ;STORE IT AS THE NEW TOP OF HEAP
 
       RET
 
       SKIP
;********** LOCAL DATA *********************
 
DCBADR:DS      2       ;ADDRESS OF DATA CONTROL BLOCK FOR FILE
FILNAM:DS      8       ;FILE NAME
FILPTR:DS      2       ;ADDRESS OF FILENAME PARAMETER
 
       END

Mikados K File

0x0000…0040 Line {l1=0x3e, l2=»;*************************************************************«, l3=0x3e}
0x0040…0080 Line {l1=0x3e, l2=»;*         PASCAL STANDARD ASSEMBLER PACKAGE.                *«, l3=0x3e}
0x0080…00c0 Line {l1=0x3e, l2=»;*                                                           *«, l3=0x3e}
0x00c0…0100 Line {l1=0x3e, l2=»;* (C) 1980 DANSK DATA ELEKTRONIK APS.                       *«, l3=0x3e}
0x0100…0140 Line {l1=0x3e, l2=»;*************************************************************«, l3=0x3e}
0x0140…0143 Line {l1=0x01, l2=»;«, l3=0x01}
0x0143…0183 Line {l1=0x3e, l2=»;*************************************************************«, l3=0x3e}
0x0183…01c3 Line {l1=0x3e, l2=»;* PROCEDURE NAME:      PURGEF                               *«, l3=0x3e}
0x01c3…0203 Line {l1=0x3e, l2=»;*************************************************************«, l3=0x3e}
0x0203…0206 Line {l1=0x01, l2=»;«, l3=0x01}
0x0206…0224 Line {l1=0x1c, l2=»; CT 07-MAY-1980/22-SEP-1980«, l3=0x1c}
0x0224…0227 Line {l1=0x01, l2=»;«, l3=0x01}
0x0227…0267 Line {l1=0x3e, l2=»;=============================================================«, l3=0x3e}
0x0267…0277 Line {l1=0x0e, l2=»; DESCRIPTION:«, l3=0x0e}
0x0277…02a0 Line {l1=0x27, l2=»; THIS PROCEDURE PURGES A MIKADOS FILE.«, l3=0x27}
0x02a0…02e0 Line {l1=0x3e, l2=»; PLEASE REFER TO THE PASCAL STANDARD ASSEMBLER PACKAGE MANUAL«, l3=0x3e}
0x02e0…02fc Line {l1=0x1a, l2=»; SECTION 8.4 FOR DETAILS.«, l3=0x1a}
0x02fc…02ff Line {l1=0x01, l2=»;«, l3=0x01}
0x02ff…033f Line {l1=0x3e, l2=»;-------------------------------------------------------------«, l3=0x3e}
0x033f…0371 Line {l1=0x30, l2=»; STACK CONTENTS ON ENTRY:     I               I«, l3=0x30}
0x0371…03a3 Line {l1=0x30, l2=»;                              I---------------I«, l3=0x30}
0x03a3…03d5 Line {l1=0x30, l2=»;                              I  RETURN ADR.  I«, l3=0x30}
0x03d5…0407 Line {l1=0x30, l2=»;                              I---------------I«, l3=0x30}
0x0407…0439 Line {l1=0x30, l2=»;                              I  -> FILENAME  I«, l3=0x30}
0x0439…046b Line {l1=0x30, l2=»;                              I---------------I«, l3=0x30}
0x046b…049d Line {l1=0x30, l2=»;                              I               I«, l3=0x30}
0x049d…04dd Line {l1=0x3e, l2=»;-------------------------------------------------------------«, l3=0x3e}
0x04dd…0503 Line {l1=0x24, l2=»; STACK CONTENTS ON EXIT:      EMPTY«, l3=0x24}
0x0503…0543 Line {l1=0x3e, l2=»;=============================================================«, l3=0x3e}
0x0543…0546 Line {l1=0x01, l2=» «, l3=0x01}
0x0546…0553 Line {l1=0x0b, l2=»       SKIP«, l3=0x0b}
0x0553…0560 Line {l1=0x0b, l2=»       SYMB«, l3=0x0b}
0x0560…0563 Line {l1=0x01, l2=» «, l3=0x01}
0x0563…056d Line {l1=0x08, l2=»PURGEF::«, l3=0x08}
0x056d…0570 Line {l1=0x01, l2=» «, l3=0x01}
0x0570…0573 Line {l1=0x01, l2=»;«, l3=0x01}
0x0573…0595 Line {l1=0x20, l2=»;GET AND SAVE POINTER FROM STACK«, l3=0x20}
0x0595…0598 Line {l1=0x01, l2=»;«, l3=0x01}
0x0598…05c3 Line {l1=0x29, l2=»       POP     D       ;DE=RETURN ADDRESS«, l3=0x29}
0x05c3…05e9 Line {l1=0x24, l2=»       POP     H       ;HL->FILENAME«, l3=0x24}
0x05e9…061b Line {l1=0x30, l2=»       SHLD    FILPTR  ;SAVE ADDRESS OF FILENAME«, l3=0x30}
0x061b…0655 Line {l1=0x38, l2=»       PUSH    D       ;PUT RETURN ADDRESS BACK ON STACK«, l3=0x38}
0x0655…0658 Line {l1=0x01, l2=» «, l3=0x01}
0x0658…065b Line {l1=0x01, l2=»;«, l3=0x01}
0x065b…068e Line {l1=0x31, l2=»;CHECK THAT THERE IS ROOM ON THE HEAP FOR THE DCB«, l3=0x31}
0x068e…0691 Line {l1=0x01, l2=»;«, l3=0x01}
0x0691…06c2 Line {l1=0x2f, l2=»       LHLD    NP      ;HL->NEXT VACANT IN HEAP«, l3=0x2f}
0x06c2…06f3 Line {l1=0x2f, l2=»       XCHG            ;DE->NEXT VACANT IN HEAP«, l3=0x2f}
0x06f3…072e Line {l1=0x39, l2=»       LXI     H,-#256-#48-#40-#10 ;HL:=REQUIRED DISTANCE«, l3=0x39}
0x072e…076b Line {l1=0x3b, l2=»                                   ; BETWEEN STACK AND HEAP«, l3=0x3b}
0x076b…077e Line {l1=0x11, l2=»       DAD     SP«, l3=0x11}
0x077e…07aa Line {l1=0x2a, l2=»       MOV     A,L     ;CALCULATE DISTANCE«, l3=0x2a}
0x07aa…07bc Line {l1=0x10, l2=»       SUB     E«, l3=0x10}
0x07bc…07d0 Line {l1=0x12, l2=»       MOV     A,H«, l3=0x12}
0x07d0…07fb Line {l1=0x29, l2=»       SBB     D       ;IS IT SUFFICIENT?«, l3=0x29}
0x07fb…0818 Line {l1=0x1b, l2=»       JNC     SUFF    ;YES«, l3=0x1b}
0x0818…0854 Line {l1=0x3a, l2=»       MVI     E,'K'   ;(SET UP ERROR CODE FOR UNSIFFICENT«, l3=0x3a}
0x0854…087d Line {l1=0x27, l2=»                       ;  STACK LENGTH)«, l3=0x27}
0x087d…08ba Line {l1=0x3b, l2=»       JMP     XEQRR   ;NO. TERMINATE WITH RUN TIME ERROR K«, l3=0x3b}
0x08ba…08c3 Line {l1=0x07, l2=»       «, l3=0x07}
0x08c3…08f1 Line {l1=0x2c, l2=»SUFF:  XCHG            ;YES. HL->TOP OF HEAP«, l3=0x2c}
0x08f1…0930 Line {l1=0x3d, l2=»       SHLD    DCBADR  ;THIS SHOULD BE THE DATA CONTROL BLOCK«, l3=0x3d}
0x0930…0959 Line {l1=0x27, l2=»       LXI     D,#256+#48 ;RESERVE ROOM«, l3=0x27}
0x0959…0980 Line {l1=0x25, l2=»       DAD     D          ;   ON HEAP«, l3=0x25}
0x0980…09aa Line {l1=0x28, l2=»       SHLD    NP         ;      FOR DCB«, l3=0x28}
0x09aa…09b3 Line {l1=0x07, l2=»       «, l3=0x07}
0x09b3…09b6 Line {l1=0x01, l2=»;«, l3=0x01}
0x09b6…09f4 Line {l1=0x3c, l2=»;THE FOLLOWING CODE BUILDS AND PUSHES THE PARAMETERS FOR THE«, l3=0x3c}
0x09f4…0a07 Line {l1=0x11, l2=»;PURGE SUBROUTINE«, l3=0x11}
0x0a07…0a0a Line {l1=0x01, l2=»;«, l3=0x01}
0x0a0a…0a2c Line {l1=0x20, l2=»       LXI     D,1     ;DCB SIZE«, l3=0x20}
0x0a2c…0a3e Line {l1=0x10, l2=»       PUSH    D«, l3=0x10}
0x0a3e…0a41 Line {l1=0x01, l2=» «, l3=0x01}
0x0a41…0a44 Line {l1=0x01, l2=»;«, l3=0x01}
0x0a44…0a53 Line {l1=0x0d, l2=»;BLANK FILNAM«, l3=0x0d}
0x0a53…0a56 Line {l1=0x01, l2=»;«, l3=0x01}
0x0a56…0a90 Line {l1=0x38, l2=»       MVI     A,#8     ;A=LENGTH OF FIELD TO BE BLANKED«, l3=0x38}
0x0a90…0ac2 Line {l1=0x30, l2=»       LXI     H,FILNAM ;HL->FIELD TO BE BLANKED«, l3=0x30}
0x0ac2…0ae6 Line {l1=0x22, l2=»       CALL    E0LIN    ;BLANK IT!«, l3=0x22}
0x0ae6…0ae9 Line {l1=0x01, l2=» «, l3=0x01}
0x0ae9…0aec Line {l1=0x01, l2=»;«, l3=0x01}
0x0aec…0b29 Line {l1=0x3b, l2=»;MOVE CURRENT FILE NAME TO FILNAM. THE CURRENT FILE NAME IS«, l3=0x3b}
0x0b29…0b3f Line {l1=0x14, l2=»;TERMINATED BY A ':'«, l3=0x14}
0x0b3f…0b42 Line {l1=0x01, l2=»;«, l3=0x01}
0x0b42…0b67 Line {l1=0x23, l2=»       LXI     B,FILNAM ;BC->FILNAM«, l3=0x23}
0x0b67…0b98 Line {l1=0x2f, l2=»       LHLD    FILPTR   ;HL->FILENAME PARAMETER«, l3=0x2f}
0x0b98…0bd4 Line {l1=0x3a, l2=»       INX     H        ;SKIP LENGTH OF FILENAME PARAMETER«, l3=0x3a}
0x0bd4…0c10 Line {l1=0x3a, l2=»NEXFIL:MOV     A,M      ;A:=A CHARACTER FROM THE FILE NAME«, l3=0x3a}
0x0c10…0c39 Line {l1=0x27, l2=»       CPI     ':'      ;IS IT A COLON?«, l3=0x27}
0x0c39…0c68 Line {l1=0x2d, l2=»       JZ      GETDSC   ;YES, WE ARE FINISHED«, l3=0x2d}
0x0c68…0c99 Line {l1=0x2f, l2=»       STAX    B        ;NO, STORE IT IN FILNAM«, l3=0x2f}
0x0c99…0cbc Line {l1=0x21, l2=»       INX     H        ;POINT TO«, l3=0x21}
0x0cbc…0ce8 Line {l1=0x2a, l2=»       INX     B        ;   NEXT CHARACTER«, l3=0x2a}
0x0ce8…0d16 Line {l1=0x2c, l2=»       JMP     NEXFIL   ;AND DO IT ONCE MORE«, l3=0x2c}
0x0d16…0d19 Line {l1=0x01, l2=» «, l3=0x01}
0x0d19…0d1c Line {l1=0x01, l2=»;«, l3=0x01}
0x0d1c…0d2a Line {l1=0x0c, l2=»;GET DISC ID«, l3=0x0c}
0x0d2a…0d2d Line {l1=0x01, l2=»;«, l3=0x01}
0x0d2d…0d69 Line {l1=0x3a, l2=»GETDSC:INX     H        ;HL->DISC ID IN FILENAME PARAMETER«, l3=0x3a}
0x0d69…0d87 Line {l1=0x1c, l2=»       MOV     C,M      ;GET«, l3=0x1c}
0x0d87…0dab Line {l1=0x22, l2=»       INX     H        ;  DISC ID«, l3=0x22}
0x0dab…0dd1 Line {l1=0x24, l2=»       MOV     B,M      ;    INTO BC«, l3=0x24}
0x0dd1…0e05 Line {l1=0x32, l2=»       INX     H        ;SKIP THE SUBSEQUENT COLON«, l3=0x32}
0x0e05…0e2c Line {l1=0x25, l2=»       PUSH    B        ;PUSH DISC ID«, l3=0x25}
0x0e2c…0e2f Line {l1=0x01, l2=» «, l3=0x01}
0x0e2f…0e32 Line {l1=0x01, l2=»;«, l3=0x01}
0x0e32…0e42 Line {l1=0x0e, l2=»;GET FILE TYPE«, l3=0x0e}
0x0e42…0e45 Line {l1=0x01, l2=»;«, l3=0x01}
0x0e45…0e6d Line {l1=0x26, l2=»       INX     H        ;HL->FILE TYPE«, l3=0x26}
0x0e6d…0e94 Line {l1=0x25, l2=»       MOV     B,M      ;B:=FILE TYPE«, l3=0x25}
0x0e94…0ec5 Line {l1=0x2f, l2=»       PUSH    B        ;PUSH FILE TYPE IN MSB.«, l3=0x2f}
0x0ec5…0ec8 Line {l1=0x01, l2=» «, l3=0x01}
0x0ec8…0ecb Line {l1=0x01, l2=»;«, l3=0x01}
0x0ecb…0efe Line {l1=0x31, l2=»;SET UP REMAINING PARAMETERS FOR PURGE SUBROUTINE«, l3=0x31}
0x0efe…0f01 Line {l1=0x01, l2=»;«, l3=0x01}
0x0f01…0f1a Line {l1=0x17, l2=»       LXI     B,FILNAM«, l3=0x17}
0x0f1a…0f4e Line {l1=0x32, l2=»       PUSH    B        ;PUSH ADDRESS OF FILE NAME«, l3=0x32}
0x0f4e…0f65 Line {l1=0x15, l2=»       LHLD    DCBADR«, l3=0x15}
0x0f65…0f93 Line {l1=0x2c, l2=»       PUSH    H        ;PUSH ADDRESS OF DCB«, l3=0x2c}
0x0f93…0fb6 Line {l1=0x21, l2=»       MVI     M,0      ;INDICATE«, l3=0x21}
0x0fb6…0fd7 Line {l1=0x1f, l2=»       LXI     B,DKÅBN  ;  FILE«, l3=0x1f}
0x0fd7…0ffc Line {l1=0x23, l2=»       DAD     B        ;    CLOSED«, l3=0x23}
0x0ffc…1010 Line {l1=0x12, l2=»       MVI     M,0«, l3=0x12}
0x1010…1013 Line {l1=0x01, l2=» «, l3=0x01}
0x1013…1016 Line {l1=0x01, l2=»;«, l3=0x01}
0x1016…102a Line {l1=0x12, l2=»;DELETE THAT FILE!«, l3=0x12}
0x102a…102d Line {l1=0x01, l2=»;«, l3=0x01}
0x102d…1043 Line {l1=0x14, l2=»       CALL    PURGE«, l3=0x14}
0x1043…1046 Line {l1=0x01, l2=» «, l3=0x01}
0x1046…1049 Line {l1=0x01, l2=»;«, l3=0x01}
0x1049…1058 Line {l1=0x0d, l2=»;SET IORESULT«, l3=0x0d}
0x1058…105b Line {l1=0x01, l2=»;«, l3=0x01}
0x105b…1072 Line {l1=0x15, l2=»       STA     IORSLT«, l3=0x15}
0x1072…1075 Line {l1=0x01, l2=» «, l3=0x01}
0x1075…1078 Line {l1=0x01, l2=»;«, l3=0x01}
0x1078…1095 Line {l1=0x1b, l2=»;RELEASE DCB AREA FROM HEAP«, l3=0x1b}
0x1095…1098 Line {l1=0x01, l2=»;«, l3=0x01}
0x1098…10d4 Line {l1=0x3a, l2=»       LHLD    DCBADR  ;HL->TOP OF HEAP BEFORE RESERVATION«, l3=0x3a}
0x10d4…110d Line {l1=0x37, l2=»       SHLD    NP      ;STORE IT AS THE NEW TOP OF HEAP«, l3=0x37}
0x110d…1110 Line {l1=0x01, l2=» «, l3=0x01}
0x1110…111c Line {l1=0x0a, l2=»       RET«, l3=0x0a}
0x111c…111f Line {l1=0x01, l2=» «, l3=0x01}
0x111f…112c Line {l1=0x0b, l2=»       SKIP«, l3=0x0b}
0x112c…115a Line {l1=0x2c, l2=»;********** LOCAL DATA *********************«, l3=0x2c}
0x115a…115d Line {l1=0x01, l2=» «, l3=0x01}
0x115d…119d Line {l1=0x3e, l2=»DCBADR:DS      2       ;ADDRESS OF DATA CONTROL BLOCK FOR FILE«, l3=0x3e}
0x119d…11c0 Line {l1=0x21, l2=»FILNAM:DS      8       ;FILE NAME«, l3=0x21}
0x11c0…11f7 Line {l1=0x35, l2=»FILPTR:DS      2       ;ADDRESS OF FILENAME PARAMETER«, l3=0x35}
0x11f7…11fa Line {l1=0x01, l2=» «, l3=0x01}
0x11fa…1206 Line {l1=0x0a, l2=»       END«, l3=0x0a}
0x1206…1220 00 00 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63                     ┆  cccccccccccccccccccccccc┆
0x1220…1240 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┆
            […0x1d…]

Reduced view