/* * Write memory with number of blocks to start block */ static void writeblock(unsigned long blk, unsigned long addr, unsigned long blk_count, unsigned long zero_page) { unsigned long blk_end; blk_end = blk + blk_count; if (blk_end >= device.blk_end) panic(EMEM, "Device too small"); ccw_program.wrccw.count = b2m(blk_count); lodata.blk_ct = blk_count; lodata.blk_nr = blk; create_ida_list(ccw_program.ida_list, b2m(blk_count), addr, zero_page); start_io(IPL_SC, &irb, &orb); }
/* * Dump all memory to DASD partition */ void dt_dump_mem(void) { unsigned long blk, addr, page; ccw_program_init(); blk = device.blk_start; page = get_zeroed_page(); /* Write dump header */ writeblock(blk, __pa(dump_hdr), m2b(DF_S390_HDR_SIZE), 0); blk += DF_S390_HDR_SIZE / BLK_SIZE; /* Write memory */ for (addr = 0; addr < dump_hdr->mem_size; addr += b2m(BLK_PWRT)) { writeblock(blk, addr, BLK_PWRT, page); progress_print(addr); blk += BLK_PWRT; } progress_print(addr); /* Write end marker */ df_s390_em_page_init(page); writeblock(blk, page, 1, 0); free_page(page); }
void b2m_state::b2mrom(machine_config &config) { b2m(config); m_maincpu->set_addrmap(AS_IO, &b2m_state::b2m_rom_io); }