--- np2/i286a/i286aop.inc 2003/12/16 04:58:00 1.1 +++ np2/i286a/i286aop.inc 2003/12/17 14:04:43 1.4 @@ -127,7 +127,7 @@ $label EAREG16 r12 cmp r0, #&c0 bcc $label.1 CPUWORK $regclk - R8SRC r0, r5 + R16SRC r0, r5 ldrh r4, [r5, #CPU_REG] $alu r4, r6 mov pc, r11 @@ -181,6 +181,61 @@ $label CPUWORK $clk MACRO +$label OP_EA8 $alu, $regclk, $memclk +$label cmp r0, #&c0 + bcc $label.1 + CPUWORK $regclk + R8SRC r0, r5 + ldrb r4, [r5, #CPU_REG] + $alu r4 + strb r1, [r5, #CPU_REG] + mov pc, r11 +$label.1 CPUWORK $memclk + bl i286a_ea + cmp r0, #I286_MEMWRITEMAX + bcs $label.2 + ldrb r4, [r9, r0] + $alu r4 + strb r1, [r9, r0] + mov pc, r11 +$label.2 mov r5, r0 + bl i286_memoryread + $alu r0 + mov r0, r5 + mov lr, r11 + b i286_memorywrite + MEND + + MACRO +$label OP_EA16 $alu, $regclk, $memclk +$label cmp r0, #&c0 + bcc $label.1 + CPUWORK $regclk + R16SRC r0, r5 + ldrh r4, [r5, #CPU_REG] + $alu r4 + strh r1, [r5, #CPU_REG] + mov pc, r11 +$label.1 CPUWORK $memclk + bl i286a_ea + tst r0, #1 + bne $label.2 + cmp r0, #I286_MEMWRITEMAX + bcs $label.2 + ldrh r4, [r9, r0] + $alu r4 + strh r1, [r9, r0] + mov pc, r11 +$label.2 mov r5, r0 + bl i286_memoryread_w + $alu r0 + mov r0, r5 + mov lr, r11 + b i286_memorywrite_w + MEND + + + MACRO $label OP_INC16 $r, $clk $label CPUWORK $clk ldrh r2, [r9, $r] @@ -270,5 +325,38 @@ $label POP $clk MEND + MACRO +$label JMPS $jmpclk +$label CPUWORK $jmpclk + ldr r0, [r9, #CPU_CS_BASE] + add r0, r0, r8 lsr #16 + bl i286_memoryread + mov r1, r0, lsl #24 + add r8, r8, #(1 << 16) + mov r0, r1, asr #8 + add r8, r0, r8 + mov pc, r11 + MEND + + MACRO +$label JMPNE $f, $nojclk, $jmpclk +$label tst r8, $f + bne $label.1 + CPUWORK $nojclk + add r8, r8, #(1 << 16) + mov pc, r11 +$label.1 JMPS $jmpclk + MEND + + MACRO +$label JMPEQ $f, $nojclk, $jmpclk +$label tst r8, $f + beq $label.1 + CPUWORK $nojclk + add r8, r8, #(1 << 16) + mov pc, r11 +$label.1 JMPS $jmpclk + MEND + END