@@ -33,6 +33,13 @@ public void writeWord(int addr, int value) {
3333 wordWrites .put (addr , value );
3434 super .writeWord (addr , value );
3535 }
36+
37+ @ Override
38+ public void writeLong (int addr , int value ) {
39+ wordWrites .put (addr , (value >> 16 ) & 0xFFFF );
40+ wordWrites .put (addr + 2 , value & 0xFFFF );
41+ super .writeLong (addr , value );
42+ }
3643 };
3744
3845 cpu = new MC68000 ();
@@ -42,7 +49,7 @@ public void writeWord(int addr, int value) {
4249 wordWrites .clear ();
4350 }
4451
45- public void testLswWrittenFirst () {
52+ public void testLswWrittenFirst_MOVE () {
4653 int lsw = 0x2222 ;
4754 int msw = 0x1111 ;
4855 int value = msw << 16 | lsw ;
@@ -73,6 +80,40 @@ public void testLswWrittenFirst() {
7380 Map .Entry <Integer , Integer > second = i .next ();
7481 Assert .assertEquals (firstWordPos , second .getKey ().intValue ());
7582 Assert .assertEquals (msw , second .getValue ().intValue ());
83+ }
84+
85+ public void testLswWrittenFirst_MOVEM () {
86+ int lsw = 0x2222 ;
87+ int msw = 0x1111 ;
88+ int value = msw << 16 | lsw ;
89+ int startPos = 0x104 ;
90+ int endPos = startPos - 8 ; // 2 longs
91+ int valuePos = startPos - 4 ;
92+
93+ bus .writeLong (4 , 0x48e1_8100 ); //48e1 8100 movem.l d0/d7,-(a1)
94+ cpu .setPC (4 );
95+ cpu .setDataRegisterLong (7 , value );
96+ cpu .setAddrRegisterLong (1 , startPos );
7697
98+ wordWrites .clear ();
99+ cpu .execute ();
100+
101+ Assert .assertEquals (cpu .getAddrRegisterLong (1 ), endPos );
102+
103+ long res = bus .readLong (valuePos );
104+ Assert .assertEquals (res , value );
105+
106+ Assert .assertEquals (wordWrites .size (), 4 );
107+
108+ int firstWordPos = startPos - 2 ;
109+ Iterator <Map .Entry <Integer , Integer >> i = wordWrites .entrySet ().iterator ();
110+ Map .Entry <Integer , Integer > first = i .next ();
111+ Assert .assertEquals (firstWordPos , first .getKey ().intValue ());
112+ Assert .assertEquals (lsw , first .getValue ().intValue ());
113+
114+ int secondWordPos = firstWordPos - 2 ;
115+ Map .Entry <Integer , Integer > second = i .next ();
116+ Assert .assertEquals (secondWordPos , second .getKey ().intValue ());
117+ Assert .assertEquals (msw , second .getValue ().intValue ());
77118 }
78119}
0 commit comments