head     56.3;
access   paws bayes jws quist brad dew jwh;
symbols  ;
locks    ; strict;
comment  @# @;


56.3
date     93.01.27.13.16.38;  author jwh;  state Exp;
branches ;
next     56.2;

56.2
date     93.01.27.11.58.09;  author jwh;  state Exp;
branches ;
next     56.1;

56.1
date     91.11.05.09.53.41;  author jwh;  state Exp;
branches ;
next     55.3;

55.3
date     91.11.04.13.51.41;  author jwh;  state Exp;
branches ;
next     55.2;

55.2
date     91.11.04.13.00.28;  author jwh;  state Exp;
branches ;
next     55.1;

55.1
date     91.08.25.10.29.02;  author jwh;  state Exp;
branches ;
next     54.3;

54.3
date     91.08.21.10.31.56;  author jwh;  state Exp;
branches ;
next     54.2;

54.2
date     91.08.21.09.37.15;  author jwh;  state Exp;
branches ;
next     54.1;

54.1
date     91.03.18.15.31.25;  author jwh;  state Exp;
branches ;
next     53.2;

53.2
date     91.03.15.15.22.12;  author jwh;  state Exp;
branches ;
next     53.1;

53.1
date     91.03.11.19.31.19;  author jwh;  state Exp;
branches ;
next     52.1;

52.1
date     91.02.19.09.15.47;  author jwh;  state Exp;
branches ;
next     51.3;

51.3
date     91.02.18.20.42.37;  author jwh;  state Exp;
branches ;
next     51.2;

51.2
date     91.02.10.15.41.32;  author jwh;  state Exp;
branches ;
next     51.1;

51.1
date     91.01.30.16.15.24;  author jwh;  state Exp;
branches ;
next     50.1;

50.1
date     90.10.29.16.30.01;  author jwh;  state Exp;
branches ;
next     49.6;

49.6
date     90.10.29.14.04.57;  author jwh;  state Exp;
branches ;
next     49.5;

49.5
date     90.09.25.14.07.16;  author jwh;  state Exp;
branches ;
next     49.4;

49.4
date     90.09.25.10.36.59;  author jwh;  state Exp;
branches ;
next     49.3;

49.3
date     90.09.25.10.14.44;  author jwh;  state Exp;
branches ;
next     49.2;

49.2
date     90.09.24.14.17.57;  author jwh;  state Exp;
branches ;
next     49.1;

49.1
date     90.08.14.14.13.47;  author jwh;  state Exp;
branches ;
next     48.1;

48.1
date     90.07.26.11.20.04;  author jwh;  state Exp;
branches ;
next     47.1;

47.1
date     90.05.14.11.04.16;  author dew;  state Exp;
branches ;
next     46.1;

46.1
date     90.05.07.08.51.22;  author jwh;  state Exp;
branches ;
next     45.4;

45.4
date     90.05.04.14.47.39;  author jwh;  state Exp;
branches ;
next     45.3;

45.3
date     90.04.30.10.13.29;  author jwh;  state Exp;
branches ;
next     45.2;

45.2
date     90.04.30.09.11.10;  author jwh;  state Exp;
branches ;
next     45.1;

45.1
date     90.04.19.15.59.17;  author jwh;  state Exp;
branches ;
next     44.1;

44.1
date     90.04.01.22.16.23;  author jwh;  state Exp;
branches ;
next     43.2;

43.2
date     90.03.22.14.12.05;  author jwh;  state Exp;
branches ;
next     43.1;

43.1
date     90.03.20.14.08.50;  author jwh;  state Exp;
branches ;
next     42.1;

42.1
date     90.01.23.17.53.09;  author jwh;  state Exp;
branches ;
next     41.3;

41.3
date     90.01.20.16.36.16;  author jwh;  state Exp;
branches ;
next     41.2;

41.2
date     89.12.27.16.18.10;  author jwh;  state Exp;
branches ;
next     41.1;

41.1
date     89.12.22.11.35.25;  author jwh;  state Exp;
branches ;
next     40.6;

40.6
date     89.12.21.14.58.33;  author jwh;  state Exp;
branches ;
next     40.5;

40.5
date     89.12.18.10.29.43;  author jwh;  state Exp;
branches ;
next     40.4;

40.4
date     89.12.15.17.50.05;  author jwh;  state Exp;
branches ;
next     40.3;

40.3
date     89.12.15.16.57.28;  author jwh;  state Exp;
branches ;
next     40.2;

40.2
date     89.12.15.16.54.57;  author jwh;  state Exp;
branches ;
next     40.1;

40.1
date     89.09.29.11.56.43;  author jwh;  state Exp;
branches ;
next     39.1;

39.1
date     89.09.26.16.41.25;  author dew;  state Exp;
branches ;
next     38.1;

38.1
date     89.08.29.11.33.19;  author jwh;  state Exp;
branches ;
next     37.1;

37.1
date     89.05.12.11.47.03;  author dew;  state Exp;
branches ;
next     36.3;

36.3
date     89.05.12.09.05.39;  author quist;  state Exp;
branches ;
next     36.2;

36.2
date     89.05.11.11.37.31;  author quist;  state Exp;
branches ;
next     36.1;

36.1
date     89.02.06.10.24.45;  author dew;  state Exp;
branches ;
next     35.1;

35.1
date     89.02.02.13.40.02;  author dew;  state Exp;
branches ;
next     34.1;

34.1
date     89.01.23.16.15.17;  author jwh;  state Exp;
branches ;
next     33.1;

33.1
date     89.01.16.11.46.55;  author dew;  state Exp;
branches ;
next     32.3;

32.3
date     89.01.13.13.22.37;  author dew;  state Exp;
branches ;
next     32.2;

32.2
date     89.01.11.11.15.55;  author dew;  state Exp;
branches ;
next     32.1;

32.1
date     89.01.10.11.55.52;  author bayes;  state Exp;
branches ;
next     31.1;

31.1
date     88.12.14.18.16.56;  author bayes;  state Exp;
branches ;
next     30.1;

30.1
date     88.12.09.13.53.56;  author dew;  state Exp;
branches ;
next     29.1;

29.1
date     88.10.31.15.38.38;  author bayes;  state Exp;
branches ;
next     28.1;

28.1
date     88.10.06.11.04.54;  author dew;  state Exp;
branches ;
next     27.3;

27.3
date     88.10.05.17.36.58;  author bayes;  state Exp;
branches ;
next     27.2;

27.2
date     88.09.29.12.40.38;  author bayes;  state Exp;
branches ;
next     27.1;

27.1
date     88.09.29.11.47.33;  author bayes;  state Exp;
branches ;
next     26.1;

26.1
date     88.09.28.13.26.57;  author bayes;  state Exp;
branches ;
next     25.1;

25.1
date     88.03.02.09.40.30;  author bayes;  state Exp;
branches ;
next     24.2;

24.2
date     88.03.01.09.55.19;  author bayes;  state Exp;
branches ;
next     24.1;

24.1
date     87.08.31.10.08.26;  author jws;  state Exp;
branches ;
next     23.1;

23.1
date     87.08.26.10.48.44;  author bayes;  state Exp;
branches ;
next     22.2;

22.2
date     87.08.25.19.58.18;  author jws;  state Exp;
branches ;
next     22.1;

22.1
date     87.08.17.11.32.49;  author bayes;  state Exp;
branches ;
next     21.1;

21.1
date     87.08.12.14.16.22;  author bayes;  state Exp;
branches ;
next     20.1;

20.1
date     87.07.30.11.28.44;  author bayes;  state Exp;
branches ;
next     19.1;

19.1
date     87.06.01.08.41.30;  author jws;  state Exp;
branches ;
next     18.1;

18.1
date     87.05.20.15.45.58;  author bayes;  state Exp;
branches ;
next     17.2;

17.2
date     87.05.20.11.43.54;  author bayes;  state Exp;
branches ;
next     17.1;

17.1
date     87.04.30.10.52.58;  author jws;  state Exp;
branches ;
next     16.2;

16.2
date     87.04.29.14.53.29;  author bayes;  state Exp;
branches ;
next     16.1;

16.1
date     87.04.26.16.03.50;  author jws;  state Exp;
branches ;
next     15.2;

15.2
date     87.04.24.19.06.56;  author jws;  state Exp;
branches ;
next     15.1;

15.1
date     87.04.13.09.42.47;  author jws;  state Exp;
branches ;
next     14.1;

14.1
date     87.04.01.15.50.28;  author jws;  state Exp;
branches ;
next     13.1;

13.1
date     87.02.28.18.47.27;  author jws;  state Exp;
branches ;
next     12.1;

12.1
date     87.02.02.13.39.41;  author jws;  state Exp;
branches ;
next     11.1;

11.1
date     87.01.19.10.06.25;  author jws;  state Exp;
branches ;
next     10.1;

10.1
date     86.12.24.11.20.54;  author jws;  state Exp;
branches ;
next     9.2;

9.2
date     86.12.23.17.59.25;  author jws;  state Exp;
branches ;
next     9.1;

9.1
date     86.12.12.15.03.21;  author bayes;  state Exp;
branches ;
next     8.1;

8.1
date     86.11.27.12.15.04;  author jws;  state Exp;
branches ;
next     7.2;

7.2
date     86.11.24.09.33.54;  author jws;  state Exp;
branches ;
next     7.1;

7.1
date     86.11.20.14.22.37;  author hal;  state Exp;
branches ;
next     6.1;

6.1
date     86.11.04.18.19.18;  author paws;  state Exp;
branches ;
next     5.1;

5.1
date     86.10.28.17.07.26;  author hal;  state Exp;
branches ;
next     4.1;

4.1
date     86.09.30.20.04.06;  author hal;  state Exp;
branches ;
next     3.1;

3.1
date     86.09.01.12.14.13;  author hal;  state Exp;
branches ;
next     2.10;

2.10
date     86.08.19.14.01.03;  author hal;  state Exp;
branches ;
next     2.9;

2.9
date     86.08.19.13.34.25;  author danm;  state Exp;
branches ;
next     2.8;

2.8
date     86.08.18.09.53.17;  author hal;  state Exp;
branches ;
next     2.7;

2.7
date     86.08.18.09.39.12;  author hal;  state Exp;
branches ;
next     2.6;

2.6
date     86.08.14.19.05.48;  author hal;  state Exp;
branches ;
next     2.5;

2.5
date     86.08.14.10.29.56;  author hal;  state Exp;
branches ;
next     2.4;

2.4
date     86.08.13.09.46.08;  author hal;  state Exp;
branches ;
next     2.3;

2.3
date     86.08.12.10.36.10;  author hal;  state Exp;
branches ;
next     2.2;

2.2
date     86.08.12.10.32.11;  author hal;  state Exp;
branches ;
next     2.1;

2.1
date     86.07.30.15.02.30;  author hal;  state Exp;
branches ;
next     1.1;

1.1
date     86.06.30.16.15.59;  author danm;  state tmp;
branches ;
next     ;


desc
@Base file for PWS 3.2 release.

@


56.3
log
@
pws2rcs automatic delta on Wed Jan 27 13:14:25 MST 1993
@
text
@*
* CHANGES MADE FOR REV 3.0 AUG 83  rdq
*
	MNAME   ASM
	SPRINT

	DEF     ASM_ASM,ASM_POWERUP,ASM_ERRMSG,G_DOLLAR,STACKFUDGE
	DEF     ASM_USERPROGRAM,ASM_CI_SWITCH,ASM_FINDROMS,ASM_CPYMSG
	DEF     ASM_ICACHE_ON,ASM_ICACHE_OFF,ASM_FLUSH_ICACHE              {3/35/85}
*       DEF     ASM_INV_CACHES          9/24/90 JWH
	DEF     ASM_COPY_ON,ASM_COPY_OFF  9/25/90 JWH
	DEF     ASM_ARM_COPYBACK,ASM_DISARM_COPYBACK 2/17/91 JWH
	DEF     M68KTYPE,MSYSFLAGS                                      (rdq)
	DEF     HFSBFLG,LOWCODE,ASM_NOBOOT
	DEF     ASM_IAND,ASM_IOR
	LMODE   INITLOAD_INITLOAD
	LMODE   ARM_VALUE
	REFA    INITLOAD_INITLOAD
	INCLUDE ASM_SYMS.TEXT

 SRC MODULE ASM;
 SRC IMPORT SYSGLOBALS;
 SRC EXPORT
 SRC TYPE
 SRC STRINGMAX = STRING[255];
 SRC  PROCEDURE MOVELEFT (ANYVAR S,D: INTEGER; Z:INTEGER);
 SRC  PROCEDURE MOVERIGHT(ANYVAR S,D: INTEGER; Z:INTEGER);
 SRC  PROCEDURE FASTMOVE (       S,D: ANYPTR;  Z:INTEGER);
 SRC  PROCEDURE NEWBYTES(VAR P: ANYPTR;        Z:INTEGER);
 SRC  PROCEDURE POWERUP;
 SRC  PROCEDURE ERRMSG;
 SRC  PROCEDURE FINDROMS;
 SRC  PROCEDURE F_PWR_ON;
 SRC  PROCEDURE FLPYREAD(SECTOR: INTEGER;  ANYVAR BUFFER: INTEGER);
 SRC  PROCEDURE FLPY_WRT(SECTOR: INTEGER;  ANYVAR BUFFER: INTEGER);
 SRC  PROCEDURE FLPYMREAD(SECTOR_COUNT, SECTOR: INTEGER;  ANYVAR BUFFER: INTEGER);
 SRC  PROCEDURE FLPYMWRITE(SECTOR_COUNT, SECTOR: INTEGER;  ANYVAR BUFFER: INTEGER);
 SRC  PROCEDURE FLPYINIT(PTR: ANYPTR; I: SHORTINT);
 SRC  PROCEDURE SETINTLEVEL(LEVEL: INTEGER);
 SRC  FUNCTION  INTLEVEL:  INTEGER;
 SRC  PROCEDURE NEWWORDS(VAR P: ANYPTR; WORDSIZE: INTEGER);
 SRC  PROCEDURE USERPROGRAM (EXECLOC,INITSP: INTEGER);
 SRC  PROCEDURE SAPPEND(VAR DEST: STRING;SRC:STRINGMAX);
 SRC  FUNCTION IAND(A,B: INTEGER): INTEGER;
 SRC  FUNCTION IOR (A,B: INTEGER): INTEGER;
 SRC  PROCEDURE CI_SWITCH;
 SRC  PROCEDURE INITVECTS;
 SRC  PROCEDURE CPYMSG(MSG: STRING255);
 SRC  PROCEDURE NOBOOT;
 SRC  FUNCTION MEMAVAIL:INTEGER;
 SRC  FUNCTION TICKER:INTEGER;
 SRC  PROCEDURE CACHE_ON;
 SRC  PROCEDURE CACHE_OFF;
 SRC  PROCEDURE ICACHE_OFF;
 SRC  PROCEDURE ICACHE_ON;
 SRC  PROCEDURE FLUSH_ICACHE;
 SRC  PROCEDURE COPY_ON;
 SRC  PROCEDURE COPY_OFF;
 SRC  PROCEDURE ARM_COPYBACK;
 SRC  PROCEDURE DISARM_COPYBACK;
 SRC  PROCEDURE INV_CACHES;
 SRC  PROCEDURE CACHE_MODE(WS_MODE:BOOLEAN);
 SRC END;

	REFR    FS_FWRITESTRINT
	REFA    SYSGLOBALS,LOADER

ESCAPECODE      EQU SYSGLOBALS-2
RECOVERBLOCK    EQU SYSGLOBALS-10
HEAPPOINTER     EQU SYSGLOBALS-14
HEAPBASE        EQU SYSGLOBALS-18
IORESULT        EQU SYSGLOBALS-22
SYSDEFS         EQU LOADER-70             LINKED LIST OF PERMANT PROGRAMS

SYSFLAG2        EQU $FFFFFEDA             BOOT ROM FLAGS

SUPSTACKSPACE   EQU 8000        SPACE FOR SUPERVISOR STACK
STACKFUDGE      EQU 500         SLOP SPACE FOR STACK OVERFLOW CHECK

*       MAGIC NUMBERS, CONSULT 'POWERUP' LISTING, DEBUGGER and INITBUG  (rdq)
INITSTACK       EQU $FFFFFB70                                           (rdq)
INITPC          EQU INITSTACK+4                                         (rdq)
INITRECOVER     EQU INITPC+4                                            (rdq)
G_DOLLAR        EQU INITRECOVER+4                                       (rdq)
INITSR          EQU $FFFFFB96                                           (rdq)
M68KTYPE        EQU INITSR+2    PROCESSOR TYPE BYTE 0=68000,else 680xx  (rdq)
MSYSFLAGS       EQU M68KTYPE+1  MORE SYSFLAGS BIT 0 = CACHE PRESENT     (rdq)

LOWMEM          EQU $FFFFFDCE   BOOT ROM DEFINED ADDRESSES
HIGHMEM         EQU $FFFFFB00   LEAVES ROOM FOR VECTORS, MONITOR STUFF, ETC.
TRAP11          EQU $FFFFFF52
TRAP10          EQU $FFFFFF58
TRAP0           EQU $FFFFFF94

