include libmacro.inc

beglib

item	'TRUE','*',1
	push	ax
	mov	ax, 0FFFFh

item	'FALSE','*',1
	push	ax
	xor	ax, ax

item 'halt','*'
  mov ax, 4C00h
  int 21h


item 'byte','*',1
  mov bx,ax
  xor ah,ah
  mov al,[bx]

item 'word','*',1
  mov bx,ax
  mov ax,[bx]
 
item 'long','*',2
  mov bx,ax
  push word ptr [bx+2]
  mov ax,[bx]



item 'succ','*',1
  inc ax
  
item 'pred','*',1
  dec ax
  
item 'odd','*',1
  mov bx, ax
  mov ax,2
  cwd
  idiv bx
  or dx,dx
  setz al

item 'cseg','*',1
  push	ax
  mov	ax, cs

item 'dseg','*',1
  push	ax
  mov	ax, ds

item 'intr','*',1
  push	bx
  db	0E8h,0,0
  pop	bx
  mov   [bx+7], al
  pop	bx
  pop	ax
  db	0CDh,0
  pop  ax

;{ put to register }


item 'ax_','*',1
  nop

item 'bx_','*',1
  SAX bx

item 'cx_','*',1
  SAX cx

item 'dx_','*',1
  SAX dx

item 'si_','*',1
  SAX si

item 'di_','*',1
  SAX di

item 'bp_','*',1
  SAX bp

item 'sp_','*',1
  SAX sp

item 'ds_','*',1
  SAX ds

item 'es_','*',1
  SAX es

item 'ss_','*',1
  SAX ss


;{ get into register }


item '_ax','*',1
  LAX ax

item '_bx','*',1
  LAX bx

item '_cx','*',1
  LAX cx

item '_dx','*',1
  LAX dx

item '_si','*',1
  LAX si

item '_di','*',1
  LAX di

item '_bp','*',1
  LAX bp

item '_sp','*',1
  LAX sp

item '_cs','*',1
  LAX cs

item '_ds','*',1
  LAX ds

item '_es','*',1
  LAX es

item '_ss','*',1
  LAX ss

;{ ports input-output }
item 'portin','*',1; { iz porta  Nporta --> x }
  mov dx,ax
  in al,dx
  xor ah,ah
;  push ax

item 'portinw','*',1
  mov dx,ax
  in ax,dx
;  push ax

item 'portout','*',1; { v port  x Nport portout }
;  pop ax
  pop dx
  out dx,al
  pop ax

item 'portoutw','*',1
;  pop ax
  pop dx
  out dx,ax
  pop ax

item 'memin','*',1
;  pop ax
  pop bx
  mov es,ax
  xor ah,ah
  mov al,es:[bx]
;  push ax

item 'meminw','*',1
;  pop ax
  pop bx
  mov es,ax
  mov ax,es:[bx]
;  push ax

;item 'memout','*',1
;  pop cx
;  pop ax
;  pop bx
;  mov es,ax
;  mov es:[bx],cl

;item 'memoutw','*',1
;  pop cx
;  pop ax
;  pop bx
;  mov es,ax
;  mov es:[bx],cx

endlib
