File: first.S

package info (click to toggle)
emile 0.10-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 1,716 kB
  • ctags: 2,737
  • sloc: ansic: 18,908; makefile: 726; asm: 622; sh: 2
file content (115 lines) | stat: -rw-r--r-- 2,857 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*
 *
 * (c) 2004,2005 Laurent Vivier <LaurentVivier@wanadoo.fr>
 *
 */

	.chip 68000

.equ	sector_size, 512
.equ	first_level_size, 2 * sector_size

.include "macos.i"
.include "32bitmode.i"

/******************************************************************************
 *
 * Structure: "Inside Macintosh: Files", p. 2-57
 *
 *****************************************************************************/

begin:
ID:		.short	0x4C4B			/* boot blocks signature */
Entry:		bra	start			/* entry point to bootcode */
Version:	.short	0x4418			/* boot blocks version number */
PageFlags:	.short	0x00			/* used internally */
SysName:	pString "Mac Bootloader"	/* System filename */
ShellName:	pstring "Copyright 2004"	/* Finder filename */
Dbg1Name:	pString "Laurent Vivier"	/* debugger filename */
Dbg2Name:	pString "Distributed   "	/* debugger filename */
ScreenName:	pString "under GNU GPL "	/* name of startup screen */
HelloName:	pString "first level   "	/* name of startup program */
ScrapName:	pString "version 1.2   "	/* name of system scrap file */
CntFCBs:	.short	10			/* number of FCBs to allocate */
CntEvts:	.short	20		    /* number of event queue elements */
Heap128K:	.long	0x00004300	      /* system heap size on 128K Mac */
Heap256K:	.long	0x00008000		/* used internally */
SysHeapSize:	.long	0x00020000	  /* system heap size on all machines */

.ifdef SCSI_SUPPORT

.include "scsi.i"

.else

.include "floppy.i"

.endif

/******************************************************************************
 *
 * start : load the second stage
 *
 * 	start is called from the boot block header
 *
 *	call PBReadSync() to read blocks from floppy 
 *	as described in param_block
 *
 *****************************************************************************/

	.align	4
start:
	moveal SysZone,%a0
	addal %pc@(SysHeapSize),%a0
	SetApplBase
	movel SysZone,TheZone

	/* test if we are in 32bit mode, otherwise reboot in 32bit mode */

	switch32bitmode

	/* buffer size to store second stage booter */

	get_second_size %d0

	/* Allocate Memory for second stage loader */

	add.l	#4, %d0
	NewPtr
	move.l	%a0, %d0
	bne	malloc_ok
	move.l	#1, %d0
	SysError
malloc_ok:
	add.l	#3, %d0
	and.l	#0xFFFFFFFC.l, %d0

	/* load second stage */

	load_second

	/* call second stage bootloader */

	jmp	(%a0)

PRAM_buffer:
	.long	0
end:

/******************************************************************************
 *
 * Filler: the boot block is 2 floppy blocks
 *	  as seen on the disk of utilities of MacOS 7.6, we fill with 0xda
 *
 *****************************************************************************/

.ifdef SCSI_SUPPORT
	.fill first_level_size - (end - begin) - 10, 1, 0xda
container_end:
block_size:	.short	0
unit_id:	.short	0
second_size:	.long	0
max_blocks:	.short	container_end - end
.else
	.fill first_level_size - (end - begin), 1, 0xda
.endif