F_AREA          EQU $FFFFFED4   BOOTROM 3.0 MAGIC CONSTANTS TO    JS 9/12/83
REMOTE_ADDR     EQU $9A         ALLOW US TO TURN OFF INTERRUPTS   JS 9/12/83
R_INTLVL        EQU 3           IF BOOTING FROM REMOTE INTERFACE  JS 9/12/83
BOOT_ID         EQU $3FFE       CODE BY GREG LAWSON 8/29/83       JS 9/12/83
NO_CARD         EQU $800000                                       JS 9/12/83

CRTMSG          EQU $150
*CRTCLEAR        EQU $148       CAN'T USE DUE TO BOOT ROM BUG
SYSFLAG         EQU -302

JMP             EQU $4EF9
RETURN          EQU A4




LOWCODE EQU *                           LOWEST CODE LOCATION
HIGHCODE EQU *+$100000                  1 MEGABYTE MAX ROM AREA

	DC.B    $F0,$FF,'P',1           ROM HEADER
	DC.L    0,STARTRELOC-*          CHECKSUM, EXECUTION ADDRESS
	DC.B    0,0,0,0,0,0             IDENTIFICATION JUNK

*       RELOCATE A SYSTEM_P FILE LOADED AT THE WRONG ADDRESS BY
*       THE HP-UX BOOTER.  SETS HFSBFLG TO TRUE IF RELOCATION
*       WAS NECESSARY (IT'S NOT IF SYSTEM_P WAS LOADED DIRECTLY BY
*       THE BOOTROM).


* WARNING!!! NEXT TWO LINES EDITED BY TURNIT!!!!
CODESIZE EQU 22728
LOADADDRESS EQU -25000

STARTRELOC EQU  *
	LEA     BOOT_STACK,SP           FIXUP AFTER SECONDARY LOADER

	LEA     LOWCODE,A4              where has OS been loaded?
	LEA     LOADADDRESS,A5
	CMPA.L  A5,A4
	BEQ.S   CODE_IN_PLACE           loaded at proper address

	LEA     HFSBFLG,A0              must be relocated, so it's HFS
	MOVE.B  #1,(A0)

	MOVE.L  #CODESIZE,D0            copy backwards in case of overlap
	ADDA.L  D0,A4                   we will be copying to higher address
	ADDA.L  D0,A5
	BRA.S   MIDLOOP

MOVECODE EQU    *
	MOVE.B  -(A4),-(A5)
MIDLOOP DBRA    D0,MOVECODE

CODE_IN_PLACE EQU *
	JMP     INITLOAD_INITLOAD       OS is now at proper address, so start
*                                       execution

* FLAG TO TELL WHETHER WE BOOTED FROM HFS DISC
* 0 -> NO HFS BOOT, 1 -> HFS BOOT
HFSBFLG DC.W    0

******  ESTABLISH MINIMUM ENVIRONMENT FOR POWERUP LOAD OPERATIONS ********
* NOTE: INITLOAD_INITLOAD  FIRST INSTRUCTION IS JSR ASM_POWERUP
ASM_POWERUP     EQU *
	MOVEA.L (SP)+,RETURN
	LEA     LOWCODE,SP              SOFT SYSTEM STACK = JUST BELOW CODE
	CMPA.L  LOWMEM,SP               TEST FOR HARD OR SOFT SYSTEM
	BHI.S   SOFT                    SOFT IF SP > LOWMEM^
	LEA     HIGHMEM,SP              HARD SYSTEM STACK = HIGH MEMEMORY
SOFT    EQU *

	LEA     -SUPSTACKSPACE(SP),A5   ALLOCATE OPERATING SYSTEM STACK
	LEA     -32768(A5),A5           SYSTEM GLOBALS START AT 32766(A5)
	MOVE.L  A5,G_DOLLAR             SAVE FOR ISR's

	MOVE.L  LOWMEM,HEAPPOINTER(A5)  INITIALIZE HEAP

	CMPI.W  #3,BOOT_ID              3.0 BOOTROM ?         JS 9/12/83
	BNE.S   SKIP                    IF NOT THEN SKIP      JS 9/12/83
	MOVEA.L F_AREA,A0               GET STOLEN RAM PTR    JS 9/12/83
	MOVEA.L REMOTE_ADDR(A0),A0      SEE IF REMOTE BOOT    JS 9/12/83
	CMPA.L  #NO_CARD,A0                                   JS 9/12/83
	BEQ.S   SKIP                    IF NOT THEN SKIP      JS 9/12/83
	CLR.B   R_INTLVL(A0)            ELSE CLEAR INTERRUPTS JS 9/12/83

SKIP    BTST    #4,SYSFLAG2             CHECK FOR 68020               {3/25/85}
	BEQ.S   WHICHP                  IF NOT THEN SKIP              {3/25/85}
	MOVEQ   #0,D0                   ELSE BE SURE ICACHE IS OFF    {3/25/85}
	DC.W    $4E7B,$0002             MOVE D0,CACR                  {3/25/85}
	DC.W    $4E7B,$0002             **********  BUG KLUDGE        {3/25/85}
	BTST    #2,SYSFLAG2             TEST FOR 68030 SFB
	BEQ.S   WHICHP                  DON'T USE WINDOW REG FOR 68020 SFB
*=========================================================================
* Stuff between '========' lines unique to the '040. JWH 12/15/89.
	BTST    #3,SYSFLAG2             Check for '040
	BNE     JUST_30                 If not 0, same as before
	MOVE.L  #DTT0_ENABLE,D0         Ready to use new MOVEC
	DC.W    $4E7B,$0006             MOVEC D0,DTT0
	DC.W    $4E7B,$0006             MOVEC D0,DTT0
* Do the same for ITT0 - JWH 4/30/90
	DC.W    $4E7B,$0004             MOVEC D0,ITT0
	DC.W    $4E7B,$0004             MOVEC D0,ITT0
	BRA     WHICHP
*=========================================================================
* Except for the label on the next instruction, everything else is
* the same ..
*
JUST_30 MOVE.L  #TT0_ENABLE,-(SP)       DISABLE DATA CACHING FOR THE ADDRESS
*                                       RANGE $0 - $1FFFFFFF (ALL IO SPACE) SFB
	DC.L    $F0170800               OPCODE TO LOAD THE WINDOW REGISTER
*                                       FROM STACK (NO AUTO-INCREMENT) SFB
	ADDQ    #4,SP                   REMOVE CACHING WORD FROM STACK SFB

WHICHP  BSR     WHICH_PROCESSOR         FINDOUT IF 68000 OR OTHER       (rdq)
	CLR.B   MSYSFLAGS               ASSUME NO CACHES FOR NOW  JWS 3/27/85

	MOVE    #$2000,SR               ENABLE INTERRUPTS

	LEA     TRAP11,A0               SUPERVISOR CALL TRAP
	MOVE    #JMP,(A0)+
	LEA     SUPERCALL,A1
	MOVE.L  A1,(A0)+

*       LEA     TRAP10,A0               ESCAPE(N) TRAP
	MOVE    #JMP,(A0)+
	LEA     ESCN,A1
	MOVE.L  A1,(A0)+

	LEA     TRAP0,A0                COMPILED LINE TRAP
	MOVE    #JMP,(A0)+
	LEA     P_BREAK,A1
	MOVE.L  A1,(A0)+

	JMP     (RETURN)                ALL DONE

ASM_ASM RTS                     ASM MODULE 'BODY'

*****************  TEMPORARY TRAP 10 HANDLER *********************************
ESCN    MOVEA.L RECOVERBLOCK(A5),SP
	RTS

********(rdq)****  PERMANENT TRAP 11 HANDLER *********************************
SUPERCALL EQU *                 TRAP #11, GETS INTO SUPERVISOR MODE, SAVES SR
	TST.B   M68KTYPE
	BNE.S   SUPERCALL_1
	MOVE.W  (SP),-(SP)      MOVE STATUS REGISTER DOWN
	MOVE.L  4(SP),2(SP)     MOVE RETURN ADDRESS DOWN
SUPERCALL_1 EQU *
	MOVE.W  (SP)+,4(SP)     MOVE STATUS REGISTER UP
	RTS                     RETURN TO CALLER IN SUPERVISOR MODE

*****************  TEMPORARY TRAP 0 HANDLER, DISCARDS LINE NO.s *************
P_BREAK ADDQ.L  #2,2(SP)
	RTE

*****************  FINISH ENVIRONMENT SETUP THEN CALL USER PROGRAM **********
ASM_USERPROGRAM EQU     *       PROC USERPROGRAM(ENTRYPOINT,INITSTACK:INTEGER)
	MOVEA.L (SP)+,A3        RETURN ADDRESS
	MOVEA.L (SP)+,A0        INITIAL SP
	MOVEA.L (SP)+,A1        INITIAL PC
	MOVE.L  A3,-(SP)        RESTORE RETURN

	LEA     -STACKFUDGE(A0),A2
	CMPA.L  HEAPPOINTER(A5),A2      COMPARE
	BHI.S   *+4                     TEST
	TRAP    #2                      STACK OVERFLOW

	MOVE.L  RECOVERBLOCK(A5),-(SP)  TRY
	MOVE.L  A6,-(SP)                SAVE A6
	PEA     USER_RECOVER            RECOVER CODE
	MOVE.L  SP,RECOVERBLOCK(A5)

	MOVE.L  SP,INITRECOVER  SAVE FOR DEBUGGER
	MOVE.L  A1,INITPC       SAVE FOR DEBUGGER

	LEA     (A5),A6         FRAME POINTER
	MOVE    A0,USP          SET UP STACK
	MOVE    #$0000,SR       GO INTO USER MODE

	LEA     -8(SP),A2       SPACE FOR RETURN ADDRESS, DYNAMIC LINK
	MOVE.L  A2,INITSTACK    SAVE NON-LOCAL GOTO
	CLR.W   INITSR          FAKE SR FOR STOP KEY                    (rdq)
	CLR.L   HEAPBASE(A5)    FOR MEMORY MANAGER

	JSR     ASM_FLUSH_ICACHE  MAKE SURE ICACHE IS CLEAN      {3/25/85}
	jsr     asm_copy_on     affects 68040 only JWH 2/11/91
	JSR     (A1)            CALL USER PROGRAM

	jsr     asm_copy_off    affects 68040 only JWH 2/11/91

	CLR.W   ESCAPECODE(A5)  NORMAL EXIT
	TRAP    #10             ESCAPE(0), DONE TO CLOSE FILES

USER_RECOVER    EQU *
	jsr     asm_copy_off    affects 68040 only JWH 2/11/91
	MOVEA.L (SP)+,A6        RESTORE A6
	MOVE.L  (SP)+,RECOVERBLOCK(A5)  RESTORE RECOVER BLOCK
	MOVEA.L SP,A0           SAVE STACK POINTER
	TRAP    #11             GET INTO SUPERVISOR MODE
	MOVEA.L A0,SP           RESTORE STACK POINTER
	RTS

*****************  SWITCH TO SUPERVISOR MODE & STACK ************************
ASM_CI_SWITCH EQU *
	MOVEA.L (SP)+,A0        RETURN ADDRESS
	TRAP    #11             GET ONTO SUPERVISOR STACK
	ADDQ    #2,SP           DISCARD SR
	JMP     (A0)            DONE

*****************  HOOK ROM'D MODULES INTO SYSDEFS **************************
K16     EQU     $4000           16 K INCREMENTS
MDLINK  EQU     18              OFFSET OF MODULE DESCRIPTOR
MDSIZE  EQU     40              SIZE OF DESCRIPTOR
ASM_FINDROMS EQU *
	LEA     $20000,A0              BEGINNING OF SEARCH AREA
	MOVEA.L HEAPPOINTER(A5),A1      HEAP START
	MOVE.L  SYSDEFS(A5),D0          LINKED LIST HEAD
SEARCH  CMPI.L  #$F0FF5080,(A0)         PASCAL OPTION?
	BNE.S   NOROM                   NO MATCH
	LEA     MDLINK(A0),A2           LOCATE DESCRIPTOR

COPY    MOVEM.L 4(A2),D1-D7/A3-A4       REMAINDER OF MDB
	MOVEM.L D0-D7/A3-A4,(A1)        COPY ONTO HEAP
	MOVE.L  A1,D0                   INSERT LINK INTO LIST
	ADDA.L  #MDSIZE,A1              ALLOCATE FROM HEAP
	MOVE.L  A1,HEAPPOINTER(A5)      RESTORE HEAP
	MOVE.L  D0,SYSDEFS(A5)          RESTORE LIST

	MOVEA.L (A2),A2         MOVE DOWN CHAIN
	MOVE.L  A2,D1           TEST FOR NIL
	BNE.S   COPY            NOT END OF CHAIN
NOROM   ADDA.W  #K16,A0         NEXT ROM BOUNDARY
	CMPA.L  #$200000,A0     END OF ROM AREA?
	BNE.S   SEARCH          NOPE
FINDXIT RTS

******************** IAND AND IOR ***************************
ASM_IAND MOVEA.L (SP)+,A0
	MOVE.L  (SP)+,D0
	AND.L   (SP)+,D0
	MOVE.L  D0,(SP)
	JMP     (A0)

ASM_IOR MOVEA.L (SP)+,A0
	MOVE.L  (SP)+,D0
	OR.L    (SP)+,D0
	MOVE.L  D0,(SP)
	JMP     (A0)

*****************  CRT CLEAR ROUTINE ****************************************
CRTCLEAR        EQU *
	LINK    A6,#-82
	LEA     (SP),A0
	MOVEQ   #79,D0
	BTST    #0,SYSFLAG      TEST FOR 50 CHAR SCREEN
	BEQ.S   LC1
	MOVEQ   #49,D0
LC1     MOVE.B  #' ',(A0)+
	DBRA    D0,LC1
	CLR.B   (A0)
	CLR.B   -1(A6)
LC2     LEA     (SP),A0
	CLR     D0
	MOVE.B  -1(A6),D0
	JSR     CRTMSG
	ADDQ.B  #1,-1(A6)
	CMPI.B  #24,-1(A6)
	BNE.S   LC2
	UNLK    A6
	RTS

*****************   CANNOT BOOT FROM HFS **************************
ASM_NOBOOT      EQU     *
	JSR     CRTCLEAR
	MOVEQ   #0,D0
	LEA     M2,A0
	JSR     CRTMSG
	BRA.S   *

*****************  INTRODUCTORY MESSAGE ROUTINE  ****************************
ASM_CPYMSG      EQU *
	JSR     CRTCLEAR
	MOVEQ   #0,D0
	LEA     M,A0                    COPYRIGHT NOTICE
	JSR     CRTMSG
	MOVEQ   #2,D0
	MOVEA.L (SP)+,A1
	MOVEA.L (SP)+,A0
	CLR     D1
	MOVE.B  (A0)+,D1
	CLR.B   0(A0,D1)
	MOVE.L  A1,-(SP)
	JSR     CRTMSG
	RTS

*****************  PRIMITIVE ERROR MESSAGE ROUTINE  *************************
STR     EQU -86
I       EQU -4

INT     CLR.L   D1
	MOVE.B  STR(A6),D1
	ADDQ.L  #1,D1
	MOVE.L  D1,I(A6)
	MOVE.B  #80,-(SP)
	PEA     STR(A6)
	PEA     I(A6)
	MOVE.L  D0,-(SP)
	MOVE.W  #-1,-(SP)
	JSR     FS_FWRITESTRINT
	RTS

ASM_ERRMSG  EQU *
	TRAP    #11
	LINK    A6,#STR
	JSR     CRTCLEAR
	MOVEM.L M1,D1-D5
	MOVEM.L D1-D5,STR(A6)
	MOVE.L  IORESULT(A5),D0
	BSR.S   INT
	MOVE.W  ESCAPECODE(A5),D0
	EXT.L   D0
	BSR.S   INT
	CLR.L   D0
	LEA     STR(A6),A0
	CLR     D1
	MOVE.B  (A0),D1
	CLR.B   1(A0,D1)
	ADDQ    #1,A0
	JSR     CRTMSG

	MOVEQ   #28,D0
L       DBRA    D1,L
	DBRA    D0,L

	UNLK    A6
	MOVE    (SP)+,SR
	RTS

******(rdq)******  FIND OUT WHICH PROCESSOR NOW RUNNING **********************
WHICH_PROCESSOR EQU *
	LEA     TRAP11,A0       SETUP TRAP11
	MOVE.W  #JMP,(A0)+      THIS SETUP WILL BE DISCARDED
	MOVE.L  #TRAP_SERV,(A0)
	MOVE.L  SP,D0           SAVE STACK LOCATION
	TRAP    #11             FIND OUT HOW MANY BYTES PUSHED ON STACK
	SUBQ.L  #6,D0
	SNE     M68KTYPE        =0 is 68000 <>0 is 680xx
	RTS
TRAP_SERV       EQU *
	SUB.L   SP,D0
	RTE

*******************  ICACHE MANAGEMENT ROUTINES  ****************************
*
*          3/25/85 BY JWS
*
* This (ICACHE_OFF) also works for the '040 JWH 12/18/89
*
ASM_ICACHE_OFF EQU *
	BTST    #4,SYSFLAG2     CHECK FOR 68020
	BEQ.S   ICACHE_RET      IF NOT THEN RETURN
	TRAP    #11             BE SURE WE ARE IN SUPERVISOR MODE
	MOVE.L  D0,-(SP)        SAVE A REGISTER
	MOVEQ   #0,D0
