DataMuseum.dk

Presents historical artifacts from the history of:

Bogika Butler

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

See our Wiki for more about Bogika Butler

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦e94e751f7⟧ TextFile

    Length: 16256 (0x3f80)
    Types: TextFile
    Names: »PREFACE.S«, »PREFACE.SA«

Derivation

└─⟦08e5746f0⟧ Bits:30009789/_.ft.Ibm2.50007359.imd Mogens Pelles Zilog 80,000 / EOS projekt
    └─⟦this⟧ »PREFACE.S« 
└─⟦1ed910a99⟧ Bits:30009789/_.ft.Ibm2.50006596.imd Mogens Pelles Zilog 80,000 / EOS projekt
    └─⟦this⟧ »PREFACE.SA« 
└─⟦798d317aa⟧ Bits:30009789/_.ft.Ibm2.50006626.imd Mogens Pelles Zilog 80,000 / EOS projekt
└─⟦798d317aa⟧ Bits:30009789/_.ft.Ibm2.50006628.imd Mogens Pelles Zilog 80,000 / EOS projekt
    └─⟦this⟧ »PREFACE.SA« 
└─⟦8592db80f⟧ Bits:30009789/_.ft.Ibm2.50007350.imd Mogens Pelles Zilog 80,000 / EOS projekt
    └─⟦this⟧ »PREFACE.S« 

TextFile

 
***********************************************************************
*                       Copyright 1984 by                             *
*                       NCR Corporation                               *
*                       Dayton, Ohio  U.S.A.                          *
*                       All Rights Reserved                           *
***********************************************************************
*                       EOS Software produced by:                     *
*                       NCR Systems Engineering - Copenhagen          *
*                       Copenhagen                                    *
*                       DENMARK                                       *
***********************************************************************
 
PREFACE    IDNT 1,0  KERNEL PREFACE
           OPT  FRS
           NOLIST
           INCLUDE   COMDEF.SA
           LIST
*
* WRITTEN BY VILHELM ROSENQVIST
*
* THE PURPOSE OF THE PREFACE IS TO ASSIGN SOME KEY VARIABLES
* OF THE RUNNING SYSTEM. SOME VALUES MUST BE CHANGED IN
* COMDEF OR IN PREFACE WHEN THE SYSTEM CONFIGURATION CHANGES.
* --------------------
 
I_CONFIG   EQU  -1   ADDRESS OF FIRST ROM-OS_MODULE TO BE BOOTED BY THE STUB
    XDEF   I_CONFIG  -1 SIGNALS THAT THE FIRST MODULE IS IN THE BOOT OWNER SET
 
    SECTION.S 7      = KNEL_VAR   (NORMALLY LOADED FROM ADDR 0 AND ON)
KV_INVEC   DC.L INIT_SSP          INITIAL SSP
           DC.L INIT_PC           INITIAL PC (SECTION INITIALIZE)
           DS.L 254               INTERRUPT VECTORS.
KV_FRMEM   DC.L MEM_LIST          INITIALLY: MEM_LIST; LATER: FREE_BYTES
KV_BOTLD   DC.L FIRST_OS          FIRST_OS IS DEFINED IN INIT SECTION OF
*                                 'ENTER'. ROUNDED UP IN INIT SECTION BELOW
KV_STUB    DC.L -1                STUB IS BOOTED INTO RAM
MEM_LIST   DC.W 1                 ONE PAIR IN THE MEM_LIST
           DC.L TOP_KNEL          DEFINED IN INIT SECTION OF "ENTER"
           DC.L $60000            SIZE OF RAM ON EXORMACS  (=384 K,= 6*64K)
INIT_SSP   EQU  $60000            USE TOP RAM AS INITIAL STACK POINTER
* 384K=$6*64K,512K=$8*64K,640K=$A*64K,768K=$C*64K
    XREF.S 7:DRIV_TAB,STAK_TAB,KV_CTX,RTCNT,SUPV_STK
    XREF     TOP_KNEL,FIRST_OS,I_MMPROC,INT_EXC
 
    XDEF KV_FRMEM,KV_BOTLD,KV_STUB,RTEDUMMY,KV_INVEC,PRINTA02,TEXTLINE
    XDEF TSTSTATU
 
* VARIABLES USED BY TEST PRINT PROCEDURES BELOW
TSTCOUNT   DS.W 1                 COUNTS DOWN FROM 50 THE #OUTPUT_LINES
TSTSTATU   DS.W 1                 STATE OF TESTOUTPUT
 
    PAGE
    SECTION   11       = INITIALIZE
 
* THE INITIALIZATION OF THE PREFACE GETS CONTROL RIGHT AFTER THE
* "HARDWARE" BOOT.
* 0) ROUND UP FIRST_OS IN KV_BOTLD.
* 1) "CLEAR" THE VECTOR_TABLE, DRIVER_TABLE AND STACK_TABLE
* 2) RESERVE TRAP #9 FOR TEST OUTPUT AND INITIALIZE TEST PRINTER
* 3) INITIALIZE ENTRY 0 AND 1 OF THE TABLES
 
INIT_PC    EQU *  EXECUTION STARTS HERE:
 
* ADJUST FIRST_OS IN KV_BOTLD.
    MOVE.L KV_BOTLD,D0                D0:=FIRST_OS FROM KV_BOTLD;
    ADD.L  #255,D0                    ROUND UP FIRST_OS
    CLR.B  D0                         .
    MOVE.L D0,KV_BOTLD                ASSIGN FIRST_OS TO KV_BOTLD;
 
* SET UP VECTOR TABLE ETC.   DOES THIS MATCH THE INITIALIZATION IN KNELOP???
 
    MOVEQ.L #-1,D1                    D1:=RESERVED:=-1
    LEA    KV_INVEC,A0                A0:=INT_VECTOR
    LEA    DRIV_TAB,A2                A2:=DRIVER_TABLE
    LEA    RTEDUMMY,A1                A1:<DUMMY INTERRUPT
    LEA    STAK_TAB,A3                A3:=STACK_TABLE
  FOR.W D0 = #8 TO #255*4 BY #4 DO.S  FOR NEARLY ALL CHANNELS DO
    CLR.L  (A2,D0.W)                  CHANNEL:=FREE;
    MOVE.L A1,(A0,D0.W)               INTERRUPT ADDRESS:=DUMMY INTERRUPT;
    CLR.L  (A3,D0.W)                  CHANNEL:=FREE;
  ENDF                              ENDF;
    MOVE.W #(32+9)<<2,D0              D0:=EXCEPTION ENTRY FOR TRAP #9:=(32+9)
    LEA    TEST_PRT,A1                A1:=PRINT REGISTER PROCEDURE
    MOVE.L D1,(A2,D0.W)               CHANNEL (32+9):=RESERVED;
    MOVE.L A1,(A0,D0.W)               ASSIGN TESTPRINT PROCEDURE TO TRAP #9
    MOVE.L D1,(A3,D0.W)               CHANNEL (32+9):=RESERVED;
 
* INITIALIZE TEST PRINT
 
    CLR.W  TSTCOUNT
    CLR.W  TSTSTATU
 
* INITIALIZE PRINTER
 
    MOVE.B #$00,PRTCONTA   SELECT DATA DIRECTION REGISTER FOR A-PART
    MOVE.B #$FF,PRTBUF     ALL LINES USED FOR OUTPUT
    MOVE.B #$3C,PRTCONTA   ASSIGN CONTROLBITS TO OUTPUT PART
    MOVE.B #$00,PRTCONTB   SELECT DATA DIRECTION REGISTER FOR B-PART
    MOVE.B #$08,PRTSTATU   ALL LINES USED FOR INPUT BUT BIT 3 ?
    MOVE.B #$3C,PRTCONTB   ASSIGN CONTROLBITS TO INPUT PART
 
    BSR.L NEWLINE
    MOVE.B #'E',D0
    BSR.L PRTCHAR
    MOVE.B #'O',D0
    BSR.L PRTCHAR
    MOVE.B #'S',D0
    BSR.L PRTCHAR
    BSR.L NEWLINE
 
 
* PREPARE THE STACK SPACE COMPUTATION ALGORITHM.
    MOVE.W #TRP7STAK,D3               ENSURE THAT TRAP7STACK IS INCLUDED
    SWAP   D3                         IN THE SUPERVISOR STACK SPACE COMPUTATION
    CLR.W  D3                         D3:=
    MOVE.L D3,(A3)                    STACK_TABLE(0):=TRP7STAK<<16+0;
    MOVE.L D3,(A2)                    DRIVER_TABLE(0):=USED:=DUMMY_VALUE>0;
    MOVE.L D1,4(A3)                   ENTRY(1) CANNOT BE USED
    MOVE.L D1,4(A2)                   CHANNEL(1):=RESERVED;
 
    PRT_MEM END_OF_PREFACE,KV_INVEC,TSTSTATU+2-KV_INVEC ********
    BRA.L I_MMPROC                    CONTINUE IN INIT MMPROCS.
 
    PAGE
    SECTION   9     = RUN_TIME
 
