unsigned ProgPeekWrap(address addr,char * buff,unsigned length ) { unsigned peek1,peek2; peek1 = ProgPeek( addr, buff, length ); if( peek1 == 0 || peek1 == length ) return( peek1 ); peek2 = ProgPeek( AddrAddWrap( addr, peek1 ), buff+peek1, length-peek1 ); return( peek1+peek2 ); }
size_t ProgPeekWrap( address addr, char * buff, size_t length ) { size_t peek1,peek2; peek1 = ProgPeek( addr, buff, length ); if( peek1 == 0 || peek1 == length ) return( peek1 ); peek2 = ProgPeek( AddrAddWrap( addr, peek1 ), buff + peek1, length - peek1 ); return( peek1 + peek2 ); }
static bool ItemGet( address *addr, item_mach *item, item_type typ ) { unsigned size = Sizes[typ & IT_TYPE_MASK]; if( typ & IT_DEC ) addr->mach.offset -= size; if( typ & IT_IO ) { if( PortPeek( addr->mach.offset, item, size ) != size ) { if( typ & IT_ERR ) { Error( ERR_NONE, LIT_ENG( ERR_NO_READ_PORT ), *addr ); } return( false ); } } else { if( ProgPeek( *addr , item, size ) != size ) { if( typ & IT_ERR ) { AddrFix( addr ); Error( ERR_NONE, LIT_ENG( ERR_NO_READ_MEM ), *addr ); } return( false ); } } if( typ & IT_INC ) addr->mach.offset += size; return( true ); }
static void AsmSetFirst( a_window *wnd, address addr, bool use_first_source ) { int row,rows; asm_window *asw = WndAsm( wnd ); char chr; mad_disasm_data *dd; unsigned addr_len; DIPHDL( cue, ch ); _AllocA( dd, asw->ddsize ); if( IS_NIL_ADDR( addr ) || ProgPeek( addr, &chr, 1 ) != 1 ) { addr = NilAddr; } asw->ins[ 0 ].addr = addr; asw->ins[ 0 ].line = 0; addr_len = AddrToString( &addr, MAF_OFFSET, TxtBuff, TXT_LEN ) - TxtBuff; if( addr_len != asw->addr_len ) { asw->addr_len = addr_len; AsmResize( wnd ); // recusively calls this routine! WndZapped( wnd ); return; } rows = WndRows( wnd ); for( row = 0; row < rows; ++row ) { asw->ins[ row ].addr = addr; if( IS_NIL_ADDR( addr ) ) continue; if( ExactCueAt( asw, addr, ch ) ) { if( row != 0 || use_first_source ) { asw->ins[ row ].addr = addr; asw->ins[ row ].line = CueLine( ch ); ++row; if( row >= rows ) break; } } asw->ins[ row ].addr = addr; asw->ins[ row ].line = 0; if( MADDisasm( dd, &addr, 0 ) != MS_OK ) { addr = NilAddr; } } }
unsigned DIGCLIENT MADCliReadMem( address a, unsigned size, void *buff ) { return( ProgPeek( a, buff, size ) ); }