ICACHE1 DC.W    $4E7B,$0002     MOVE D0,CACR
	DC.W    $4E7B,$0002     ***** FOR 68020 BUG
	MOVE.L  (SP)+,D0        RESTORE REGS
	MOVE    (SP)+,SR        RESTORE SR
ICACHE_RET RTS
*
*
* This one (ICACHE_ON) required a slight mod 12/18/89 JWH
*
ASM_ICACHE_ON EQU *
	BTST    #4,SYSFLAG2     CHECK FOR 68020
	BEQ     ICACHE_RET      IF NOT THEN RETURN
	BTST    #3,SYSFLAG2     Check for 68040
	BEQ     DO_40           Bit 3 =0 means '040, otherwise not
	TRAP    #11             GOTO SUPERVISOR MODE
	MOVE.L  D0,-(SP)
	MOVE.W  #$3919,D0       SET ENABLE AND CLEAR BITS (TURN ON D-CACHE
*                               ENABLE WRITE ALLOCATE, AND BURST MODE FOR
*                               68030. SFB/RDQ/DD)
	BRA     ICACHE1
*==========================================================================
* Stuff between the '=========' lines was added for '040 support.
* JWH 12/15/89.
DO_40   TRAP    #11             GOTO SUPERVISOR MODE
	MOVE.L  D0,-(SP)
	MOVE.L  #$80008000,D0   Turn on both, 68040 CACR
	DC.W    $F4D8           CINVA  DC/IC - invalidate all cache entries
	BRA     ICACHE1         Turn em on
*==========================================================================
*
*
* FLUSH_ICACHE modified slightly for the '040 case. We now have the
* CPUSHA instruction to help us.  JWH 12/18/89.
*
ASM_FLUSH_ICACHE EQU *
	BTST    #4,SYSFLAG2     CHECK FOR 68020
	BEQ     ICACHE_RET      RET IF NOT
	BTST    #3,SYSFLAG2     Check for '040
	BEQ     DO_40F
	TRAP    #11             SUPERVISOR STATE
	MOVE.L  D0,-(SP)
	DC.W    $4E7A,$0002     MOVE CACR,D0
	OR.W    #$808,D0        SET CLEAR BIT (ALSO CLEAR 68030 D-CACHE.
*                               SFB/RDQ/DD)
	BRA     ICACHE1
DO_40F  TRAP    #11             supervisor state
*       CPUSHA  DC/IC : flush and invalidate all cache entries
	DC.W    $F4F8
	MOVE    (SP)+,SR        RESTORE SR
	BRA     ICACHE_RET
* Added for '040 support : marks all cache entries invalid but
* does not flush the d-cache :
*ASM_INV_CACHES     EQU     *
*       btst   #3,SYSFLAG2
*       bne    done_inv
*       trap   #11        got an '040
*       cinva  DC/IC      invalidate not push
*       move   (SP)+,SR
*done_inv  rts
* Added for '040 support : turn on copyback mode for user writes
* in non-IO space, or turn it off.
ASM_ARM_COPYBACK EQU   *
	BTST #3,SYSFLAG2
	BNE not_a_40
	MOVE.L #$1FFFC020,ARM_VALUE
	RTS
ASM_DISARM_COPYBACK EQU   *
	BTST #3,SYSFLAG2
	BNE not_a_40
	MOVE.L #0,ARM_VALUE
	RTS
ASM_COPY_ON    EQU   *
	btst  #3,SYSFLAG2
	bne   not_a_40
	trap  #11
	move.l d0,-(SP)
	move.l ARM_VALUE,d0
	movec  d0,DTT1
	move.l (SP)+,d0
	move   (SP)+,SR
not_a_40   rts
ASM_COPY_OFF   equ   *
	btst   #3,SYSFLAG2
	bne    not_a_40
	trap   #11
	move.l  d0,-(SP)
	move.l  #0,d0
	CPUSHA  DC/IC        start fresh
	movec  d0,DTT1
	move.l (SP)+,d0
	move   (SP)+,SR
	rts
ARM_VALUE  DC.L $00000000   GOES IN DTT1
*-----------------------------------------------------------
M       DC.B    'Copyright Hewlett-Packard Company, 1982, 1991.',0
M1      DC.B    18,'IORESULT, ERROR = '
M2      DC.B    'This system file cannot boot from an HFS disc.',0

	NOSYMS
	END


@


56.2
log
@
pws2rcs automatic delta on Wed Jan 27 11:57:27 MST 1993
@
text
@d1 560
@


56.1
log
@Automatic bump of revision number for PWS version 3.25
@
text
@a0 560
*
* CHANGES MADE FOR REV 3.0 AUG 83  rdq
*
	MNAME   ASM
	SPRINT

	DEF     ASM_ASM,ASM_POWERUP,ASM_ERRMSG,G_DOLLAR,STACKFUDGE
	DEF     ASM_USERPROGRAM,ASM_CI_SWITCH,ASM_FINDROMS,ASM_CPYMSG
	DEF     ASM_ICACHE_ON,ASM_ICACHE_OFF,ASM_FLUSH_ICACHE              {3/35/85}
*       DEF     ASM_INV_CACHES          9/24/90 JWH
	DEF     ASM_COPY_ON,ASM_COPY_OFF  9/25/90 JWH
	DEF     ASM_ARM_COPYBACK,ASM_DISARM_COPYBACK 2/17/91 JWH
	DEF     M68KTYPE,MSYSFLAGS                                      (rdq)
	DEF     HFSBFLG,LOWCODE,ASM_NOBOOT
	DEF     ASM_IAND,ASM_IOR
	LMODE   INITLOAD_INITLOAD
	LMODE   ARM_VALUE
	REFA    INITLOAD_INITLOAD
	INCLUDE ASM_SYMS.TEXT

 SRC MODULE ASM;
 SRC IMPORT SYSGLOBALS;
 SRC EXPORT
 SRC TYPE
 SRC STRINGMAX = STRING[255];
 SRC  PROCEDURE MOVELEFT (ANYVAR S,D: INTEGER; Z:INTEGER);
 SRC  PROCEDURE MOVERIGHT(ANYVAR S,D: INTEGER; Z:INTEGER);
 SRC  PROCEDURE FASTMOVE (       S,D: ANYPTR;  Z:INTEGER);
 SRC  PROCEDURE NEWBYTES(VAR P: ANYPTR;        Z:INTEGER);
 SRC  PROCEDURE POWERUP;
 SRC  PROCEDURE ERRMSG;
 SRC  PROCEDURE FINDROMS;
 SRC  PROCEDURE F_PWR_ON;
 SRC  PROCEDURE FLPYREAD(SECTOR: INTEGER;  ANYVAR BUFFER: INTEGER);
 SRC  PROCEDURE FLPY_WRT(SECTOR: INTEGER;  ANYVAR BUFFER: INTEGER);
 SRC  PROCEDURE FLPYMREAD(SECTOR_COUNT, SECTOR: INTEGER;  ANYVAR BUFFER: INTEGER);
 SRC  PROCEDURE FLPYMWRITE(SECTOR_COUNT, SECTOR: INTEGER;  ANYVAR BUFFER: INTEGER);
 SRC  PROCEDURE FLPYINIT(PTR: ANYPTR; I: SHORTINT);
 SRC  PROCEDURE SETINTLEVEL(LEVEL: INTEGER);
 SRC  FUNCTION  INTLEVEL:  INTEGER;
 SRC  PROCEDURE NEWWORDS(VAR P: ANYPTR; WORDSIZE: INTEGER);
 SRC  PROCEDURE USERPROGRAM (EXECLOC,INITSP: INTEGER);
 SRC  PROCEDURE SAPPEND(VAR DEST: STRING;SRC:STRINGMAX);
 SRC  FUNCTION IAND(A,B: INTEGER): INTEGER;
 SRC  FUNCTION IOR (A,B: INTEGER): INTEGER;
 SRC  PROCEDURE CI_SWITCH;
 SRC  PROCEDURE INITVECTS;
 SRC  PROCEDURE CPYMSG(MSG: STRING255);
 SRC  PROCEDURE NOBOOT;
 SRC  FUNCTION MEMAVAIL:INTEGER;
 SRC  FUNCTION TICKER:INTEGER;
 SRC  PROCEDURE CACHE_ON;
 SRC  PROCEDURE CACHE_OFF;
 SRC  PROCEDURE ICACHE_OFF;
 SRC  PROCEDURE ICACHE_ON;
 SRC  PROCEDURE FLUSH_ICACHE;
 SRC  PROCEDURE COPY_ON;
 SRC  PROCEDURE COPY_OFF;
 SRC  PROCEDURE ARM_COPYBACK;
 SRC  PROCEDURE DISARM_COPYBACK;
 SRC  PROCEDURE INV_CACHES;
 SRC  PROCEDURE CACHE_MODE(WS_MODE:BOOLEAN);
 SRC END;

	REFR    FS_FWRITESTRINT
	REFA    SYSGLOBALS,LOADER

ESCAPECODE      EQU SYSGLOBALS-2
RECOVERBLOCK    EQU SYSGLOBALS-10
HEAPPOINTER     EQU SYSGLOBALS-14
HEAPBASE        EQU SYSGLOBALS-18
IORESULT        EQU SYSGLOBALS-22
SYSDEFS         EQU LOADER-70             LINKED LIST OF PERMANT PROGRAMS

SYSFLAG2        EQU $FFFFFEDA             BOOT ROM FLAGS

SUPSTACKSPACE   EQU 8000        SPACE FOR SUPERVISOR STACK
STACKFUDGE      EQU 500         SLOP SPACE FOR STACK OVERFLOW CHECK

*       MAGIC NUMBERS, CONSULT 'POWERUP' LISTING, DEBUGGER and INITBUG  (rdq)
INITSTACK       EQU $FFFFFB70                                           (rdq)
INITPC          EQU INITSTACK+4                                         (rdq)
INITRECOVER     EQU INITPC+4                                            (rdq)
G_DOLLAR        EQU INITRECOVER+4                                       (rdq)
INITSR          EQU $FFFFFB96                                           (rdq)
M68KTYPE        EQU INITSR+2    PROCESSOR TYPE BYTE 0=68000,else 680xx  (rdq)
MSYSFLAGS       EQU M68KTYPE+1  MORE SYSFLAGS BIT 0 = CACHE PRESENT     (rdq)

LOWMEM          EQU $FFFFFDCE   BOOT ROM DEFINED ADDRESSES
HIGHMEM         EQU $FFFFFB00   LEAVES ROOM FOR VECTORS, MONITOR STUFF, ETC.
TRAP11          EQU $FFFFFF52
TRAP10          EQU $FFFFFF58
TRAP0           EQU $FFFFFF94

F_AREA          EQU $FFFFFED4   BOOTROM 3.0 MAGIC CONSTANTS TO    JS 9/12/83
REMOTE_ADDR     EQU $9A         ALLOW US TO TURN OFF INTERRUPTS   JS 9/12/83
R_INTLVL        EQU 3           IF BOOTING FROM REMOTE INTERFACE  JS 9/12/83
BOOT_ID         EQU $3FFE       CODE BY GREG LAWSON 8/29/83       JS 9/12/83
NO_CARD         EQU $800000                                       JS 9/12/83

CRTMSG          EQU $150
*CRTCLEAR        EQU $148       CAN'T USE DUE TO BOOT ROM BUG
SYSFLAG         EQU -302

JMP             EQU $4EF9
RETURN          EQU A4




LOWCODE EQU *                           LOWEST CODE LOCATION
HIGHCODE EQU *+$100000                  1 MEGABYTE MAX ROM AREA

	DC.B    $F0,$FF,'P',1           ROM HEADER
	DC.L    0,STARTRELOC-*          CHECKSUM, EXECUTION ADDRESS
	DC.B    0,0,0,0,0,0             IDENTIFICATION JUNK

*       RELOCATE A SYSTEM_P FILE LOADED AT THE WRONG ADDRESS BY
*       THE HP-UX BOOTER.  SETS HFSBFLG TO TRUE IF RELOCATION
*       WAS NECESSARY (IT'S NOT IF SYSTEM_P WAS LOADED DIRECTLY BY
*       THE BOOTROM).


* WARNING!!! NEXT TWO LINES EDITED BY TURNIT!!!!
CODESIZE EQU 22728
LOADADDRESS EQU -25000

STARTRELOC EQU  *
	LEA     BOOT_STACK,SP           FIXUP AFTER SECONDARY LOADER

	LEA     LOWCODE,A4              where has OS been loaded?
	LEA     LOADADDRESS,A5
	CMPA.L  A5,A4
	BEQ.S   CODE_IN_PLACE           loaded at proper address

	LEA     HFSBFLG,A0              must be relocated, so it's HFS
	MOVE.B  #1,(A0)

	MOVE.L  #CODESIZE,D0            copy backwards in case of overlap
	ADDA.L  D0,A4                   we will be copying to higher address
	ADDA.L  D0,A5
	BRA.S   MIDLOOP

MOVECODE EQU    *
	MOVE.B  -(A4),-(A5)
MIDLOOP DBRA    D0,MOVECODE

CODE_IN_PLACE EQU *
	JMP     INITLOAD_INITLOAD       OS is now at proper address, so start
*                                       execution

* FLAG TO TELL WHETHER WE BOOTED FROM HFS DISC
* 0 -> NO HFS BOOT, 1 -> HFS BOOT
HFSBFLG DC.W    0

******  ESTABLISH MINIMUM ENVIRONMENT FOR POWERUP LOAD OPERATIONS ********
* NOTE: INITLOAD_INITLOAD  FIRST INSTRUCTION IS JSR ASM_POWERUP
ASM_POWERUP     EQU *
	MOVEA.L (SP)+,RETURN
	LEA     LOWCODE,SP              SOFT SYSTEM STACK = JUST BELOW CODE
	CMPA.L  LOWMEM,SP               TEST FOR HARD OR SOFT SYSTEM
	BHI.S   SOFT                    SOFT IF SP > LOWMEM^
	LEA     HIGHMEM,SP              HARD SYSTEM STACK = HIGH MEMEMORY
SOFT    EQU *

	LEA     -SUPSTACKSPACE(SP),A5   ALLOCATE OPERATING SYSTEM STACK
	LEA     -32768(A5),A5           SYSTEM GLOBALS START AT 32766(A5)
	MOVE.L  A5,G_DOLLAR             SAVE FOR ISR's

	MOVE.L  LOWMEM,HEAPPOINTER(A5)  INITIALIZE HEAP

	CMPI.W  #3,BOOT_ID              3.0 BOOTROM ?         JS 9/12/83
	BNE.S   SKIP                    IF NOT THEN SKIP      JS 9/12/83
	MOVEA.L F_AREA,A0               GET STOLEN RAM PTR    JS 9/12/83
	MOVEA.L REMOTE_ADDR(A0),A0      SEE IF REMOTE BOOT    JS 9/12/83
	CMPA.L  #NO_CARD,A0                                   JS 9/12/83
	BEQ.S   SKIP                    IF NOT THEN SKIP      JS 9/12/83
	CLR.B   R_INTLVL(A0)            ELSE CLEAR INTERRUPTS JS 9/12/83

SKIP    BTST    #4,SYSFLAG2             CHECK FOR 68020               {3/25/85}
	BEQ.S   WHICHP                  IF NOT THEN SKIP              {3/25/85}
	MOVEQ   #0,D0                   ELSE BE SURE ICACHE IS OFF    {3/25/85}
	DC.W    $4E7B,$0002             MOVE D0,CACR                  {3/25/85}
	DC.W    $4E7B,$0002             **********  BUG KLUDGE        {3/25/85}
	BTST    #2,SYSFLAG2             TEST FOR 68030 SFB
	BEQ.S   WHICHP                  DON'T USE WINDOW REG FOR 68020 SFB
*=========================================================================
* Stuff between '========' lines unique to the '040. JWH 12/15/89.
	BTST    #3,SYSFLAG2             Check for '040
	BNE     JUST_30                 If not 0, same as before
	MOVE.L  #DTT0_ENABLE,D0         Ready to use new MOVEC
	DC.W    $4E7B,$0006             MOVEC D0,DTT0
	DC.W    $4E7B,$0006             MOVEC D0,DTT0
* Do the same for ITT0 - JWH 4/30/90
	DC.W    $4E7B,$0004             MOVEC D0,ITT0
	DC.W    $4E7B,$0004             MOVEC D0,ITT0
	BRA     WHICHP
*=========================================================================
* Except for the label on the next instruction, everything else is
* the same ..
*
JUST_30 MOVE.L  #TT0_ENABLE,-(SP)       DISABLE DATA CACHING FOR THE ADDRESS
*                                       RANGE $0 - $1FFFFFFF (ALL IO SPACE) SFB
	DC.L    $F0170800               OPCODE TO LOAD THE WINDOW REGISTER
*                                       FROM STACK (NO AUTO-INCREMENT) SFB
	ADDQ    #4,SP                   REMOVE CACHING WORD FROM STACK SFB

