'*****************************************************************************
'*
'* INT 10H (BIOS) - CGA VIDEO BIOS service emulation
'*
'*****************************************************************************

//DEBUG.ON 'uncomment to enable debug messages (can be slow for hi-freq events)

use module "AH_00h" as AH_00h 'set video mode 
use module "AH_01h" as AH_01h 'set cursor size
use module "AH_02h" as AH_02h 'set cursor pos
use module "AH_03h" as AH_03h 'get cursor params
use module "AH_04h" as AH_04h 'get lightpen pos
use module "AH_05h" as AH_05h 'set video page index
use module "AH_06h" as AH_06h 'scroll video page up
use module "AH_07h" as AH_07h 'scroll video page down
use module "AH_08h" as AH_08h 'read char+attrib from cursor
use module "AH_09h" as AH_09h 'write char+attrib to cursor
use module "AH_0Ah" as AH_0Ah 'write char to cursor
use module "AH_0Bh" as AH_0Bh 'select palette/bgcolor
use module "AH_0Ch" as AH_0Ch 'write pixel
use module "AH_0Dh" as AH_0Dh 'read pixel
use module "AH_0Eh" as AH_0Eh 'teletype
use module "AH_0Fh" as AH_0Fh 'get video state

public function EINT_10H_CGA as boolean

?? "[INT 10] AH=0x";Hex(cpu.AH,2)

select case cpu.AH
  case 0x00 : result=AH_00h.Exec 'set video mode
  case 0x01 : result=AH_01h.Exec 'set cursor size
  case 0x02 : result=AH_02h.Exec 'set cursor pos
  case 0x03 : result=AH_03h.Exec 'get cursor params
  case 0x04 : result=AH_04h.Exec 'get lightpen pos
  case 0x05 : result=AH_05h.Exec 'set video page index
  case 0x06 : result=AH_06h.Exec 'scroll video page up
  case 0x07 : result=AH_07h.Exec 'scroll video page down
  case 0x08 : result=AH_08h.Exec 'read char+attrib from cursor
  case 0x09 : result=AH_09h.Exec 'write char+attrib to cursor
  case 0x0A : result=AH_0Ah.Exec 'write char to cursor
  case 0x0B : result=AH_0Bh.Exec 'select palette/bgcolor
  case 0x0C : result=AH_0Ch.Exec 'write pixel
  case 0x0D : result=AH_0Dh.Exec 'read pixel
  case 0x0E : result=AH_0Eh.Exec 'teletype
  case 0x0F : result=AH_0Fh.Exec 'get video state
  //TODO 0x13 - write string (but it very rare)
  case else : result=false 
end select  

end function

