'*****************************************************************************
'* INT 10H AH=0Bh (CGA BIOS) SELECT PALETTE/BACKGROUND
'* Params: BH - what to set (0-bgcolor, 1-palette index)
'*         BL - value
'*****************************************************************************

protected function Exec as boolean

dim color_port as byte=mem.Byte(0x466) 'old color port value

select case cpu.BH
  case 0 'background color
     color_port=(color_port and (not 0x1F)) or (cpu.BL and 0x1F)
     mem.Byte(0x466)=color_port 'new color port value
     pc.WritePort(0x3D9,color_port)
  case 1 'palette index
     color_port=(color_port and (not 0x20)) or shl(cpu.BL and 1,5)
     mem.Byte(0x466)=color_port 'new color port value
     pc.WritePort(0x3D9,color_port)
  case else : exit(false) 
end select

//success
result=true : end