WHICHP  BSR     WHICH_PROCESSOR         FINDOUT IF 68000 OR OTHER       (rdq)
	CLR.B   MSYSFLAGS               ASSUME NO CACHES FOR NOW  JWS 3/27/85

	MOVE    #$2000,SR               ENABLE INTERRUPTS

	LEA     TRAP11,A0               SUPERVISOR CALL TRAP
	MOVE    #JMP,(A0)+
	LEA     SUPERCALL,A1
	MOVE.L  A1,(A0)+

*       LEA     TRAP10,A0               ESCAPE(N) TRAP
	MOVE    #JMP,(A0)+
	LEA     ESCN,A1
	MOVE.L  A1,(A0)+

	LEA     TRAP0,A0                COMPILED LINE TRAP
	MOVE    #JMP,(A0)+
	LEA     P_BREAK,A1
	MOVE.L  A1,(A0)+

	JMP     (RETURN)                ALL DONE

ASM_ASM RTS                     ASM MODULE 'BODY'

*****************  TEMPORARY TRAP 10 HANDLER *********************************
ESCN    MOVEA.L RECOVERBLOCK(A5),SP
	RTS

********(rdq)****  PERMANENT TRAP 11 HANDLER *********************************
SUPERCALL EQU *                 TRAP #11, GETS INTO SUPERVISOR MODE, SAVES SR
	TST.B   M68KTYPE
	BNE.S   SUPERCALL_1
	MOVE.W  (SP),-(SP)      MOVE STATUS REGISTER DOWN
	MOVE.L  4(SP),2(SP)     MOVE RETURN ADDRESS DOWN
SUPERCALL_1 EQU *
	MOVE.W  (SP)+,4(SP)     MOVE STATUS REGISTER UP
	RTS                     RETURN TO CALLER IN SUPERVISOR MODE

*****************  TEMPORARY TRAP 0 HANDLER, DISCARDS LINE NO.s *************
P_BREAK ADDQ.L  #2,2(SP)
	RTE

*****************  FINISH ENVIRONMENT SETUP THEN CALL USER PROGRAM **********
ASM_USERPROGRAM EQU     *       PROC USERPROGRAM(ENTRYPOINT,INITSTACK:INTEGER)
	MOVEA.L (SP)+,A3        RETURN ADDRESS
	MOVEA.L (SP)+,A0        INITIAL SP
	MOVEA.L (SP)+,A1        INITIAL PC
	MOVE.L  A3,-(SP)        RESTORE RETURN

	LEA     -STACKFUDGE(A0),A2
	CMPA.L  HEAPPOINTER(A5),A2      COMPARE
	BHI.S   *+4                     TEST
	TRAP    #2                      STACK OVERFLOW

	MOVE.L  RECOVERBLOCK(A5),-(SP)  TRY
	MOVE.L  A6,-(SP)                SAVE A6
	PEA     USER_RECOVER            RECOVER CODE
	MOVE.L  SP,RECOVERBLOCK(A5)

	MOVE.L  SP,INITRECOVER  SAVE FOR DEBUGGER
	MOVE.L  A1,INITPC       SAVE FOR DEBUGGER

	LEA     (A5),A6         FRAME POINTER
	MOVE    A0,USP          SET UP STACK
	MOVE    #$0000,SR       GO INTO USER MODE

	LEA     -8(SP),A2       SPACE FOR RETURN ADDRESS, DYNAMIC LINK
	MOVE.L  A2,INITSTACK    SAVE NON-LOCAL GOTO
	CLR.W   INITSR          FAKE SR FOR STOP KEY                    (rdq)
	CLR.L   HEAPBASE(A5)    FOR MEMORY MANAGER

	JSR     ASM_FLUSH_ICACHE  MAKE SURE ICACHE IS CLEAN      {3/25/85}
	jsr     asm_copy_on     affects 68040 only JWH 2/11/91
	JSR     (A1)            CALL USER PROGRAM

	jsr     asm_copy_off    affects 68040 only JWH 2/11/91

	CLR.W   ESCAPECODE(A5)  NORMAL EXIT
	TRAP    #10             ESCAPE(0), DONE TO CLOSE FILES

USER_RECOVER    EQU *
	jsr     asm_copy_off    affects 68040 only JWH 2/11/91
	MOVEA.L (SP)+,A6        RESTORE A6
	MOVE.L  (SP)+,RECOVERBLOCK(A5)  RESTORE RECOVER BLOCK
	MOVEA.L SP,A0           SAVE STACK POINTER
	TRAP    #11             GET INTO SUPERVISOR MODE
	MOVEA.L A0,SP           RESTORE STACK POINTER
	RTS

*****************  SWITCH TO SUPERVISOR MODE & STACK ************************
ASM_CI_SWITCH EQU *
	MOVEA.L (SP)+,A0        RETURN ADDRESS
	TRAP    #11             GET ONTO SUPERVISOR STACK
	ADDQ    #2,SP           DISCARD SR
	JMP     (A0)            DONE

*****************  HOOK ROM'D MODULES INTO SYSDEFS **************************
K16     EQU     $4000           16 K INCREMENTS
MDLINK  EQU     18              OFFSET OF MODULE DESCRIPTOR
MDSIZE  EQU     40              SIZE OF DESCRIPTOR
ASM_FINDROMS EQU *
	LEA     $20000,A0              BEGINNING OF SEARCH AREA
	MOVEA.L HEAPPOINTER(A5),A1      HEAP START
	MOVE.L  SYSDEFS(A5),D0          LINKED LIST HEAD
SEARCH  CMPI.L  #$F0FF5080,(A0)         PASCAL OPTION?
	BNE.S   NOROM                   NO MATCH
	LEA     MDLINK(A0),A2           LOCATE DESCRIPTOR

COPY    MOVEM.L 4(A2),D1-D7/A3-A4       REMAINDER OF MDB
	MOVEM.L D0-D7/A3-A4,(A1)        COPY ONTO HEAP
	MOVE.L  A1,D0                   INSERT LINK INTO LIST
	ADDA.L  #MDSIZE,A1              ALLOCATE FROM HEAP
	MOVE.L  A1,HEAPPOINTER(A5)      RESTORE HEAP
	MOVE.L  D0,SYSDEFS(A5)          RESTORE LIST

	MOVEA.L (A2),A2         MOVE DOWN CHAIN
	MOVE.L  A2,D1           TEST FOR NIL
	BNE.S   COPY            NOT END OF CHAIN
NOROM   ADDA.W  #K16,A0         NEXT ROM BOUNDARY
	CMPA.L  #$200000,A0     END OF ROM AREA?
	BNE.S   SEARCH          NOPE
FINDXIT RTS

******************** IAND AND IOR ***************************
ASM_IAND MOVEA.L (SP)+,A0
	MOVE.L  (SP)+,D0
	AND.L   (SP)+,D0
	MOVE.L  D0,(SP)
	JMP     (A0)

ASM_IOR MOVEA.L (SP)+,A0
	MOVE.L  (SP)+,D0
	OR.L    (SP)+,D0
	MOVE.L  D0,(SP)
	JMP     (A0)

*****************  CRT CLEAR ROUTINE ****************************************
CRTCLEAR        EQU *
	LINK    A6,#-82
	LEA     (SP),A0
	MOVEQ   #79,D0
	BTST    #0,SYSFLAG      TEST FOR 50 CHAR SCREEN
	BEQ.S   LC1
	MOVEQ   #49,D0
LC1     MOVE.B  #' ',(A0)+
	DBRA    D0,LC1
	CLR.B   (A0)
	CLR.B   -1(A6)
LC2     LEA     (SP),A0
	CLR     D0
	MOVE.B  -1(A6),D0
	JSR     CRTMSG
	ADDQ.B  #1,-1(A6)
	CMPI.B  #24,-1(A6)
	BNE.S   LC2
	UNLK    A6
	RTS

*****************   CANNOT BOOT FROM HFS **************************
ASM_NOBOOT      EQU     *
	JSR     CRTCLEAR
	MOVEQ   #0,D0
	LEA     M2,A0
	JSR     CRTMSG
	BRA.S   *

*****************  INTRODUCTORY MESSAGE ROUTINE  ****************************
ASM_CPYMSG      EQU *
	JSR     CRTCLEAR
	MOVEQ   #0,D0
	LEA     M,A0                    COPYRIGHT NOTICE
	JSR     CRTMSG
	MOVEQ   #2,D0
	MOVEA.L (SP)+,A1
	MOVEA.L (SP)+,A0
	CLR     D1
	MOVE.B  (A0)+,D1
	CLR.B   0(A0,D1)
	MOVE.L  A1,-(SP)
	JSR     CRTMSG
	RTS

*****************  PRIMITIVE ERROR MESSAGE ROUTINE  *************************
STR     EQU -86
I       EQU -4

INT     CLR.L   D1
	MOVE.B  STR(A6),D1
	ADDQ.L  #1,D1
	MOVE.L  D1,I(A6)
	MOVE.B  #80,-(SP)
	PEA     STR(A6)
	PEA     I(A6)
	MOVE.L  D0,-(SP)
	MOVE.W  #-1,-(SP)
	JSR     FS_FWRITESTRINT
	RTS

ASM_ERRMSG  EQU *
	TRAP    #11
	LINK    A6,#STR
	JSR     CRTCLEAR
	MOVEM.L M1,D1-D5
	MOVEM.L D1-D5,STR(A6)
	MOVE.L  IORESULT(A5),D0
	BSR.S   INT
	MOVE.W  ESCAPECODE(A5),D0
	EXT.L   D0
	BSR.S   INT
	CLR.L   D0
	LEA     STR(A6),A0
	CLR     D1
	MOVE.B  (A0),D1
	CLR.B   1(A0,D1)
	ADDQ    #1,A0
	JSR     CRTMSG

	MOVEQ   #28,D0
L       DBRA    D1,L
	DBRA    D0,L

	UNLK    A6
	MOVE    (SP)+,SR
	RTS

******(rdq)******  FIND OUT WHICH PROCESSOR NOW RUNNING **********************
WHICH_PROCESSOR EQU *
	LEA     TRAP11,A0       SETUP TRAP11
	MOVE.W  #JMP,(A0)+      THIS SETUP WILL BE DISCARDED
	MOVE.L  #TRAP_SERV,(A0)
	MOVE.L  SP,D0           SAVE STACK LOCATION
	TRAP    #11             FIND OUT HOW MANY BYTES PUSHED ON STACK
	SUBQ.L  #6,D0
	SNE     M68KTYPE        =0 is 68000 <>0 is 680xx
	RTS
TRAP_SERV       EQU *
	SUB.L   SP,D0
	RTE

*******************  ICACHE MANAGEMENT ROUTINES  ****************************
*
*          3/25/85 BY JWS
*
* This (ICACHE_OFF) also works for the '040 JWH 12/18/89
*
ASM_ICACHE_OFF EQU *
	BTST    #4,SYSFLAG2     CHECK FOR 68020
	BEQ.S   ICACHE_RET      IF NOT THEN RETURN
	TRAP    #11             BE SURE WE ARE IN SUPERVISOR MODE
	MOVE.L  D0,-(SP)        SAVE A REGISTER
	MOVEQ   #0,D0
ICACHE1 DC.W    $4E7B,$0002     MOVE D0,CACR
	DC.W    $4E7B,$0002     ***** FOR 68020 BUG
	MOVE.L  (SP)+,D0        RESTORE REGS
	MOVE    (SP)+,SR        RESTORE SR
ICACHE_RET RTS
*
*
* This one (ICACHE_ON) required a slight mod 12/18/89 JWH
*
ASM_ICACHE_ON EQU *
	BTST    #4,SYSFLAG2     CHECK FOR 68020
	BEQ     ICACHE_RET      IF NOT THEN RETURN
	BTST    #3,SYSFLAG2     Check for 68040
	BEQ     DO_40           Bit 3 =0 means '040, otherwise not
	TRAP    #11             GOTO SUPERVISOR MODE
	MOVE.L  D0,-(SP)
	MOVE.W  #$3919,D0       SET ENABLE AND CLEAR BITS (TURN ON D-CACHE
*                               ENABLE WRITE ALLOCATE, AND BURST MODE FOR
*                               68030. SFB/RDQ/DD)
	BRA     ICACHE1
*==========================================================================
* Stuff between the '=========' lines was added for '040 support.
* JWH 12/15/89.
DO_40   TRAP    #11             GOTO SUPERVISOR MODE
	MOVE.L  D0,-(SP)
	MOVE.L  #$80008000,D0   Turn on both, 68040 CACR
	DC.W    $F4D8           CINVA  DC/IC - invalidate all cache entries
	BRA     ICACHE1         Turn em on
*==========================================================================
*
*
* FLUSH_ICACHE modified slightly for the '040 case. We now have the
* CPUSHA instruction to help us.  JWH 12/18/89.
*
ASM_FLUSH_ICACHE EQU *
	BTST    #4,SYSFLAG2     CHECK FOR 68020
	BEQ     ICACHE_RET      RET IF NOT
	BTST    #3,SYSFLAG2     Check for '040
	BEQ     DO_40F
	TRAP    #11             SUPERVISOR STATE
	MOVE.L  D0,-(SP)
	DC.W    $4E7A,$0002     MOVE CACR,D0
	OR.W    #$808,D0        SET CLEAR BIT (ALSO CLEAR 68030 D-CACHE.
*                               SFB/RDQ/DD)
	BRA     ICACHE1
DO_40F  TRAP    #11             supervisor state
*       CPUSHA  DC/IC : flush and invalidate all cache entries
	DC.W    $F4F8
	MOVE    (SP)+,SR        RESTORE SR
	BRA     ICACHE_RET
* Added for '040 support : marks all cache entries invalid but
* does not flush the d-cache :
*ASM_INV_CACHES     EQU     *
*       btst   #3,SYSFLAG2
*       bne    done_inv
*       trap   #11        got an '040
*       cinva  DC/IC      invalidate not push
*       move   (SP)+,SR
*done_inv  rts
* Added for '040 support : turn on copyback mode for user writes
* in non-IO space, or turn it off.
ASM_ARM_COPYBACK EQU   *
	BTST #3,SYSFLAG2
	BNE not_a_40
	MOVE.L #$1FFFC020,ARM_VALUE
	RTS
ASM_DISARM_COPYBACK EQU   *
	BTST #3,SYSFLAG2
	BNE not_a_40
	MOVE.L #0,ARM_VALUE
	RTS
ASM_COPY_ON    EQU   *
	btst  #3,SYSFLAG2
	bne   not_a_40
	trap  #11
	move.l d0,-(SP)
	move.l ARM_VALUE,d0
	movec  d0,DTT1
	move.l (SP)+,d0
	move   (SP)+,SR
not_a_40   rts
ASM_COPY_OFF   equ   *
	btst   #3,SYSFLAG2
	bne    not_a_40
	trap   #11
	move.l  d0,-(SP)
	move.l  #0,d0
	CPUSHA  DC/IC        start fresh
	movec  d0,DTT1
	move.l (SP)+,d0
	move   (SP)+,SR
	rts
ARM_VALUE  DC.L $00000000   GOES IN DTT1
*-----------------------------------------------------------
M       DC.B    'Copyright Hewlett-Packard Company, 1982, 1991.',0
M1      DC.B    18,'IORESULT, ERROR = '
M2      DC.B    'This system file cannot boot from an HFS disc.',0

	NOSYMS
	END


@


55.3
log
@
pws2rcs automatic delta on Mon Nov  4 13:45:04 MST 1991
@
text
@@


55.2
log
@
pws2rcs automatic delta on Mon Nov  4 12:54:35 MST 1991
@
text
@d1 560
@


55.1
log
@Automatic bump of revision number for PWS version 3.25A
@
text
@a0 560
*
* CHANGES MADE FOR REV 3.0 AUG 83  rdq
*
	MNAME   ASM
	SPRINT

	DEF     ASM_ASM,ASM_POWERUP,ASM_ERRMSG,G_DOLLAR,STACKFUDGE
	DEF     ASM_USERPROGRAM,ASM_CI_SWITCH,ASM_FINDROMS,ASM_CPYMSG
	DEF     ASM_ICACHE_ON,ASM_ICACHE_OFF,ASM_FLUSH_ICACHE              {3/35/85}
