Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;by IVAN
- ;interrupt descriptor
- intdescriptor macro properties:vararg
- _offset=0
- _selector=0
- _t=0
- _use32=0
- _dpl=0
- _p=1
- for p, <properties>
- _sep instr <p>, <=>
- _name substr <p>, 1, _sep-1
- _valid=1
- for valid_name, <_offset, _selector, _t, _use32, _dpl, _p>
- ifidn _name, <valid_name>
- _valid=0
- endif
- endm
- if _valid eq 0
- p
- else
- _emsg catstr <Wrong parameter name >, _name
- .ERR _emsg
- endif
- endm
- dw _offset AND 0FFFFh
- dw _selector
- db 0
- db _t+110b+(_use32 SHL 3)+(_dpl SHL 5)+(_p SHL 7)
- dw _offset SHR 16
- endm
- ;by IVAN
- smov macro sreg, value, treg:vararg
- _treg equ ax
- for t, <treg>
- t
- endm
- mov _treg, value
- mov sreg, _treg
- endm
- descriptor macro properties:vararg
- _limit=0
- _base=0
- _g=0
- _x=0
- _l=0
- _p=1
- _dpl=0
- _s=1
- _d_c=0
- _c_ed=0
- _r_w=1
- _a=0
- _type=0
- for p, <properties>
- _sep instr <p>, <=>
- _name substr <p>, 1, _sep-1
- _valid = 1
- for valid_name, <_limit,_base,_g,_x,_l,_p,_dpl,_s,_d_c,_c_ed,_r_w,_a,_type>
- ifidn _name, <valid_name>
- _valid=0
- endif
- endm
- if _valid eq 0
- p
- else
- _emsg catstr <Wrong parameter name >, _name
- .ERR _emsg
- endif
- endm
- if _limit le 00100000h
- dw _limit MOD 10000h
- else
- dw (_limit/4096) MOD 10000h
- endif
- dw (_base) MOD 10000h
- db (_base/10000h) MOD 0100h
- if _s eq 0
- if (_type eq 0) or (_type eq 8) or (_type eq 10) or (_type eq 13)
- _emsg equ <Wrong type of system descriptor>
- .ERR _emsg
- else
- db _type+(_s SHL 4)+(_dpl SHL 5)+(_p SHL 7)
- endif
- else
- db _a+(_r_w SHL 1)+(_c_ed SHL 2)+(_d_c SHL 3)+(_s SHL 4)+(_dpl SHL 5)+(_p SHL 7)
- endif
- if _limit le 00100000h
- db (_g SHL 7) + (_x SHL 6) + (_l SHL 5) + ((_limit SHR 16) MOD 10h)
- else
- db 10000000b + (_x SHL 6) + (_l SHL 5) + ((_limit SHR 28) MOD 10h)
- endif
- db (_base SHR 24) MOD 0100h
- endm
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement