opcodes[]: global scope global { global scope implicit__ide { IdentifyData kill ( IdentifyData ) { var IdentifyData ANON dup ( -- IdentifyData¢ ) item+0 "sector" ( -- uint16[256]& ) peek ( uint16[256]& -- uint16[256]¢ ) dispose ( uint16[256] -- ) dup ( -- IdentifyData¢ ) item+2 "model_name" ( -- ucs1str& ) peek ( ucs1str& -- ucs1str¢ ) dispose ( ucs1str -- ) dup ( -- IdentifyData¢ ) item+4 "serial_number" ( -- ucs1str& ) peek ( ucs1str& -- ucs1str¢ ) dispose ( ucs1str -- ) dup ( -- IdentifyData¢ ) item+6 "firmware_revision" ( -- ucs1str& ) peek ( ucs1str& -- ucs1str¢ ) dispose ( ucs1str -- ) } } type utf8str: type ucs1str: type ucs2str: type FD: type BlockDevice: type IdeBlockDevice: bool read_block ( IdeBlockDevice¢ fd, uint32 blk, uint8[]¢ bu ) { var IdeBlockDevice¢ fd var uint32 blk var uint8[]¢ bu lvar+6+0 "fd" ( -- IdeBlockDevice¢& ) peek ( IdeBlockDevice¢& -- IdeBlockDevice¢ ) lvar+2+2 "blk" ( -- uint32& ) peek ( uint32& -- uint32 ) lvar+0+6 "bu" ( -- uint8[]¢& ) peek ( uint8[]¢& -- uint8[]¢ ) push_procptr IdeBlockDevice.read_sector ( -- uint8(uint32, void*)* ) call io_block ( IdeBlockDevice¢, uint32, uint8[]¢, uint8(uint32,void*) -- bool ) tor ( bool -- ) drop ( uint8[]¢ -- ) drop ( uint32 -- ) drop ( IdeBlockDevice¢ -- ) fromr ( -- bool ) } bool write_block ( IdeBlockDevice¢ fd, uint32 blk, uint8[]¢ bu ) { var IdeBlockDevice¢ fd var uint32 blk var uint8[]¢ bu lvar+6+0 "fd" ( -- IdeBlockDevice¢& ) peek ( IdeBlockDevice¢& -- IdeBlockDevice¢ ) lvar+2+2 "blk" ( -- uint32& ) peek ( uint32& -- uint32 ) lvar+0+6 "bu" ( -- uint8[]¢& ) peek ( uint8[]¢& -- uint8[]¢ ) push_procptr IdeBlockDevice.write_sector ( -- uint8(uint32, void*)* ) call io_block ( IdeBlockDevice¢, uint32, uint8[]¢, uint8(uint32,void*) -- bool ) tor ( bool -- ) drop ( uint8[]¢ -- ) drop ( uint32 -- ) drop ( IdeBlockDevice¢ -- ) fromr ( -- bool ) } IdentifyData identify ( IdeBlockDevice¢ fd ) { var IdeBlockDevice¢ fd var uint16[] sector var IdentifyData d 512 ( -- uint16 ) alloc ( uint16 -- uint16[256] ) lvar+0+2 "fd" ( -- IdeBlockDevice¢& ) peek ( IdeBlockDevice¢& -- IdeBlockDevice¢ ) item+17 "drive_head" ( -- uint8& ) peek ( uint8& -- uint8 ) call select_drive ( uint8 -- uint8 ) 1 ( -- uint8 ) & ( uint8, uint8 -- uint8 ) !! ( uint8 -- bool ) or1 ( bool -- ) -> L698 lvar-2+2 "sector" ( -- uint16[]& ) peek ( uint16[]& -- uint16[]¢ ) 0 ( -- int16 ) atindex ( uint16[]¢, int16 -- uint16& ) call identify_device ( void* -- uint8 ) 1 ( -- uint8 ) & ( uint8, uint8 -- uint8 ) !! ( uint8 -- bool ) L698: jp_z ( bool -- ) -> L696 2 ( -- OSErr ) call null_with_error ( OSErr -- void* ) jp ( -- ) -> L695 L696: 29 ( -- uint16 ) alloc ( uint16 -- IdentifyData ) lvar-2+4 "sector" ( -- uint16[]& ) peek ( uint16[]& -- uint16[]¢ ) retain ( uint16[]¢ -- uint16[] ) lvar-4+6 "d" ( -- IdentifyData& ) peek ( IdentifyData& -- IdentifyData¢ ) item+0 "sector" ( -- uint16[256]& ) swapwithvar ( uint16[256], uint16[256]& -- uint16[256] ) dispose ( uint16[256] -- ) lvar-2+4 "sector" ( -- uint16[]& ) peek ( uint16[]& -- uint16[]¢ ) retain ( uint16[]¢ -- uint16[] ) 10 ( -- uint8 ) 47 ( -- uint8 ) call swap_bytes ( uint16[], uint8, uint8 ) lvar-2+4 "sector" ( -- uint16[]& ) peek ( ucs1str& -- ucs1str¢ ) 54 ( -- uint8 ) 94 ( -- uint8 ) call idfstr ( ucs1str¢, uint8, uint8 -- ucs1str ) lvar-4+6 "d" ( -- IdentifyData& ) peek ( IdentifyData& -- IdentifyData¢ ) item+2 "model_name" ( -- ucs1str& ) swapwithvar ( ucs1str, ucs1str& -- ucs1str ) dispose ( ucs1str -- ) lvar-2+4 "sector" ( -- uint16[]& ) peek ( ucs1str& -- ucs1str¢ ) 20 ( -- uint8 ) 40 ( -- uint8 ) call idfstr ( ucs1str¢, uint8, uint8 -- ucs1str ) lvar-4+6 "d" ( -- IdentifyData& ) peek ( IdentifyData& -- IdentifyData¢ ) item+4 "serial_number" ( -- ucs1str& ) swapwithvar ( ucs1str, ucs1str& -- ucs1str ) dispose ( ucs1str -- ) lvar-2+4 "sector" ( -- uint16[]& ) peek ( ucs1str& -- ucs1str¢ ) 46 ( -- uint8 ) 54 ( -- uint8 ) call idfstr ( ucs1str¢, uint8, uint8 -- ucs1str ) lvar-4+6 "d" ( -- IdentifyData& ) peek ( IdentifyData& -- IdentifyData¢ ) item+6 "firmware_revision" ( -- ucs1str& ) swapwithvar ( ucs1str, ucs1str& -- ucs1str ) dispose ( ucs1str -- ) lvar-2+4 "sector" ( -- uint16[]& ) peek ( uint16[]& -- uint16[]¢ ) retain ( uint16[]¢ -- uint16[] ) 10 ( -- uint8 ) 47 ( -- uint8 ) call swap_bytes ( uint16[], uint8, uint8 ) lvar-2+4 "sector" ( -- uint16[]& ) peek ( uint16[]& -- uint16[]¢ ) 80 ( -- int16 ) atindex ( uint16[]¢, int16 -- uint16& ) peek ( uint16& -- uint16 ) lvar-4+6 "d" ( -- IdentifyData& ) peek ( IdentifyData& -- IdentifyData¢ ) item+8 "ata_version" ( -- uint16& ) poke ( uint16, uint16& -- ) lvar-2+4 "sector" ( -- uint16[]& ) peek ( uint16[]& -- uint16[]¢ ) 0 ( -- int16 ) atindex ( uint16[]¢, int16 -- uint16& ) peek ( uint16& -- uint16 ) 64 ( -- uint16 ) & ( uint16, uint16 -- uint16 ) cast ( uint16 -- bool ) lvar-4+6 "d" ( -- IdentifyData& ) peek ( IdentifyData& -- IdentifyData¢ ) item+21 "fixed_disk" ( -- bool& ) poke ( bool, bool& -- ) lvar-2+4 "sector" ( -- uint16[]& ) peek ( uint16[]& -- uint16[]¢ ) 0 ( -- int16 ) atindex ( uint16[]¢, int16 -- uint16& ) peek ( uint16& -- uint16 ) 128 ( -- uint16 ) & ( uint16, uint16 -- uint16 ) cast ( uint16 -- bool ) lvar-4+6 "d" ( -- IdentifyData& ) peek ( IdentifyData& -- IdentifyData¢ ) item+22 "removable_medium" ( -- bool& ) poke ( bool, bool& -- ) lvar-2+4 "sector" ( -- uint16[]& ) peek ( uint16[]& -- uint16[]¢ ) 53 ( -- int16 ) atindex ( uint16[]¢, int16 -- uint16& ) peek ( uint16& -- uint16 ) 1 ( -- uint16 ) & ( uint16, uint16 -- uint16 ) cast ( uint16 -- bool ) lvar-4+6 "d" ( -- IdentifyData& ) peek ( IdentifyData& -- IdentifyData¢ ) item+18 "supports_pio3_dma1" ( -- bool& ) poke ( bool, bool& -- ) lvar-2+4 "sector" ( -- uint16[]& ) peek ( uint16[]& -- uint16[]¢ ) 53 ( -- int16 ) atindex ( uint16[]¢, int16 -- uint16& ) peek ( uint16& -- uint16 ) 2 ( -- uint16 ) & ( uint16, uint16 -- uint16 ) cast ( uint16 -- bool ) lvar-4+6 "d" ( -- IdentifyData& ) peek ( IdentifyData& -- IdentifyData¢ ) item+19 "supports_ultra_dma" ( -- bool& ) poke ( bool, bool& -- ) lvar-2+4 "sector" ( -- uint16[]& ) peek ( uint16[]& -- uint16[]¢ ) 49 ( -- int16 ) atindex ( uint16[]¢, int16 -- uint16& ) peek ( uint16& -- uint16 ) 512 ( -- uint16 ) & ( uint16, uint16 -- uint16 ) cast ( uint16 -- bool ) lvar-4+6 "d" ( -- IdentifyData& ) peek ( IdentifyData& -- IdentifyData¢ ) item+24 "lba_supported" ( -- bool& ) poke ( bool, bool& -- ) lvar-2+4 "sector" ( -- uint16[]& ) peek ( uint16[]& -- uint16[]¢ ) 160 ( -- int16 ) atindex ( uint16[]¢, int16 -- uint16& ) peek ( uint16& -- uint16 ) cast ( uint16 -- uint8 ) lvar-4+6 "d" ( -- IdentifyData& ) peek ( IdentifyData& -- IdentifyData¢ ) item+23 "cfa_power_mode" ( -- uint8& ) poke ( uint8, uint8& -- ) lvar-2+4 "sector" ( -- uint16[]& ) peek ( uint16[]& -- uint16[]¢ ) 47 ( -- int16 ) atindex ( uint16[]¢, int16 -- uint16& ) peek ( uint16& -- uint16 ) 32768 ( -- uint16 ) & ( uint16, uint16 -- uint16 ) !! ( uint16 -- bool ) jp_z ( bool -- ) -> L699 lvar-2+4 "sector" ( -- uint16[]& ) peek ( uint16[]& -- uint16[]¢ ) 47 ( -- int16 ) atindex ( uint16[]¢, int16 -- uint16& ) lo ( uint16& -- uint8& ) peek ( uint8& -- uint8 ) lvar-4+6 "d" ( -- IdentifyData& ) peek ( IdentifyData& -- IdentifyData¢ ) item+20 "max_rw_multiple" ( -- uint8& ) poke ( uint8, uint8& -- ) jp ( -- ) -> L699 L699: lvar-2+4 "sector" ( -- uint16[]& ) peek ( uint16[]& -- uint16[]¢ ) 82 ( -- int16 ) atindex ( uint16[]¢, int16 -- uint16& ) peek ( uint32& -- uint32 ) lvar-4+8 "d" ( -- IdentifyData& ) peek ( IdentifyData& -- IdentifyData¢ ) item+10 "cmd_sets_supported" ( -- uint32& ) poke ( uint32, uint32& -- ) lvar-2+4 "sector" ( -- uint16[]& ) peek ( uint16[]& -- uint16[]¢ ) 85 ( -- int16 ) atindex ( uint16[]¢, int16 -- uint16& ) peek ( uint32& -- uint32 ) lvar-4+8 "d" ( -- IdentifyData& ) peek ( IdentifyData& -- IdentifyData¢ ) item+14 "cmd_sets_enabled" ( -- uint32& ) poke ( uint32, uint32& -- ) lvar-2+4 "sector" ( -- uint16[]& ) peek ( uint16[]& -- uint16[]¢ ) 60 ( -- int16 ) atindex ( uint16[]¢, int16 -- uint16& ) peek ( uint32& -- uint32 ) lvar-4+8 "d" ( -- IdentifyData& ) peek ( IdentifyData& -- IdentifyData¢ ) item+25 "lba_dflt_capacity" ( -- uint32& ) poke ( uint32, uint32& -- ) lvar-4+4 "d" ( -- IdentifyData& ) peek ( IdentifyData& -- IdentifyData¢ ) retain ( IdentifyData¢ -- IdentifyData ) tor ( IdentifyData -- ) call! kill ( IdentifyData -- IdentifyData ) dispose ( IdentifyData -- ) fromr ( -- IdentifyData ) jp ( -- ) -> L695 L695: tor ( IdentifyData -- ) dispose ( uint16[] -- ) drop ( IdeBlockDevice¢ -- ) fromr ( -- IdentifyData ) } bool io_block ( IdeBlockDevice¢ fd, uint32 blk, uint8[]¢ bu, uint8(uint32, void*) io ) { var IdeBlockDevice¢ fd var uint32 blk var uint8[]¢ bu var uint8(uint32, void*) io var uint8 status lvar+2+0 "bu" ( -- uint8[]¢& ) peek ( uint8[]¢& -- uint8[]¢ ) count ( uint8[]¢ -- uint16 ) 512 ( -- uint16 ) == ( uint16, uint16 -- bool ) call assert1 ( bool ) lvar+8+0 "fd" ( -- IdeBlockDevice¢& ) peek ( IdeBlockDevice¢& -- IdeBlockDevice¢ ) item+17 "drive_head" ( -- uint8& ) peek ( uint8& -- uint8 ) call select_drive ( uint8 -- uint8 ) lvar-2+2 "status" ( -- uint8& ) peek ( uint8& -- uint8 ) 255 ( -- uint8 ) == ( uint8, uint8 -- bool ) or1 ( bool -- ) -> L681 lvar-2+2 "status" ( -- uint8& ) peek ( uint8& -- uint8 ) 64 ( -- uint8 ) & ( uint8, uint8 -- uint8 ) ! ( uint8 -- bool ) L681: jp_z ( bool -- ) -> L679 3 ( -- OSErr ) call yes_with_error ( OSErr -- bool ) jp ( -- ) -> L678 L679: lvar-2+2 "status" ( -- uint8& ) peek ( uint8& -- uint8 ) 1 ( -- uint8 ) & ( uint8, uint8 -- uint8 ) !! ( uint8 -- bool ) or1 ( bool -- ) -> L684 lvar+4+2 "blk" ( -- uint32& ) peek ( uint32& -- uint32 ) lvar+2+6 "bu" ( -- uint8[]¢& ) peek ( uint8[]¢& -- uint8[]¢ ) 0 ( -- int16 ) atindex ( uint8[]¢, int16 -- uint8& ) lvar+0+8 "io" ( -- uint8(uint32, void*)& ) peek ( uint8(uint32, void*)& -- uint8(uint32, void*) ) call_procptr ( uint32, void*, uint8(uint32, void*) -- uint8 ) 1 ( -- uint8 ) & ( uint8, uint8 -- uint8 ) !! ( uint8 -- bool ) L684: jp_z ( bool -- ) -> L682 2 ( -- OSErr ) call yes_with_error ( OSErr -- bool ) jp ( -- ) -> L678 L682: 0 ( -- bool ) L678: tor ( bool -- ) drop ( uint8 -- ) drop ( uint8(uint32, void*) -- ) drop ( uint8[]¢ -- ) drop ( uint32 -- ) drop ( IdeBlockDevice¢ -- ) fromr ( -- bool ) } void swap_bytes ( uint16[] bu, uint8 a, uint8 e ) { var uint16[] bu var uint8 a var uint8 e L689: lvar+0+0 "e" ( -- uint8& ) mmpeek ( uint8& -- uint8 ) lvar+2+2 "a" ( -- uint8& ) peek ( uint8& -- uint8 ) >= ( uint8, uint8 -- bool ) jp_z ( bool -- ) -> L688 lvar+4+0 "bu" ( -- uint16[]& ) peek ( uint16[]& -- uint16[]¢ ) lvar+0+2 "e" ( -- uint8& ) peek ( uint8& -- uint8 ) cast ( uint8 -- int16 ) atindex ( uint16[]¢, int16 -- uint16& ) peek ( uint16& -- uint16 ) call swap_bytes ( uint16 -- uint16 ) lvar+4+2 "bu" ( -- uint16[]& ) peek ( uint16[]& -- uint16[]¢ ) lvar+0+4 "e" ( -- uint8& ) peek ( uint8& -- uint8 ) cast ( uint8 -- int16 ) atindex ( uint16[]¢, int16 -- uint16& ) poke ( uint16, uint16& -- ) jp ( -- ) -> L689 L688: drop ( uint8 -- ) drop ( uint8 -- ) dispose ( uint16[] -- ) } ucs1str idfstr ( ucs1str¢ bu, uint8 a, uint8 e ) { var ucs1str¢ bu var uint8 a var uint8 e L693: lvar+0+0 "e" ( -- uint8& ) peekmm ( uint8& -- uint8 ) lvar+2+2 "a" ( -- uint8& ) peek ( uint8& -- uint8 ) > ( uint8, uint8 -- bool ) jp_z ( bool -- ) -> L694 lvar+4+0 "bu" ( -- ucs1str¢& ) peek ( ucs1str¢& -- ucs1str¢ ) lvar+0+2 "e" ( -- uint8& ) peek ( uint8& -- uint8 ) cast ( uint8 -- int16 ) atindex ( ucs1str¢, int16 -- ucs1char& ) peek ( ucs1char& -- ucs1char ) cast ( ucs1char -- uint8 ) 32 ( -- uint8 ) > ( uint8, uint8 -- bool ) jp_nz ( bool -- ) -> L694 jp ( -- ) -> L693 L694: lvar+4+0 "bu" ( -- ucs1str¢& ) peek ( ucs1str¢& -- ucs1str¢ ) lvar+2+2 "a" ( -- uint8& ) peek ( uint8& -- uint8 ) cast ( uint8 -- int16 ) lvar+0+4 "e" ( -- uint8& ) peek ( uint8& -- uint8 ) cast ( uint8 -- uint16 ) 1 ( -- uint16 ) + ( uint16, uint16 -- uint16 ) substr ( ucs1str¢, int16, int16 -- ucs1char[to] ) cast ( ucs1char[to] -- ucs1str ) tor ( ucs1str -- ) drop ( uint8 -- ) drop ( uint8 -- ) drop ( ucs1str¢ -- ) fromr ( -- ucs1str ) } IdeBlockDevice new ( ucs1str¢ name, bool master ) { var ucs1str¢ name var bool master var uint8 drive_head var uint8 status var uint8 i local scope ANON var uint32[128] bu local scope ANON var IdeBlockDevice this lvar+0+0 "master" ( -- bool& ) peek ( bool& -- bool ) jp_z ( bool -- ) -> L666 224 ( -- uint8 ) jp ( -- ) -> L667 L666: 240 ( -- uint8 ) L667: 0 ( -- uint8 ) 50 ( -- uint8 ) L668: lvar-2+6 "drive_head" ( -- uint8& ) peek ( uint8& -- uint8 ) call select_drive ( uint8 -- uint8 ) lvar-4+8 "status" ( -- uint8& ) poke ( uint8, uint8& -- ) lvar-6+6 "i" ( -- uint8& ) mmpeek ( uint8& -- uint8 ) !! ( uint8 -- bool ) and0 ( bool -- ) -> L671 lvar-4+6 "status" ( -- uint8& ) peek ( uint8& -- uint8 ) 128 ( -- uint8 ) & ( uint8, uint8 -- uint8 ) !! ( uint8 -- bool ) or1 ( bool -- ) -> L671 lvar-4+6 "status" ( -- uint8& ) peek ( uint8& -- uint8 ) 64 ( -- uint8 ) & ( uint8, uint8 -- uint8 ) ! ( uint8 -- bool ) L671: jp_z ( bool -- ) -> L669 call wait () jp ( -- ) -> L668 L669: lvar-6+6 "i" ( -- uint8& ) peek ( uint8& -- uint8 ) 0 ( -- uint8 ) != ( uint8, uint8 -- bool ) jp_z ( bool -- ) -> L672 512 ( -- uint16 ) alloc ( uint16 -- uint32[128] ) call set_8bit_data ( -- uint8 ) 1 ( -- uint8 ) & ( uint8, uint8 -- uint8 ) !! ( uint8 -- bool ) or1 ( bool -- ) -> L676 lvar-8+8 "bu" ( -- uint32[128]& ) peek ( uint32[128]& -- uint32[128]¢ ) 0 ( -- int16 ) atindex ( uint32[128]¢, int16 -- uint32& ) call identify_device ( void* -- uint8 ) 1 ( -- uint8 ) & ( uint8, uint8 -- uint8 ) !! ( uint8 -- bool ) L676: ! ( bool -- bool ) jp_z ( bool -- ) -> L674 18 ( -- uint16 ) alloc ( uint16 -- IdeBlockDevice ) lvar-10+10 "this" ( -- IdeBlockDevice& ) peek ( IdeBlockDevice& -- IdeBlockDevice¢ ) 4 ( -- NodeType ) lvar+2+14 "name" ( -- ucs1str¢& ) peek ( ucs1str¢& -- ucs1str¢ ) gvar-2 "ide_handlers" ( -- FD_Handlers& ) peek ( FD_Handlers& -- FD_Handlers¢ ) 9 ( -- uint8 ) lvar-8+20 "bu" ( -- uint32[128]& ) peek ( uint32[128]& -- uint32[128]¢ ) 30 ( -- int16 ) atindex ( uint32[128]¢, int16 -- uint32& ) peek ( uint32& -- uint32 ) call init ( BlockDevice¢, NodeType, ucs1str¢, FD_Handlers¢, uint8, uint32 ) lvar-2+10 "drive_head" ( -- uint8& ) peek ( uint8& -- uint8 ) lvar-10+12 "this" ( -- IdeBlockDevice& ) peek ( IdeBlockDevice& -- IdeBlockDevice¢ ) item+17 "drive_head" ( -- uint8& ) poke ( uint8, uint8& -- ) lvar-10+10 "this" ( -- IdeBlockDevice& ) peek ( IdeBlockDevice& -- IdeBlockDevice¢ ) retain ( IdeBlockDevice¢ -- IdeBlockDevice ) tor ( IdeBlockDevice -- ) call! kill ( IdeBlockDevice -- IdeBlockDevice ) dispose ( IdeBlockDevice -- ) dispose ( uint32[128] -- ) fromr ( -- IdeBlockDevice ) jp ( -- ) -> L665 L674: dispose ( uint32[128] -- ) jp ( -- ) -> L672 L672: NULL ( -- void* ) L665: tor ( IdeBlockDevice -- ) drop ( uint8 -- ) drop ( uint8 -- ) drop ( uint8 -- ) drop ( bool -- ) drop ( ucs1str¢ -- ) fromr ( -- IdeBlockDevice ) local scope ANON { local scope ANON { } } } FD_Handlers new_ide_handlers () { #assert FD_Handlers.getctl == 0 #assert FD_Handlers.setctl == 2 #assert FD_Handlers.avail_in == 4 #assert FD_Handlers.avail_out == 6 #assert FD_Handlers.getc == 8 #assert FD_Handlers.putc == 10 #assert FD_Handlers.read == 12 #assert FD_Handlers.write == 14 #assert FD_Handlers.read_block == 16 #assert FD_Handlers.write_block == 18 #assert FD_Handlers.kill == 20 #assert FD_Handlers.getfpos == 22 #assert FD_Handlers.setfpos == 24 p_enter dw ISTR dw 26 dw BlockDevice.getctl__11BlockDeviceC_5uint8_6uint16 dw BlockDevice.setctl__11BlockDeviceC_5uint8_6uint16_ dw no_avail_in__2FDC_6uint16 dw no_avail_in__2FDC_6uint16 ; avail_out dw no_avail_in__2FDC_6uint16 ; no_getc__2FDC_8ucs1char dw no_putc__2FDC_8ucs1char_ dw no_read__2FDC_5uint8ATOE_4bool dw no_read__2FDC_5uint8ATOE_4bool ; write dw IdeBlockDevice.read_block__14IdeBlockDeviceC_6uint32_5uint8AEC_4bool dw IdeBlockDevice.write_block__14IdeBlockDeviceC_6uint32_5uint8AEC_4bool dw FD.kill__2FDC_ dw no_getfpos__2FDC_6uint32 dw no_setfpos__2FDC_6uint32_4bool dw RETURN } } call new_ide_handlers ( -- FD_Handlers ) gsinit "ide_handlers"