*       DEF     ASM_INV_CACHES          9/24/90 JWH
	DEF     ASM_COPY_ON,ASM_COPY_OFF  9/25/90 JWH
	DEF     ASM_ARM_COPYBACK,ASM_DISARM_COPYBACK 2/17/91 JWH
	DEF     M68KTYPE,MSYSFLAGS                                      (rdq)
	DEF     HFSBFLG,LOWCODE,ASM_NOBOOT
	DEF     ASM_IAND,ASM_IOR
	LMODE   INITLOAD_INITLOAD
	LMODE   ARM_VALUE
	REFA    INITLOAD_INITLOAD
	INCLUDE ASM_SYMS.TEXT

 SRC MODULE ASM;
 SRC IMPORT SYSGLOBALS;
 SRC EXPORT
 SRC TYPE
 SRC STRINGMAX = STRING[255];
 SRC  PROCEDURE MOVELEFT (ANYVAR S,D: INTEGER; Z:INTEGER);
 SRC  PROCEDURE MOVERIGHT(ANYVAR S,D: INTEGER; Z:INTEGER);
 SRC  PROCEDURE FASTMOVE (       S,D: ANYPTR;  Z:INTEGER);
 SRC  PROCEDURE NEWBYTES(VAR P: ANYPTR;        Z:INTEGER);
 SRC  PROCEDURE POWERUP;
 SRC  PROCEDURE ERRMSG;
 SRC  PROCEDURE FINDROMS;
 SRC  PROCEDURE F_PWR_ON;
 SRC  PROCEDURE FLPYREAD(SECTOR: INTEGER;  ANYVAR BUFFER: INTEGER);
 SRC  PROCEDURE FLPY_WRT(SECTOR: INTEGER;  ANYVAR BUFFER: INTEGER);
 SRC  PROCEDURE FLPYMREAD(SECTOR_COUNT, SECTOR: INTEGER;  ANYVAR BUFFER: INTEGER);
 SRC  PROCEDURE FLPYMWRITE(SECTOR_COUNT, SECTOR: INTEGER;  ANYVAR BUFFER: INTEGER);
 SRC  PROCEDURE FLPYINIT(PTR: ANYPTR; I: SHORTINT);
 SRC  PROCEDURE SETINTLEVEL(LEVEL: INTEGER);
 SRC  FUNCTION  INTLEVEL:  INTEGER;
 SRC  PROCEDURE NEWWORDS(VAR P: ANYPTR; WORDSIZE: INTEGER);
 SRC  PROCEDURE USERPROGRAM (EXECLOC,INITSP: INTEGER);
 SRC  PROCEDURE SAPPEND(VAR DEST: STRING;SRC:STRINGMAX);
 SRC  FUNCTION IAND(A,B: INTEGER): INTEGER;
 SRC  FUNCTION IOR (A,B: INTEGER): INTEGER;
 SRC  PROCEDURE CI_SWITCH;
 SRC  PROCEDURE INITVECTS;
 SRC  PROCEDURE CPYMSG(MSG: STRING255);
 SRC  PROCEDURE NOBOOT;
 SRC  FUNCTION MEMAVAIL:INTEGER;
 SRC  FUNCTION TICKER:INTEGER;
 SRC  PROCEDURE CACHE_ON;
 SRC  PROCEDURE CACHE_OFF;
 SRC  PROCEDURE ICACHE_OFF;
 SRC  PROCEDURE ICACHE_ON;
 SRC  PROCEDURE FLUSH_ICACHE;
 SRC  PROCEDURE COPY_ON;
 SRC  PROCEDURE COPY_OFF;
 SRC  PROCEDURE ARM_COPYBACK;
 SRC  PROCEDURE DISARM_COPYBACK;
 SRC  PROCEDURE INV_CACHES;
 SRC  PROCEDURE CACHE_MODE(WS_MODE:BOOLEAN);
 SRC END;

	REFR    FS_FWRITESTRINT
	REFA    SYSGLOBALS,LOADER

ESCAPECODE      EQU SYSGLOBALS-2
RECOVERBLOCK    EQU SYSGLOBALS-10
HEAPPOINTER     EQU SYSGLOBALS-14
HEAPBASE        EQU SYSGLOBALS-18
IORESULT        EQU SYSGLOBALS-22
SYSDEFS         EQU LOADER-70             LINKED LIST OF PERMANT PROGRAMS

SYSFLAG2        EQU $FFFFFEDA             BOOT ROM FLAGS

SUPSTACKSPACE   EQU 8000        SPACE FOR SUPERVISOR STACK
STACKFUDGE      EQU 500         SLOP SPACE FOR STACK OVERFLOW CHECK

*       MAGIC NUMBERS, CONSULT 'POWERUP' LISTING, DEBUGGER and INITBUG  (rdq)
INITSTACK       EQU $FFFFFB70                                           (rdq)
INITPC          EQU INITSTACK+4                                         (rdq)
INITRECOVER     EQU INITPC+4                                            (rdq)
G_DOLLAR        EQU INITRECOVER+4                                       (rdq)
INITSR          EQU $FFFFFB96                                           (rdq)
M68KTYPE        EQU INITSR+2    PROCESSOR TYPE BYTE 0=68000,else 680xx  (rdq)
MSYSFLAGS       EQU M68KTYPE+1  MORE SYSFLAGS BIT 0 = CACHE PRESENT     (rdq)

LOWMEM          EQU $FFFFFDCE   BOOT ROM DEFINED ADDRESSES
HIGHMEM         EQU $FFFFFB00   LEAVES ROOM FOR VECTORS, MONITOR STUFF, ETC.
TRAP11          EQU $FFFFFF52
TRAP10          EQU $FFFFFF58
TRAP0           EQU $FFFFFF94

F_AREA          EQU $FFFFFED4   BOOTROM 3.0 MAGIC CONSTANTS TO    JS 9/12/83
REMOTE_ADDR     EQU $9A         ALLOW US TO TURN OFF INTERRUPTS   JS 9/12/83
R_INTLVL        EQU 3           IF BOOTING FROM REMOTE INTERFACE  JS 9/12/83
BOOT_ID         EQU $3FFE       CODE BY GREG LAWSON 8/29/83       JS 9/12/83
NO_CARD         EQU $800000                                       JS 9/12/83

CRTMSG          EQU $150
*CRTCLEAR        EQU $148       CAN'T USE DUE TO BOOT ROM BUG
SYSFLAG         EQU -302

JMP             EQU $4EF9
RETURN          EQU A4




LOWCODE EQU *                           LOWEST CODE LOCATION
HIGHCODE EQU *+$100000                  1 MEGABYTE MAX ROM AREA

	DC.B    $F0,$FF,'P',1           ROM HEADER
	DC.L    0,STARTRELOC-*          CHECKSUM, EXECUTION ADDRESS
	DC.B    0,0,0,0,0,0             IDENTIFICATION JUNK

*       RELOCATE A SYSTEM_P FILE LOADED AT THE WRONG ADDRESS BY
*       THE HP-UX BOOTER.  SETS HFSBFLG TO TRUE IF RELOCATION
*       WAS NECESSARY (IT'S NOT IF SYSTEM_P WAS LOADED DIRECTLY BY
*       THE BOOTROM).


* WARNING!!! NEXT TWO LINES EDITED BY TURNIT!!!!
CODESIZE EQU 22728
LOADADDRESS EQU -25000

STARTRELOC EQU  *
	LEA     BOOT_STACK,SP           FIXUP AFTER SECONDARY LOADER

	LEA     LOWCODE,A4              where has OS been loaded?
	LEA     LOADADDRESS,A5
	CMPA.L  A5,A4
	BEQ.S   CODE_IN_PLACE           loaded at proper address

	LEA     HFSBFLG,A0              must be relocated, so it's HFS
	MOVE.B  #1,(A0)

	MOVE.L  #CODESIZE,D0            copy backwards in case of overlap
	ADDA.L  D0,A4                   we will be copying to higher address
	ADDA.L  D0,A5
	BRA.S   MIDLOOP

MOVECODE EQU    *
	MOVE.B  -(A4),-(A5)
MIDLOOP DBRA    D0,MOVECODE

CODE_IN_PLACE EQU *
	JMP     INITLOAD_INITLOAD       OS is now at proper address, so start
*                                       execution

* FLAG TO TELL WHETHER WE BOOTED FROM HFS DISC
* 0 -> NO HFS BOOT, 1 -> HFS BOOT
HFSBFLG DC.W    0

******  ESTABLISH MINIMUM ENVIRONMENT FOR POWERUP LOAD OPERATIONS ********
* NOTE: INITLOAD_INITLOAD  FIRST INSTRUCTION IS JSR ASM_POWERUP
ASM_POWERUP     EQU *
	MOVEA.L (SP)+,RETURN
	LEA     LOWCODE,SP              SOFT SYSTEM STACK = JUST BELOW CODE
	CMPA.L  LOWMEM,SP               TEST FOR HARD OR SOFT SYSTEM
	BHI.S   SOFT                    SOFT IF SP > LOWMEM^
	LEA     HIGHMEM,SP              HARD SYSTEM STACK = HIGH MEMEMORY
SOFT    EQU *

	LEA     -SUPSTACKSPACE(SP),A5   ALLOCATE OPERATING SYSTEM STACK
	LEA     -32768(A5),A5           SYSTEM GLOBALS START AT 32766(A5)
	MOVE.L  A5,G_DOLLAR             SAVE FOR ISR's

	MOVE.L  LOWMEM,HEAPPOINTER(A5)  INITIALIZE HEAP

	CMPI.W  #3,BOOT_ID              3.0 BOOTROM ?         JS 9/12/83
	BNE.S   SKIP                    IF NOT THEN SKIP      JS 9/12/83
	MOVEA.L F_AREA,A0               GET STOLEN RAM PTR    JS 9/12/83
	MOVEA.L REMOTE_ADDR(A0),A0      SEE IF REMOTE BOOT    JS 9/12/83
	CMPA.L  #NO_CARD,A0                                   JS 9/12/83
	BEQ.S   SKIP                    IF NOT THEN SKIP      JS 9/12/83
	CLR.B   R_INTLVL(A0)            ELSE CLEAR INTERRUPTS JS 9/12/83

SKIP    BTST    #4,SYSFLAG2             CHECK FOR 68020               {3/25/85}
	BEQ.S   WHICHP                  IF NOT THEN SKIP              {3/25/85}
	MOVEQ   #0,D0                   ELSE BE SURE ICACHE IS OFF    {3/25/85}
	DC.W    $4E7B,$0002             MOVE D0,CACR                  {3/25/85}
	DC.W    $4E7B,$0002             **********  BUG KLUDGE        {3/25/85}
	BTST    #2,SYSFLAG2             TEST FOR 68030 SFB
	BEQ.S   WHICHP                  DON'T USE WINDOW REG FOR 68020 SFB
*=========================================================================
* Stuff between '========' lines unique to the '040. JWH 12/15/89.
	BTST    #3,SYSFLAG2             Check for '040
	BNE     JUST_30                 If not 0, same as before
	MOVE.L  #DTT0_ENABLE,D0         Ready to use new MOVEC
	DC.W    $4E7B,$0006             MOVEC D0,DTT0
	DC.W    $4E7B,$0006             MOVEC D0,DTT0
* Do the same for ITT0 - JWH 4/30/90
	DC.W    $4E7B,$0004             MOVEC D0,ITT0
	DC.W    $4E7B,$0004             MOVEC D0,ITT0
	BRA     WHICHP
*=========================================================================
* Except for the label on the next instruction, everything else is
* the same ..
*
JUST_30 MOVE.L  #TT0_ENABLE,-(SP)       DISABLE DATA CACHING FOR THE ADDRESS
*                                       RANGE $0 - $1FFFFFFF (ALL IO SPACE) SFB
	DC.L    $F0170800               OPCODE TO LOAD THE WINDOW REGISTER
*                                       FROM STACK (NO AUTO-INCREMENT) SFB
	ADDQ    #4,SP                   REMOVE CACHING WORD FROM STACK SFB

WHICHP  BSR     WHICH_PROCESSOR         FINDOUT IF 68000 OR OTHER       (rdq)
	CLR.B   MSYSFLAGS               ASSUME NO CACHES FOR NOW  JWS 3/27/85

	MOVE    #$2000,SR               ENABLE INTERRUPTS

	LEA     TRAP11,A0               SUPERVISOR CALL TRAP
	MOVE    #JMP,(A0)+
	LEA     SUPERCALL,A1
	MOVE.L  A1,(A0)+

*       LEA     TRAP10,A0               ESCAPE(N) TRAP
	MOVE    #JMP,(A0)+
	LEA     ESCN,A1
	MOVE.L  A1,(A0)+

	LEA     TRAP0,A0                COMPILED LINE TRAP
	MOVE    #JMP,(A0)+
	LEA     P_BREAK,A1
	MOVE.L  A1,(A0)+

	JMP     (RETURN)                ALL DONE

ASM_ASM RTS                     ASM MODULE 'BODY'

*****************  TEMPORARY TRAP 10 HANDLER *********************************
ESCN    MOVEA.L RECOVERBLOCK(A5),SP
	RTS

********(rdq)****  PERMANENT TRAP 11 HANDLER *********************************
SUPERCALL EQU *                 TRAP #11, GETS INTO SUPERVISOR MODE, SAVES SR
	TST.B   M68KTYPE
	BNE.S   SUPERCALL_1
	MOVE.W  (SP),-(SP)      MOVE STATUS REGISTER DOWN
	MOVE.L  4(SP),2(SP)     MOVE RETURN ADDRESS DOWN
SUPERCALL_1 EQU *
	MOVE.W  (SP)+,4(SP)     MOVE STATUS REGISTER UP
	RTS                     RETURN TO CALLER IN SUPERVISOR MODE

*****************  TEMPORARY TRAP 0 HANDLER, DISCARDS LINE NO.s *************
P_BREAK ADDQ.L  #2,2(SP)
	RTE

*****************  FINISH ENVIRONMENT SETUP THEN CALL USER PROGRAM **********
ASM_USERPROGRAM EQU     *       PROC USERPROGRAM(ENTRYPOINT,INITSTACK:INTEGER)
	MOVEA.L (SP)+,A3        RETURN ADDRESS
	MOVEA.L (SP)+,A0        INITIAL SP
	MOVEA.L (SP)+,A1        INITIAL PC
	MOVE.L  A3,-(SP)        RESTORE RETURN

	LEA     -STACKFUDGE(A0),A2
	CMPA.L  HEAPPOINTER(A5),A2      COMPARE
	BHI.S   *+4                     TEST
	TRAP    #2                      STACK OVERFLOW

	MOVE.L  RECOVERBLOCK(A5),-(SP)  TRY
	MOVE.L  A6,-(SP)                SAVE A6
	PEA     USER_RECOVER            RECOVER CODE
	MOVE.L  SP,RECOVERBLOCK(A5)

	MOVE.L  SP,INITRECOVER  SAVE FOR DEBUGGER
	MOVE.L  A1,INITPC       SAVE FOR DEBUGGER

	LEA     (A5),A6         FRAME POINTER
	MOVE    A0,USP          SET UP STACK
	MOVE    #$0000,SR       GO INTO USER MODE

	LEA     -8(SP),A2       SPACE FOR RETURN ADDRESS, DYNAMIC LINK
	MOVE.L  A2,INITSTACK    SAVE NON-LOCAL GOTO
	CLR.W   INITSR          FAKE SR FOR STOP KEY                    (rdq)
	CLR.L   HEAPBASE(A5)    FOR MEMORY MANAGER

	JSR     ASM_FLUSH_ICACHE  MAKE SURE ICACHE IS CLEAN      {3/25/85}
	jsr     asm_copy_on     affects 68040 only JWH 2/11/91
	JSR     (A1)            CALL USER PROGRAM

	jsr     asm_copy_off    affects 68040 only JWH 2/11/91

	CLR.W   ESCAPECODE(A5)  NORMAL EXIT
	TRAP    #10             ESCAPE(0), DONE TO CLOSE FILES

USER_RECOVER    EQU *
	jsr     asm_copy_off    affects 68040 only JWH 2/11/91
	MOVEA.L (SP)+,A6        RESTORE A6
	MOVE.L  (SP)+,RECOVERBLOCK(A5)  RESTORE RECOVER BLOCK
	MOVEA.L SP,A0           SAVE STACK POINTER
	TRAP    #11             GET INTO SUPERVISOR MODE
	MOVEA.L A0,SP           RESTORE STACK POINTER
	RTS

*****************  SWITCH TO SUPERVISOR MODE & STACK ************************
ASM_CI_SWITCH EQU *
	MOVEA.L (SP)+,A0        RETURN ADDRESS
	TRAP    #11             GET ONTO SUPERVISOR STACK
	ADDQ    #2,SP           DISCARD SR
	JMP     (A0)            DONE

*****************  HOOK ROM'D MODULES INTO SYSDEFS **************************
K16     EQU     $4000           16 K INCREMENTS
MDLINK  EQU     18              OFFSET OF MODULE DESCRIPTOR
MDSIZE  EQU     40              SIZE OF DESCRIPTOR
ASM_FINDROMS EQU *
	LEA     $20000,A0              BEGINNING OF SEARCH AREA
	MOVEA.L HEAPPOINTER(A5),A1      HEAP START
	MOVE.L  SYSDEFS(A5),D0          LINKED LIST HEAD
SEARCH  CMPI.L  #$F0FF5080,(A0)         PASCAL OPTION?
	BNE.S   NOROM                   NO MATCH
	LEA     MDLINK(A0),A2           LOCATE DESCRIPTOR

COPY    MOVEM.L 4(A2),D1-D7/A3-A4       REMAINDER OF MDB
	MOVEM.L D0-D7/A3-A4,(A1)        COPY ONTO HEAP
	MOVE.L  A1,D0                   INSERT LINK INTO LIST
	ADDA.L  #MDSIZE,A1              ALLOCATE FROM HEAP
	MOVE.L  A1,HEAPPOINTER(A5)      RESTORE HEAP
	MOVE.L  D0,SYSDEFS(A5)          RESTORE LIST

	MOVEA.L (A2),A2         MOVE DOWN CHAIN
	MOVE.L  A2,D1           TEST FOR NIL
	BNE.S   COPY            NOT END OF CHAIN
NOROM   ADDA.W  #K16,A0         NEXT ROM BOUNDARY
	CMPA.L  #$200000,A0     END OF ROM AREA?
	BNE.S   SEARCH          NOPE
FINDXIT RTS