* THE TEST OUTPUT PROCEDURE BELOW SHOULD BE CALLED
* FROM SUPERVISOR MODE THROUGH
* THE MACRO "PRT_REG" OR "PRT_MEM".
 
TEST_PRT EQU *             TEST OUTPUT
 
* CALLED VIA TRAP #9.
*
* WHEN USED FROM SUPERVISOR MODE
* THE STACK CONTAINS SR,PC,ADDR OF DATA TO BE PRINTED,
* (PC..PC+X) CONTAINS AN IDENTIFICATION TEXT TERMINATED BY A ZERO CHAR, AND
* (PC+X+2) CONTAINES THE LENGTH OF THE DATA TO BE PRINTED.
* RTE IS MADE TO PC+X+4.
*
* WHEN USED FROM USER MODE
* THE STACK CONTAINS ONLY SR,PC. THE REGISTERS AND THE USED PART OF THE STACK
* OF CALLING CONTEXT WILL BE PRINTED. IT IS EXPECTED THAT THE STACK SEGMENT
* OF THE CONTEXT EQUALS THE OLDEST EMBEDDED SEGMENT OF THE CONTEXT. IT IS ALSO
* ASSUMED THAT THE EMBEDDED SEGMENT CAN BE FOUND IMMEDIATLY BEFORE THE
* CONTEXT ITEM. THE LATTER IS NOT TRUE WHILE THE CONTEXT IS BEING MOVED.
* A7 MUST POINT TO THE TOP OF THE STACK. A7 IS FOUND IN THE USP REGISTER.
 
    BTST.B #5,(A7)          TEST SUPERVISOR BIT OF CALLER
  IF <EQ> THEN.S         IF SUPERVISOR BIT = 0 THEN "CALLED FROM USER MODE"
 
    MOVE    #$2700,SR      PREVENT INTERRUPTS;
    SUBQ.L  #4,A7          PUSH ROOM FOR USP;
    MOVEM.L D0-D7/A0-A6,-(A7) SAVE USER REGS;
    MOVE.L  USP,A0         A0:= USP;
    MOVE.L  A0,60(A7)      SAVE USP IN STACK;
    PRT_MEM USER_REGISTERS_FOLLOWS:,(A7),70 PRINT REGS,SR,PC FROM STACK
    MOVE.L  KV_CTX,A1      A1:= CALLING CTX;
    MOVE.L  SE_LEN-SE_SIZ(A1),A2 A2:= LENGTH OF STACK;
    MOVE.L  SE_FIR-SE_SIZ(A1),A3 A3:= FIRST PHYS. OF STACK;
    SUB.L   #$200000,A0    A0:= USP AS OFFSET INTO STACK:= USP-FIRST LOGIC.
  IF.L A0 <LT> #0 OR.L A0 <GT> A2 THEN.S  IF ILLEGAL USP THEN
    MOVE.L A2,A0           A0:=A2; ==> NO TEST OUTPUT
  ENDI                   ENDI;
    ADD.L  A3,A0           A0:=FIRST PHYS. ADDR OF USED STACK;
    ADD.L  A3,A2           A2:=TOP PHYS. ADDR OF USED STACK
    BTST.B #1,TSTPANEL+1   TEST POSITION OF KEY SWITCH;
  IF <EQ> THEN.S         IF KEY POSITION = ENABLED THEN "PRINT OUT"
    BSR.L  PRINTA02        PRINT USED PART OF STACK;
  ENDI                   ENDI;
    MOVEM.L (A7)+,D0-D7/A0-A6  RESTORE USER REGS;
    ADDQ.L #4,A7           POP USP;
    RTE
* THE FOLLOWING INSTRUCTIONS GENERATES AN INTERNAL EXCEPTION IN CALLING CTX
*   MOVEQ.L #41,D3         D3:= INDEX:= 41;
*   BRA.L   INT_EXT        GOTO INTERNAL EXCEPTION;
  ENDI                   ENDI;
 
    PAGE
