|
|
| version 1.2, 2003/12/16 09:26:50 | version 1.6, 2003/12/17 14:04:43 |
|---|---|
| Line 7 | Line 7 |
| IMPORT _szpcflag8 | IMPORT _szpcflag8 |
| IMPORT i286a_ea | IMPORT i286a_ea |
| IMPORT i286a_lea | IMPORT i286a_lea |
| IMPORT i286a_a | |
| IMPORT i286_memoryread | IMPORT i286_memoryread |
| IMPORT i286_memoryread_w | IMPORT i286_memoryread_w |
| IMPORT i286_memorywrite | IMPORT i286_memorywrite |
| Line 15 | Line 16 |
| IMPORT iocore_inp16 | IMPORT iocore_inp16 |
| IMPORT iocore_out8 | IMPORT iocore_out8 |
| IMPORT iocore_out16 | IMPORT iocore_out16 |
| IMPORT i286a_localint | |
| IMPORT i286aop80 | |
| IMPORT i286aop81 | |
| IMPORT i286aop83 | |
| IMPORT i286asft8_1 | |
| IMPORT i286asft16_1 | |
| IMPORT i286asft8_cl | |
| IMPORT i286asft8_d8 | |
| IMPORT i286asft16_cl | |
| IMPORT i286asft16_d8 | |
| IMPORT i286aopf6 | |
| IMPORT i286aopf7 | |
| IMPORT i286aopfe | |
| IMPORT i286aopff | |
| EXPORT i286a_step | EXPORT i286a_step |
| EXPORT optbl1 | EXPORT optbl1 |
| Line 37 or_r16_ea OP_R16_EA OR16, #2, #7 | Line 56 or_r16_ea OP_R16_EA OR16, #2, #7 |
| or_al_d8 OP_AL_D8 OR8, #3 | or_al_d8 OP_AL_D8 OR8, #3 |
| or_ax_d16 OP_AX_D16 OR16, #3 | or_ax_d16 OP_AX_D16 OR16, #3 |
| push_cs REGPUSH #CPU_CS, #3 | push_cs REGPUSH #CPU_CS, #3 |
| ; ope0f | |
| adc_ea_r8 OP_EA_R8 ADC8, #2, #7 | adc_ea_r8 OP_EA_R8 ADC8, #2, #7 |
| adc_ea_r16 OP_EA_R16 ADC16, #2, #7 | adc_ea_r16 OP_EA_R16 ADC16, #2, #7 |
| Line 129 pop_di REGPOP #CPU_DI, #5 | Line 148 pop_di REGPOP #CPU_DI, #5 |
| ; pusha * | ; pusha * |
| ; popa * | ; popa * |
| ; bound | ; bound + |
| ; arpl | ; arpl + |
| ; push_d16 * | ; push_d16 * |
| ; imul_r_ea_d16 | ; imul_r_ea_d16 + |
| ; push_d8 * | ; push_d8 * |
| ; imul_r_ea_d8 | ; imul_r_ea_d8 + |
| ; insb * | ; insb * |
| ; insw * | ; insw * |
| ; outsb * | ; outsb * |
| Line 152 js_short JMPNE #S_FLAG, #2, #7 | Line 171 js_short JMPNE #S_FLAG, #2, #7 |
| jns_short JMPEQ #S_FLAG, #2, #7 | jns_short JMPEQ #S_FLAG, #2, #7 |
| jp_short JMPNE #P_FLAG, #2, #7 | jp_short JMPNE #P_FLAG, #2, #7 |
| jnp_short JMPEQ #P_FLAG, #2, #7 | jnp_short JMPEQ #P_FLAG, #2, #7 |
| ; jl_short | ; jl_short + |
| ; jnl_short | ; jnl_short + |
| ; jle_short | ; jle_short + |
| ; jnle_short | ; jnle_short + |
| ; calc_ea8_i8 | ; calc_ea8_i8 + |
| ; calc_ea16_i16 | ; calc_ea16_i16 + |
| ; calc_ea16_i8 | ; calc_ea16_i8 + |
| test_ea_r8 S_EA_R8 AND8, #2, #6 | test_ea_r8 S_EA_R8 AND8, #2, #6 |
| test_ea_r16 S_EA_R16 AND16, #2, #6 | test_ea_r16 S_EA_R16 AND16, #2, #6 |
| ; xchg_ea_r8 * | ; xchg_ea_r8 * |
| Line 168 test_ea_r16 S_EA_R16 AND16, #2, #6 | Line 187 test_ea_r16 S_EA_R16 AND16, #2, #6 |
| ; mov_ea_r16 * | ; mov_ea_r16 * |
| ; mov_r8_ea * | ; mov_r8_ea * |
| ; mov_r16_ea * | ; mov_r16_ea * |
| ; mov_ea_seg | ; mov_ea_seg + |
| ; lea_r16_ea | ; lea_r16_ea + |
| ; mov_seg_ea ! | ; mov_seg_ea ! |
| ; pop_ea * | ; pop_ea * |
| Line 226 mov_di_imm MOVIMM16 #CPU_DI, #2 | Line 245 mov_di_imm MOVIMM16 #CPU_DI, #2 |
| ; shift_ea8_d8 | ; shift_ea8_d8 |
| ; shift_ea16_d8 | ; shift_ea16_d8 |
| ; ret_near_d16 | ; ret_near_d16 + |
| ; ret_near | ; ret_near + |
| ; les_r16_ea | ; les_r16_ea + |
| ; lds_r16_ea | ; lds_r16_ea + |
| ; mov_ea8_d8 | ; mov_ea8_d8 * |
| ; mov_ea16_d16 | ; mov_ea16_d16 * |
| ; enter | ; enter |
| ; leave | ; leave + |
| ; ret_far_d16 | ; ret_far_d16 + |
| ; ret_far | ; ret_far + |
| ; int_03 | ; int_03 + |
| ; int_d8 | ; int_d8 + |
| ; into | ; into + |
| ; iret ! | ; iret ! |
| ; shift_ea8_1 | ; shift_ea8_1 |
| ; shift_ea16_1 | ; shift_ea16_1 |
| ; shift_ea8_cl | ; shift_ea8_cl |
| ; shift_ea16_cl | ; shift_ea16_cl |
| ; aam | ; aam + |
| ; aad | ; aad * |
| ; setalc * | ; setalc * |
| ; xlat * | ; xlat * |
| ; esc * | ; esc * |
| Line 271 jmp_short JMPS #7 | Line 290 jmp_short JMPS #7 |
| ; lock * | ; lock * |
| ; repne ! | ; repne ! |
| ; repe ! | ; repe ! |
| ; hlt ! | ; hlt + |
| ; cmc * | ; cmc * |
| ; ope0xf6 | ; ope0xf6 |
| ; ope0xf7 | ; ope0xf7 |
| ; clc * | ; clc * |
| ; stc * | ; stc * |
| ; cli | ; cli * |
| ; sti ! | ; sti ! |
| ; cld * | ; cld * |
| ; std * | ; std * |
| Line 287 jmp_short JMPS #7 | Line 306 jmp_short JMPS #7 |
| ; ---- | ; ---- |
| reserved mov r6, #6 | |
| sub r8, r8, #(1 << 16) | |
| b i286a_localint | |
| daa CPUWORK #3 | daa CPUWORK #3 |
| ldrb r0, [r9, #CPU_AL] | ldrb r0, [r9, #CPU_AL] |
| bic r8, r8, #O_FLAG | bic r8, r8, #O_FLAG |
| Line 370 aas1 orr r8, r8, #(A_FLAG + C_FLAG) | Line 393 aas1 orr r8, r8, #(A_FLAG + C_FLAG) |
| mov pc, r11 | mov pc, r11 |
| pusha ldrh r4, [r9, #CPU_SP] | pusha CPUWORK #17 |
| ldrh r4, [r9, #CPU_SP] | |
| ldr r5, [r9, #CPU_SS_BASE] | ldr r5, [r9, #CPU_SS_BASE] |
| mov r6, r4 | mov r6, r4 |
| mov r4, r4 lsl #16 | mov r4, r4 lsl #16 |
| Line 410 pusha ldrh r4, [r9, #CPU_SP] | Line 434 pusha ldrh r4, [r9, #CPU_SP] |
| strh r0, [r9, #CPU_SP] | strh r0, [r9, #CPU_SP] |
| mov pc, r11 | mov pc, r11 |
| popa ldrh r4, [r9, #CPU_SP] | popa CPUWORK #19 |
| ldrh r4, [r9, #CPU_SP] | |
| ldr r5, [r9, #CPU_SS_BASE] | ldr r5, [r9, #CPU_SS_BASE] |
| add r0, r5, r4 | add r0, r5, r4 |
| mov r4, r4 lsl #16 | mov r4, r4 lsl #16 |
| Line 445 popa ldrh r4, [r9, #CPU_SP] | Line 470 popa ldrh r4, [r9, #CPU_SP] |
| strh r0, [r9, #CPU_SP] | strh r0, [r9, #CPU_SP] |
| mov pc, r11 | mov pc, r11 |
| bound GETPC8 | |
| cmp r0, #&c0 | |
| bcs bndreg | |
| CPUWORK #13 | |
| R16DST r0, r12 | |
| ldrh r5, [r12, #CPU_REG] | |
| bl i286a_a | |
| add r4, r0, #2 | |
| add r0, r0, r6 | |
| bl i286_memoryread_w | |
| cmp r5, r0 | |
| bcc bndout | |
| bic r4, r4, #(1 << 16) | |
| add r0, r4, r6 | |
| bl i286_memoryread_w | |
| cmp r5, r0 | |
| movls pc, r11 | |
| bndout mov r6, #5 | |
| b i286a_localint | |
| bndreg mov r6, #6 | |
| sub r8, r8, #(2 << 16) | |
| b i286a_localint | |
| push_d16 CPUWORK #3 | push_d16 CPUWORK #3 |
| GETPC16 | GETPC16 |
| ldrh r2, [r9, #CPU_SP] | ldrh r2, [r9, #CPU_SP] |
| Line 457 push_d16 CPUWORK #3 | Line 505 push_d16 CPUWORK #3 |
| mov lr, r11 | mov lr, r11 |
| b i286_memorywrite_w | b i286_memorywrite_w |
| imul_r_ea_d16 REG16EA r5, #21, #24 | |
| mov r4, r0, lsl #16 | |
| GETPC16 | |
| mov r0, r0, lsl #16 | |
| mov r4, r4, asr #16 | |
| mov r0, r0, asr #16 | |
| mul r1, r0, r4 | |
| add r12, r1, #&8000 | |
| strh r1, [r5, #CPU_REG] | |
| movs r12, r12 lsr #16 | |
| biceq r8, r8, #O_FLAG | |
| biceq r8, r8, #C_FLAG | |
| orrne r8, r8, #O_FLAG | |
| orrne r8, r8, #C_FLAG | |
| mov pc, r11 | |
| push_d8 CPUWORK #3 | push_d8 CPUWORK #3 |
| GETPC8 | GETPC8 |
| ldrh r2, [r9, #CPU_SP] | ldrh r2, [r9, #CPU_SP] |
| Line 470 push_d8 CPUWORK #3 | Line 534 push_d8 CPUWORK #3 |
| mov lr, r11 | mov lr, r11 |
| b i286_memorywrite_w | b i286_memorywrite_w |
| insb ldrh r0, [r9, #CPU_DX] | imul_r_ea_d8 REG16EA r5, #21, #24 |
| mov r4, r0, lsl #16 | |
| GETPC8 | |
| mov r0, r0, lsl #24 | |
| mov r4, r4, asr #16 | |
| mov r0, r0, asr #24 | |
| mul r1, r0, r4 | |
| add r12, r1, #&8000 | |
| strh r1, [r5, #CPU_REG] | |
| movs r12, r12 lsr #16 | |
| biceq r8, r8, #O_FLAG | |
| biceq r8, r8, #C_FLAG | |
| orrne r8, r8, #O_FLAG | |
| orrne r8, r8, #C_FLAG | |
| mov pc, r11 | |
| insb CPUWORK #5 | |
| ldrh r0, [r9, #CPU_DX] | |
| bl iocore_inp8 | bl iocore_inp8 |
| ldrh r2, [r9, #CPU_DI] | ldrh r2, [r9, #CPU_DI] |
| ldr r3, [r9, #CPU_ES_BASE] | ldr r3, [r9, #CPU_ES_BASE] |
| Line 483 insb ldrh r0, [r9, #CPU_DX] | Line 564 insb ldrh r0, [r9, #CPU_DX] |
| strh r2, [r9, #CPU_DI] | strh r2, [r9, #CPU_DI] |
| b i286_memorywrite | b i286_memorywrite |
| insw ldrh r0, [r9, #CPU_DX] | insw CPUWORK #5 |
| ldrh r0, [r9, #CPU_DX] | |
| bl iocore_inp16 | bl iocore_inp16 |
| ldrh r2, [r9, #CPU_DI] | ldrh r2, [r9, #CPU_DI] |
| ldr r3, [r9, #CPU_ES_BASE] | ldr r3, [r9, #CPU_ES_BASE] |
| Line 496 insw ldrh r0, [r9, #CPU_DX] | Line 578 insw ldrh r0, [r9, #CPU_DX] |
| strh r2, [r9, #CPU_DI] | strh r2, [r9, #CPU_DI] |
| b i286_memorywrite_w | b i286_memorywrite_w |
| outsb ldrh r1, [r9, #CPU_SI] | outsb CPUWORK #3 |
| ldrh r1, [r9, #CPU_SI] | |
| ldr r2, [r9, #CPU_DS_FIX] | ldr r2, [r9, #CPU_DS_FIX] |
| add r0, r1, r2 | add r0, r1, r2 |
| tst r8, #D_FLAG | tst r8, #D_FLAG |
| Line 506 outsb ldrh r1, [r9, #CPU_SI] | Line 589 outsb ldrh r1, [r9, #CPU_SI] |
| bl i286_memoryread | bl i286_memoryread |
| mov r1, r0 | mov r1, r0 |
| ldr r0, [r9, #CPU_DX] | ldr r0, [r9, #CPU_DX] |
| mov lr, r11 | CPUSV |
| b iocore_out8 | bl iocore_out8 |
| CPULD | |
| mov pc, r11 | |
| outsw ldrh r1, [r9, #CPU_SI] | outsw CPUWORK #3 |
| ldrh r1, [r9, #CPU_SI] | |
| ldr r2, [r9, #CPU_DS_FIX] | ldr r2, [r9, #CPU_DS_FIX] |
| add r0, r1, r2 | add r0, r1, r2 |
| tst r8, #D_FLAG | tst r8, #D_FLAG |
| Line 519 outsw ldrh r1, [r9, #CPU_SI] | Line 605 outsw ldrh r1, [r9, #CPU_SI] |
| bl i286_memoryread_w | bl i286_memoryread_w |
| mov r1, r0 | mov r1, r0 |
| ldr r0, [r9, #CPU_DX] | ldr r0, [r9, #CPU_DX] |
| mov lr, r11 | CPUSV |
| b iocore_out16 | bl iocore_out16 |
| CPULD | |
| mov pc, r11 | |
| jle_short tst r8, #Z_FLAG | |
| bne jmps | |
| jl_short eor r0, r8, r8 lsr #4 | |
| tst r0, #S_FLAG | |
| bne jmps | |
| nojmps CPUWORK #2 | |
| add r8, r8, #(1 << 16) | |
| mov pc, r11 | |
| jnle_short tst r8, #Z_FLAG | |
| bne jmps | |
| jnl_short eor r0, r8, r8 lsr #4 | |
| tst r0, #S_FLAG | |
| bne nojmps | |
| jmps JMPS #7 | |
| xchg_ea_r8 EAREG8 r6 | xchg_ea_r8 EAREG8 r6 |
| Line 608 movear16_1 CPUWORK #5 | Line 712 movear16_1 CPUWORK #5 |
| b i286_memorywrite_w | b i286_memorywrite_w |
| mov_r8_ea REG8EA r5, #2, #5 | mov_r8_ea REG8EA r5, #2, #5 |
| ldrb r0, [r5, #CPU_REG] | strb r0, [r5, #CPU_REG] |
| mov pc, r11 | mov pc, r11 |
| mov_r16_ea REG16EA r5, #2, #5 | mov_r16_ea REG16EA r5, #2, #5 |
| ldrh r0, [r5, #CPU_REG] | strh r0, [r5, #CPU_REG] |
| mov pc, r11 | mov pc, r11 |
| mov_ea_seg GETPC8 | |
| and r1, r0, #(3 << 3) | |
| add r1, r9, r1 lsr #2 | |
| ldrh r5, [r1, #CPU_REG] | |
| cmp r0, #&c0 | |
| bcc measegm | |
| CPUWORK #2 | |
| R16DST r0, r4 | |
| strh r5, [r4, #CPU_REG] | |
| mov pc, r11 | |
| measegm CPUWORK #3 | |
| bl i286a_ea | |
| mov r1, r5 | |
| mov lr, r11 | |
| b i286_memorywrite_w | |
| lea_r16_ea CPUWORK #3 | |
| GETPC8 | |
| cmp r0, #&c0 | |
| bcs leareg | |
| R8DST r0, r5 | |
| bl i286a_lea | |
| strh r0, [r5, #CPU_REG] | |
| mov pc, r11 | |
| leareg mov r6, #6 | |
| sub r8, r8, #(2 << 16) | |
| b i286a_localint | |
| pop_ea POP #5 | pop_ea POP #5 |
| mov r4, r0 | mov r4, r0 |
| GETPC8 | GETPC8 |
| Line 739 movsb CPUWORK #5 | Line 872 movsb CPUWORK #5 |
| mov r1, r0 | mov r1, r0 |
| mov r12, r12 lsr #(10 - 1) | mov r12, r12 lsr #(10 - 1) |
| add r0, r2, r3 | add r0, r2, r3 |
| add r2, r12, #-1 | rsb r2, r12, #1 |
| mov lr, r11 | mov lr, r11 |
| add r5, r2, r5 | add r5, r2, r5 |
| add r3, r2, r3 | add r3, r2, r3 |
| Line 758 movsw CPUWORK #5 | Line 891 movsw CPUWORK #5 |
| mov r1, r0 | mov r1, r0 |
| mov r12, r12 lsr #(10 - 2) | mov r12, r12 lsr #(10 - 2) |
| add r0, r2, r3 | add r0, r2, r3 |
| add r2, r12, #-2 | rsb r2, r12, #2 |
| mov lr, r11 | mov lr, r11 |
| add r5, r2, r5 | add r5, r2, r5 |
| add r3, r2, r3 | add r3, r2, r3 |
| Line 777 cmpsb CPUWORK #8 | Line 910 cmpsb CPUWORK #8 |
| and r12, r8, #D_FLAG | and r12, r8, #D_FLAG |
| mov r12, r12 lsr #(10 - 1) | mov r12, r12 lsr #(10 - 1) |
| add r0, r2, r3 | add r0, r2, r3 |
| add r2, r12, #-1 | rsb r2, r12, #1 |
| add r5, r2, r5 | add r5, r2, r5 |
| add r3, r2, r3 | add r3, r2, r3 |
| strh r5, [r9, #CPU_SI] | strh r5, [r9, #CPU_SI] |
| Line 797 cmpsw CPUWORK #8 | Line 930 cmpsw CPUWORK #8 |
| and r12, r8, #D_FLAG | and r12, r8, #D_FLAG |
| mov r12, r12 lsr #(10 - 2) | mov r12, r12 lsr #(10 - 2) |
| add r0, r2, r3 | add r0, r2, r3 |
| add r2, r12, #-2 | rsb r2, r12, #2 |
| add r5, r2, r5 | add r5, r2, r5 |
| add r3, r2, r3 | add r3, r2, r3 |
| strh r5, [r9, #CPU_SI] | strh r5, [r9, #CPU_SI] |
| Line 881 scasw CPUWORK #7 | Line 1014 scasw CPUWORK #7 |
| mov pc, r11 | mov pc, r11 |
| ret_near_d16 CPUWORK #11 | |
| GETPC16 | |
| ldrh r1, [r9, #CPU_SP] | |
| ldr r2, [r9, #CPU_SS_BASE] | |
| add r3, r0, r1 | |
| add r0, r1, r2 | |
| add r3, r3, #2 | |
| strh r3, [r9, #CPU_SP] | |
| bl i286_memoryread_w | |
| mov r8, r8 lsl #16 | |
| mov r8, r8 lsr #16 | |
| orr r8, r8, r0 lsl #16 | |
| mov pc, r11 | |
| ret_near CPUWORK #11 | |
| ldrh r4, [r9, #CPU_SP] | |
| ldr r0, [r9, #CPU_SS_BASE] | |
| add r0, r4, r0 | |
| add r4, r4, #2 | |
| strh r4, [r9, #CPU_SP] | |
| bl i286_memoryread_w | |
| mov r8, r8 lsl #16 | |
| mov r8, r8 lsr #16 | |
| orr r8, r8, r0 lsl #16 | |
| mov pc, r11 | |
| les_r16_ea GETPC8 | |
| cmp r0, #&c0 | |
| bcs lr16_r | |
| CPUWORK #3 | |
| R16DST r0, r5 | |
| bl i286a_a | |
| add r4, r0, #2 | |
| add r0, r0, r6 | |
| bic r4, r4, #(1 << 16) | |
| bl i286_memoryread_w | |
| ldrh r0, [r5, #CPU_REG] | |
| add r0, r4, r6 | |
| bl i286_memoryread_w | |
| mov r1, r0 lsl #4 | |
| ldr r0, [r5, #CPU_ES] | |
| ldr r1, [r5, #CPU_ES_BASE] | |
| mov pc, r11 | |
| lr16_r mov r6, #6 | |
| sub r8, r8, #(2 << 16) | |
| b i286a_localint | |
| lds_r16_ea GETPC8 | |
| cmp r0, #&c0 | |
| bcs lr16_r | |
| CPUWORK #3 | |
| R16DST r0, r5 | |
| bl i286a_a | |
| add r4, r0, #2 | |
| add r0, r0, r6 | |
| bic r4, r4, #(1 << 16) | |
| bl i286_memoryread_w | |
| ldrh r0, [r5, #CPU_REG] | |
| add r0, r4, r6 | |
| bl i286_memoryread_w | |
| mov r1, r0 lsl #4 | |
| ldr r0, [r5, #CPU_ES] | |
| ldr r1, [r5, #CPU_DS_BASE] | |
| ldr r1, [r5, #CPU_DS_FIX] | |
| mov pc, r11 | |
| mov_ea8_d8 GETPC8 | |
| cmp r0, #&c0 | |
| bcs med8_r | |
| CPUWORK #3 | |
| bl i286a_ea | |
| mov r4, r0 | |
| GETPC8 | |
| mov r1, r0 | |
| mov r0, r4 | |
| mov lr, r11 | |
| b i286_memorywrite | |
| med8_r CPUWORK #2 | |
| R8DST r0, r4 | |
| GETPC8 | |
| ldrb r0, [r4, #CPU_REG] | |
| mov pc, r11 | |
| mov_ea16_d16 GETPC8 | |
| cmp r0, #&c0 | |
| bcs med16_r | |
| CPUWORK #3 | |
| bl i286a_ea | |
| mov r4, r0 | |
| GETPC16 | |
| mov r1, r0 | |
| mov r0, r4 | |
| mov lr, r11 | |
| b i286_memorywrite_w | |
| med16_r CPUWORK #2 | |
| R16DST r0, r4 | |
| GETPC16 | |
| ldrh r0, [r4, #CPU_REG] | |
| mov pc, r11 | |
| enter ldrh r4, [r9, #CPU_SP] | |
| ldrh r5, [r9, #CPU_BP] | |
| ldr r0, [r9, #CPU_SS_BASE] | |
| subs r4, r4, #2 | |
| addcc r4, r4, #&10000 | |
| mov r1, r5 | |
| add r0, r4, r0 | |
| bl i286_memorywrite_w | |
| GETPC16 | |
| mov r6, r0 | |
| GETPC8 | |
| ands r0, r0, #&1f | |
| bne enterlv1 | |
| CPUWORK #11 | |
| sub r0, r4, r6 | |
| strh r4, [r9, #CPU_BP] | |
| strh r0, [r9, #CPU_SP] | |
| mov pc, r11 | |
| enterlv1 cmp r0, #1 | |
| bne enterlv2 | |
| CPUWORK #15 | |
| strh r4, [r9, #CPU_BP] | |
| ldr r0, [r9, #CPU_SS_BASE] | |
| mov r1, r4 | |
| subs r4, r4, #2 | |
| addcc r4, r4, #&10000 | |
| add r0, r4, r0 | |
| sub r2, r4, r6 | |
| mov lr, r11 | |
| strh r2, [r9, #CPU_SP] | |
| bl i286_memorywrite_w | |
| enterlv2 mov r1, r0, lsl #2 | |
| add r1, r1, #12 | |
| CPUWORK r1 | |
| strh r4, [r9, #CPU_BP] | |
| stmdb sp!, {r11} | |
| mov r4, r4 lsl #16 | |
| sub r2, r4, r0 lsl #17 | |
| sub r2, r4, #(2 << 16) | |
| mov r2, r2 lsr #16 | |
| sub r3, r2, r6 | |
| strh r3, [r9, #CPU_SP] | |
| mov r6, r0 | |
| ldr r11, [r9, #CPU_SS_BASE] | |
| add r0, r11, r2 | |
| mov r1, r5 | |
| mov r5, r5 lsl #16 | |
| bl i286_memorywrite_w | |
| entlv2lp sub r5, r5, #(2 << 16) | |
| sub r4, r4, #(2 << 16) | |
| add r0, r11, r5 lsr #16 | |
| bl i286_memoryread_w | |
| mov r1, r0 | |
| add r0, r11, r4 | |
| bl i286_memorywrite_w | |
| subs r6, r6, #1 | |
| bne entlv2lp | |
| ldmia sp!, {pc} | |
| leave CPUWORK #5 | |
| ldrh r4, [r9, #CPU_BP] | |
| ldr r0, [r9, #CPU_SS_BASE] | |
| add r0, r4, r0 | |
| bl i286_memoryread_w | |
| add r4, r4, #2 | |
| strh r0, [r9, #CPU_BP] | |
| strh r4, [r9, #CPU_SP] | |
| mov pc, r11 | |
| ret_far_d16 CPUWORK #15 | |
| GETPC16 | |
| mov r6, r0 | |
| ldrh r4, [r9, #CPU_SP] | |
| ldr r5, [r9, #CPU_SS_BASE] | |
| add r0, r4, r5 | |
| add r4, r4, #2 | |
| bl i286_memoryread_w | |
| mov r8, r8 lsl #16 | |
| mov r8, r8 lsr #16 | |
| orr r8, r8, r0 lsl #16 | |
| bic r4, r4, #(1 << 16) | |
| add r0, r4, r5 | |
| add r4, r4, #2 | |
| bl i286_memoryread_w | |
| add r4, r6, r4 | |
| mov r1, r0 lsl #4 | |
| strh r4, [r9, #CPU_SP] | |
| strh r0, [r9, #CPU_CS] | |
| str r1, [r9, #CPU_CS_BASE] | |
| mov pc, r11 | |
| ret_far CPUWORK #15 | |
| ldrh r4, [r9, #CPU_SP] | |
| ldr r5, [r9, #CPU_SS_BASE] | |
| add r0, r4, r5 | |
| add r4, r4, #2 | |
| bl i286_memoryread_w | |
| mov r8, r8 lsl #16 | |
| mov r8, r8 lsr #16 | |
| orr r8, r8, r0 lsl #16 | |
| bic r4, r4, #(1 << 16) | |
| add r0, r4, r5 | |
| add r4, r4, #2 | |
| bl i286_memoryread_w | |
| mov r1, r0 lsl #4 | |
| strh r4, [r9, #CPU_SP] | |
| strh r0, [r9, #CPU_CS] | |
| str r1, [r9, #CPU_CS_BASE] | |
| mov pc, r11 | |
| int_03 CPUWORK #3 | |
| mov r6, #3 | |
| b i286a_localint | |
| int_d8 CPUWORK #3 | |
| GETPC8 | |
| mov r6, r0 | |
| b i286a_localint | |
| into CPUWORK #4 | |
| tst r8, #O_FLAG | |
| moveq pc, r11 | |
| mov r6, #4 | |
| b i286a_localint | |
| aam CPUWORK #16 | |
| GETPC8 | |
| movs r0, r0, lsl #7 | |
| beq aamzero | |
| ldrb r1, [r9, #CPU_AL] | |
| mov r2, #&80 | |
| mov r3, #0 | |
| aamlp cmp r1, r0 | |
| subcs r1, r1, r0 | |
| orrcs r3, r2, r3 | |
| movs r2, r2 lsr #1 | |
| bne aamlp | |
| bic r8, r8, #(S_FLAG + Z_FLAG + P_FLAG) | |
| ldrb r2, [r10, r1] | |
| and r2, r2, #P_FLAG | |
| orr r8, r2, r8 | |
| orr r1, r1, r3 lsl #8 | |
| movs r2, r1 lsl #16 | |
| orreq r8, r8, #Z_FLAG | |
| orrmi r8, r8, #S_FLAG | |
| strh r1, [r9, #CPU_AX] | |
| mov pc, r11 | |
| aamzero sub r8, r8, #(2 << 16) | |
| mov r6, #0 | |
| b i286a_localint | |
| aad CPUWORK #14 | |
| GETPC8 | |
| ldrh r1, [r9, #CPU_AX] | |
| bic r8, r8, #(S_FLAG + Z_FLAG + P_FLAG) | |
| mov r2, r1 lsr #8 | |
| mla r3, r2, r0, r1 | |
| and r1, r3, #&ff | |
| ldrb r2, [r10, r1] | |
| strh r1, [r9, #CPU_AX] | |
| orr r8, r2, r8 | |
| mov pc, r11 | |
| setalc CPUWORK #2 | setalc CPUWORK #2 |
| mov r0, r8 lsr #31 | mov r0, r8 lsr #31 |
| mov r0, r0 asr #31 | mov r0, r0 asr #31 |
| Line 922 loopz ldrh r0, [r9, #CPU_CX] | Line 1319 loopz ldrh r0, [r9, #CPU_CX] |
| strh r0, [r9, #CPU_CX] | strh r0, [r9, #CPU_CX] |
| beq lpznoj | beq lpznoj |
| tst r8, #Z_FLAG | tst r8, #Z_FLAG |
| beq lpnznoj | beq lpznoj |
| JMPS #8 | JMPS #8 |
| lpznoj CPUWORK #4 | lpznoj CPUWORK #4 |
| add r8, r8, #(1 << 16) | add r8, r8, #(1 << 16) |
| Line 960 in_ax_d8 CPUWORK #5 | Line 1357 in_ax_d8 CPUWORK #5 |
| out_d8_al CPUWORK #3 | out_d8_al CPUWORK #3 |
| GETPC8 | GETPC8 |
| ldrb r1, [r9, #CPU_AL] | ldrb r1, [r9, #CPU_AL] |
| mov lr, r11 | CPUSV |
| b iocore_out8 | bl iocore_out8 |
| CPULD | |
| mov pc, r11 | |
| out_d8_ax CPUWORK #3 | out_d8_ax CPUWORK #3 |
| GETPC8 | GETPC8 |
| ldrh r1, [r9, #CPU_AX] | ldrh r1, [r9, #CPU_AX] |
| mov lr, r11 | CPUSV |
| b iocore_out16 | bl iocore_out16 |
| CPULD | |
| mov pc, r11 | |
| call_near CPUWORK #7 | call_near CPUWORK #7 |
| GETPC16 | GETPC16 |
| Line 1017 in_ax_dx CPUWORK #5 | Line 1418 in_ax_dx CPUWORK #5 |
| out_dx_al CPUWORK #3 | out_dx_al CPUWORK #3 |
| ldrb r1, [r9, #CPU_AL] | ldrb r1, [r9, #CPU_AL] |
| ldrh r0, [r9, #CPU_DX] | ldrh r0, [r9, #CPU_DX] |
| mov lr, r11 | CPUSV |
| b iocore_out8 | bl iocore_out8 |
| CPULD | |
| mov pc, r11 | |
| out_dx_ax CPUWORK #3 | out_dx_ax CPUWORK #3 |
| ldrh r1, [r9, #CPU_AX] | ldrh r1, [r9, #CPU_AX] |
| ldrh r0, [r9, #CPU_DX] | ldrh r0, [r9, #CPU_DX] |
| mov lr, r11 | CPUSV |
| b iocore_out16 | bl iocore_out16 |
| CPULD | |
| mov pc, r11 | |
| lock CPUWORK #2 | lock CPUWORK #2 |
| mov pc, r11 | mov pc, r11 |
| hlt CREMSET #-1 | |
| sub r8, r8, #(1 << 16) | |
| mov pc, r11 | |
| cmc CPUWORK #2 | cmc CPUWORK #2 |
| eor r8, r8, #C_FLAG | eor r8, r8, #C_FLAG |
| mov pc, r11 | mov pc, r11 |
| Line 1042 stc CPUWORK #2 | Line 1451 stc CPUWORK #2 |
| orr r8, r8, #C_FLAG | orr r8, r8, #C_FLAG |
| mov pc, r11 | mov pc, r11 |
| cli CPUWORK #3 | |
| mov r0, #0 | |
| bic r8, r8, #I_FLAG | |
| strb r0, [r9, #CPU_TRAP] | |
| mov pc, r11 | |
| cld CPUWORK #2 | cld CPUWORK #2 |
| bic r8, r8, #D_FLAG | bic r8, r8, #D_FLAG |
| mov pc, r11 | mov pc, r11 |
| Line 1074 i286a_step stmdb sp!, {r4 - r11, lr} | Line 1489 i286a_step stmdb sp!, {r4 - r11, lr} |
| ias_r9 dcd i286core - CPU_REG | ias_r9 dcd i286core - CPU_REG |
| ias_r10 dcd _szpcflag8 | ias_r10 dcd _szpcflag8 |
| optbl1 dcd add_ea_r8 | optbl1 dcd add_ea_r8 ; 00 |
| dcd add_ea_r16 | dcd add_ea_r16 |
| dcd add_r8_ea | dcd add_r8_ea |
| dcd add_r16_ea | dcd add_r16_ea |
| Line 1091 optbl1 dcd add_ea_r8 | Line 1506 optbl1 dcd add_ea_r8 |
| dcd push_cs | dcd push_cs |
| dcd 0 ; op_0f/pop_cs | dcd 0 ; op_0f/pop_cs |
| dcd adc_ea_r8 | dcd adc_ea_r8 ; 10 |
| dcd adc_ea_r16 | dcd adc_ea_r16 |
| dcd adc_r8_ea | dcd adc_r8_ea |
| dcd adc_r16_ea | dcd adc_r16_ea |
| Line 1108 optbl1 dcd add_ea_r8 | Line 1523 optbl1 dcd add_ea_r8 |
| dcd push_ds | dcd push_ds |
| dcd pop_ds | dcd pop_ds |
| dcd and_ea_r8 | dcd and_ea_r8 ; 20 |
| dcd and_ea_r16 | dcd and_ea_r16 |
| dcd and_r8_ea | dcd and_r8_ea |
| dcd and_r16_ea | dcd and_r16_ea |
| dcd and_al_d8 | dcd and_al_d8 |
| dcd and_ax_d16 | dcd and_ax_d16 |
| dcd 0 ; segprefix_es | dcd 0 ; segprefix_es |
| dcd 0 ; daa | dcd 0 ; daa |
| dcd sub_ea_r8 | dcd sub_ea_r8 |
| dcd sub_ea_r16 | dcd sub_ea_r16 |
| dcd sub_r8_ea | dcd sub_r8_ea |
| dcd sub_r16_ea | dcd sub_r16_ea |
| dcd sub_al_d8 | dcd sub_al_d8 |
| dcd sub_ax_d16 | dcd sub_ax_d16 |
| dcd 0 ; segprefix_cs | dcd 0 ; segprefix_cs |
| dcd 0 ; das | dcd 0 ; das |
| dcd xor_ea_r8 | dcd xor_ea_r8 ; 30 |
| dcd xor_ea_r16 | dcd xor_ea_r16 |
| dcd xor_r8_ea | dcd xor_r8_ea |
| dcd xor_r16_ea | dcd xor_r16_ea |
| dcd xor_al_d8 | dcd xor_al_d8 |
| dcd xor_ax_d16 | dcd xor_ax_d16 |
| dcd 0 ; segprefix_ss | dcd 0 ; segprefix_ss |
| dcd 0 ; aaa | dcd 0 ; aaa |
| dcd cmp_ea_r8 | dcd cmp_ea_r8 |
| dcd cmp_ea_r16 | dcd cmp_ea_r16 |
| dcd cmp_r8_ea | dcd cmp_r8_ea |
| dcd cmp_r16_ea | dcd cmp_r16_ea |
| dcd cmp_al_d8 | dcd cmp_al_d8 |
| dcd cmp_ax_d16 | dcd cmp_ax_d16 |
| dcd 0 ; segprefix_ds | dcd 0 ; segprefix_ds |
| dcd 0 ; aas | dcd 0 ; aas |
| dcd inc_ax | dcd inc_ax ; 40 |
| dcd inc_cx | dcd inc_cx |
| dcd inc_dx | dcd inc_dx |
| dcd inc_bx | dcd inc_bx |
| Line 1159 optbl1 dcd add_ea_r8 | Line 1574 optbl1 dcd add_ea_r8 |
| dcd dec_si | dcd dec_si |
| dcd dec_di | dcd dec_di |
| dcd push_ax | dcd push_ax ; 50 |
| dcd push_cx | dcd push_cx |
| dcd push_dx | dcd push_dx |
| dcd push_bx | dcd push_bx |
| Line 1176 optbl1 dcd add_ea_r8 | Line 1591 optbl1 dcd add_ea_r8 |
| dcd pop_si | dcd pop_si |
| dcd pop_di | dcd pop_di |
| dcd 0 ; pusha | dcd pusha ; 60 |
| dcd 0 ; popa | dcd popa |
| dcd 0 ; bound | dcd 0 ; bound |
| dcd 0 ; arpl | dcd 0 ; arpl(reserved) |
| dcd 0 ; reserved | dcd 0 ; reserved |
| dcd 0 ; reserved | dcd 0 ; reserved |
| dcd 0 ; reserved | dcd 0 ; reserved |
| dcd 0 ; reserved | dcd 0 ; reserved |
| dcd 0 ; push_d16 | dcd 0 ; push_d16 |
| dcd 0 ; imul_reg_ea_d16 | dcd 0 ; imul_reg_ea_d16 |
| dcd 0 ; push_d8 | dcd 0 ; push_d8 |
| dcd 0 ; imul_reg_ea_d8 | dcd 0 ; imul_reg_ea_d8 |
| dcd 0 ; insb | dcd 0 ; insb |
| dcd 0 ; insw | dcd 0 ; insw |
| dcd 0 ; outsb | dcd outsb |
| dcd 0 ; outsw | dcd outsw |
| dcd jo_short | dcd jo_short ; 70 |
| dcd jno_short | dcd jno_short |
| dcd jc_short | dcd jc_short |
| dcd jnc_short | dcd jnc_short |
| Line 1205 optbl1 dcd add_ea_r8 | Line 1620 optbl1 dcd add_ea_r8 |
| dcd jns_short | dcd jns_short |
| dcd jp_short | dcd jp_short |
| dcd jnp_short | dcd jnp_short |
| dcd 0 ; jl_short | dcd 0 ; jl_short |
| dcd 0 ; jnl_short | dcd 0 ; jnl_short |
| dcd 0 ; jle_short | dcd 0 ; jle_short |
| dcd 0 ; jnle_short | dcd 0 ; jnle_short |
| dcd 0 ; calc_ea8_i8 | dcd i286aop80 ; 80 |
| dcd 0 ; calc_ea16_i16 | dcd i286aop81 |
| dcd 0 ; calc_ea8_i8 | dcd i286aop80 |
| dcd 0 ; calc_ea16_i8 | dcd i286aop83 |
| dcd test_ea_r8 | dcd test_ea_r8 |
| dcd test_ea_r16 | dcd test_ea_r16 |
| dcd xchg_ea_r8 | dcd xchg_ea_r8 |
| Line 1222 optbl1 dcd add_ea_r8 | Line 1637 optbl1 dcd add_ea_r8 |
| dcd mov_ea_r16 | dcd mov_ea_r16 |
| dcd mov_r8_ea | dcd mov_r8_ea |
| dcd mov_r16_ea | dcd mov_r16_ea |
| dcd 0 ; mov_ea_seg | dcd 0 ; mov_ea_seg |
| dcd 0 ; lea_r16_ea | dcd 0 ; lea_r16_ea |
| dcd 0 ; mov_seg_ea | dcd 0 ; mov_seg_ea |
| dcd 0 ; pop_ea | dcd 0 ; pop_ea |
| dcd 0 ; nop | dcd 0 ; nop ; 90 |
| dcd xchg_ax_cx | dcd xchg_ax_cx |
| dcd xchg_ax_dx | dcd xchg_ax_dx |
| dcd xchg_ax_bx | dcd xchg_ax_bx |
| Line 1237 optbl1 dcd add_ea_r8 | Line 1652 optbl1 dcd add_ea_r8 |
| dcd xchg_ax_di | dcd xchg_ax_di |
| dcd cbw | dcd cbw |
| dcd cwd | dcd cwd |
| dcd 0 ; call_far | dcd 0 ; call_far |
| dcd wait | dcd wait |
| dcd 0 ; pushf | dcd 0 ; pushf |
| dcd 0 ; popf | dcd 0 ; popf |
| dcd sahf | dcd sahf |
| dcd lahf | dcd lahf |
| dcd mov_al_m8 | dcd mov_al_m8 ; a0 |
| dcd mov_ax_m16 | dcd mov_ax_m16 |
| dcd mov_m8_al | dcd mov_m8_al |
| dcd mov_m16_ax | dcd mov_m16_ax |
| dcd 0 ; movsb | dcd movsb |
| dcd 0 ; movsw | dcd movsw |
| dcd 0 ; cmpsb | dcd 0 ; cmpsb |
| dcd 0 ; cmpsw | dcd 0 ; cmpsw |
| dcd test_al_d8 | dcd test_al_d8 |
| dcd test_ax_d16 | dcd test_ax_d16 |
| dcd 0 ; stosb | dcd stosb |
| dcd 0 ; stosw | dcd stosw |
| dcd 0 ; lodsb | dcd lodsb |
| dcd 0 ; lodsw | dcd lodsw |
| dcd 0 ; scasb | dcd 0 ; scasb |
| dcd 0 ; scasw | dcd 0 ; scasw |
| dcd mov_al_imm | dcd mov_al_imm ; b0 |
| dcd mov_cl_imm | dcd mov_cl_imm |
| dcd mov_dl_imm | dcd mov_dl_imm |
| dcd mov_bl_imm | dcd mov_bl_imm |
| Line 1278 optbl1 dcd add_ea_r8 | Line 1693 optbl1 dcd add_ea_r8 |
| dcd mov_si_imm | dcd mov_si_imm |
| dcd mov_di_imm | dcd mov_di_imm |
| dcd 0 ; shift_ea8_d8 | dcd i286asft8_d8 ; c0 |
| dcd 0 ; shift_ea16_d8 | dcd i286asft16_d8 |
| dcd 0 ; ret_near_d16 | dcd 0 ; ret_near_d16 |
| dcd 0 ; ret_near | dcd 0 ; ret_near |
| dcd 0 ; les_r16_ea | dcd 0 ; les_r16_ea |
| dcd 0 ; lds_r16_ea | dcd 0 ; lds_r16_ea |
| dcd 0 ; mov_ea8_d8 | dcd 0 ; mov_ea8_d8 |
| dcd 0 ; mov_ea16_d16 | dcd 0 ; mov_ea16_d16 |
| dcd 0 ; enter | dcd 0 ; enter |
| dcd 0 ; leave | dcd 0 ; leave |
| dcd 0 ; ret_far_d16 | dcd 0 ; ret_far_d16 |
| dcd 0 ; ret_far | dcd 0 ; ret_far |
| dcd 0 ; int_03 | dcd int_03 |
| dcd 0 ; int_d8 | dcd int_d8 |
| dcd 0 ; into | dcd into |
| dcd 0 ; iret | dcd 0 ; iret |
| dcd 0 ; shift_ea8_1 | dcd i286asft8_1 ; d0 |
| dcd 0 ; shift_ea16_1 | dcd i286asft16_1 |
| dcd 0 ; shift_ea8_cl | dcd i286asft8_cl |
| dcd 0 ; shift_ea16_cl | dcd i286asft16_cl |
| dcd 0 ; aam | dcd 0 ; aam |
| dcd 0 ; aad | dcd 0 ; aad |
| dcd 0 ; setalc | dcd 0 ; setalc |
| dcd 0 ; xlat | dcd 0 ; xlat |
| dcd 0 ; esc0 | dcd esc |
| dcd 0 ; esc1 | dcd esc |
| dcd 0 ; esc2 | dcd esc |
| dcd 0 ; esc3 | dcd esc |
| dcd 0 ; esc4 | dcd esc |
| dcd 0 ; esc5 | dcd esc |
| dcd 0 ; esc6 | dcd esc |
| dcd 0 ; esc7 | dcd esc |
| dcd 0 ; loopnz | dcd loopnz ; e0 |
| dcd 0 ; loopz | dcd loopz |
| dcd 0 ; loop | dcd loop |
| dcd 0 ; jcxz | dcd jcxz |
| dcd 0 ; in_al_d8 | dcd 0 ; in_al_d8 |
| dcd 0 ; in_ax_d8 | dcd 0 ; in_ax_d8 |
| dcd 0 ; out_d8_al | dcd out_d8_al |
| dcd 0 ; out_d8_ax | dcd out_d8_ax |
| dcd 0 ; call_near | dcd 0 ; call_near |
| dcd 0 ; jmp_near | dcd 0 ; jmp_near |
| dcd 0 ; jmp_far | dcd 0 ; jmp_far |
| dcd jmp_short | dcd jmp_short |
| dcd 0 ; in_al_dx | dcd 0 ; in_al_dx |
| dcd 0 ; in_ax_dx | dcd 0 ; in_ax_dx |
| dcd 0 ; out_dx_al | dcd out_dx_al |
| dcd 0 ; out_dx_ax | dcd out_dx_ax |
| dcd 0 ; lock | dcd lock ; f0 |
| dcd 0 ; lock | dcd lock |
| dcd 0 ; repne | dcd 0 ; repne |
| dcd 0 ; repe | dcd 0 ; repe |
| dcd 0 ; hlt | dcd hlt |
| dcd 0 ; cmc | dcd cmc |
| dcd 0 ; ope0xf6 | dcd 0 ; ope0xf6 |
| dcd 0 ; ope0xf7 | dcd 0 ; ope0xf7 |
| dcd 0 ; clc | dcd clc |
| dcd 0 ; stc | dcd stc |
| dcd 0 ; cli | dcd cli |
| dcd 0 ; sti | dcd 0 ; sti |
| dcd 0 ; cld | dcd cld |
| dcd 0 ; std | dcd std |
| dcd 0 ; ope0xfe | dcd i286aopfe |
| dcd 0 ; ope0xff | dcd 0 ; ope0xff |
| END | END |