diff options
author | Curt Coder <curtcoder@mail.com> | 2018-04-30 10:49:58 +0300 |
---|---|---|
committer | Curt Coder <curtcoder@mail.com> | 2018-05-02 13:53:41 +0300 |
commit | 941c86be52fe3e19beb3cb30410717a414c7a292 (patch) | |
tree | 2a14442e31cdd0d08a8134063378a60b05d85532 /src/mame/drivers/abc80x.cpp | |
parent | 65527a0530fce1c278b496047ddd6417272ab2f1 (diff) |
abc800: WIP (nw)
Diffstat (limited to 'src/mame/drivers/abc80x.cpp')
-rw-r--r-- | src/mame/drivers/abc80x.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/mame/drivers/abc80x.cpp b/src/mame/drivers/abc80x.cpp index e2f39912a4b..1b4485dbacb 100644 --- a/src/mame/drivers/abc80x.cpp +++ b/src/mame/drivers/abc80x.cpp @@ -1085,6 +1085,61 @@ void abc806_state::machine_reset() } +QUICKLOAD_LOAD_MEMBER( abc800_state, bac ) +{ + address_space &space = m_maincpu->space(AS_PROGRAM); + + std::vector<uint8_t> data; + data.resize(quickload_size); + image.fread(&data[0], quickload_size); + + uint8_t prstat = data[2]; + uint16_t prgsz = (data[5] << 8) | data[4]; + uint16_t varsz = (data[7] << 8) | data[6]; + uint16_t varad = (data[9] << 8) | data[8]; + uint16_t comsz = (data[13] << 8) | data[12]; + uint16_t comcs = (data[14] << 8) | data[15]; + uint16_t comtop = 0x8000 + comsz; + uint16_t vartb = comtop; + + uint16_t heap = 0x8000 + comsz + varad; + uint16_t bofa = 0xf169 - prgsz - 8; + uint16_t eofa = bofa; + + for (int i = 0; i < prgsz; i++) { + space.write_byte(eofa++, data[i]); + } + eofa--; + + for (int i = prgsz; i < quickload_size; i++) { + space.write_byte(heap++, data[i]); + } + heap = 0x8000 + comsz + varsz; + + space.write_byte(0xff06, bofa & 0xff); + space.write_byte(0xff07, bofa >> 8); + + space.write_byte(0xff08, eofa & 0xff); + space.write_byte(0xff09, eofa >> 8); + + space.write_byte(0xff0a, heap & 0xff); + space.write_byte(0xff0b, heap >> 8); + + space.write_byte(0xff26, prstat); + + space.write_byte(0xff2c, vartb & 0xff); + space.write_byte(0xff2d, vartb >> 8); + + space.write_byte(0xff30, comtop & 0xff); + space.write_byte(0xff31, comtop >> 8); + + space.write_byte(0xff32, comcs & 0xff); + space.write_byte(0xff33, comcs >> 8); + + return image_init_result::PASS; +} + + //************************************************************************** // MACHINE DRIVERS @@ -1239,6 +1294,8 @@ MACHINE_CONFIG_START(abc800m_state::abc800m) // software list MCFG_SOFTWARE_LIST_ADD("flop_list", "abc800") MCFG_SOFTWARE_LIST_ADD("hdd_list", "abc800_hdd") + + MCFG_QUICKLOAD_ADD("quickload", abc800_state, bac, "bac", 2) MACHINE_CONFIG_END |