; task headers
%pragma once
%ifndef Xtasks
%define Xtasks
%include "std"
bits 16

%define gentss(r)       _gentss r       ; gentss :: int8 ring -> int16 sel

%ifdef xtasks
    global Gentss
%else
    extern Gentss
%endif

%macro _gentss 1
    mov ax,%1
    and ax,0b11
    push ax
    call Gentss
    carry 1
%endmacro

struc Tss
    .backlink:  resw 1
    .sp0:       resw 1
    .ss0:       resw 1
    .sp1:       resw 1
    .ss1:       resw 1
    .sp2:       resw 1
    .ss2:       resw 1
    .ip:        resw 1
    .flags:     resw 1
    .ax:        resw 1
    .cx:        resw 1
    .dx:        resw 1
    .bx:        resw 1
    .sp:        resw 1
    .bp:        resw 1
    .si:        resw 1
    .di:        resw 1
    .es:        resw 1
    .cs:        resw 1
    .ss:        resw 1
    .ds:        resw 1
    .ldt:       resw 1
    .end:
endstruc

%endif