__HEAD
.org 0
.long 0x00080000,0x80000000+startup
.org 0
.long 0x00080000,0x80000000+iplstart
.long 0x27000000,0x60000001
.long 0x02000000,0x20000000+IPL_BS
.long 0x00000000,0x00000000
.long 0x00000000,0x00000000
.long 0x00000000,0x00000000
.long 0x00000000,0x00000000
.long 0x00000000,0x00000000
.long 0x00000000,0x00000000
.long 0x00000000,0x00000000
.long 0x00000000,0x00000000
.long 0x000a0000,0x00000058
.long 0x000a0000,0x00000060
.long 0x000a0000,0x00000068
.long 0x000a0000,0x00000070
.long 0x00080000,0x80000000+.Lioint
.org 0x100
.Lloader:
st %r14,.Lldret
la %r3,.Lorbread
la %r5,.Lirb
st %r2,.Lccwread+4
lctl %c6,%c6,.Lcr6
slr %r2,%r2
.Lldlp:
la %r6,3
.Lssch:
ssch 0(%r3)
bnz .Llderr
.Lw4end:
bas %r14,.Lwait4io
tm 8(%r5),0x82
bnz .Lrecov
slr %r7,%r7
icm %r7,3,10(%r5)
lcr %r7,%r7
la %r7,IPL_BS(%r7)
ar %r2,%r7
tm 8(%r5),0x01
bnz .Ldone
l %r0,.Lccwread+4
ar %r0,%r7
st %r0,.Lccwread+4
b .Lldlp
.Ldone:
l %r14,.Lldret
br %r14
.Lrecov:
bas %r14,.Lsense
bct %r6,.Lssch
b .Llderr
.Lsense:
st %r14,.Lsnsret
la %r7,.Lorbsense
ssch 0(%r7)
bnz .Llderr
bas %r14,.Lwait4io
l %r14,.Lsnsret
tm 8(%r5),0x82
bnz .Llderr
br %r14
.Lwait4io:
lpsw .Lwaitpsw
.Lioint:
c %r1,0xb8
bne .Lwait4io
tsch 0(%r5)
slr %r0,%r0
tm 8(%r5),0x82
bnz .Lwtexit
tm 8(%r5),0x04
bz .Lwait4io
.Lwtexit:
br %r14
.Llderr:
lpsw .Lcrash
.align 8
.Lorbread:
.long 0x00000000,0x0080ff00,.Lccwread
.align 8
.Lorbsense:
.long 0x00000000,0x0080ff00,.Lccwsense
.align 8
.Lccwread:
.long 0x02200000+IPL_BS,0x00000000
.Lccwsense:
.long 0x04200001,0x00000000
.Lwaitpsw:
.long 0x020a0000,0x80000000+.Lioint
.Lirb: .long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.Lcr6: .long 0xff000000
.align 8
.Lcrash:.long 0x000a0000,0x00000000
.Lldret:.long 0
.Lsnsret: .long 0
.org 0
.long 0x00080000,0x80000000+iplstart
.long 0x02000018,0x60000050
.long 0x02000068,0x60000050
.fill 80-24,1,0x40
.long 0x020000f0,0x60000050
.long 0x02000140,0x60000050
.long 0x02000190,0x60000050
.long 0x020001e0,0x60000050
.long 0x02000230,0x60000050
.long 0x02000280,0x60000050
.long 0x020002d0,0x60000050
.long 0x02000320,0x60000050
.long 0x02000370,0x60000050
.long 0x020003c0,0x60000050
.long 0x02000410,0x60000050
.long 0x02000460,0x60000050
.long 0x020004b0,0x60000050
.long 0x02000500,0x60000050
.long 0x02000550,0x60000050
.long 0x020005a0,0x60000050
.long 0x020005f0,0x60000050
.long 0x02000640,0x60000050
.long 0x02000690,0x60000050
.long 0x020006e0,0x20000050
.org 0xf0
.Lloader:
la %r3,.Lorb
la %r5,.Lirb
la %r6,.Lccws
la %r7,20
.Linit:
st %r2,4(%r6)
la %r2,0x50(%r2)
la %r6,8(%r6)
bct 7,.Linit
lctl %c6,%c6,.Lcr6
slr %r2,%r2
.Lldlp:
ssch 0(%r3)
bnz .Llderr
.Lwait4irq:
mvc 0x78(8),.Lnewpsw
lpsw .Lwaitpsw
.Lioint:
c %r1,0xb8
bne .Lwait4irq
tsch 0(%r5)
slr %r0,%r0
ic %r0,8(%r5)
chi %r0,8
be .Lcont
chi %r0,12
be .Lcont
l %r0,4(%r5)
s %r0,8(%r3)
mhi %r0,10
lh %r3,10(%r5)
sr %r0,%r3
ar %r2,%r0
br %r14
.Lcont:
ahi %r2,0x640
la %r6,.Lccws
la %r7,20
.Lincr:
l %r0,4(%r6)
ahi %r0,0x640
st %r0,4(%r6)
ahi %r6,8
bct 7,.Lincr
b .Lldlp
.Llderr:
lpsw .Lcrash
.align 8
.Lorb: .long 0x00000000,0x0080ff00,.Lccws
.Lirb: .long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
.Lcr6: .long 0xff000000
.Lloadp:.long 0,0
.align 8
.Lcrash:.long 0x000a0000,0x00000000
.Lnewpsw:
.long 0x00080000,0x80000000+.Lioint
.Lwaitpsw:
.long 0x020a0000,0x80000000+.Lioint
.align 8
.Lccws: .rept 19
.long 0x02600050,0x00000000
.endr
.long 0x02200050,0x00000000
iplstart:
lh %r1,0xb8
bct %r1,.Lnoload
l %r1,0xb8
la %r2,IPL_BS
bas %r14,.Lloader
l %r12,.Lparm
st %r1,IPL_DEVICE+ARCH_OFFSET-PARMAREA(%r12)
.Lagain1:
l %r2,.Linitrd
bas %r14,.Lloader
ltr %r2,%r2
bz .Lnopf
chi %r2,895
bnh .Lnotrunc
la %r2,895
.Lnotrunc:
l %r4,.Linitrd
clc 0(3,%r4),.L_hdr
bz .Lagain1
clc 0(3,%r4),.L_eof
bz .Lagain1
la %r5,0(%r4,%r2)
lr %r3,%r2
la %r3,COMMAND_LINE-PARMAREA(%r12)
mvc 0(256,%r3),0(%r4)
mvc 256(256,%r3),256(%r4)
mvc 512(256,%r3),512(%r4)
mvc 768(122,%r3),768(%r4)
slr %r0,%r0
b .Lcntlp
.Ldelspc:
ic %r0,0(%r2,%r3)
chi %r0,0x20
be .Lcntlp
ahi %r2,1
b .Leolp
.Lcntlp:
brct %r2,.Ldelspc
.Leolp:
slr %r0,%r0
stc %r0,0(%r2,%r3)
.Lnopf:
.Lagain2:
l %r2,.Linitrd
st %r2,INITRD_START+ARCH_OFFSET-PARMAREA(%r12)
bas %r14,.Lloader
st %r2,INITRD_SIZE+ARCH_OFFSET-PARMAREA(%r12)
ltr %r2,%r2
bnz .Lrdcont
st %r2,INITRD_START+ARCH_OFFSET-PARMAREA(%r12)
.Lrdcont:
l %r2,.Linitrd
clc 0(3,%r2),.L_hdr
bz .Lagain2
clc 0(3,%r2),.L_eof
bz .Lagain2
stidp __LC_SAVE_AREA
tm __LC_SAVE_AREA,0xff
bno .Lnoreset
la %r2,.Lreset
lhi %r3,26
diag %r2,%r3,8
la %r5,.Lirb
stsch 0(%r5)
tm 30(%r5),0x0f
bnz .Lwaitforirq
tm 31(%r5),0xff
bz .Lnoreset
.Lwaitforirq:
mvc 0x78(8),.Lrdrnewpsw
.Lwaitrdrirq:
lpsw .Lrdrwaitpsw
.Lrdrint:
c %r1,0xb8
bne .Lwaitrdrirq
la %r5,.Lirb
tsch 0(%r5)
.Lnoreset:
b .Lnoload
.align 8
.Lrdrnewpsw:
.long 0x00080000,0x80000000+.Lrdrint
.Lrdrwaitpsw:
.long 0x020a0000,0x80000000+.Lrdrint
.Lnoload:
l %r1,.Lstartup
br %r1
.Linitrd:.long _end
.Lparm: .long PARMAREA
.Lstartup: .long startup
.Lreset:.byte 0xc3,0xc8,0xc1,0xd5,0xc7,0xc5,0x40,0xd9,0xc4,0xd9,0x40
.byte 0xc1,0xd3,0xd3,0x40,0xd2,0xc5,0xc5,0xd7,0x40,0xd5,0xd6
.byte 0xc8,0xd6,0xd3,0xc4
.L_eof: .long 0xc5d6c600
.L_hdr: .long 0xc8c4d900
.org 0x800
.globl start
start:
stm %r0,%r15,0x07b0
basr %r12,%r0
.base:
l %r11,.parm
l %r8,.cmd
ltr %r9,%r9
bp .sk8x8
mvc 0(64,%r8),0x00b0
xc 64(240-64,%r8),0(%r8)
tr 0(64,%r8),.lowcase
b .gotr
.sk8x8:
mvc 0(240,%r8),0(%r9)
.gotr:
slr %r0,%r0
st %r0,INITRD_SIZE+ARCH_OFFSET-PARMAREA(%r11)
st %r0,INITRD_START+ARCH_OFFSET-PARMAREA(%r11)
j startup
.cmd: .long COMMAND_LINE
.parm: .long PARMAREA
.lowcase:
.byte 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07
.byte 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f
.byte 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17
.byte 0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f
.byte 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27
.byte 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f
.byte 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37
.byte 0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f
.byte 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47
.byte 0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f
.byte 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57
.byte 0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f
.byte 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67
.byte 0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f
.byte 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77
.byte 0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f
.byte 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87
.byte 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f
.byte 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97
.byte 0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f
.byte 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7
.byte 0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf
.byte 0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7
.byte 0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf
.byte 0xc0,0x81,0x82,0x83,0x84,0x85,0x86,0x87
.byte 0x88,0x89,0xca,0xcb,0xcc,0xcd,0xce,0xcf
.byte 0xd0,0x91,0x92,0x93,0x94,0x95,0x96,0x97
.byte 0x98,0x99,0xda,0xdb,0xdc,0xdd,0xde,0xdf
.byte 0xe0,0xe1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7
.byte 0xa8,0xa9,0xea,0xeb,0xec,0xed,0xee,0xef
.byte 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7
.byte 0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff
.org 0x10000
.globl startup
startup:
basr %r13,0
.LPG0:
xc 0x200(256),0x200
xc 0x300(256),0x300
stck __LC_LAST_UPDATE_CLOCK
spt 5f-.LPG0(%r13)
mvc __LC_LAST_UPDATE_TIMER(8),5f-.LPG0(%r13)
xc __LC_STFL_FAC_LIST(8),__LC_STFL_FAC_LIST
.insn s,0xb2b10000,__LC_STFL_FAC_LIST
tm __LC_STFL_FAC_LIST,0x01
jz 0f
la %r0,0
.insn s,0xb2b00000,__LC_STFL_FAC_LIST
0: l %r0,__LC_STFL_FAC_LIST
n %r0,2f+8-.LPG0(%r13)
cl %r0,2f+8-.LPG0(%r13)
jne 1f
l %r0,__LC_STFL_FAC_LIST+4
n %r0,2f+12-.LPG0(%r13)
cl %r0,2f+12-.LPG0(%r13)
je 3f
1: l %r15,.Lstack-.LPG0(%r13)
ahi %r15,-96
la %r2,.Lals_string-.LPG0(%r13)
l %r3,.Lsclp_print-.LPG0(%r13)
basr %r14,%r3
lpsw 2f-.LPG0(%r13)
.Lals_string:
.asciz "The Linux kernel requires more recent processor hardware"
.Lsclp_print:
.long _sclp_print_early
.Lstack:
.long 0x8000 + (1<<(PAGE_SHIFT+THREAD_ORDER))
.align 16
2: .long 0x000a0000,0x8badcccc
.long 0xc100efe3, 0xf46c0000
.long 0xc100efe3, 0xf0680000
.long 0xc100efc3, 0x00000000
.long 0xc0002000, 0x00000000
.long 0xc0000000, 0x00000000
.long 0x8100c880, 0x00000000
.long 0x8100c880, 0x00000000
.long 0x8100c880, 0x00000000
.long 0x80002000, 0x00000000
.long 0x80000000, 0x00000000
3:
mvi __LC_AR_MODE_ID,1
slr %r0,%r0
lhi %r1,2
sigp %r1,%r0,0x12
sam64
larl %r13,4f
lmh %r0,%r15,0(%r13)
jg startup_continue
4: .fill 16,4,0x0
mvi __LC_AR_MODE_ID,0
l %r13,4f-.LPG0(%r13)
b 0(%r13)
.align 8
4: .long startup_continue
.align 8
5: .long 0x7fffffff,0xffffffff
.org PARMAREA
.long 0,0
.long 0,0
.long 0,0
.org COMMAND_LINE
.byte "root=/dev/ram0 ro"
.byte 0
.org 0x11000