Skip to content

Commit 2c3455a

Browse files
committed
no vector
1 parent 7bd9ea4 commit 2c3455a

File tree

2 files changed

+25
-29
lines changed

2 files changed

+25
-29
lines changed

src/devices/cpu/mpk1839/kl1839vm1.cpp

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ void kl1839vm1_device::ma(u32 op)
291291

292292
u32 kob_data = kop1 ? R(x) : K(am);
293293

294-
if (!m_pcm_queue.empty())
294+
if (m_pcm_queue_size > 0)
295295
{
296296
if (py)
297297
am = vax_pcm_pull();
@@ -345,7 +345,7 @@ void kl1839vm1_device::mb(u32 op)
345345

346346
u32 kob_data = kop2 ? R(x) : R(y);
347347

348-
if (!m_pcm_queue.empty())
348+
if (m_pcm_queue_size > 0)
349349
{
350350
if (py)
351351
y = vax_pcm_pull();
@@ -383,7 +383,7 @@ void kl1839vm1_device::mc(u32 op)
383383
const bool py = BIT(op, 2);
384384
const bool px = BIT(op, 1);
385385

386-
if (!m_pcm_queue.empty())
386+
if (m_pcm_queue_size > 0)
387387
{
388388
if (py)
389389
y = vax_pcm_pull();
@@ -661,7 +661,7 @@ void kl1839vm1_device::decode_op(u32 op)
661661

662662
void kl1839vm1_device::vax_decode_pc()
663663
{
664-
if (!m_pcm_queue.empty())
664+
if (m_pcm_queue_size > 0)
665665
{
666666
LOGVAX("Unused decoded data\n");
667667
}
@@ -671,7 +671,6 @@ void kl1839vm1_device::vax_decode_pc()
671671
m_op_size = 1;
672672
AMC = op << 4;
673673

674-
std::vector<u32> tmp_args;
675674
const vax_disassembler::mode* args = vax_disassembler::get_operands(op);
676675
u8 arg_n = 0;
677676
do
@@ -686,7 +685,7 @@ void kl1839vm1_device::vax_decode_pc()
686685

687686
// byte
688687
case vax_disassembler::mode::bb:
689-
tmp_args.push_back(s8(m_ram.read_byte(PC + m_op_size)));
688+
m_pcm_queue[arg_n] = s8(m_ram.read_byte(PC + m_op_size));
690689
m_mem_reg[arg_n] = 0x8f;
691690
m_op_size += 1;
692691
break;
@@ -700,19 +699,19 @@ void kl1839vm1_device::vax_decode_pc()
700699
u8 p = m_ram.read_byte(PC + m_op_size);
701700
if (p == 0x8f) // M
702701
{
703-
tmp_args.push_back(m_ram.read_byte(PC + m_op_size + 1));
702+
m_pcm_queue[arg_n] = m_ram.read_byte(PC + m_op_size + 1);
704703
m_mem_reg[arg_n] = p;
705704
m_op_size += 2;
706705
}
707706
else if ((p & 0xf0) == 0x80) // M = R(n)+
708707
{
709-
tmp_args.push_back(p & 0x0f);
708+
m_pcm_queue[arg_n] = p & 0x0f;
710709
m_mem_reg[arg_n] = p;
711710
m_op_size += 1;
712711
}
713712
else if ((p & 0xf0) == 0x50) // R
714713
{
715-
tmp_args.push_back(p & 0x0f);
714+
m_pcm_queue[arg_n] = p & 0x0f;
716715
m_mem_reg[arg_n] = p;
717716
m_op_size += 1;
718717
}
@@ -726,7 +725,7 @@ void kl1839vm1_device::vax_decode_pc()
726725

727726
// word
728727
case vax_disassembler::mode::bw:
729-
tmp_args.push_back(s16(m_ram.read_word(PC + m_op_size)));
728+
m_pcm_queue[arg_n] = s16(m_ram.read_word(PC + m_op_size));
730729
m_mem_reg[arg_n] = 0x8f;
731730
m_op_size += 2;
732731
break;
@@ -742,19 +741,19 @@ void kl1839vm1_device::vax_decode_pc()
742741
u8 p = m_ram.read_byte(PC + m_op_size);
743742
if (p == 0x8f) // M
744743
{
745-
tmp_args.push_back(m_ram.read_dword(PC + m_op_size + 1));
744+
m_pcm_queue[arg_n] = m_ram.read_dword(PC + m_op_size + 1);
746745
m_mem_reg[arg_n] = p;
747746
m_op_size += 5;
748747
}
749748
else if ((p & 0xf0) == 0x80) // M = R(n)+
750749
{
751-
tmp_args.push_back(p & 0x0f);
750+
m_pcm_queue[arg_n] = p & 0x0f;
752751
m_mem_reg[arg_n] = p;
753752
m_op_size += 1;
754753
}
755754
else if ((p & 0xf0) == 0x50) // R
756755
{
757-
tmp_args.push_back(p & 0x0f);
756+
m_pcm_queue[arg_n] = p & 0x0f;
758757
m_mem_reg[arg_n] = p;
759758
m_op_size += 1;
760759
}
@@ -768,25 +767,19 @@ void kl1839vm1_device::vax_decode_pc()
768767

769768
default:
770769
LOGVAX("(%x): unknown operand mode %02d in OP=%02x (n=%d)\n", PC, u8(mode), op, arg_n + 1);
771-
tmp_args.clear();
772770
m_op_size = 0;
773771
break;
774772
}
775773

776774
++arg_n;
777775
} while ((arg_n < 6) && (args[arg_n] != vax_disassembler::mode::none));
778776

779-
m_pcm_queue.clear();
777+
m_pcm_queue_size = 0;
780778
if (m_op_size > 0) // above completed without failure
781779
{
782-
while (!tmp_args.empty())
783-
{
784-
m_pcm_queue.push_back(tmp_args.back());
785-
tmp_args.pop_back();
786-
}
787-
780+
m_pcm_queue_size = (arg_n == 1 && m_mem_reg[0] == u8(~0)) ? 0 : arg_n; // none args case
788781
u8 args_type = 0;
789-
if (!m_pcm_queue.empty())
782+
if (m_pcm_queue_size > 0)
790783
{
791784
for (u8 i = 0; i < arg_n; ++i)
792785
{
@@ -896,14 +889,13 @@ void kl1839vm1_device::vax_decode_pc()
896889

897890
u32 kl1839vm1_device::vax_pcm_pull(bool is_bo)
898891
{
899-
if (m_pcm_queue.empty())
892+
if (m_pcm_queue_size == 0)
900893
{
901894
LOGVAX("Pooling empty decoder queue\n");
902895
}
903896
else
904897
{
905-
PCM = m_pcm_queue.back();
906-
m_pcm_queue.pop_back();
898+
PCM = m_pcm_queue[0];
907899

908900
bool is_mem = (m_mem_reg[0] & 0xf0) == 0x80;
909901
if (is_bo && !is_mem)
@@ -916,7 +908,10 @@ u32 kl1839vm1_device::vax_pcm_pull(bool is_bo)
916908
PCM = R(PCM);
917909
R(r) = PCM + 1;
918910
}
911+
912+
std::copy(std::begin(m_pcm_queue) + 1, std::end(m_pcm_queue), std::begin(m_pcm_queue));
919913
std::copy(std::begin(m_mem_reg) + 1, std::end(m_mem_reg), std::begin(m_mem_reg));
914+
m_pcm_queue_size--;
920915
}
921916

922917
return PCM;
@@ -926,7 +921,6 @@ u32 kl1839vm1_device::vax_pcm_pull(bool is_bo)
926921
void kl1839vm1_device::device_start()
927922
{
928923
m_vax_dasm = std::make_unique<vax_disassembler>();
929-
m_pcm_queue.resize(6);
930924

931925
space(AS_OPCODES).cache(m_microcode);
932926
space(AS_DATA).specific(m_sysram);
@@ -944,7 +938,8 @@ void kl1839vm1_device::device_start()
944938
save_pointer(NAME(m_consts), 0x10);
945939
save_pointer(NAME(m_reg), 0x20);
946940
save_item(NAME(m_op_size));
947-
save_item(NAME(m_pcm_queue));
941+
save_item(NAME(m_pcm_queue_size));
942+
save_pointer(NAME(m_pcm_queue), 6);
948943
save_pointer(NAME(m_mem_reg), 6);
949944

950945
// Register debugger state
@@ -1059,7 +1054,7 @@ void kl1839vm1_device::device_reset()
10591054
m_vma_tmp.d = 0;
10601055
RV = 0;
10611056
SCH = 0;
1062-
m_pcm_queue.clear();
1057+
m_pcm_queue_size = 0;
10631058
m_op_size = 0;
10641059
}
10651060

src/devices/cpu/mpk1839/kl1839vm1.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ class kl1839vm1_device : public cpu_device
111111
int m_icount;
112112
u32 m_op_size;
113113

114-
std::vector<u32> m_pcm_queue;
114+
u8 m_pcm_queue_size;
115+
u32 m_pcm_queue[6];
115116
u8 m_mem_reg[6];
116117
};
117118

0 commit comments

Comments
 (0)