|
DataMuseum.dkPresents historical artifacts from the history of: Bogika Butler |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Bogika Butler Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 19840 (0x4d80) Types: TextFile Names: »EXAMPLE.PRN«
└─⟦832e7e234⟧ Bits:30003263 Butler systemdiskette └─⟦832e7e234⟧ Bits:30004286 Butler systemdiskette └─ ⟦this⟧ »EXAMPLE.PRN« └─⟦ccbc2d84d⟧ Bits:30004597 Boot 60k CP/M (Butler) └─ ⟦this⟧ »EXAMPLE.PRN« └─⟦d823d3189⟧ Bits:30004365 Butler CP/M 2.2 systemdiskette fra LFU └─ ⟦this⟧ »EXAMPLE.PRN«
\f MACRO-80 3.4 01-Dec-80 PAGE 1 NAME ('EXAMPLE') ; ; This is an example of a file which defines "EXTENSIONS" ; to the METANIC COMAL-80 interpreter version 2. ; The file is intentioned for use with the MACRO-80 macro ; assembler from Microsoft. ; ; Version 1 written 830324 ; by Arne Christensen ; who is of Metanic ApS ; Kongevejen 177 ; DK-2830 Virum ; Denmark ; .Z80 .LIST .SALL ; ; Comments are in a COMAL-80-like style, while ; routine headings are in a Pascal-like style. ; ; ; Interface descriptions for the "EXTENSIONS" defined in ; this file: ; + EXTENSION BIT,BIT00 + OPERATOR INT,INT,INTREAL,IN + ENDEXT BIT,BIT00 + EXTENSION SETBIT + STATEMENT + PARAMETER 0,INT + PARAMETER INTREAL + PARAMETER INTREAL + ENDEXT SETBIT + EXTENSION COMPL + OPERATOR INT,INT,CHS + ENDEXT COMPL + EXTENSION HEX + FUNCTION STR + PARAMETER REAL + ENDEXT HEX + EXTENSION LOWBOUND + FUNCTION INT + PARAMETER ANYDIM,ANYTYPE + PARAMETER INTREAL + ENDEXT LOWBOUND + EXTENSION HIGHBOUND + FUNCTION INT \f MACRO-80 3.4 01-Dec-80 PAGE 1-1 + PARAMETER ANYDIM,ANYTYPE + PARAMETER INTREAL + ENDEXT HIGHBOUND + EXTENSION MAXLENGTH + FUNCTION INT + PARAMETER 0,STR + ENDALLEXT MAXLENGTH ; ; OPERATOR BIT(NUMBER : INT; POS : REALINT) : INT ; ; Returns the value of bit number POS in NUMBER. ; 0079' BIT00: 0079' DD 7E 01 LD A,(IX+1) ; IF POS > 15 007C' E6 F0 AND 0F0H 007E' DD B6 02 OR (IX+2) ; OR POS < 0 0081' DD B6 00 OR (IX+0) ; OR POS HAS OVERFLOWED 0084' 28 05 JR Z,BIT10 ; THEN 0086' 3E 54 LD A,84 ; A := 84; CY := 0; Z := 0 0088' A7 AND A 0089' 18 1C JR BIT90 ; ELSE 008B' DD 7E 01 BIT10: LD A,(IX+1) ; IF POS < 8 THEN 008E' FE 08 CP 8 0090' 30 06 JR NC,BIT20 0092' 47 LD B,A ; B := POS 0093' DD 7E 03 LD A,(IX+3) ; A := LOW BYTE OF NUMBER 0096' 18 06 JR BIT30 ; ELSE 0098' D6 08 BIT20: SUB 8 009A' 47 LD B,A ; B := POS-8 009B' DD 7E 04 LD A,(IX+3+1) ; A := HIGH BYTE OF NUMBER 009E' BIT30: ; ENDIF 009E' 04 INC B ; ROTATE A RIGHT B+1 TIMES 009F' 0F BIT40: RRCA ; CY := LAST BIT SHIFTED OUT 00A0' 10 FD DJNZ BIT40 00A2' 3E 00 LD A,0 00A4' 8F ADC A,A 00A5' 47 LD B,A ; B := CY 00A6' AF XOR A ; A := 0; CY := 0; Z := 1 00A7' BIT90: ; ENDIF 00A7' DD 23 INC IX ; // ADJUST IX 00A9' DD 23 INC IX 00AB' DD 23 INC IX 00AD' DD 70 00 LD (IX+0),B ; RETURN B, A,CY,Z 00B0' DD 36 01 00 LD (IX+1),0 00B4' C9 RET ; ; STATEMENT SETBIT(VAR VARIABLE : INT; POS, VALUE : INTREAL) ; ; Sets bit number POS in VARIABLE to VALUE. If VALUE <> 0 ; the bit will be set; if VALUE = 0 the bit will be reset. ; \f MACRO-80 3.4 01-Dec-80 PAGE 1-2 00B5' SETBIT: 00B5' DD 7E 04 LD A,(IX+3+1) ; IF POS > 15 00B8' E6 F0 AND 0F0H 00BA' DD B6 05 OR (IX+3+2) ; OR POS < 0 00BD' DD B6 03 OR (IX+3) ; OR POS HAS OVERFLOWED ; THEN 00C0' 3E 54 LD A,84 ; A := 84; CY := 0; Z := 0 00C2' 20 2F JR NZ,SETB90 ; ELSE 00C4' DD 7E 00 LD A,(IX+0) ; SET := (VALUE HAS OVERFLOWED) 00C7' DD B6 01 OR (IX+1) ; OR (VALUE <> 0) 00CA' DD B6 02 OR (IX+2) 00CD' F5 PUSH AF 00CE' DD 6E 08 LD L,(IX+3+3+2) ; HL := VARPTR(VARIABLE) 00D1' DD 66 09 LD H,(IX+3+3+2+1) 00D4' DD 7E 04 LD A,(IX+3+1) ; A := POS 00D7' FE 08 CP 8 ; IF A >= 8 THEN 00D9' 38 03 JR C,SETB10 00DB' D6 08 SUB 8 ; A :- 8; HL :+ 1 00DD' 23 INC HL 00DE' SETB10: ; ENDIF 00DE' 47 LD B,A 00DF' 04 INC B 00E0' 3E 80 LD A,80H 00E2' 07 SETB20: RLCA 00E3' 10 FD DJNZ SETB20 00E5' 47 LD B,A ; B := 2^A 00E6' F1 POP AF ; IF NOT SET THEN // CLEAR 00E7' 20 06 JR NZ,SETB30 00E9' 78 LD A,B 00EA' 2F CPL 00EB' A6 AND (HL) 00EC' 77 LD (HL),A ; (HL) := (HL) AND NOT B 00ED' 18 03 JR SETB40 ; ELSE 00EF' 78 SETB30: LD A,B 00F0' B6 OR (HL) 00F1' 77 LD (HL),A ; (HL) := (HL) OR B 00F2' SETB40: ; ENDIF 00F2' AF XOR A ; A := 0; CY := 0; Z := 1 00F3' SETB90: ; ENDIF 00F3' 11 000A LD DE,3+3+4 ; // ADJUST IX 00F6' DD 19 ADD IX,DE 00F8' C9 RET ; ; OPERATOR COMPL(VALUE : INT) : INT ; ; Returns the one's complement of VALUE ; 00F9' COMPL: 00F9' DD 7E 00 LD A,(IX+0) ; VALUE := ONE'S COMPLEMENT OF VALUE 00FC' 2F CPL 00FD' DD 77 00 LD (IX+0),A 0100' DD 7E 01 LD A,(IX+1) 0103' 2F CPL 0104' DD 77 01 LD (IX+1),A 0107' AF XOR A ; A := 0; CY := 0; Z := 1 \f MACRO-80 3.4 01-Dec-80 PAGE 1-3 0108' C9 RET ; RETURN VALUE, A,CY,Z ; ; FUNCTION HEX(VALUE : REAL) : STR ; ; Converts VALUE, which must be in the range 0 to 65535 ; after rounding, to a four-digit hexadecimal number. ; 0109' HEX: + EXPR + UROUND ; NUMBER := UROUND(VALUE) + ENDEXPR ; A,CY,Z := ACCORDINGLY 010E' 28 09 JR Z,HEX10 ; IF Z=1 THEN 0110' DD 36 00 00 LD (IX+0),0 0114' DD 36 01 00 LD (IX+1),0 ; RETURN "", A,CY,Z 0118' C9 RET ; ELSE 0119' 21 0154' HEX10: LD HL,RESULT+2 ; HL := VARPTR(RESULT) 011C' DD 7E 01 LD A,(IX+1) 011F' CD 0136' CALL HEX50 ; EXEC HEX50(HIGH BYTE OF NUMBER) 0122' DD 7E 00 LD A,(IX+0) 0125' CD 0136' CALL HEX50 ; EXEC HEX50(LOW BYTE OF NUMBER) 0128' DD 23 INC IX ; // ADJUST IX 012A' DD 23 INC IX + EXPR + INTCON RESULT + LOAD STR ; RETURN RESULT, A,CY,Z SET + ENDEXPR ; ACCORDINGLY 0135' C9 RET ; ; PROCEDURE HEX50(BYT : BYTE) ; 0136' HEX50: 0136' F5 PUSH AF 0137' E6 F0 AND 0F0H 0139' 0F RRCA 013A' 0F RRCA 013B' 0F RRCA 013C' 0F RRCA 013D' CD 0147' CALL HEX60 ; EXEC HEX60(BYT DIV 16) 0140' F1 POP AF 0141' E6 0F AND 0FH ; EXEC HEX60(BYT MOD 16) 0143' CD 0147' CALL HEX60 0146' C9 RET ; ; PROCEDURE HEX60(A : BYTE) ; 0147' C6 30 HEX60: ADD A,'0' ; A :+ '0' 0149' FE 3A CP '9'+1 ; IF A > '9' THEN A :+ -'0'-10+'A' 014B' 38 02 JR C,HEX70 014D' C6 07 ADD A,-'0'-10+'A' 014F' 77 HEX70: LD (HL),A ; (HL) := A 0150' 23 INC HL ; HL :+ 1 0151' C9 RET \f MACRO-80 3.4 01-Dec-80 PAGE 1-4 0152' 0004 RESULT: DW 4 ; RESULT IS A STRING VARIABLE 0154' DS 4 ; WITH LENGTH 4 ; ; FUNCTION LOWBOUND(VAR VARIABLE : ANYDIM&ANYTYPE ; INDEX : INTREAL) : INT ; ; Returns the lower bound on index number INDEX (1st, 2nd, 3rd etc. index) ; of the array VARIABLE. ; 0158' LOWBOUND: 0158' 11 FFFE LD DE,-2 015B' 18 05 JR LOWHIGH ; RETURN LOWHIGH(VARIABLE, INDEX, -2) ; ; FUNCTION HIGHBOUND(VAR VARIABLE : ANYDIM&ANYTYPE ; INDEX : INTREAL) : INT ; ; Returns the upper bound on index number INDEX (1st, 2nd, 3rd etc. index) ; of the array VARIABLE. ; 015D' HIGHBOUND: 015D' 11 FFFC LD DE,-4 0160' 18 00 JR LOWHIGH ; RETURN LOWHIGH(VARIABLE, INDEX, -4) ; ; FUNCTION LOWHIGH(VAR VARIABLE : ANYDIM&ANYTYPE : INDEX : INTREAL; ; OFFSET : INT) : INT ; ; UTILITY FUNCTION FOR LOWBOUND AND HIGHBOUND. OFFSET IS IN DE. ; 0162' LOWHIGH: 0162' DD 6E 03 LD L,(IX+3) ; B := THE FIRST BYTE OF VARIABLE'S 0165' DD 66 04 LD H,(IX+3+1) ; DESCRIPTOR 0168' 46 LD B,(HL) 0169' CB 78 BIT 7,B 016B' 28 05 JR Z,LOW10 ; IF B < 0 THEN 016D' 3E 4A LD A,74 ; RETURN A = 74, CY = 1, Z = 0 016F' B7 OR A 0170' 37 SCF 0171' C9 RET 0172' DD 7E 00 LOW10: LD A,(IX+0) ; ELIF IF INDEX HAS OVERFLOWED 0175' DD B6 02 OR (IX+2) ; OR INDEX < 0 OR INDEX > 255 0178' 20 0C JR NZ,LOW20 017A' DD 7E 01 LD A,(IX+1) ; OR INDEX = 0 017D' B7 OR A 017E' 28 06 JR Z,LOW20 0180' 3D DEC A ; OR INDEX-1 > B 0181' B8 CP B 0182' 38 07 JR C,LOW30 0184' 28 05 JR Z,LOW30 0186' LOW20: ; THEN 0186' 3E 43 LD A,67 ; RETURN A = 67, CY = 1, Z = 0 0188' B7 OR A 0189' 37 SCF 018A' C9 RET ; ELSE \f MACRO-80 3.4 01-Dec-80 PAGE 1-5 018B' DD 6E 03 LOW30: LD L,(IX+3) ; HL := POINTER TO 018E' DD 66 04 LD H,(IX+3+1) ; VARIABLE'S DESCRIPTOR 0191' 01 FFF9 LD BC,-7 0194' B7 LOW40: OR A ; HL :- (INDEX-1)*7 0195' 28 04 JR Z,LOW50 0197' 09 ADD HL,BC 0198' 3D DEC A 0199' 18 F9 JR LOW40 019B' 19 LOW50: ADD HL,DE ; HL :+ OFFSET 019C' 5E LD E,(HL) 019D' 23 INC HL 019E' 56 LD D,(HL) 019F' 01 0005 LD BC,3+4-2 ; // ADJUST IX 01A2' DD 09 ADD IX,BC 01A4' DD 73 00 LD (IX+0),E ; RETURN (HL), A=0, CY=0, Z=1 01A7' DD 72 01 LD (IX+1),D 01AA' AF XOR A 01AB' C9 RET ; ENDIF ; ; FUNCTION MAXLENGTH(VAR STRING : STR) : INT ; ; Returns the maximum (DIMensioned) length of the string variable STR. ; 01AC' MAXLENGTH: 01AC' DD 6E 00 LD L,(IX+0) ; HL := POINTER TO STRING'S DESCRIPTOR 01AF' DD 66 01 LD H,(IX+1) 01B2' 2B DEC HL 01B3' 56 LD D,(HL) 01B4' 2B DEC HL 01B5' 5E LD E,(HL) 01B6' DD 23 INC IX ; // ADJUST IX 01B8' DD 23 INC IX 01BA' AF XOR A 01BB' DD 73 00 LD (IX+0),E ; RETURN (HL-2), A=0,CY=0,Z=1 01BE' DD 72 01 LD (IX+1),D 01C1' C9 RET END \f MACRO-80 3.4 01-Dec-80 PAGE S Macros: ABS ATN B.AND B.NOT B.OR BSTR BVAL CHR CHS CONV CONV1 COS DEF0 DEF1 DEFPRI DIV ENDALL ENDEXP ENDEXT EOD EOF EQL ERR ERRTEX ESC EXP EXPR EXTENS FALSE FRAC FREEST FUNCTI GEQ GTR I.ABS I.CHS I.DIV I.EQL I.GEQ I.GTR I.LEQ I.LSS I.MINU I.MOD I.NEQ I.PLUS I.SGN I.STR I.TIME IN INP INT INTCON INX IVAL LDVAL LEN LEQ LOAD LOG LSS MINUS MOD NEQ OPERAT ORD PARAME PEEK PLUS POS POWER REALIN RLBL RLBL1 RND0 RND2 ROUND S.EQL S.GEQ S.GTR S.LEQ S.LSS S.NEQ S.PLUS SETNAM SGN SIN SKIP SLASH SPC SQR STATEM STORE STR STRCON STVAL SYSVAR TAN TIMES TRUE TRUNC UROUND VAL VARPTR Symbols: ..0000 0009' ..0001 0019' ..0002 002C' ..0003 0039' ..0004 004B' ..0005 0060' ..0006 0075' ?BIT00 000D' ?COMPL 0030' ?HEX 003D' ?HIGHB 0066' ?LOWBO 0051' ?MAXLE 0000 ?SETBI 0021' @@ARRO 0007 @@B.AN 0002 @@B.NO 0003 @@B.OR 0001 @@CHS 0005 @@DIV 0006 @@EQL 0004 @@GEQ 0004 @@GTR 0004 @@IN 0004 @@LEQ 0004 @@LSS 0004 @@MINU 0005 @@MOD 0006 @@NEQ 0004 @@PLUS 0005 @@SLAS 0006 @@TIME 0006 @ABS 001B @ATN 0000 @B.AND 005B @B.NOT 005D @B.OR 005C @BSTR 0022 @BVAL 0014 @CHR 0015 @CHS 004C @CONV 002D @CONV1 002C @COS 0001 @DIV 0050 @ENDEX 002B @EOD 0009 @EOF 000A @EQL 0059 @ERR 0008 @ERRTE 0018 @ESC 0007 @EXP 0005 @FALSE 0049 @FRAC 0010 @FREES 002A @GEQ 0057 @GTR 0058 @I.ABS 001C @I.CHS 0060 @I.DIV 0061 @I.EQL 0069 @I.GEQ 0067 @I.GTR 0068 @I.LEQ 0065 @I.LSS 0066 @I.MIN 0064 @I.MOD 0062 @I.NEQ 006A @I.PLU 0063 @I.SGN 001A @I.STR 0017 @I.TIM 005F @IN 0054 @INP 0021 @INT 000F @INTCO 0047 @INX 0036 @IVAL 000D @LDVAL 0039 @LEN 000B @LEQ 0055 @LOAD 0072 @LOG 0004 @LSS 0056 @MINUS 0053 @MOD 0051 @NEQ 005A @NO 0075 @OPER 0000 @ORD 000C @PEEK 0020 @PLUS 0052 @POS 0013 @POWER 004D @REALI 002E @RLBL 0030 @RLBL1 002F @RND0 001D @RND2 001E @ROUND 0012 @S.EQL 006F @S.GEQ 006D @S.GTR 006E @S.LEQ 006B @S.LSS 006C @S.NEQ 0070 @S.PLU 005E @SGN 0019 @SIN 0002 @SLASH 004F @SPC 001F @SQR 0006 @STORE 0073 @STR 0016 @STRCO 0045 @STVAL 0074 @SYSVA 003A @TAN 0003 @TIMES 004E @TRUE 0048 @TRUNC 0011 @UROUN 0071 @VAL 000E @VARPT 0023 @X 0006 ANYDIM FFFD ANYTYP 0009 BIT00 0079' BIT10 008B' BIT20 0098' BIT30 009E' BIT40 009F' BIT90 00A7' COMPL 00F9' HEX 0109' HEX10 0119' HEX50 0136' HEX60 0147' HEX70 014F' HIGHBO 015D' IDLOWE 0005 INDENT 0001 INT 0002 INTREA 0001 KWLOWE 0004 LOW10 0172' LOW20 0186' LOW30 018B' LOW40 0194' LOW50 019B' LOWBOU 0158' LOWHIG 0162' MAXLEN 01AC' PAGELE 0003 PAGEWI 0002 REAL 0003 RESULT 0152' SETB10 00DE' SETB20 00E2' SETB30 00EF' SETB40 00F2' SETB90 00F3' SETBIT 00B5' \f MACRO-80 3.4 01-Dec-80 PAGE S-1 STR 0004 ZONE 0000 No Fatal error(s) «eof»