******************** IAND AND IOR ***************************
ASM_IAND MOVEA.L (SP)+,A0
	MOVE.L  (SP)+,D0
	AND.L   (SP)+,D0
	MOVE.L  D0,(SP)
	JMP     (A0)

ASM_IOR MOVEA.L (SP)+,A0
	MOVE.L  (SP)+,D0
	OR.L    (SP)+,D0
	MOVE.L  D0,(SP)
	JMP     (A0)

*****************  CRT CLEAR ROUTINE ****************************************
CRTCLEAR        EQU *
	LINK    A6,#-82
	LEA     (SP),A0
	MOVEQ   #79,D0
	BTST    #0,SYSFLAG      TEST FOR 50 CHAR SCREEN
	BEQ.S   LC1
	MOVEQ   #49,D0
LC1     MOVE.B  #' ',(A0)+
	DBRA    D0,LC1
	CLR.B   (A0)
	CLR.B   -1(A6)
LC2     LEA     (SP),A0
	CLR     D0
	MOVE.B  -1(A6),D0
	JSR     CRTMSG
	ADDQ.B  #1,-1(A6)
	CMPI.B  #24,-1(A6)
	BNE.S   LC2
	UNLK    A6
	RTS

*****************   CANNOT BOOT FROM HFS **************************
ASM_NOBOOT      EQU     *
	JSR     CRTCLEAR
	MOVEQ   #0,D0
	LEA     M2,A0
	JSR     CRTMSG
	BRA.S   *

*****************  INTRODUCTORY MESSAGE ROUTINE  ****************************
ASM_CPYMSG      EQU *
	JSR     CRTCLEAR
	MOVEQ   #0,D0
	LEA     M,A0                    COPYRIGHT NOTICE
	JSR     CRTMSG
	MOVEQ   #2,D0
	MOVEA.L (SP)+,A1
	MOVEA.L (SP)+,A0
	CLR     D1
	MOVE.B  (A0)+,D1
	CLR.B   0(A0,D1)
	MOVE.L  A1,-(SP)
	JSR     CRTMSG
	RTS

*****************  PRIMITIVE ERROR MESSAGE ROUTINE  *************************
STR     EQU -86
I       EQU -4

INT     CLR.L   D1
	MOVE.B  STR(A6),D1
	ADDQ.L  #1,D1
	MOVE.L  D1,I(A6)
	MOVE.B  #80,-(SP)
	PEA     STR(A6)
	PEA     I(A6)
	MOVE.L  D0,-(SP)
	MOVE.W  #-1,-(SP)
	JSR     FS_FWRITESTRINT
	RTS

ASM_ERRMSG  EQU *
	TRAP    #11
	LINK    A6,#STR
	JSR     CRTCLEAR
	MOVEM.L M1,D1-D5
	MOVEM.L D1-D5,STR(A6)
	MOVE.L  IORESULT(A5),D0
	BSR.S   INT
	MOVE.W  ESCAPECODE(A5),D0
	EXT.L   D0
	BSR.S   INT
	CLR.L   D0
	LEA     STR(A6),A0
	CLR     D1
	MOVE.B  (A0),D1
	CLR.B   1(A0,D1)
	ADDQ    #1,A0
	JSR     CRTMSG

	MOVEQ   #28,D0
L       DBRA    D1,L
	DBRA    D0,L

	UNLK    A6
	MOVE    (SP)+,SR
	RTS

******(rdq)******  FIND OUT WHICH PROCESSOR NOW RUNNING **********************
WHICH_PROCESSOR EQU *
	LEA     TRAP11,A0       SETUP TRAP11
	MOVE.W  #JMP,(A0)+      THIS SETUP WILL BE DISCARDED
	MOVE.L  #TRAP_SERV,(A0)
	MOVE.L  SP,D0           SAVE STACK LOCATION
	TRAP    #11             FIND OUT HOW MANY BYTES PUSHED ON STACK
	SUBQ.L  #6,D0
	SNE     M68KTYPE        =0 is 68000 <>0 is 680xx
	RTS
TRAP_SERV       EQU *
	SUB.L   SP,D0
	RTE

*******************  ICACHE MANAGEMENT ROUTINES  ****************************
*
*          3/25/85 BY JWS
*
* This (ICACHE_OFF) also works for the '040 JWH 12/18/89
*
ASM_ICACHE_OFF EQU *
	BTST    #4,SYSFLAG2     CHECK FOR 68020
	BEQ.S   ICACHE_RET      IF NOT THEN RETURN
	TRAP    #11             BE SURE WE ARE IN SUPERVISOR MODE
	MOVE.L  D0,-(SP)        SAVE A REGISTER
	MOVEQ   #0,D0
ICACHE1 DC.W    $4E7B,$0002     MOVE D0,CACR
	DC.W    $4E7B,$0002     ***** FOR 68020 BUG
	MOVE.L  (SP)+,D0        RESTORE REGS
	MOVE    (SP)+,SR        RESTORE SR
ICACHE_RET RTS
*
*
* This one (ICACHE_ON) required a slight mod 12/18/89 JWH
*
ASM_ICACHE_ON EQU *
	BTST    #4,SYSFLAG2     CHECK FOR 68020
	BEQ     ICACHE_RET      IF NOT THEN RETURN
	BTST    #3,SYSFLAG2     Check for 68040
	BEQ     DO_40           Bit 3 =0 means '040, otherwise not
	TRAP    #11             GOTO SUPERVISOR MODE
	MOVE.L  D0,-(SP)
	MOVE.W  #$3919,D0       SET ENABLE AND CLEAR BITS (TURN ON D-CACHE
*                               ENABLE WRITE ALLOCATE, AND BURST MODE FOR
*                               68030. SFB/RDQ/DD)
	BRA     ICACHE1
*==========================================================================
* Stuff between the '=========' lines was added for '040 support.
* JWH 12/15/89.
DO_40   TRAP    #11             GOTO SUPERVISOR MODE
	MOVE.L  D0,-(SP)
	MOVE.L  #$80008000,D0   Turn on both, 68040 CACR
	DC.W    $F4D8           CINVA  DC/IC - invalidate all cache entries
	BRA     ICACHE1         Turn em on
*==========================================================================
*
*
* FLUSH_ICACHE modified slightly for the '040 case. We now have the
* CPUSHA instruction to help us.  JWH 12/18/89.
*
ASM_FLUSH_ICACHE EQU *
	BTST    #4,SYSFLAG2     CHECK FOR 68020
	BEQ     ICACHE_RET      RET IF NOT
	BTST    #3,SYSFLAG2     Check for '040
	BEQ     DO_40F
	TRAP    #11             SUPERVISOR STATE
	MOVE.L  D0,-(SP)
	DC.W    $4E7A,$0002     MOVE CACR,D0
	OR.W    #$808,D0        SET CLEAR BIT (ALSO CLEAR 68030 D-CACHE.
*                               SFB/RDQ/DD)
	BRA     ICACHE1
DO_40F  TRAP    #11             supervisor state
*       CPUSHA  DC/IC : flush and invalidate all cache entries
	DC.W    $F4F8
	MOVE    (SP)+,SR        RESTORE SR
	BRA     ICACHE_RET
* Added for '040 support : marks all cache entries invalid but
* does not flush the d-cache :
*ASM_INV_CACHES     EQU     *
*       btst   #3,SYSFLAG2
*       bne    done_inv
*       trap   #11        got an '040
*       cinva  DC/IC      invalidate not push
*       move   (SP)+,SR
*done_inv  rts
* Added for '040 support : turn on copyback mode for user writes
* in non-IO space, or turn it off.
ASM_ARM_COPYBACK EQU   *
	BTST #3,SYSFLAG2
	BNE not_a_40
	MOVE.L #$1FFFC020,ARM_VALUE
	RTS
ASM_DISARM_COPYBACK EQU   *
	BTST #3,SYSFLAG2
	BNE not_a_40
	MOVE.L #0,ARM_VALUE
	RTS
ASM_COPY_ON    EQU   *
	btst  #3,SYSFLAG2
	bne   not_a_40
	trap  #11
	move.l d0,-(SP)
	move.l ARM_VALUE,d0
	movec  d0,DTT1
	move.l (SP)+,d0
	move   (SP)+,SR
not_a_40   rts
ASM_COPY_OFF   equ   *
	btst   #3,SYSFLAG2
	bne    not_a_40
	trap   #11
	move.l  d0,-(SP)
	move.l  #0,d0
	CPUSHA  DC/IC        start fresh
	movec  d0,DTT1
	move.l (SP)+,d0
	move   (SP)+,SR
	rts
ARM_VALUE  DC.L $00000000   GOES IN DTT1
*-----------------------------------------------------------
M       DC.B    'Copyright Hewlett-Packard Company, 1982, 1991.',0
M1      DC.B    18,'IORESULT, ERROR = '
M2      DC.B    'This system file cannot boot from an HFS disc.',0

	NOSYMS
	END


@


54.3
log
@
pws2rcs automatic delta on Wed Aug 21 10:27:27 MDT 1991
@
text
@@


54.2
log
@
pws2rcs automatic delta on Wed Aug 21 09:35:48 MDT 1991
@
text
@d1 560
@


54.1
log
@Automatic bump of revision number for PWS version 3.24
@
text
@a0 560
*
* CHANGES MADE FOR REV 3.0 AUG 83  rdq
*
	MNAME   ASM
	SPRINT

	DEF     ASM_ASM,ASM_POWERUP,ASM_ERRMSG,G_DOLLAR,STACKFUDGE
	DEF     ASM_USERPROGRAM,ASM_CI_SWITCH,ASM_FINDROMS,ASM_CPYMSG
	DEF     ASM_ICACHE_ON,ASM_ICACHE_OFF,ASM_FLUSH_ICACHE              {3/35/85}
*       DEF     ASM_INV_CACHES          9/24/90 JWH
	DEF     ASM_COPY_ON,ASM_COPY_OFF  9/25/90 JWH
	DEF     ASM_ARM_COPYBACK,ASM_DISARM_COPYBACK 2/17/91 JWH
	DEF     M68KTYPE,MSYSFLAGS                                      (rdq)
	DEF     HFSBFLG,LOWCODE,ASM_NOBOOT
	DEF     ASM_IAND,ASM_IOR
	LMODE   INITLOAD_INITLOAD
	LMODE   ARM_VALUE
	REFA    INITLOAD_INITLOAD
	INCLUDE ASM_SYMS.TEXT

 SRC MODULE ASM;
 SRC IMPORT SYSGLOBALS;
 SRC EXPORT
 SRC TYPE
 SRC STRINGMAX = STRING[255];
 SRC  PROCEDURE MOVELEFT (ANYVAR S,D: INTEGER; Z:INTEGER);
 SRC  PROCEDURE MOVERIGHT(ANYVAR S,D: INTEGER; Z:INTEGER);
 SRC  PROCEDURE FASTMOVE (       S,D: ANYPTR;  Z:INTEGER);
 SRC  PROCEDURE NEWBYTES(VAR P: ANYPTR;        Z:INTEGER);
 SRC  PROCEDURE POWERUP;
 SRC  PROCEDURE ERRMSG;
 SRC  PROCEDURE FINDROMS;
 SRC  PROCEDURE F_PWR_ON;
 SRC  PROCEDURE FLPYREAD(SECTOR: INTEGER;  ANYVAR BUFFER: INTEGER);
 SRC  PROCEDURE FLPY_WRT(SECTOR: INTEGER;  ANYVAR BUFFER: INTEGER);
 SRC  PROCEDURE FLPYMREAD(SECTOR_COUNT, SECTOR: INTEGER;  ANYVAR BUFFER: INTEGER);
 SRC  PROCEDURE FLPYMWRITE(SECTOR_COUNT, SECTOR: INTEGER;  ANYVAR BUFFER: INTEGER);
 SRC  PROCEDURE FLPYINIT(PTR: ANYPTR; I: SHORTINT);
 SRC  PROCEDURE SETINTLEVEL(LEVEL: INTEGER);
 SRC  FUNCTION  INTLEVEL:  INTEGER;
 SRC  PROCEDURE NEWWORDS(VAR P: ANYPTR; WORDSIZE: INTEGER);
 SRC  PROCEDURE USERPROGRAM (EXECLOC,INITSP: INTEGER);
 SRC  PROCEDURE SAPPEND(VAR DEST: STRING;SRC:STRINGMAX);
 SRC  FUNCTION IAND(A,B: INTEGER): INTEGER;
 SRC  FUNCTION IOR (A,B: INTEGER): INTEGER;
 SRC  PROCEDURE CI_SWITCH;
 SRC  PROCEDURE INITVECTS;
 SRC  PROCEDURE CPYMSG(MSG: STRING255);
 SRC  PROCEDURE NOBOOT;
 SRC  FUNCTION MEMAVAIL:INTEGER;
 SRC  FUNCTION TICKER:INTEGER;
 SRC  PROCEDURE CACHE_ON;
 SRC  PROCEDURE CACHE_OFF;
 SRC  PROCEDURE ICACHE_OFF;
 SRC  PROCEDURE ICACHE_ON;
 SRC  PROCEDURE FLUSH_ICACHE;
 SRC  PROCEDURE COPY_ON;
 SRC  PROCEDURE COPY_OFF;
 SRC  PROCEDURE ARM_COPYBACK;
 SRC  PROCEDURE DISARM_COPYBACK;
 SRC  PROCEDURE INV_CACHES;
 SRC  PROCEDURE CACHE_MODE(WS_MODE:BOOLEAN);
 SRC END;

	REFR    FS_FWRITESTRINT
	REFA    SYSGLOBALS,LOADER

ESCAPECODE      EQU SYSGLOBALS-2
RECOVERBLOCK    EQU SYSGLOBALS-10
HEAPPOINTER     EQU SYSGLOBALS-14
HEAPBASE        EQU SYSGLOBALS-18
IORESULT        EQU SYSGLOBALS-22
SYSDEFS         EQU LOADER-70             LINKED LIST OF PERMANT PROGRAMS

SYSFLAG2        EQU $FFFFFEDA             BOOT ROM FLAGS

SUPSTACKSPACE   EQU 8000        SPACE FOR SUPERVISOR STACK
STACKFUDGE      EQU 500         SLOP SPACE FOR STACK OVERFLOW CHECK

*       MAGIC NUMBERS, CONSULT 'POWERUP' LISTING, DEBUGGER and INITBUG  (rdq)
INITSTACK       EQU $FFFFFB70                                           (rdq)
INITPC          EQU INITSTACK+4                                         (rdq)
INITRECOVER     EQU INITPC+4                                            (rdq)
G_DOLLAR        EQU INITRECOVER+4                                       (rdq)
INITSR          EQU $FFFFFB96                                           (rdq)
M68KTYPE        EQU INITSR+2    PROCESSOR TYPE BYTE 0=68000,else 680xx  (rdq)
MSYSFLAGS       EQU M68KTYPE+1  MORE SYSFLAGS BIT 0 = CACHE PRESENT     (rdq)

LOWMEM          EQU $FFFFFDCE   BOOT ROM DEFINED ADDRESSES
HIGHMEM         EQU $FFFFFB00   LEAVES ROOM FOR VECTORS, MONITOR STUFF, ETC.
TRAP11          EQU $FFFFFF52
TRAP10          EQU $FFFFFF58
TRAP0           EQU $FFFFFF94

F_AREA          EQU $FFFFFED4   BOOTROM 3.0 MAGIC CONSTANTS TO    JS 9/12/83
REMOTE_ADDR     EQU $9A         ALLOW US TO TURN OFF INTERRUPTS   JS 9/12/83
R_INTLVL        EQU 3           IF BOOTING FROM REMOTE INTERFACE  JS 9/12/83
BOOT_ID         EQU $3FFE       CODE BY GREG LAWSON 8/29/83       JS 9/12/83
NO_CARD         EQU $800000                                       JS 9/12/83

CRTMSG          EQU $150
*CRTCLEAR        EQU $148       CAN'T USE DUE TO BOOT ROM BUG
SYSFLAG         EQU -302

JMP             EQU $4EF9
RETURN          EQU A4




LOWCODE EQU *                           LOWEST CODE LOCATION
HIGHCODE EQU *+$100000                  1 MEGABYTE MAX ROM AREA

	DC.B    $F0,$FF,'P',1           ROM HEADER
	DC.L    0,STARTRELOC-*          CHECKSUM, EXECUTION ADDRESS
	DC.B    0,0,0,0,0,0             IDENTIFICATION JUNK

*       RELOCATE A SYSTEM_P FILE LOADED AT THE WRONG ADDRESS BY
*       THE HP-UX BOOTER.  SETS HFSBFLG TO TRUE IF RELOCATION
*       WAS NECESSARY (IT'S NOT IF SYSTEM_P WAS LOADED DIRECTLY BY
*       THE BOOTROM).


* WARNING!!! NEXT TWO LINES EDITED BY TURNIT!!!!
CODESIZE EQU 18824
LOADADDRESS EQU -20500

STARTRELOC EQU  *
	LEA     BOOT_STACK,SP           FIXUP AFTER SECONDARY LOADER

	LEA     LOWCODE,A4              where has OS been loaded?
	LEA     LOADADDRESS,A5
	CMPA.L  A5,A4
	BEQ.S   CODE_IN_PLACE           loaded at proper address

	LEA     HFSBFLG,A0              must be relocated, so it's HFS
	MOVE.B  #1,(A0)

	MOVE.L  #CODESIZE,D0            copy backwards in case of overlap
	ADDA.L  D0,A4                   we will be copying to higher address
	ADDA.L  D0,A5
	BRA.S   MIDLOOP

