.macro KWRITE_DOUBLE number, row, col push %rax push %rbx push %rcx push %rdx mov \number, %rdx mov $1, %al mov $0, %ebx mov \row, %bh mov \col, %bl call Pd pop %rdx pop %rcx pop %rbx pop %rax .endm .macro KWRITE_STRING str, row, col push %rax push %rbx push %rdx mov \str, %rdx mov $0, %ebx mov \row, %bh mov \col, %bl call Ps pop %rdx pop %rbx pop %rax .endm .macro PUSH_ALL push %rax push %rbx push %rcx push %rdx push %rsi push %rdi push %rbp .endm .macro POP_ALL pop %rbp pop %rdi pop %rsi pop %rdx pop %rcx pop %rbx pop %rax .endm .macro SWITCH_TASKS int $20 .endm .macro SWITCH_TASKS_R15 int $22 .endm .macro SEG_DESCRIP name,base,g,segsize,longmode,limit,p,dpl,dt,type \name = . - mygdt .word \limit & 0xffff .word \base & 0xffff .byte (\base & 0xff0000) >> 16 .byte (\p << 3 + \dpl << 1 + \dt) << 4 + \type .byte (\g << 3 + \segsize << 2 + \longmode << 1) << 4 + ((\limit & 0xf0000) >> 16) .byte (\base & 0xff000000) >> 24 .endm .macro CODE_SEG_DESCR name,base,limit,dpl SEG_DESCRIP \name,\base,1,1,0,\limit,1,\dpl,1,8 .endm .macro CODE64_SEG_DESCR name,dpl SEG_DESCRIP \name, 0, 0, 0, 1, 0, 1, \dpl, 1, 8 .endm .macro DATA_SEG_DESCR name,base,limit SEG_DESCRIP \name,\base,1,1,0,\limit,1,0,1,2 .endm .macro DATA64_SEG_DESCR name,dpl SEG_DESCRIP \name,0,0,0,1,0,1,\dpl,1,2 .endm .macro TSS_SEG_DESCR64 name,base SEG_DESCRIP \name,\base,0,0,0,\tsslength,1,0,0,9 .quad 0 .endm