[syslinux] INT22h/000Dh

Piotr Romaniuk piotr.romaniuk at elesoftrom.com.pl
Wed Sep 5 11:59:51 PDT 2012


Hi Geert,

Thank you for the response. I added further information inlined in the text.
Please note that this is a test code to ensure that something is not 
working (because of malfunction of syslinux or
incorrect setup of arguments). I tried to isolate the cause, simplifying 
the test as much as possible.
Previously I tried to start other code that prints something on the 
screen and is working in real mode.

W dniu 2012-09-05 18:57, Geert Stappers pisze:
> On Wed, Sep 05, 2012 at 10:43:44AM +0200, Piotr Romaniuk wrote:
>    
>> On 09/04/2012 03:12 PM, Sebastian Herbszt wrote:
>>      
>>> Piotr Romaniuk wrote:
>>>        
>>>> Why this function is disabled?
>>>>          
>>> It was likely an oversight in commit
>>> 1656aefeb6b7195db38d25065137c4f37655f33a [1]:
>>>
>>> COMBOOT interface to the new shuffler; resurrect comapi_chainboot as
>>> that functionality is still potentially relevant.
>>>
>>> [1] http://git.kernel.org/?p=boot/syslinux/syslinux.git;a=commit;h=1656aefeb6b7195db38d25065137c4f37655f33a
>>>
>>>        
>> I added proper entry in vector table (i.e. comapi_chainboot), but
>> after I call int22h/000Dh it hangs and does not start my code. Am I
>> doing something wrong in setup of this interrupt arguments?
>>
>>      com32sys_t input_regs, output_regs;
>>      input_regs.eax.l=0xd;
>>      input_regs.edx.l=0x0;
>>      input_regs.edi.l=OFFS(buffer);
>>      input_regs.ecx.l=512;
>>      input_regs.ebx.l=0x80;
>>      input_regs.esi.l=0x0;
>>      input_regs.ds=0;
>>      input_regs.es=0;
>>
>>      __com32.cs_intcall(0x22,&input_regs,&output_regs);
>>
>> The buffer contained simple code, just to signal if it is executed on GPIO:
>>      buffer:
>>          cli
>>      
> Why this "clear interrupt"?
>
>    
Just to be sure, that only this code is executed.
>    
>>          mov  $GPIO_PORT, dx
>>          mov  $GPIO_VALUE, al
>>          out  al, (dx)
>>      
> Those are byte wide actions.
>    
The port is byte wide.
> What else is connected to the General Purpose Input/Output pins?
>
>    
Only GPIOs.
> What was the previous value of the GPIO register?
>    
There was zero.
> In other words: How is ensured that something new is written to "output"?
>    
It is not written, because code is not executed,
or I did not observed "1" (GPIO_VALUE contains ones) on selected pin, 
hence I concluded that code had been not executed.
I tested the state of the pin by voltage meter.
>>      L:  jmp L
>>      
> That matches 'it hangs'
>    
It is done on purpose, I did not want to execute anything else, just to 
check if it had been run or not.
>    
>> Regards
>> Piotr Romaniuk
>>
>> PS
>> I run this on Atom E640.
>>
>>      
> And most likely there are more factors that effect "is my code executed?"
>
> My advice is to go to something that works and the make small (very small) steps
> to what you want. Keep in mind that if it is easy, every could do it.
>    
> And a plea: allow people to read in the discussion order.
> So please, reply below the previous text.
>
>
> Groeten
> Geert Stappers
>    
Regards
Piotr Romaniuk




More information about the Syslinux mailing list