master
s 67 lines 2.07 KB
Raw
1 /* DAT on, home-space mode, 64-bit mode */
2 #define DAT_PSWM 0x400c00180000000
3 #define VIRTUAL_BASE 0x123456789abcd000
4
5 .org 0x8e
6 program_interruption_code:
7 .org 0x150
8 program_old_psw:
9 .org 0x1d0 /* program new PSW */
10 .quad 0,pgm_handler
11 .org 0x200 /* lowcore padding */
12
13 .globl _start
14 _start:
15 lctlg %c13,%c13,hasce
16 lpswe dat_psw
17 start_dat:
18 sam24
19 sam24_suppressed:
20 /* sam24 should fail */
21 fail:
22 basr %r12,%r0
23 lpswe failure_psw-.(%r12)
24 pgm_handler:
25 chhsi program_interruption_code,6 /* specification exception? */
26 jne fail
27 clc suppressed_psw(16),program_old_psw /* correct location? */
28 jne fail
29 lpswe success_psw
30
31 .align 8
32 dat_psw:
33 .quad DAT_PSWM,VIRTUAL_BASE+start_dat
34 suppressed_psw:
35 .quad DAT_PSWM,VIRTUAL_BASE+sam24_suppressed
36 success_psw:
37 .quad 0x2000000000000,0xfff /* see is_special_wait_psw() */
38 failure_psw:
39 .quad 0x2000000000000,0 /* disabled wait */
40 hasce:
41 /* DT = 0b11 (region-first-table), TL = 3 (2k entries) */
42 .quad region_first_table + (3 << 2) + 3
43 .align 0x1000
44 region_first_table:
45 .org region_first_table + ((VIRTUAL_BASE >> 53) & 0x7ff) * 8
46 /* TT = 0b11 (region-first-table), TL = 3 (2k entries) */
47 .quad region_second_table + (3 << 2) + 3
48 .org region_first_table + 0x800 * 8
49 region_second_table:
50 .org region_second_table + ((VIRTUAL_BASE >> 42) & 0x7ff) * 8
51 /* TT = 0b10 (region-second-table), TL = 3 (2k entries) */
52 .quad region_third_table + (2 << 2) + 3
53 .org region_second_table + 0x800 * 8
54 region_third_table:
55 .org region_third_table + ((VIRTUAL_BASE >> 31) & 0x7ff) * 8
56 /* TT = 0b01 (region-third-table), TL = 3 (2k entries) */
57 .quad segment_table + (1 << 2) + 3
58 .org region_third_table + 0x800 * 8
59 segment_table:
60 .org segment_table + ((VIRTUAL_BASE >> 20) & 0x7ff) * 8
61 /* TT = 0b00 (segment-table) */
62 .quad page_table
63 .org segment_table + 0x800 * 8
64 page_table:
65 .org page_table + ((VIRTUAL_BASE >> 12) & 0xff) * 8
66 .quad 0
67 .org page_table + 0x100 * 8