* TRAP #9 CALLED FROM SUPERVISOR MODE.
 
    MOVE   #$2700,SR       PREVENT INTERRUPTS;
    BTST.B #1,TSTPANEL+1   TEST POSITION OF THE PANEL SWITCH KEY;
  IF <NE> THEN.S         IF KEY POSITION = DISABLED THEN "NO PRINTOUT"
    TST.W  TSTSTATU
  IF <GT> THEN.S         IF TEST STATUS = TEST ON THEN
    NEG.W  TSTSTATU        TEST STATUS := TEST OFF
  ENDI                   ENDI;
    MOVE.L A0,-(A7)        SAVE A0
    MOVE.L 6(A7),A0        A0:= PC;
  REPEAT
    TST.B  (A0)+           SKIP TEST TEXT, INCREASE PC
  UNTIL <EQ>               STOP AT ZERO CHAR
    MOVE.L A0,6(A7)        PC:= INCREASED PC
    ADDQ.L #3,6(A7)        PC:= PC + 2 "SKIP INLINE PARAMETER" +1 "ROUND UP";
    BCLR.B #0,9(A7)        PC:= EVEN PC
    MOVE.L (A7)+,A0        RESTORE A0
    MOVE.W 4(A7),8(A7)     MOVE PC AND SR DOWN, AND IN-
    MOVE.L (A7)+,(A7)      CREASE A7 TO POP THE ADDR_PARAM;
    RTE                    RETURN;
  ENDI                   ENDI;
 
    PAGE
* TEST OUTPUT SHOULD BE GENERATED.
 
    MOVEM.L D0-D7/A0-A7,-(A7) SAVE REGS ON STACK
    TST.W TSTSTATU
  IF <LE> THEN.S         IF TEST OUTPUT WAS NOT ON THEN "PRINT FIRST LINE"
    BSR.L   NEWLINE
    LEA     FIRSTTEX,A0
    BSR.S   PRTTEXT
    NEG.W   TSTSTATU
    ADDQ.W  #1,TSTSTATU    TEST STATUS := ... + 1; "COUNT KEY SWITCES"
    MOVE.W  TSTSTATU,D0    D0:= POSITIV TESTSTATUS;
    BSR.L   PRTBYTE        PRINT TEST STATUS  MODULO 256;
    BSR.L   NEWLINE
  ENDI                   ENDI;
 
    BSR.S   TESTTSTC       TEST TSTCOUNT AND MAYBE PRINT LAYOUT;
    MOVEM.L 62(A7),D7/A0/A1  D7.W:=SR; A0:=PC; A1:=ADDR;
    BSR.L   NEWLINE        PRINT NEWLINE IN FRONT OF TEST OUTPUT
    BSR.S   PRTTEXT        PRTTEXT(A0=TEXT);A0:= INCREASED PC;
    MOVE.L  A0,D0          DO:=
    ADDQ.L  #1,D0          ROUND PC TO NEXT
    BCLR.L  #0,D0          EVEN ADDRESS
    MOVE.L  D0,A0          A0:= INCREASED PC;
    SWAP D7                SAVE SR IN D7.HIGH_BITS
    MOVE.W  (A0)+,D7       D7.LOW_BITS:= LENGTH; A0:= INCREASED PC;
  IF <LT> THEN.S         IF LENGTH < 0 THEN "PRT_REG" MACRO"
    LEA     64(A1),A3      A3:= TOP_ADDR:= FIRST_ADDR + 64;
  ELSE.S                 ELSE
    LEA     (A1,D7.W),A3   A3:= TOP_ADDR:= FIRST_ADDR + LENGTH;
  ENDI                   ENDI;
    SWAP D7                D7:= LENGTH << 16 + SR;
    MOVEM.L D7/A0,66(A7)   MOVE SR,PC 4 BYTES DOWN;
    MOVE.L  A1,D6          D6:= ADDR_PARAM;
    MOVEM.L RTCNT,D4/D5    D4/D5:= TIME COUNTER;
*   D4/D5/D6/D7/A0/A1 CONTAINS VAUES (D6=A1).
    BRA.S  TESTTSTE        BRANCH OVER THE TEST PROCEDURE BELOW
 
    PAGE
