

modesearchtable1:
  db 1 ;mode 1            //line 1
  dw limitationstable1
  dw proceduresmode1
   
  db 12h ;mode 12h        //line 2
  dw limitationstable12h
  dw proceduresmode12h

  db 2 ;mode2             //line 3  
  dw limitationstable2
  dw proceduresmode2

  db 0ffh ;end of table , mode 0ffh not allowed

switchbymodesteptab equ 5 ;each 'line' takes 1 byte and 2 twobyte words


switchbymode:
   mov dptr,#modesearchtable1
   mov a,mode
   xrl a,#0ffh
   mov r2,a
switchbymodeloop:
   clr a
   movc a,@a+dptr
   xrl a,#0ffh
   jz switchbymodeNotFound ;end of table found
   xrl a,r2
   jz switchbymodeFound
   mov a,#switchbymodesteptab
   add a,dpl
   mov dpl,a
   jnc switchbymodeloop
   inc dph
   sjmp switchbymodeloop
switchbymodeNotFound:
   ljmp 0 ;???
   
switchbymodeFound:
   inc dptr
   ;now dptr points table with limitations
   ret  
