summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/abc80x.cpp
diff options
context:
space:
mode:
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
commit941c86be52fe3e19beb3cb30410717a414c7a292 (patch)
tree2a14442e31cdd0d08a8134063378a60b05d85532 /src/mame/drivers/abc80x.cpp
parent65527a0530fce1c278b496047ddd6417272ab2f1 (diff)
abc800: WIP (nw)
Diffstat (limited to 'src/mame/drivers/abc80x.cpp')
-rw-r--r--src/mame/drivers/abc80x.cpp57
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