TESTTSTC   EQU *     TEST TSTCOUNT AND MAYBE PRINT LAYOUT.
* A0=TEXT; A0:=TOP OF TEXT; D0:=UNDEF;
    TST.W  TSTCOUNT        TEST LINE COUNT;
  IF <LE> THEN.S         IF LINE COUNT <= 0 THEN "PRINT LAYOUT LINE"
    MOVE.W #50,TSTCOUNT    LINE COUNT := 50;
    LEA    PTLAYOUT,A0     A0:= LAYOUT;
PRTTEXT    EQU * PRINT TEXT ADDRESSED BY A0; A0:=TOP OF TEXT; D0:=UNDEF;
    MOVE.B (A0)+,D0        D0:=CHAR := FIRST CHAR FROM LAYOUT;
  REPEAT                 REPEAT
    BSR.L  PRTCHAR         PRINT CHAR
    MOVE.B (A0)+,D0        D0:=CHAR := NEXT CHAR FROM LAYOUT;
  UNTIL <EQ>             UNTIL CHAR = END_MARK(=ZERO CHAR)
  ENDI                   ENDI;
    RTS                    RETURN;
TESTTSTE   EQU *   END OF PROC ABOVE
 
    MOVE.L A7,A2           A2:= TOP_AREA:= STACK;
    MOVEM.L D4/D5/D6/D7/A0,-(A7) SAVE FIVE VALUES ON STACK;
    MOVE.L A7,A0           A0:= FIRST_AREA:= STACK;
    BSR.L  PRINTA02        PRINT(A0=FIR,A2=TOP,D0/D1/A0:=??);
    MOVE.L A2,A7           POP THE SAVED VALUES;
 
    MOVE.L A1,A0           A0:= FIRST_AREA:= ADDR_PARAM;
    MOVE.L A3,A2           A2:= TOP_AREA:= TOP_ADDR;
    BSR.L  PRINTA02        PRINT(A0=FIR,A2=TOP,D0/D1/A0:=??);
 
    MOVEM.L (A7)+,D0-D7/A0-A6 RESTORE REGS, EXCEPT A7
    ADDQ.L #8,A7           POP 8 BYTES FROM STACK; "A7 AND THE ADDR_PARAM"
    RTE                    RETURN;
 
PTLAYOUT EQU *
****DC.B 'D0...ID!!.ADDR.!!SZ!!SR!!..PC..!4......45......56......67......7'
****DC.B 'A0.....01......12......23......34......45......56......67......7'
    DC.B '!0. .. .. .0!1. .. .. .1!2. .. .. .2!3. .. .. .3!'
    DC.B '4. .. .. .4!5. .. .. .5!6. .. .. .6!7. .. .. .7!'
NLSTRING EQU *
    DC.B 32,13,0   NEW_LINE + END_MARK    WHAT IS REQUIRED BY OKI PRINTER
FIRSTTEX EQU *
    DC.B '***** TEST OUTPUT:'
    DC.B  0   END_MARK
    DS.W  0   FORCE EVEN ADDR.
 
TEXTLINE EQU * PRINT AREA BETWEEN A3/A4 AND ASSIGN D0
    BSR.L NEWLINE
  WHILE.L A3 <NE> A4 DO.S
    MOVE.B (A3)+,D0
    BSR.L PRTCHAR
  ENDW
    BSR.L NEWLINE
    BTST.B #1,TSTPANEL+1
  IF <NE> THEN.S
    MOVEQ.L #2,D0    SWITCH = DISABLE
  ELSE.S
    MOVEQ.L #0,D0    SWITCH = ENABLE
  ENDI
    RTS
 
    PAGE
PRINTA02  EQU *    PRINT AREA FROM A0 TO A2
*         CALL:            RETURN:
*A0       FIRST BYTE       UNDEF
*A2       TOP BYTE         SAME
*D0/D1    ANY              UNDEF
*
    MOVEQ.L #32,D1         D1:= POSITION TO PRINT NEW_LINE CHAR
    ADD.L   A0,D1            := FIRST BYTE + 64;
 WHILE.L A0 <LT> A2 DO.S WHILE MORE BYTES DO
  IF.L A0 <EQ> D1 THEN.S IF NEW_LINE CHAR SHOULD BE PRINTED THEN
    BSR.S  NEWLINE         PRINT NEW_LINE;
    ADD.L  #32,D1          D1:= NEXT POSITION := ... + 64;
    SUBQ.W #1,TSTCOUNT     LINE_COUNT := ... -1;
  ENDI                   ENDI;
    MOVEQ  #32,D0          D0:= SPACE;
    BSR.S  PRTCHAR         PRINT SPACE;
    MOVE.B (A0)+,D0        D0:= NEXT BYTE TO PRINT;
    BSR.S  PRTBYTE         PRINT BYTE(D0=BYTE,D0:=??);
  ENDW                   ENDW;
 
    BSR.S  NEWLINE         PRINT NEW_LINE;
    SUBQ.W #1,TSTCOUNT     LINE_COUNT := ... -1;
    RTS                    RETURN;
 
 