MOVECODE EQU    *
	MOVE.B  -(A4),-(A5)
MIDLOOP DBRA    D0,MOVECODE

CODE_IN_PLACE EQU *
	JMP     INITLOAD_INITLOAD       OS is now at proper address, so start
*                                       execution

* FLAG TO TELL WHETHER WE BOOTED FROM HFS DISC
* 0 -> NO HFS BOOT, 1 -> HFS BOOT
HFSBFLG DC.W    0

******  ESTABLISH MINIMUM ENVIRONMENT FOR POWERUP LOAD OPERATIONS ********
* NOTE: INITLOAD_INITLOAD  FIRST INSTRUCTION IS JSR ASM_POWERUP
ASM_POWERUP     EQU *
	MOVEA.L (SP)+,RETURN
	LEA     LOWCODE,SP              SOFT SYSTEM STACK = JUST BELOW CODE
	CMPA.L  LOWMEM,SP               TEST FOR HARD OR SOFT SYSTEM
	BHI.S   SOFT                    SOFT IF SP > LOWMEM^
	LEA     HIGHMEM,SP              HARD SYSTEM STACK = HIGH MEMEMORY
SOFT    EQU *

	LEA     -SUPSTACKSPACE(SP),A5   ALLOCATE OPERATING SYSTEM STACK
	LEA     -32768(A5),A5           SYSTEM GLOBALS START AT 32766(A5)
	MOVE.L  A5,G_DOLLAR             SAVE FOR ISR's

	MOVE.L  LOWMEM,HEAPPOINTER(A5)  INITIALIZE HEAP

	CMPI.W  #3,BOOT_ID              3.0 BOOTROM ?         JS 9/12/83
	BNE.S   SKIP                    IF NOT THEN SKIP      JS 9/12/83
	MOVEA.L F_AREA,A0               GET STOLEN RAM PTR    JS 9/12/83
	MOVEA.L REMOTE_ADDR(A0),A0      SEE IF REMOTE BOOT    JS 9/12/83
	CMPA.L  #NO_CARD,A0                                   JS 9/12/83
	BEQ.S   SKIP                    IF NOT THEN SKIP      JS 9/12/83
	CLR.B   R_INTLVL(A0)            ELSE CLEAR INTERRUPTS JS 9/12/83

SKIP    BTST    #4,SYSFLAG2             CHECK FOR 68020               {3/25/85}
	BEQ.S   WHICHP                  IF NOT THEN SKIP              {3/25/85}
	MOVEQ   #0,D0                   ELSE BE SURE ICACHE IS OFF    {3/25/85}
	DC.W    $4E7B,$0002             MOVE D0,CACR                  {3/25/85}
	DC.W    $4E7B,$0002             **********  BUG KLUDGE        {3/25/85}
	BTST    #2,SYSFLAG2             TEST FOR 68030 SFB
	BEQ.S   WHICHP                  DON'T USE WINDOW REG FOR 68020 SFB
*=========================================================================
* Stuff between '========' lines unique to the '040. JWH 12/15/89.
	BTST    #3,SYSFLAG2             Check for '040
	BNE     JUST_30                 If not 0, same as before
	MOVE.L  #DTT0_ENABLE,D0         Ready to use new MOVEC
	DC.W    $4E7B,$0006             MOVEC D0,DTT0
	DC.W    $4E7B,$0006             MOVEC D0,DTT0
* Do the same for ITT0 - JWH 4/30/90
	DC.W    $4E7B,$0004             MOVEC D0,ITT0
	DC.W    $4E7B,$0004             MOVEC D0,ITT0
	BRA     WHICHP
*=========================================================================
* Except for the label on the next instruction, everything else is
* the same ..
*
JUST_30 MOVE.L  #TT0_ENABLE,-(SP)       DISABLE DATA CACHING FOR THE ADDRESS
*                                       RANGE $0 - $1FFFFFFF (ALL IO SPACE) SFB
	DC.L    $F0170800               OPCODE TO LOAD THE WINDOW REGISTER
*                                       FROM STACK (NO AUTO-INCREMENT) SFB
	ADDQ    #4,SP                   REMOVE CACHING WORD FROM STACK SFB

WHICHP  BSR     WHICH_PROCESSOR         FINDOUT IF 68000 OR OTHER       (rdq)
	CLR.B   MSYSFLAGS               ASSUME NO CACHES FOR NOW  JWS 3/27/85

	MOVE    #$2000,SR               ENABLE INTERRUPTS

	LEA     TRAP11,A0               SUPERVISOR CALL TRAP
	MOVE    #JMP,(A0)+
	LEA     SUPERCALL,A1
	MOVE.L  A1,(A0)+

*       LEA     TRAP10,A0               ESCAPE(N) TRAP
	MOVE    #JMP,(A0)+
	LEA     ESCN,A1
	MOVE.L  A1,(A0)+

	LEA     TRAP0,A0                COMPILED LINE TRAP
	MOVE    #JMP,(A0)+
	LEA     P_BREAK,A1
	MOVE.L  A1,(A0)+

	JMP     (RETURN)                ALL DONE

ASM_ASM RTS                     ASM MODULE 'BODY'

*****************  TEMPORARY TRAP 10 HANDLER *********************************
ESCN    MOVEA.L RECOVERBLOCK(A5),SP
	RTS

********(rdq)****  PERMANENT TRAP 11 HANDLER *********************************
SUPERCALL EQU *                 TRAP #11, GETS INTO SUPERVISOR MODE, SAVES SR
	TST.B   M68KTYPE
	BNE.S   SUPERCALL_1
	MOVE.W  (SP),-(SP)      MOVE STATUS REGISTER DOWN
	MOVE.L  4(SP),2(SP)     MOVE RETURN ADDRESS DOWN
SUPERCALL_1 EQU *
	MOVE.W  (SP)+,4(SP)     MOVE STATUS REGISTER UP
	RTS                     RETURN TO CALLER IN SUPERVISOR MODE

*****************  TEMPORARY TRAP 0 HANDLER, DISCARDS LINE NO.s *************
P_BREAK ADDQ.L  #2,2(SP)
	RTE

*****************  FINISH ENVIRONMENT SETUP THEN CALL USER PROGRAM **********
ASM_USERPROGRAM EQU     *       PROC USERPROGRAM(ENTRYPOINT,INITSTACK:INTEGER)
	MOVEA.L (SP)+,A3        RETURN ADDRESS
	MOVEA.L (SP)+,A0        INITIAL SP
	MOVEA.L (SP)+,A1        INITIAL PC
	MOVE.L  A3,-(SP)        RESTORE RETURN

	LEA     -STACKFUDGE(A0),A2
	CMPA.L  HEAPPOINTER(A5),A2      COMPARE
	BHI.S   *+4                     TEST
	TRAP    #2                      STACK OVERFLOW

	MOVE.L  RECOVERBLOCK(A5),-(SP)  TRY
	MOVE.L  A6,-(SP)                SAVE A6
	PEA     USER_RECOVER            RECOVER CODE
	MOVE.L  SP,RECOVERBLOCK(A5)

	MOVE.L  SP,INITRECOVER  SAVE FOR DEBUGGER
	MOVE.L  A1,INITPC       SAVE FOR DEBUGGER

	LEA     (A5),A6         FRAME POINTER
	MOVE    A0,USP          SET UP STACK
	MOVE    #$0000,SR       GO INTO USER MODE

	LEA     -8(SP),A2       SPACE FOR RETURN ADDRESS, DYNAMIC LINK
	MOVE.L  A2,INITSTACK    SAVE NON-LOCAL GOTO
	CLR.W   INITSR          FAKE SR FOR STOP KEY                    (rdq)
	CLR.L   HEAPBASE(A5)    FOR MEMORY MANAGER

	JSR     ASM_FLUSH_ICACHE  MAKE SURE ICACHE IS CLEAN      {3/25/85}
	jsr     asm_copy_on     affects 68040 only JWH 2/11/91
	JSR     (A1)            CALL USER PROGRAM

	jsr     asm_copy_off    affects 68040 only JWH 2/11/91

	CLR.W   ESCAPECODE(A5)  NORMAL EXIT
	TRAP    #10             ESCAPE(0), DONE TO CLOSE FILES

USER_RECOVER    EQU *
	jsr     asm_copy_off    affects 68040 only JWH 2/11/91
	MOVEA.L (SP)+,A6        RESTORE A6
	MOVE.L  (SP)+,RECOVERBLOCK(A5)  RESTORE RECOVER BLOCK
	MOVEA.L SP,A0           SAVE STACK POINTER
	TRAP    #11             GET INTO SUPERVISOR MODE
	MOVEA.L A0,SP           RESTORE STACK POINTER
	RTS

*****************  SWITCH TO SUPERVISOR MODE & STACK ************************
ASM_CI_SWITCH EQU *
	MOVEA.L (SP)+,A0        RETURN ADDRESS
	TRAP    #11             GET ONTO SUPERVISOR STACK
	ADDQ    #2,SP           DISCARD SR
	JMP     (A0)            DONE

*****************  HOOK ROM'D MODULES INTO SYSDEFS **************************
K16     EQU     $4000           16 K INCREMENTS
MDLINK  EQU     18              OFFSET OF MODULE DESCRIPTOR
MDSIZE  EQU     40              SIZE OF DESCRIPTOR
ASM_FINDROMS EQU *
	LEA     $20000,A0              BEGINNING OF SEARCH AREA
	MOVEA.L HEAPPOINTER(A5),A1      HEAP START
	MOVE.L  SYSDEFS(A5),D0          LINKED LIST HEAD
SEARCH  CMPI.L  #$F0FF5080,(A0)         PASCAL OPTION?
	BNE.S   NOROM                   NO MATCH
	LEA     MDLINK(A0),A2           LOCATE DESCRIPTOR

COPY    MOVEM.L 4(A2),D1-D7/A3-A4       REMAINDER OF MDB
	MOVEM.L D0-D7/A3-A4,(A1)        COPY ONTO HEAP
	MOVE.L  A1,D0                   INSERT LINK INTO LIST
	ADDA.L  #MDSIZE,A1              ALLOCATE FROM HEAP
	MOVE.L  A1,HEAPPOINTER(A5)      RESTORE HEAP
	MOVE.L  D0,SYSDEFS(A5)          RESTORE LIST

	MOVEA.L (A2),A2         MOVE DOWN CHAIN
	MOVE.L  A2,D1           TEST FOR NIL
	BNE.S   COPY            NOT END OF CHAIN
NOROM   ADDA.W  #K16,A0         NEXT ROM BOUNDARY
	CMPA.L  #$200000,A0     END OF ROM AREA?
	BNE.S   SEARCH          NOPE
FINDXIT RTS

******************** IAND AND IOR ***************************
ASM_IAND MOVEA.L (SP)+,A0
	MOVE.L  (SP)+,D0
	AND.L   (SP)+,D0
	MOVE.L  D0,(SP)
	JMP     (A0)

ASM_IOR MOVEA.L (SP)+,A0
	MOVE.L  (SP)+,D0
	OR.L    (SP)+,D0
	MOVE.L  D0,(SP)
	JMP     (A0)

*****************  CRT CLEAR ROUTINE ****************************************
CRTCLEAR        EQU *
	LINK    A6,#-82
	LEA     (SP),A0
	MOVEQ   #79,D0
	BTST    #0,SYSFLAG      TEST FOR 50 CHAR SCREEN
	BEQ.S   LC1
	MOVEQ   #49,D0
LC1     MOVE.B  #' ',(A0)+
	DBRA    D0,LC1
	CLR.B   (A0)
	CLR.B   -1(A6)
LC2     LEA     (SP),A0
	CLR     D0
	MOVE.B  -1(A6),D0
	JSR     CRTMSG
	ADDQ.B  #1,-1(A6)
	CMPI.B  #24,-1(A6)
	BNE.S   LC2
	UNLK    A6
	RTS

*****************   CANNOT BOOT FROM HFS **************************
ASM_NOBOOT      EQU     *
	JSR     CRTCLEAR
	MOVEQ   #0,D0
	LEA     M2,A0
	JSR     CRTMSG
	BRA.S   *

*****************  INTRODUCTORY MESSAGE ROUTINE  ****************************
ASM_CPYMSG      EQU *
	JSR     CRTCLEAR
	MOVEQ   #0,D0
	LEA     M,A0                    COPYRIGHT NOTICE
	JSR     CRTMSG
	MOVEQ   #2,D0
	MOVEA.L (SP)+,A1
	MOVEA.L (SP)+,A0
	CLR     D1
	MOVE.B  (A0)+,D1
	CLR.B   0(A0,D1)
	MOVE.L  A1,-(SP)
	JSR     CRTMSG
	RTS

*****************  PRIMITIVE ERROR MESSAGE ROUTINE  *************************
STR     EQU -86
I       EQU -4

INT     CLR.L   D1
	MOVE.B  STR(A6),D1
	ADDQ.L  #1,D1
	MOVE.L  D1,I(A6)
	MOVE.B  #80,-(SP)
	PEA     STR(A6)
	PEA     I(A6)
	MOVE.L  D0,-(SP)
	MOVE.W  #-1,-(SP)
	JSR     FS_FWRITESTRINT
	RTS

ASM_ERRMSG  EQU *
	TRAP    #11
	LINK    A6,#STR
	JSR     CRTCLEAR
	MOVEM.L M1,D1-D5
	MOVEM.L D1-D5,STR(A6)
	MOVE.L  IORESULT(A5),D0
	BSR.S   INT
	MOVE.W  ESCAPECODE(A5),D0
	EXT.L   D0
	BSR.S   INT
	CLR.L   D0
	LEA     STR(A6),A0
	CLR     D1
	MOVE.B  (A0),D1
	CLR.B   1(A0,D1)
	ADDQ    #1,A0
	JSR     CRTMSG

	MOVEQ   #28,D0
L       DBRA    D1,L
	DBRA    D0,L

	UNLK    A6
	MOVE    (SP)+,SR
	RTS

******(rdq)******  FIND OUT WHICH PROCESSOR NOW RUNNING **********************
WHICH_PROCESSOR EQU *
	LEA     TRAP11,A0       SETUP TRAP11
	MOVE.W  #JMP,(A0)+      THIS SETUP WILL BE DISCARDED
	MOVE.L  #TRAP_SERV,(A0)
	MOVE.L  SP,D0           SAVE STACK LOCATION
	TRAP    #11             FIND OUT HOW MANY BYTES PUSHED ON STACK
	SUBQ.L  #6,D0
	SNE     M68KTYPE        =0 is 68000 <>0 is 680xx
	RTS
TRAP_SERV       EQU *
	SUB.L   SP,D0
	RTE

*******************  ICACHE MANAGEMENT ROUTINES  ****************************
*
*          3/25/85 BY JWS
*
* This (ICACHE_OFF) also works for the '040 JWH 12/18/89
*
ASM_ICACHE_OFF EQU *
	BTST    #4,SYSFLAG2     CHECK FOR 68020
	BEQ.S   ICACHE_RET      IF NOT THEN RETURN
	TRAP    #11             BE SURE WE ARE IN SUPERVISOR MODE
	MOVE.L  D0,-(SP)        SAVE A REGISTER
	MOVEQ   #0,D0
ICACHE1 DC.W    $4E7B,$0002     MOVE D0,CACR
	DC.W    $4E7B,$0002     ***** FOR 68020 BUG
	MOVE.L  (SP)+,D0        RESTORE REGS
	MOVE    (SP)+,SR        RESTORE SR
ICACHE_RET RTS
*
*
* This one (ICACHE_ON) required a slight mod 12/18/89 JWH
*
ASM_ICACHE_ON EQU *
	BTST    #4,SYSFLAG2     CHECK FOR 68020
	BEQ     ICACHE_RET      IF NOT THEN RETURN
	BTST    #3,SYSFLAG2     Check for 68040
	BEQ     DO_40           Bit 3 =0 means '040, otherwise not
	TRAP    #11             GOTO SUPERVISOR MODE
	MOVE.L  D0,-(SP)
	MOVE.W  #$3919,D0       SET ENABLE AND CLEAR BITS (TURN ON D-CACHE
*                               ENABLE WRITE ALLOCATE, AND BURST MODE FOR
*                               68030. SFB/RDQ/DD)
	BRA     ICACHE1
*==========================================================================
* Stuff between the '=========' lines was added for '040 support.
* JWH 12/15/89.
DO_40   TRAP    #11             GOTO SUPERVISOR MODE
	MOVE.L  D0,-(SP)
	MOVE.L  #$80008000,D0   Turn on both, 68040 CACR
	DC.W    $F4D8           CINVA  DC/IC - invalidate all cache entries
	BRA     ICACHE1         Turn em on