* PRINT CHAR RUTINE
PRTERROR  EQU *          PRINTER ERROR:
    SWAP   D0              RESTORE CHAR IN D0
*
PRTCHAR   EQU *   PRINT THE CHAR IN D0 ON THE DEBUG PRINTER
*         CALL:            RETURN:
* D0.B    CHAR        D0.W=SAME
*
    MOVE.B D0,PRTBUF       MOVE CHAR TO OUTPUT BUFFER
    SWAP   D0              SAVE CHAR IN D0.HIGH_BITS
    TST.B  PRTBUF          CLEAR OLD INTERRUPT
    MOVE.B #$34,PRTCONTA   PULL CA2 LOW
    MOVE.B #$3C,PRTCONTA   PULL CA2 HIGH
PRTWAIT EQU *
    MOVE.B PRTSTATU,D0     D0.B:= PRINTER STATUS;
    AND.B  #3,D0
    SUB.B  #1,D0
    BNE.S  PRTERROR        WHEN STATUS <> ......01 GOTO PRINTER ERROR;
    TST.B  PRTCONTA
    BPL.S  PRTWAIT         WHEN PRINTER BUSY GOTO PRINTER WAIT
    TST.B  PRTBUF          CLEAR INTERRUPT
    SWAP   D0              RESTORE D0;
    RTS
 
    PAGE
NEWLINE   EQU *   PRINT NEW LINE ON THE PRINTER. D0:= ??;
    MOVE.L A0,-(A7)  SAVE A0
    LEA    NLSTRING,A0
    BSR.L  PRTTEXT
    MOVE.L (A7)+,A0
    RTS
 
PRTBYTE   EQU *   PRINT BYTE AS TWO HEX DIGITS
*         CALL:            RETURN:
*D0.B     BYTE             UNDEF
*
    BSR.S  BYTECONV        D0.W:= TWO ASCII CHARS (HEX DIGITS);
    ROR.W  #8,D0
    BSR.S  PRTCHAR         PRINT FIRST CHAR
    LSR.W  #8,D0
    BSR.S  PRTCHAR         PRINT SECOND CHAR
    RTS                    RETURN;
 
BYTECONV  EQU *      D0.W := ASCII VALUES FOR THE BYTE IN D0.B
    LSL.W  #4,D0           SAVE HIGH BITS;
    LSR.B  #4,D0           D0.B:= LOW BITS;
    BSR.S  HEXTOASC        D0:= ASCII CHAR;
    ROR.W  #8,D0           SAVE LOW CHAR; D0.B:=
    AND.B  #$F,D0          SAVED HIGN BITS;
    BSR.S  HEXTOASC        D0.B:= ASCII CHAR;
    ROR.W  #8,D0           D0.W:= ASCII CHARS IN THE RIGHT ORDER.
    RTS                    RETURN;
 
 
HEXTOASC  EQU *      D0.B := ASCII VALUE FOR THE HEX VALUE IN DO.B ( <16 )
  IF.B D0 <GT> #9 THEN.S IF HEX_VALUE > 9 THEN "A-F DIGIT"
    ADDQ.B #7,D0           D0:=D0+7;
  ENDI                   ENDI;
    ADD.B  #$30,D0         D0:=D0+$30;
    RTS                    RETURN;
 
 
RTEDUMMY EQU *       UNKNOWN INTERRUPTS
    PRT_REG UNKNOWN_REGS_=
    PRT_MEM UNKNOWN_STACK=,(A7),128
* PRINT ADDITIONAL SUPERVISOR STACK
    MOVE.L  A0,-(A7)
    LEA     128+4(A7),A0
  WHILE.L A0 <LT> SUPV_STK DO.S
    PRT_MEM REST_OF_STACK=,(A0),128
    LEA 128(A0),A0
  ENDW
    MOVE.L (A7)+,A0
    RTE
 
 
    END ! END OF PREFACE SOURCE
 
 
«eof»