*==========================================================================
*
*
* FLUSH_ICACHE modified slightly for the '040 case. We now have the
* CPUSHA instruction to help us.  JWH 12/18/89.
*
ASM_FLUSH_ICACHE EQU *
	BTST    #4,SYSFLAG2     CHECK FOR 68020
	BEQ     ICACHE_RET      RET IF NOT
	BTST    #3,SYSFLAG2     Check for '040
	BEQ     DO_40F
	TRAP    #11             SUPERVISOR STATE
	MOVE.L  D0,-(SP)
	DC.W    $4E7A,$0002     MOVE CACR,D0
	OR.W    #$808,D0        SET CLEAR BIT (ALSO CLEAR 68030 D-CACHE.
*                               SFB/RDQ/DD)
	BRA     ICACHE1
DO_40F  TRAP    #11             supervisor state
*       CPUSHA  DC/IC : flush and invalidate all cache entries
	DC.W    $F4F8
	MOVE    (SP)+,SR        RESTORE SR
	BRA     ICACHE_RET
* Added for '040 support : marks all cache entries invalid but
* does not flush the d-cache :
*ASM_INV_CACHES     EQU     *
*       btst   #3,SYSFLAG2
*       bne    done_inv
*       trap   #11        got an '040
*       cinva  DC/IC      invalidate not push
*       move   (SP)+,SR
*done_inv  rts
* Added for '040 support : turn on copyback mode for user writes
* in non-IO space, or turn it off.
ASM_ARM_COPYBACK EQU   *
	BTST #3,SYSFLAG2
	BNE not_a_40
	MOVE.L #$1FFFC020,ARM_VALUE
	RTS
ASM_DISARM_COPYBACK EQU   *
	BTST #3,SYSFLAG2
	BNE not_a_40
	MOVE.L #0,ARM_VALUE
	RTS
ASM_COPY_ON    EQU   *
	btst  #3,SYSFLAG2
	bne   not_a_40
	trap  #11
	move.l d0,-(SP)
	move.l ARM_VALUE,d0
	movec  d0,DTT1
	move.l (SP)+,d0
	move   (SP)+,SR
not_a_40   rts
ASM_COPY_OFF   equ   *
	btst   #3,SYSFLAG2
	bne    not_a_40
	trap   #11
	move.l  d0,-(SP)
	move.l  #0,d0
	CPUSHA  DC/IC        start fresh
	movec  d0,DTT1
	move.l (SP)+,d0
	move   (SP)+,SR
	rts
ARM_VALUE  DC.L $00000000   GOES IN DTT1
*-----------------------------------------------------------
M       DC.B    'Copyright Hewlett-Packard Company, 1982, 1991.',0
M1      DC.B    18,'IORESULT, ERROR = '
M2      DC.B    'This system file cannot boot from an HFS disc.',0

	NOSYMS
	END


@


53.2
log
@Updated copyright message.
@
text
@@


53.1
log
@Automatic bump of revision number for PWS version 3.24B
@
text
@d553 1
a553 1
M       DC.B    'Copyright Hewlett-Packard Company, 1982, 1990.',0
@


52.1
log
@Automatic bump of revision number for PWS version 3.24A
@
text
@@


51.3
log
@
pws2rcs automatic delta on Mon Feb 18 20:38:36 MST 1991
@
text
@@


51.2
log
@Modified ASM_USERPROGRAM to turn copy back mode on.
@
text
@d10 1
a10 1
	DEF     ASM_INV_CACHES          9/24/90 JWH
d12 1
d17 1
d59 2
d125 1
a125 1
CODESIZE EQU 18754
d511 7
a517 7
ASM_INV_CACHES     EQU     *
	btst   #3,SYSFLAG2
	bne    done_inv
	trap   #11        got an '040
	cinva  DC/IC      invalidate not push
	move   (SP)+,SR
done_inv  rts
d520 10
d535 1
a535 1
	move.l #$1FFFC020,d0
d551 1
@


51.1
log
@Automatic bump of revision number for PWS version 3.24d
@
text
@d276 1
d279 2
d285 1
d532 1
a533 1
	CPUSHA  DC/IC        start fresh
@


50.1
log
@Automatic bump of revision number for PWS version 3.23c
@
text
@@


49.6
log
@
pws2rcs automatic delta on Mon Oct 29 14:00:44 MST 1990
@
text
@@


49.5
log
@Modified ASM_COPY_OFF so that if flushes the caches in addition
to just disabling DTT1.
@
text
@d121 1
a121 1
CODESIZE EQU 18616
@


49.4
log
@Added routines ASM_COPY_ON and ASM_COPY_OFF.
@
text
@d529 1
@


49.3
log
@Fixed 3 minor bugs I introduced with my previous changes.
@
text
@d11 1
d55 2
d510 22
@


49.2
log
@Added routine asm_inv_caches.
@
text
@d54 1
a54 1
 SRC  PROCEDURE INV_CACHES
d500 1
a500 1
INV_CACHES     EQU     *
d505 1
a505 1
	move.w (SP)+,SR
@


49.1
log
@Automatic bump of revision number for PWS version 3.24b
@
text
@d10 1
d54 1
d498 9
a506 1

@


48.1
log
@Automatic bump of revision number for PWS version 3.24a
@
text
@@


47.1
log
@Automatic bump of revision number for PWS version 3.23
@
text
@@


46.1
log
@Automatic bump of revision number for PWS version 3.23
@
text
@@


45.4
log
@
pws2rcs automatic delta on Fri May  4 14:44:01 MDT 1990
@
text
@@


45.3
log
@Fixed the ASM_FLUSH_ICACHE routine so that all the
cache entries (instruction and data) are flushed
as well as invalidated. Before the enries were being
invalidated only. This applies to 68040 only.
@
text
@d116 1
a116 1
CODESIZE EQU 18592
@


45.2
log
@Set up ITT0 just like DTT0 was set up.
@
text
@d492 2
a493 2
*       CINVA  DC/IC : invalidate all cache entries
	DC.W    $F4D8
@


45.1
log
@Automatic bump of revision number for PWS version 3.23C
@
text
@d184 4
a187 1
	DC.W    $4E7B,$0006             See use of $4E7B above !!! ???
@


44.1
log
@Automatic bump of revision number for PWS version 3.23B
@
text
@@


43.2
log
@Fixed copyright date.
@
text
@@


43.1
log
@Automatic bump of revision number for PWS version 3.23aA
@
text
@d495 1
a495 1
M       DC.B    'Copyright Hewlett-Packard Company, 1982, 1989.',0
@


42.1
log
@Automatic bump of revision number for PWS version 3.23e
@
text
@@


41.3
log
@
pws2rcs automatic delta on Sat Jan 20 16:32:46 MST 1990
@
text
@@


41.2
log
@


            Modified the routine to turn on d-cacheing and
         i-cacheing by putting a CINVA DC/IC instruction
         before the actual cache enable. 

            JWH 12/27/89
@
text
@d116 1
a116 1
CODESIZE EQU 18590
@


41.1
log
@Automatic bump of revision number for PWS version 3.23d
@
text
@d469 2
a470 1
	BRA     ICACHE1
d489 2
a490 4
*       New instruction (040) - flush both caches and invalidate all
*       current cache entries :
*       CPUSHA  DC/IC :         new instruction (040) - flush both caches
	DC.W    $F4F8
@


40.6
log
@
pws2rcs automatic delta on Thu Dec 21 14:54:59 MST 1989
@
text
@@


40.5
log
@

          Finished (I hope) modifying the cache management
      routines for 68040 support.

          JWH 12/18/89.
@
text
@d116 1
a116 1
CODESIZE EQU 18490
d185 1
a185 1
	BRA     WHICH_P
@


40.4
log
@

            Updated ASM_ICACHE_ON to include the 68040 case.
            JWH 12/15/89.
@
text
@d435 2
d450 2
d455 2
d462 1
d466 2
a467 2
	BTST    #3,SYSFLAG2
	BNE     ICACHE1         Else we have an '040
d473 3
d479 2
d487 7
@


40.3
log
@

          Fixed a goof made in the previous update.
          JWH 12/15/89.
@
text
@d456 6
d463 1
@


40.2
log
@

        Added code to turn off data cacheing in I/O space.
     Very similiar to what was done for the '030, but not 
     quite the same....Jeff, 12/15/89.
@
text
@d181 1
a181 1
	BEQ     JUST_30                 If not, same as before
@


40.1
log
@Automatic bump of revision number for PWS version 3.23c
@
text
@d178 13
a190 1
	MOVE.L  #TT0_ENABLE,-(SP)       DISABLE DATA CACHING FOR THE ADDRESS
@


39.1
log
@Automatic bump of revision number for PWS version 3.23b
@
text
@@


38.1
log
@Automatic bump of revision number for PWS version 3.23a
@
text
@@


37.1
log
@Automatic bump of revision number for PWS version 3.3a
@
text
@@


36.3
log
@
pws2rcs automatic delta on Fri May 12 09:00:42 MDT 1989
@
text
@@


36.2
log
@
pws2rcs automatic delta on Thu May 11 11:32:36 MDT 1989
@
text
@d117 1
a117 1
LOADADDRESS EQU -20000
@


36.1
log
@Automatic bump of revision number for PWS version 3.22
@
text
@d116 1
a116 1
CODESIZE EQU 18308
@


35.1
log
@Automatic bump of revision number for PWS version 3.22
@
text
@@


34.1
log
@Automatic bump of revision number for PWS version 3.22
@
text
@@


33.1
log
@Automatic bump of revision number for PWS version 3.22D
@
text
@@


32.3
log
@This was supposed to come over in pws2rcs, however this script
does not expand and normalize the file, and the original 32.3
was corrupted.  I have deleted the original 32.3 version and
am resubmitting now.

This fix was necessary to fix the problem created by the
secondary loader when it left its stack pointer in the
wrong place.
@
text
@@


32.2
log
@RDQ (DEW)
TT0 constant is now taken from include file ASM_SYMS.TEXT.
Copyright is updated to 1989.
@
text
@d116 1
a116 1
CODESIZE EQU 18212
d120 2
@


32.1
log
@Automatic bump of revision number for PWS version 3.22C
@
text
@d15 1
d53 1
d176 1
a176 1
	MOVE.L  #$001F8514,-(SP)        DISABLE DATA CACHING FOR THE ADDRESS
d456 1
a456 1
M       DC.B    'Copyright Hewlett-Packard Company, 1982, 1987.',0
@


31.1
log
@Automatic bump of revision number for PWS version 3.22B
@
text
@@


30.1
log
@Automatic bump of revision number for PWS version 3.22A
@
text
@@


29.1
log
@Automatic bump of revision number for PWS version 3.22b
@
text
@@


28.1
log
@Automatic bump of revision number for PWS version 3.3b
@
text
@@


27.3
log
@pws2rcs automatic delta on Wed Oct  5 17:32:00 MDT 1988

@
text
@@


27.2
log
@Contains 68030 D-cache and I/O cache disabling code.
SFB and RDQ
@
text
@d114 1
a114 1
CODESIZE EQU 18206
@


27.1
log
@Automatic bump of revision number for PWS version 3.3a
@
text
@d114 1
a114 1
CODESIZE EQU 18184
d172 7
d437 3
a439 1
	MOVEQ   #9,D0           SET ENABLE AND CLEAR BITS
d449 2
a450 1
	OR.B    #8,D0           SET CLEAR BIT
@


26.1
log
@Automatic bump of revision number for PWS version 3.3 Synch
@
text
@@


25.1
log
@Automatic bump of revision number for PWS version 3.2Y
@
text
@@


24.2
log
@Pws2unix automatic delta on Tue Mar  1 09:01:42 MST 1988
@
text
@@


24.1
log
@Automatic bump of revision number for PWS version 3.2
@
text
@d114 1
a114 1
CODESIZE EQU 18182
@


23.1
log
@Automatic bump of revision number for PWS version 3.2P
@
text
@@


22.2
log
@Pws2unix automatic delta on Tue Aug 25 18:23:33 MDT 1987
@
text
@@


22.1
log
@Automatic bump of revision number for PWS version 3.2N
@
text
@d114 1
a114 1
CODESIZE EQU 18174
d444 1
a444 1
M       DC.B    'Copyright 1985 Hewlett-Packard Company.',0
@


21.1
log
@Automatic bump of revision number for PWS version 3.2M
@
text
@@


20.1
log
@Automatic bump of revision number for PWS version 3.2L
@
text
@@


19.1
log
@Automatic bump of revision number for PWS version 3.2K
@
text
@@


18.1
log
@Automatic bump of revision number for PWS version 3.2J
@
text
@@


17.2
log
@Pws2unix automatic delta on Wed May 20 09:57:02 MDT 1987
@
text
@@


17.1
log
@Automatic bump of revision number for PWS version 3.2I+
@
text
@d114 2
a115 2
CODESIZE EQU 18028
LOADADDRESS EQU -19750
@


16.2
log
@Pws2unix automatic delta on Wed Apr 29 13:03:27 MDT 1987
@
text
@@


16.1
log
@Automatic bump of revision number for PWS version 3.2I
@
text
@d115 1
a115 1
LOADADDRESS EQU -19650
@


15.2
log
@Pws2unix automatic delta on Fri Apr 24 18:41:36 MDT 1987
@
text
@@


15.1
log
@Automatic bump of revision number for PWS version 3.2H
@
text
@d114 1
a114 1
CODESIZE EQU 17988
@


14.1
log
@Automatic bump of revision number for PWS version 3.2G
@
text
@@


13.1
log
@Automatic bump of revision number for PWS version 3.2F
@
text
@@


12.1
log
@Automatic bump of revision number for PWS version 3.2E
@
text
@@


11.1
log
@Automatic bump of revision number for PWS version 3.2D
@
text
@@


10.1
log
@Automatic bump of revision number for PWS version 3.2C
@
text
@@


9.2
log
@Pws2unix automatic delta on Tue Dec 23 16:24:27 MST 1986
@
text
@@


9.1
log
@Automatic bump of revision number for PWS version 3.2B
@
text
@d114 2
a115 2
CODESIZE EQU 17476
LOADADDRESS EQU -19150
@


8.1
log
@Automatic bump of revision number for PWS version 3.2A
@
text
@@


7.2
log
@Fix for D0 corruption in debugger
@
text
@@


7.1
log
@Automatic bump of revision number for PWS version 3.2l
@
text
@d416 1
a416 1
	MOVE    D0,-(SP)        SAVE A REGISTER
d420 1
a420 1
	MOVE    (SP)+,D0        RESTORE REGS
d429 1
a429 1
	MOVE    D0,-(SP)
d438 1
a438 1
	MOVE    D0,-(SP)
@


6.1
log
@Automatic bump of revision number for PWS version 3.2k
@
text
@@


5.1
log
@Automatic bump of revision number for PWS version 3.2j
@
text
@@


4.1
log
@Automatic bump of revision number for PWS version 3.2i
@
text
@@


3.1
log
@Automatic bump of revision number for PWS version 3.2h
@
text
@@


2.10
log
@Change SUPSTACKSPACE from 5000 to 8000.  This prevents problem where
M68KSYS can overflow supervisor stack by calling HFSDAM when
setting the system unit.
@
text
@@


2.9
log
@Pws2unix automatic delta on Tue Aug 19 10:31:55 MEZ 1986
@
text
@d66 1
a66 1
SUPSTACKSPACE   EQU 5000        SPACE FOR SUPERVISOR STACK
@


2.8
log
@HFSBFLG now a boolean (byte) again, not a short.
@
text
@d114 2
a115 2
CODESIZE EQU 17426
LOADADDRESS EQU -25000
@


2.7
log
@Add HFS relocation code (formerly in RELOC).
If loadaddress <> lowcode, copies system to loadaddress and
jmps to initload_initload, as well as setting HFSBFLG to TRUE.
@
text
@d124 1
a124 1
	MOVE.W  #1,(A0)
@


2.6
log
@Fix syntax error in ASM_NOBOOT.
@
text
@d13 2
d54 1
a54 1
	REFR    FS_FWRITESTRINT,INITLOAD_INITLOAD
a102 1
* NOTE: INITLOAD_INITLOAD  FIRST INSTRUCTION IS JSR ASM_POWERUP
d104 1
a104 1
	DC.L    0,INITLOAD_INITLOAD-*   CHECKSUM, EXECUTION ADDRESS
d107 32
d140 1
a140 1
* 0 -> NO HFS BOOT, 1 -> HFS BOOT, USED TO COUNT HFS OPENS
d144 1
@


2.5
log
@Add routine "noboot" for when booting non-HFS system from HFS disc.
@
text
@d299 1
a299 1
	BR      *
d412 1
a412 1
M2      DC.B    'THIS SYSTEM FILE CANNOT BOOT FROM HFS.',0
@


2.4
log
@Remove blank after comma that PAWS assembler doesn't like.
@
text
@d11 1
a11 1
	DEF     HFSBFLG,LOWCODE
d42 1
d293 8
d412 1
a412 1

@


2.3
log
@Added defs and code for ASM_IAND, ASM_IOR, formerly in POWERUP.
Added DEF for LOWCODE, needed for HFS relocation.  IAND and IOR is
needed by HFSBOOT.
@
text
@d11 1
a11 1
	DEF     HFSBFLG, LOWCODE
@


2.2
log
@Add decl for HFSBFLG, tells whether booted from HFS.
@
text
@d11 2
a12 1
	DEF     HFSBFLG
d256 13
@


2.1
log
@Auto bump rev number to 2.1 for sys 3.2e.
@
text
@d11 1
d103 4
@


1.1
log
@Initial revision
@
text
@@
