|
|
| version 1.7, 2003/12/18 13:21:32 | version 1.28, 2005/03/19 21:02:05 |
|---|---|
| Line 1 | Line 1 |
| INCLUDE i286a.inc | INCLUDE i286a.inc |
| INCLUDE i286aea.inc | |
| INCLUDE i286aalu.inc | INCLUDE i286aalu.inc |
| INCLUDE i286aop.inc | INCLUDE i286aop.inc |
| INCLUDE i286aio.inc | |
| IMPORT i286core | IMPORT i286acore |
| IMPORT _szpcflag8 | IMPORT iflags |
| IMPORT i286a_localint | |
| IMPORT i286a_trapint | |
| IMPORT i286a_selector | |
| IMPORT i286a_ea | IMPORT i286a_ea |
| IMPORT i286a_lea | IMPORT i286a_lea |
| IMPORT i286a_a | IMPORT i286a_a |
| IMPORT i286_memoryread | |
| IMPORT i286_memoryread_w | IMPORT i286a_memoryread |
| IMPORT i286_memorywrite | IMPORT i286a_memoryread_w |
| IMPORT i286_memorywrite_w | IMPORT i286a_memorywrite |
| IMPORT i286a_memorywrite_w | |
| IMPORT iocore_inp8 | IMPORT iocore_inp8 |
| IMPORT iocore_inp16 | IMPORT iocore_inp16 |
| IMPORT iocore_out8 | IMPORT iocore_out8 |
| IMPORT iocore_out16 | IMPORT iocore_out16 |
| IMPORT i286a_localint | |
| IMPORT dmax86 | |
| IMPORT biosfunc | |
| IMPORT i286a_cts | |
| IMPORT i286aop80 | IMPORT i286aop80 |
| IMPORT i286aop81 | IMPORT i286aop81 |
| Line 35 | Line 46 |
| IMPORT i286aopfe | IMPORT i286aopfe |
| IMPORT i286aopff | IMPORT i286aopff |
| IMPORT i286a_rep_insb | |
| IMPORT i286a_rep_insw | |
| IMPORT i286a_rep_outsb | |
| IMPORT i286a_rep_outsw | |
| IMPORT i286a_rep_movsb | |
| IMPORT i286a_rep_movsw | |
| IMPORT i286a_rep_lodsb | |
| IMPORT i286a_rep_lodsw | |
| IMPORT i286a_rep_stosb | |
| IMPORT i286a_rep_stosw | |
| IMPORT i286a_repe_cmpsb | |
| IMPORT i286a_repe_cmpsw | |
| IMPORT i286a_repne_cmpsb | |
| IMPORT i286a_repne_cmpsw | |
| IMPORT i286a_repe_scasb | |
| IMPORT i286a_repe_scasw | |
| IMPORT i286a_repne_scasb | |
| IMPORT i286a_repne_scasw | |
| EXPORT i286a | |
| EXPORT i286a_step | EXPORT i286a_step |
| EXPORT optbl1 | EXPORT optbl1 |
| Line 65 adc_r16_ea OP_R16_EA ADC16, #2, #7 | Line 96 adc_r16_ea OP_R16_EA ADC16, #2, #7 |
| adc_al_d8 OP_AL_D8 ADC8, #3 | adc_al_d8 OP_AL_D8 ADC8, #3 |
| adc_ax_d16 OP_AX_D16 ADC16, #3 | adc_ax_d16 OP_AX_D16 ADC16, #3 |
| push_ss REGPUSH #CPU_SS, #3 | push_ss REGPUSH #CPU_SS, #3 |
| pop_ss SEGPOPFIX #CPU_SS, #CPU_SS_BASE, #CPU_SS_FIX, #5 | ; pop_ss |
| sbb_ea_r8 OP_EA_R8 SBB8, #2, #7 | sbb_ea_r8 OP_EA_R8 SBB8, #2, #7 |
| sbb_ea_r16 OP_EA_R16 SBB16, #2, #7 | sbb_ea_r16 OP_EA_R16 SBB16, #2, #7 |
| Line 74 sbb_r16_ea OP_R16_EA SBB16, #2, #7 | Line 105 sbb_r16_ea OP_R16_EA SBB16, #2, #7 |
| sbb_al_d8 OP_AL_D8 SBB8, #3 | sbb_al_d8 OP_AL_D8 SBB8, #3 |
| sbb_ax_d16 OP_AX_D16 SBB16, #3 | sbb_ax_d16 OP_AX_D16 SBB16, #3 |
| push_ds REGPUSH #CPU_DS, #3 | push_ds REGPUSH #CPU_DS, #3 |
| pop_ds SEGPOPFIX #CPU_DS, #CPU_DS_BASE, #CPU_DS_FIX, #5 | ; pop_ds SEGPOPFIX #CPU_DS, #CPU_DS_BASE, #CPU_DS_FIX, #5 |
| and_ea_r8 OP_EA_R8 AND8, #2, #7 | and_ea_r8 OP_EA_R8 AND8, #2, #7 |
| and_ea_r16 OP_EA_R16 AND16, #2, #7 | and_ea_r16 OP_EA_R16 AND16, #2, #7 |
| Line 103 xor_ax_d16 OP_AX_D16 XOR16, #3 | Line 134 xor_ax_d16 OP_AX_D16 XOR16, #3 |
| ; segprefix_ss ! | ; segprefix_ss ! |
| ; aaa * | ; aaa * |
| cmp_ea_r8 S_EA_R8 SUB8, #2, #7 | cmp_ea_r8 S_EA_R8 SUB8, #2, #6 |
| cmp_ea_r16 S_EA_R16 SUB16, #2, #7 | cmp_ea_r16 S_EA_R16 SUB16, #2, #6 |
| cmp_r8_ea S_R8_EA SUB8, #2, #6 | cmp_r8_ea S_R8_EA SUB8, #2, #6 |
| cmp_r16_ea S_R16_EA SUB16, #2, #6 | cmp_r16_ea S_R16_EA SUB16, #2, #6 |
| cmp_al_d8 S_AL_D8 SUB8, #3 | cmp_al_d8 S_AL_D8 SUB8, #3 |
| Line 159 pop_di REGPOP #CPU_DI, #5 | Line 190 pop_di REGPOP #CPU_DI, #5 |
| ; outsb * | ; outsb * |
| ; outsw * | ; outsw * |
| jo_short JMPNE #O_FLAG, #2, #7 | jo_short JMPNE #O_FLAG, #3, #7 |
| jno_short JMPEQ #O_FLAG, #2, #7 | jno_short JMPEQ #O_FLAG, #3, #7 |
| jc_short JMPNE #C_FLAG, #2, #7 | jc_short JMPNE #C_FLAG, #3, #7 |
| jnc_short JMPEQ #C_FLAG, #2, #7 | jnc_short JMPEQ #C_FLAG, #3, #7 |
| jz_short JMPNE #Z_FLAG, #2, #7 | jz_short JMPNE #Z_FLAG, #3, #7 |
| jnz_short JMPEQ #Z_FLAG, #2, #7 | jnz_short JMPEQ #Z_FLAG, #3, #7 |
| jna_short JMPNE #(Z_FLAG + C_FLAG), #2, #7 | jna_short JMPNE #(Z_FLAG + C_FLAG), #3, #7 |
| ja_short JMPEQ #(Z_FLAG + C_FLAG), #2, #7 | ja_short JMPEQ #(Z_FLAG + C_FLAG), #3, #7 |
| js_short JMPNE #S_FLAG, #2, #7 | js_short JMPNE #S_FLAG, #3, #7 |
| jns_short JMPEQ #S_FLAG, #2, #7 | jns_short JMPEQ #S_FLAG, #3, #7 |
| jp_short JMPNE #P_FLAG, #2, #7 | jp_short JMPNE #P_FLAG, #3, #7 |
| jnp_short JMPEQ #P_FLAG, #2, #7 | jnp_short JMPEQ #P_FLAG, #3, #7 |
| ; jl_short + | ; jl_short + |
| ; jnl_short + | ; jnl_short + |
| ; jle_short + | ; jle_short + |
| Line 310 reserved mov r6, #6 | Line 341 reserved mov r6, #6 |
| sub r8, r8, #(1 << 16) | sub r8, r8, #(1 << 16) |
| b i286a_localint | b i286a_localint |
| daa CPUWORK #3 | pop_ss SEGPOPFIX #CPU_SS, #CPU_SS_BASE, #CPU_SS_FIX, #5 |
| ldrb r0, [r9, #CPU_AL] | mov pc, r11 |
| pop_ds SEGPOPFIX #CPU_DS, #CPU_DS_BASE, #CPU_DS_FIX, #5 | |
| mov pc, r11 | |
| daa ldrb r0, [r9, #CPU_AL] | |
| bic r8, r8, #O_FLAG | bic r8, r8, #O_FLAG |
| CPUWORK #3 | |
| eor r2, r0, #&80 | eor r2, r0, #&80 |
| tst r8, #A_FLAG | tst r8, #A_FLAG |
| bne daalo2 | bne daalo2 |
| Line 357 daslo tst r8, #A_FLAG | Line 394 daslo tst r8, #A_FLAG |
| daslo2 sub r0, r0, #6 | daslo2 sub r0, r0, #6 |
| orr r8, r8, r0 lsr #31 | orr r8, r8, r0 lsr #31 |
| and r0, r0, #&ff | and r0, r0, #&ff |
| dasflg strb r0, [r9, #CPU_AL] | dasflg ldrb r1, [r10, r0] |
| ldrb r1, [r10, r0] | strb r0, [r9, #CPU_AL] |
| bic r8, r8, #(&ff - A_FLAG - C_FLAG) | bic r8, r8, #(&ff - A_FLAG - C_FLAG) |
| orr r8, r1, r8 | orr r8, r1, r8 |
| mov pc, r11 | mov pc, r11 |
| Line 393 aas1 orr r8, r8, #(A_FLAG + C_FLAG) | Line 430 aas1 orr r8, r8, #(A_FLAG + C_FLAG) |
| mov pc, r11 | mov pc, r11 |
| pusha CPUWORK #17 | pusha ldrh r4, [r9, #CPU_SP] |
| ldrh r4, [r9, #CPU_SP] | |
| ldr r5, [r9, #CPU_SS_BASE] | ldr r5, [r9, #CPU_SS_BASE] |
| CPUWORK #17 | |
| mov r6, r4 | mov r6, r4 |
| mov r4, r4 lsl #16 | mov r4, r4 lsl #16 |
| ldrh r1, [r9, #CPU_AX] | |
| sub r4, r4, #(2 << 16) | sub r4, r4, #(2 << 16) |
| ldrh r1, [r9, #CPU_AX] | |
| add r0, r5, r4 lsr #16 | add r0, r5, r4 lsr #16 |
| bl i286_memorywrite_w | bl i286a_memorywrite_w |
| ldrh r1, [r9, #CPU_CX] | |
| sub r4, r4, #(2 << 16) | sub r4, r4, #(2 << 16) |
| ldrh r1, [r9, #CPU_CX] | |
| add r0, r5, r4 lsr #16 | add r0, r5, r4 lsr #16 |
| bl i286_memorywrite_w | bl i286a_memorywrite_w |
| ldrh r1, [r9, #CPU_DX] | |
| sub r4, r4, #(2 << 16) | sub r4, r4, #(2 << 16) |
| ldrh r1, [r9, #CPU_DX] | |
| add r0, r5, r4 lsr #16 | add r0, r5, r4 lsr #16 |
| bl i286_memorywrite_w | bl i286a_memorywrite_w |
| ldrh r1, [r9, #CPU_BX] | |
| sub r4, r4, #(2 << 16) | sub r4, r4, #(2 << 16) |
| ldrh r1, [r9, #CPU_BX] | |
| add r0, r5, r4 lsr #16 | add r0, r5, r4 lsr #16 |
| bl i286_memorywrite_w | bl i286a_memorywrite_w |
| mov r1, r6 | mov r1, r6 |
| sub r4, r4, #(2 << 16) | sub r4, r4, #(2 << 16) |
| add r0, r5, r4 lsr #16 | add r0, r5, r4 lsr #16 |
| bl i286_memorywrite_w | bl i286a_memorywrite_w |
| ldrh r1, [r9, #CPU_BP] | |
| sub r4, r4, #(2 << 16) | sub r4, r4, #(2 << 16) |
| ldrh r1, [r9, #CPU_BP] | |
| add r0, r5, r4 lsr #16 | add r0, r5, r4 lsr #16 |
| bl i286_memorywrite_w | bl i286a_memorywrite_w |
| ldrh r1, [r9, #CPU_SI] | |
| sub r4, r4, #(2 << 16) | sub r4, r4, #(2 << 16) |
| ldrh r1, [r9, #CPU_SI] | |
| add r0, r5, r4 lsr #16 | add r0, r5, r4 lsr #16 |
| bl i286_memorywrite_w | bl i286a_memorywrite_w |
| ldrh r1, [r9, #CPU_DI] | |
| sub r4, r4, #(2 << 16) | sub r4, r4, #(2 << 16) |
| ldrh r1, [r9, #CPU_DI] | |
| add r0, r5, r4 lsr #16 | add r0, r5, r4 lsr #16 |
| bl i286_memorywrite_w | bl i286a_memorywrite_w |
| mov r0, r4 lsr #16 | mov r0, r4 lsr #16 |
| strh r0, [r9, #CPU_SP] | strh r0, [r9, #CPU_SP] |
| mov pc, r11 | mov pc, r11 |
| popa CPUWORK #19 | popa ldrh r1, [r9, #CPU_SP] |
| ldrh r4, [r9, #CPU_SP] | |
| ldr r5, [r9, #CPU_SS_BASE] | ldr r5, [r9, #CPU_SS_BASE] |
| add r0, r5, r4 | CPUWORK #19 |
| mov r4, r4 lsl #16 | mov r4, r1 lsl #16 |
| bl i286_memoryread_w | add r0, r5, r1 |
| strh r0, [r9, #CPU_DI] | bl i286a_memoryread_w |
| add r4, r4, #(2 << 16) | add r4, r4, #(2 << 16) |
| strh r0, [r9, #CPU_DI] | |
| add r0, r5, r4 lsr #16 | add r0, r5, r4 lsr #16 |
| bl i286_memoryread_w | bl i286a_memoryread_w |
| strh r0, [r9, #CPU_SI] | |
| add r4, r4, #(2 << 16) | add r4, r4, #(2 << 16) |
| strh r0, [r9, #CPU_SI] | |
| add r0, r5, r4 lsr #16 | add r0, r5, r4 lsr #16 |
| bl i286_memoryread_w | bl i286a_memoryread_w |
| strh r0, [r9, #CPU_BP] | |
| add r4, r4, #(4 << 16) | add r4, r4, #(4 << 16) |
| strh r0, [r9, #CPU_BP] | |
| add r0, r5, r4 lsr #16 | add r0, r5, r4 lsr #16 |
| bl i286_memoryread_w | bl i286a_memoryread_w |
| strh r0, [r9, #CPU_BX] | |
| add r4, r4, #(2 << 16) | add r4, r4, #(2 << 16) |
| strh r0, [r9, #CPU_BX] | |
| add r0, r5, r4 lsr #16 | add r0, r5, r4 lsr #16 |
| bl i286_memoryread_w | bl i286a_memoryread_w |
| strh r0, [r9, #CPU_DX] | |
| add r4, r4, #(2 << 16) | add r4, r4, #(2 << 16) |
| strh r0, [r9, #CPU_DX] | |
| add r0, r5, r4 lsr #16 | add r0, r5, r4 lsr #16 |
| bl i286_memoryread_w | bl i286a_memoryread_w |
| strh r0, [r9, #CPU_CX] | |
| add r4, r4, #(2 << 16) | add r4, r4, #(2 << 16) |
| strh r0, [r9, #CPU_CX] | |
| add r0, r5, r4 lsr #16 | add r0, r5, r4 lsr #16 |
| bl i286_memoryread_w | bl i286a_memoryread_w |
| strh r0, [r9, #CPU_AX] | |
| add r4, r4, #(2 << 16) | add r4, r4, #(2 << 16) |
| strh r0, [r9, #CPU_AX] | |
| mov r0, r4 lsr #16 | mov r0, r4 lsr #16 |
| strh r0, [r9, #CPU_SP] | strh r0, [r9, #CPU_SP] |
| mov pc, r11 | mov pc, r11 |
| bound GETPC8 | bound GETPCF8 |
| cmp r0, #&c0 | cmp r0, #&c0 |
| bcs bndreg | bcs bndreg |
| CPUWORK #13 | |
| R16DST r0, r12 | R16DST r0, r12 |
| CPUWORK #13 | |
| ldrh r5, [r12, #CPU_REG] | ldrh r5, [r12, #CPU_REG] |
| bl i286a_a | bl i286a_a |
| add r4, r0, #2 | add r4, r0, #2 |
| add r0, r0, r6 | add r0, r0, r6 |
| bl i286_memoryread_w | bl i286a_memoryread_w |
| cmp r5, r0 | cmp r5, r0 |
| bcc bndout | bcc bndout |
| bic r4, r4, #(1 << 16) | bic r4, r4, #(1 << 16) |
| add r0, r4, r6 | add r0, r4, r6 |
| bl i286_memoryread_w | bl i286a_memoryread_w |
| cmp r5, r0 | cmp r5, r0 |
| movls pc, r11 | movls pc, r11 |
| bndout mov r6, #5 | bndout mov r6, #5 |
| Line 503 push_d16 CPUWORK #3 | Line 540 push_d16 CPUWORK #3 |
| strh r2, [r9, #CPU_SP] | strh r2, [r9, #CPU_SP] |
| add r0, r2, r3 | add r0, r2, r3 |
| mov lr, r11 | mov lr, r11 |
| b i286_memorywrite_w | b i286a_memorywrite_w |
| imul_r_ea_d16 REG16EA r5, #21, #24 | imul_r_ea_d16 REG16EA r6, #21, #24 |
| mov r4, r0, lsl #16 | mov r4, r0, lsl #16 |
| GETPC16 | GETPC16 |
| mov r0, r0, lsl #16 | mov r0, r0, lsl #16 |
| Line 513 imul_r_ea_d16 REG16EA r5, #21, #24 | Line 550 imul_r_ea_d16 REG16EA r5, #21, #24 |
| mov r0, r0, asr #16 | mov r0, r0, asr #16 |
| mul r1, r0, r4 | mul r1, r0, r4 |
| add r12, r1, #&8000 | add r12, r1, #&8000 |
| strh r1, [r5, #CPU_REG] | strh r1, [r6, #CPU_REG] |
| movs r12, r12 lsr #16 | movs r12, r12 lsr #16 |
| biceq r8, r8, #O_FLAG | biceq r8, r8, #O_FLAG |
| biceq r8, r8, #C_FLAG | biceq r8, r8, #C_FLAG |
| Line 522 imul_r_ea_d16 REG16EA r5, #21, #24 | Line 559 imul_r_ea_d16 REG16EA r5, #21, #24 |
| mov pc, r11 | mov pc, r11 |
| push_d8 CPUWORK #3 | push_d8 CPUWORK #3 |
| GETPC8 | GETPCF8 |
| ldrh r2, [r9, #CPU_SP] | ldrh r2, [r9, #CPU_SP] |
| ldr r3, [r9, #CPU_SS_BASE] | ldr r3, [r9, #CPU_SS_BASE] |
| mov r0, r0 lsl #24 | mov r0, r0 lsl #24 |
| Line 532 push_d8 CPUWORK #3 | Line 569 push_d8 CPUWORK #3 |
| strh r2, [r9, #CPU_SP] | strh r2, [r9, #CPU_SP] |
| add r0, r2, r3 | add r0, r2, r3 |
| mov lr, r11 | mov lr, r11 |
| b i286_memorywrite_w | b i286a_memorywrite_w |
| imul_r_ea_d8 REG16EA r5, #21, #24 | imul_r_ea_d8 REG16EA r6, #21, #24 |
| mov r4, r0, lsl #16 | mov r4, r0, lsl #16 |
| GETPC8 | GETPC8 |
| mov r0, r0, lsl #24 | mov r0, r0, lsl #24 |
| Line 542 imul_r_ea_d8 REG16EA r5, #21, #24 | Line 579 imul_r_ea_d8 REG16EA r5, #21, #24 |
| mov r0, r0, asr #24 | mov r0, r0, asr #24 |
| mul r1, r0, r4 | mul r1, r0, r4 |
| add r12, r1, #&8000 | add r12, r1, #&8000 |
| strh r1, [r5, #CPU_REG] | strh r1, [r6, #CPU_REG] |
| movs r12, r12 lsr #16 | movs r12, r12 lsr #16 |
| biceq r8, r8, #O_FLAG | biceq r8, r8, #O_FLAG |
| biceq r8, r8, #C_FLAG | biceq r8, r8, #C_FLAG |
| Line 554 insb CPUWORK #5 | Line 591 insb CPUWORK #5 |
| ldrh r0, [r9, #CPU_DX] | ldrh r0, [r9, #CPU_DX] |
| CPUSV | CPUSV |
| bl iocore_inp8 | bl iocore_inp8 |
| CPULD | |
| ldrh r2, [r9, #CPU_DI] | ldrh r2, [r9, #CPU_DI] |
| ldr r3, [r9, #CPU_ES_BASE] | ldr r3, [r9, #CPU_ES_BASE] |
| CPULD | |
| mov r1, r0 | mov r1, r0 |
| add r0, r2, r3 | add r0, r3, r2 |
| tst r8, #D_FLAG | tst r8, #D_FLAG |
| addeq r2, r2, #1 | addeq r2, r2, #1 |
| subne r2, r2, #1 | subne r2, r2, #1 |
| mov lr, r11 | mov lr, r11 |
| strh r2, [r9, #CPU_DI] | strh r2, [r9, #CPU_DI] |
| b i286_memorywrite | b i286a_memorywrite |
| insw CPUWORK #5 | insw CPUWORK #5 |
| ldrh r0, [r9, #CPU_DX] | ldrh r0, [r9, #CPU_DX] |
| CPUSV | CPUSV |
| bl iocore_inp16 | bl iocore_inp16 |
| CPULD | |
| ldrh r2, [r9, #CPU_DI] | ldrh r2, [r9, #CPU_DI] |
| ldr r3, [r9, #CPU_ES_BASE] | ldr r3, [r9, #CPU_ES_BASE] |
| CPULD | |
| mov r1, r0 | mov r1, r0 |
| add r0, r2, r3 | add r0, r3, r2 |
| tst r8, #D_FLAG | tst r8, #D_FLAG |
| addeq r2, r2, #2 | addeq r2, r2, #2 |
| subne r2, r2, #2 | subne r2, r2, #2 |
| mov lr, r11 | mov lr, r11 |
| strh r2, [r9, #CPU_DI] | strh r2, [r9, #CPU_DI] |
| b i286_memorywrite_w | b i286a_memorywrite_w |
| outsb CPUWORK #3 | outsb CPUWORK #3 |
| ldrh r1, [r9, #CPU_SI] | ldrh r1, [r9, #CPU_SI] |
| ldr r2, [r9, #CPU_DS_FIX] | ldr r2, [r9, #CPU_DS_FIX] |
| add r0, r1, r2 | |
| tst r8, #D_FLAG | tst r8, #D_FLAG |
| addeq r1, r1, #1 | addeq r3, r1, #1 |
| subne r1, r1, #1 | subne r3, r1, #1 |
| strh r1, [r9, #CPU_SI] | add r0, r2, r1 |
| bl i286_memoryread | strh r3, [r9, #CPU_SI] |
| bl i286a_memoryread | |
| mov r1, r0 | mov r1, r0 |
| ldr r0, [r9, #CPU_DX] | ldr r0, [r9, #CPU_DX] |
| CPUSV | CPUSV |
| Line 601 outsb CPUWORK #3 | Line 638 outsb CPUWORK #3 |
| outsw CPUWORK #3 | outsw CPUWORK #3 |
| ldrh r1, [r9, #CPU_SI] | ldrh r1, [r9, #CPU_SI] |
| ldr r2, [r9, #CPU_DS_FIX] | ldr r2, [r9, #CPU_DS_FIX] |
| add r0, r1, r2 | |
| tst r8, #D_FLAG | tst r8, #D_FLAG |
| addeq r1, r1, #2 | addeq r3, r1, #2 |
| subne r1, r1, #2 | subne r3, r1, #2 |
| strh r1, [r9, #CPU_SI] | add r0, r2, r1 |
| bl i286_memoryread_w | strh r3, [r9, #CPU_SI] |
| bl i286a_memoryread_w | |
| mov r1, r0 | mov r1, r0 |
| ldr r0, [r9, #CPU_DX] | ldr r0, [r9, #CPU_DX] |
| CPUSV | CPUSV |
| Line 619 jle_short tst r8, #Z_FLAG | Line 656 jle_short tst r8, #Z_FLAG |
| jl_short eor r0, r8, r8 lsr #4 | jl_short eor r0, r8, r8 lsr #4 |
| tst r0, #S_FLAG | tst r0, #S_FLAG |
| bne jmps | bne jmps |
| nojmps CPUWORK #2 | nojmps CPUWORK #3 |
| add r8, r8, #(1 << 16) | add r8, r8, #(1 << 16) |
| mov pc, r11 | mov pc, r11 |
| jnle_short tst r8, #Z_FLAG | jnle_short tst r8, #Z_FLAG |
| bne jmps | bne nojmps |
| jnl_short eor r0, r8, r8 lsr #4 | jnl_short eor r0, r8, r8 lsr #4 |
| tst r0, #S_FLAG | tst r0, #S_FLAG |
| bne nojmps | bne nojmps |
| Line 634 jmps JMPS #7 | Line 671 jmps JMPS #7 |
| xchg_ea_r8 EAREG8 r6 | xchg_ea_r8 EAREG8 r6 |
| cmp r0, #&c0 | cmp r0, #&c0 |
| bcc xchgear8_1 | bcc xchgear8_1 |
| CPUWORK #3 | R8SRC r0, r2 |
| R8SRC r0, r5 | |
| ldrb r0, [r6, #CPU_REG] | ldrb r0, [r6, #CPU_REG] |
| ldrb r1, [r5, #CPU_REG] | ldrb r1, [r2, #CPU_REG] |
| strb r0, [r5, #CPU_REG] | CPUWORK #3 |
| strb r0, [r2, #CPU_REG] | |
| strb r1, [r6, #CPU_REG] | strb r1, [r6, #CPU_REG] |
| mov pc, r11 | mov pc, r11 |
| xchgear8_1 CPUWORK #5 | xchgear8_1 bl i286a_ea |
| bl i286a_ea | |
| cmp r0, #I286_MEMWRITEMAX | cmp r0, #I286_MEMWRITEMAX |
| bcs xchgear8_2 | bcs xchgear8_2 |
| ldrb r1, [r6, #CPU_REG] | ldrb r1, [r6, #CPU_REG] |
| ldrb r4, [r9, r0] | ldrb r4, [r9, r0] |
| CPUWORK #5 | |
| strb r1, [r9, r0] | strb r1, [r9, r0] |
| strb r4, [r6, #CPU_REG] | strb r4, [r6, #CPU_REG] |
| mov pc, r11 | mov pc, r11 |
| xchgear8_2 mov r5, r0 | xchgear8_2 mov r5, r0 |
| bl i286_memoryread | bl i286a_memoryread |
| ldrb r1, [r6, #CPU_REG] | ldrb r1, [r6, #CPU_REG] |
| strb r0, [r6, #CPU_REG] | strb r0, [r6, #CPU_REG] |
| CPUWORK #5 | |
| mov r0, r5 | mov r0, r5 |
| mov lr, r11 | mov lr, r11 |
| b i286_memorywrite | b i286a_memorywrite |
| xchg_ea_r16 EAREG16 r6 | xchg_ea_r16 EAREG16 r6 |
| cmp r0, #&c0 | cmp r0, #&c0 |
| bcc xchgear16_1 | bcc xchgear16_1 |
| CPUWORK #3 | R16SRC r0, r2 |
| R16SRC r0, r5 | |
| ldrh r0, [r6, #CPU_REG] | ldrh r0, [r6, #CPU_REG] |
| ldrh r1, [r5, #CPU_REG] | ldrh r1, [r2, #CPU_REG] |
| strh r0, [r5, #CPU_REG] | CPUWORK #3 |
| strh r0, [r2, #CPU_REG] | |
| strh r1, [r6, #CPU_REG] | strh r1, [r6, #CPU_REG] |
| mov pc, r11 | mov pc, r11 |
| xchgear16_1 CPUWORK #5 | xchgear16_1 bl i286a_ea |
| bl i286a_ea | ACCWORD r0, xchgear16_2 |
| tst r0, #1 | |
| bne xchgear16_2 | |
| cmp r0, #I286_MEMWRITEMAX | |
| bcs xchgear16_2 | |
| ldrh r1, [r6, #CPU_REG] | ldrh r1, [r6, #CPU_REG] |
| ldrh r4, [r9, r0] | ldrh r4, [r9, r0] |
| CPUWORK #5 | |
| strh r1, [r9, r0] | strh r1, [r9, r0] |
| strh r4, [r6, #CPU_REG] | strh r4, [r6, #CPU_REG] |
| mov pc, r11 | mov pc, r11 |
| xchgear16_2 mov r5, r0 | xchgear16_2 mov r5, r0 |
| bl i286_memoryread_w | bl i286a_memoryread_w |
| ldrh r1, [r6, #CPU_REG] | ldrh r1, [r6, #CPU_REG] |
| strh r0, [r6, #CPU_REG] | strh r0, [r6, #CPU_REG] |
| CPUWORK #5 | |
| mov r0, r5 | mov r0, r5 |
| mov lr, r11 | mov lr, r11 |
| b i286_memorywrite_w | b i286a_memorywrite_w |
| mov_ea_r8 EAREG8 r6 | mov_ea_r8 EAREG8 r6 |
| cmp r0, #&c0 | cmp r0, #&c0 |
| bcc movear8_1 | bcc movear8_1 |
| ldrb r1, [r6, #CPU_REG] | |
| R8SRC r0, r2 | |
| CPUWORK #3 | CPUWORK #3 |
| R8SRC r0, r5 | strb r1, [r2, #CPU_REG] |
| ldrb r0, [r6, #CPU_REG] | |
| strb r0, [r5, #CPU_REG] | |
| mov pc, r11 | mov pc, r11 |
| movear8_1 CPUWORK #5 | movear8_1 CPUWORK #5 |
| bl i286a_ea | bl i286a_ea |
| ldrb r1, [r6, #CPU_REG] | ldrb r1, [r6, #CPU_REG] |
| mov lr, r11 | mov lr, r11 |
| b i286_memorywrite | b i286a_memorywrite |
| mov_ea_r16 EAREG16 r6 | mov_ea_r16 EAREG16 r6 |
| cmp r0, #&c0 | cmp r0, #&c0 |
| bcc movear16_1 | bcc movear16_1 |
| ldrh r1, [r6, #CPU_REG] | |
| R16SRC r0, r2 | |
| CPUWORK #3 | CPUWORK #3 |
| R16SRC r0, r5 | strh r1, [r2, #CPU_REG] |
| ldrh r0, [r6, #CPU_REG] | |
| strh r0, [r5, #CPU_REG] | |
| mov pc, r11 | mov pc, r11 |
| movear16_1 CPUWORK #5 | movear16_1 CPUWORK #5 |
| bl i286a_ea | bl i286a_ea |
| ldrh r1, [r6, #CPU_REG] | ldrh r1, [r6, #CPU_REG] |
| mov lr, r11 | mov lr, r11 |
| b i286_memorywrite_w | b i286a_memorywrite_w |
| mov_r8_ea REG8EA r5, #2, #5 | mov_r8_ea REG8EA r6, #2, #5 |
| strb r0, [r5, #CPU_REG] | strb r0, [r6, #CPU_REG] |
| mov pc, r11 | mov pc, r11 |
| mov_r16_ea REG16EA r5, #2, #5 | mov_r16_ea REG16EA r6, #2, #5 |
| strh r0, [r5, #CPU_REG] | strh r0, [r6, #CPU_REG] |
| mov pc, r11 | mov pc, r11 |
| mov_ea_seg GETPC8 | mov_ea_seg GETPCF8 |
| and r1, r0, #(3 << 3) | and r1, r0, #(3 << 3) |
| add r1, r9, r1 lsr #2 | add r1, r9, r1 lsr #2 |
| ldrh r5, [r1, #CPU_REG] | ldrh r6, [r1, #CPU_SEG] |
| cmp r0, #&c0 | cmp r0, #&c0 |
| bcc measegm | bcc measegm |
| R16SRC r0, r2 | |
| CPUWORK #2 | CPUWORK #2 |
| R16DST r0, r4 | strh r6, [r2, #CPU_REG] |
| strh r5, [r4, #CPU_REG] | |
| mov pc, r11 | mov pc, r11 |
| measegm CPUWORK #3 | measegm CPUWORK #3 |
| bl i286a_ea | bl i286a_ea |
| mov r1, r5 | mov r1, r6 |
| mov lr, r11 | mov lr, r11 |
| b i286_memorywrite_w | b i286a_memorywrite_w |
| lea_r16_ea CPUWORK #3 | lea_r16_ea CPUWORK #3 |
| GETPC8 | GETPCF8 |
| cmp r0, #&c0 | cmp r0, #&c0 |
| bcs leareg | bcs leareg |
| R8DST r0, r5 | R16DST r0, r6 |
| bl i286a_lea | bl i286a_lea |
| strh r0, [r5, #CPU_REG] | strh r0, [r6, #CPU_REG] |
| mov pc, r11 | mov pc, r11 |
| leareg mov r6, #6 | leareg mov r6, #6 |
| sub r8, r8, #(2 << 16) | sub r8, r8, #(2 << 16) |
| b i286a_localint | b i286a_localint |
| mov_seg_ea ldrb r6, [r9, #CPU_MSW] | |
| GETPCF8 | |
| adr r2, msegea_tbl | |
| and r1, r0, #(3 << 3) | |
| tst r6, #MSW_PE | |
| orrne r1, r1, #(4 << 3) | |
| mov r6, r8 | |
| ldr r2, [r2, r1 lsr #1] | |
| cmp r0, #&c0 | |
| bcc msegeam | |
| R16SRC r0, r4 | |
| CPUWORK #2 | |
| ldrh r0, [r4, #CPU_REG] | |
| mov pc, r2 | |
| msegeam str r2, [sp, #-4]! | |
| CPUWORK #5 | |
| bl i286a_ea | |
| ldr lr, [sp], #4 | |
| b i286a_memoryread_w | |
| msegea_tbl dcd msegea_es | |
| dcd msegea_cs | |
| dcd msegea_ss | |
| dcd msegea_ds | |
| dcd msegea_es_p | |
| dcd msegea_cs | |
| dcd msegea_ss_p | |
| dcd msegea_ds_p | |
| msegea_es mov r1, r0 lsl #4 | |
| strh r0, [r9, #CPU_ES] | |
| str r1, [r9, #CPU_ES_BASE] | |
| mov pc, r11 | |
| msegea_ds mov r1, r0 lsl #4 | |
| strh r0, [r9, #CPU_DS] | |
| str r1, [r9, #CPU_DS_BASE] | |
| str r1, [r9, #CPU_DS_FIX] | |
| mov pc, r11 | |
| msegea_ss mov r1, r0 lsl #4 | |
| strh r0, [r9, #CPU_SS] | |
| str r1, [r9, #CPU_SS_BASE] | |
| str r1, [r9, #CPU_SS_FIX] | |
| NEXT_OPCODE | |
| msegea_es_p strh r0, [r9, #CPU_ES] | |
| bl i286a_selector | |
| str r0, [r9, #CPU_ES_BASE] | |
| mov pc, r11 | |
| msegea_ds_p strh r0, [r9, #CPU_DS] | |
| bl i286a_selector | |
| str r0, [r9, #CPU_DS_BASE] | |
| str r0, [r9, #CPU_DS_FIX] | |
| mov pc, r11 | |
| msegea_ss_p strh r0, [r9, #CPU_SS] | |
| bl i286a_selector | |
| str r0, [r9, #CPU_SS_BASE] | |
| str r0, [r9, #CPU_SS_FIX] | |
| NEXT_OPCODE | |
| msegea_cs sub r8, r6, #(2 << 16) | |
| mov r6, #6 | |
| b i286a_localint | |
| pop_ea POP #5 | pop_ea POP #5 |
| mov r4, r0 | mov r6, r0 |
| GETPC8 | GETPCF8 |
| cmp r0, #&c0 | cmp r0, #&c0 |
| bcs popreg | bcs popreg |
| bl i286a_ea | bl i286a_ea |
| mov r1, r4 | mov r1, r6 |
| mov lr, r11 | mov lr, r11 |
| b i286_memorywrite_w | b i286a_memorywrite_w |
| popreg R16DST r0, r1 | popreg R16SRC r0, r1 |
| ldrh r4, [r1, #CPU_REG] | strh r4, [r1, #CPU_REG] |
| mov pc, r11 | mov pc, r11 |
| cbw CPUWORK #2 | nopandbios sub r0, r8, #(1 << 16) |
| ldrb r0, [r9, #CPU_AL] | CPUWORK #3 |
| ;; ldr r5, [r9, #CPU_CS_BASE] | |
| add r0, r5, r0 lsr #16 | |
| cmp r0, #&0f8000 | |
| movcc pc, r11 | |
| cmp r0, #&100000 | |
| movcs pc, r11 | |
| CPUSV | |
| bl biosfunc | |
| CPULD | |
| ldrh r0, [r9, #CPU_ES] | |
| ldrh r1, [r9, #CPU_CS] | |
| ldrh r2, [r9, #CPU_SS] | |
| ldrh r3, [r9, #CPU_DS] | |
| mov r0, r0 lsl #4 | |
| mov r1, r1 lsl #4 | |
| mov r2, r2 lsl #4 | |
| mov r3, r3 lsl #4 | |
| str r0, [r9, #CPU_ES_BASE] | |
| str r1, [r9, #CPU_CS_BASE] | |
| str r2, [r9, #CPU_SS_BASE] | |
| str r3, [r9, #CPU_DS_BASE] | |
| str r2, [r9, #CPU_SS_FIX] | |
| str r3, [r9, #CPU_DS_FIX] | |
| mov pc, r11 | |
| cbw ldrb r0, [r9, #CPU_AL] | |
| CPUWORK #2 | |
| mov r1, r0 lsl #24 | mov r1, r0 lsl #24 |
| mov r0, r1 asr #31 | mov r0, r1 asr #31 |
| strb r0, [r9, #CPU_AH] | strb r0, [r9, #CPU_AH] |
| mov pc, r11 | mov pc, r11 |
| cwd CPUWORK #2 | cwd ldrb r0, [r9, #CPU_AH] |
| ldrb r0, [r9, #CPU_AH] | CPUWORK #2 |
| mov r1, r0 lsl #24 | mov r1, r0 lsl #24 |
| mov r0, r1 asr #31 | mov r0, r1 asr #31 |
| strh r0, [r9, #CPU_DX] | strh r0, [r9, #CPU_DX] |
| Line 787 call_far CPUWORK #13 | Line 911 call_far CPUWORK #13 |
| mov r4, r4 lsl #16 | mov r4, r4 lsl #16 |
| sub r4, r4, #(2 << 16) | sub r4, r4, #(2 << 16) |
| add r0, r5, r4 lsr #16 | add r0, r5, r4 lsr #16 |
| bl i286_memorywrite_w ; cs | bl i286a_memorywrite_w ; cs |
| sub r4, r4, #(2 << 16) | sub r4, r4, #(2 << 16) |
| add r12, r8, #(4 << 16) | add r12, r8, #(4 << 16) |
| mov r4, r4, lsr #16 | mov r4, r4, lsr #16 |
| mov r1, r12 lsr #16 | mov r1, r12 lsr #16 |
| add r0, r4, r5 | add r0, r4, r5 |
| bl i286_memorywrite_w ; ip | |
| ldr r5, [r9, #CPU_CS_BASE] | ldr r5, [r9, #CPU_CS_BASE] |
| bl i286a_memorywrite_w ; ip | |
| strh r4, [r9, #CPU_SP] | strh r4, [r9, #CPU_SP] |
| add r0, r5, r8 lsr #16 | add r0, r5, r8 lsr #16 |
| bl i286_memoryread_w ; newip | bl i286a_memoryread_w ; newip |
| add r8, r8, #(2 << 16) | add r8, r8, #(2 << 16) |
| mov r4, r0 lsl #16 | mov r4, r0 lsl #16 |
| add r0, r5, r8 lsr #16 | add r0, r5, r8 lsr #16 |
| bl i286_memoryread_w | ldrb r5, [r9, #CPU_MSW] |
| mov r1, r0 lsl #4 | bl i286a_memoryread_w |
| strh r0, [r9, #CPU_CS] | strh r0, [r9, #CPU_CS] |
| str r1, [r9, #CPU_CS_BASE] | tst r5, #MSW_PE |
| moveq r0, r0 lsl #4 | |
| blne i286a_selector | |
| str r0, [r9, #CPU_CS_BASE] | |
| mov r0, r8 lsl #16 | mov r0, r8 lsl #16 |
| orr r8, r4, r0 lsr #16 | orr r8, r4, r0 lsr #16 |
| mov pc, r11 | mov pc, r11 |
| Line 813 wait CPUWORK #2 | Line 940 wait CPUWORK #2 |
| mov pc, r11 | mov pc, r11 |
| pushf CPUWORK #3 | pushf CPUWORK #3 |
| ldrh r1, [r9, #CPU_SP] | ldrh r3, [r9, #CPU_SP] |
| ldr r2, [r9, #CPU_SS_BASE] | ldr r2, [r9, #CPU_SS_BASE] |
| sub r0, r1, #2 | |
| mov r3, r0 lsl #16 | |
| strh r0, [r9, #CPU_SP] | |
| add r0, r2, r3 lsr #16 | |
| mov r1, r8 | mov r1, r8 |
| subs r3, r3, #2 | |
| addcc r3, r3, #&10000 | |
| strh r3, [r9, #CPU_SP] | |
| add r0, r3, r2 | |
| mov lr, r11 | mov lr, r11 |
| b i286_memorywrite_w | b i286a_memorywrite_w |
| popf POP #5 | |
| if 1 | |
| mov r8, r8 lsr #16 | |
| bic r1, r0, #&f000 ; i286 | |
| and r2, r0, #(I_FLAG + T_FLAG) | |
| orr r8, r1, r8 lsl #16 | |
| cmp r2, #(I_FLAG + T_FLAG) | |
| beq popf_withirq | |
| else | |
| mov r2, #3 | |
| mov r8, r8 lsr #16 | |
| and r2, r2, r0 lsr #8 | |
| bic r1, r0, #&f000 ; i286 | |
| ands r2, r2, r2 lsr #1 | |
| orr r8, r1, r8 lsl #16 | |
| strb r2, [r9, #CPU_TRAP] | |
| bne popf_withirq | |
| endif | |
| ldr r0, popf_pic | |
| NOINTREXIT | |
| popf_withirq I286IRQCHECKTERM | |
| popf_pic dcd pic | |
| sahf CPUWORK #2 | sahf ldrb r0, [r9, #CPU_AH] |
| ldrb r0, [r9, #CPU_AH] | CPUWORK #2 |
| bic r8, r8, #&ff | bic r8, r8, #&ff |
| orr r8, r0, r8 | orr r8, r8, r0 |
| mov pc, r11 | mov pc, r11 |
| lahf CPUWORK #2 | lahf CPUWORK #2 |
| Line 835 lahf CPUWORK #2 | Line 985 lahf CPUWORK #2 |
| mov_al_m8 CPUWORK #5 | mov_al_m8 CPUWORK #5 |
| ldr r5, [r9, #CPU_DS_FIX] | ldr r6, [r9, #CPU_DS_FIX] |
| GETPC16 | GETPC16 |
| add r0, r5, r0 | add r0, r0, r6 |
| bl i286_memoryread | bl i286a_memoryread |
| strb r0, [r9, #CPU_AL] | strb r0, [r9, #CPU_AL] |
| mov pc, r11 | mov pc, r11 |
| mov_ax_m16 CPUWORK #5 | mov_ax_m16 CPUWORK #5 |
| ldr r5, [r9, #CPU_DS_FIX] | ldr r6, [r9, #CPU_DS_FIX] |
| GETPC16 | GETPC16 |
| add r0, r5, r0 | add r0, r0, r6 |
| bl i286_memoryread_w | bl i286a_memoryread_w |
| strh r0, [r9, #CPU_AX] | strh r0, [r9, #CPU_AX] |
| mov pc, r11 | mov pc, r11 |
| mov_m8_al CPUWORK #5 | mov_m8_al CPUWORK #5 |
| ldr r5, [r9, #CPU_DS_FIX] | ldr r6, [r9, #CPU_DS_FIX] |
| GETPC16 | GETPC16 |
| ldrb r1, [r9, #CPU_AL] | ldrb r1, [r9, #CPU_AL] |
| add r0, r5, r0 | add r0, r0, r6 |
| mov lr, r11 | mov lr, r11 |
| b i286_memorywrite | b i286a_memorywrite |
| mov_m16_ax CPUWORK #5 | mov_m16_ax CPUWORK #5 |
| ldr r5, [r9, #CPU_DS_FIX] | ldr r6, [r9, #CPU_DS_FIX] |
| GETPC16 | GETPC16 |
| ldrh r1, [r9, #CPU_AX] | ldrh r1, [r9, #CPU_AX] |
| add r0, r5, r0 | add r0, r0, r6 |
| mov lr, r11 | mov lr, r11 |
| b i286_memorywrite_w | b i286a_memorywrite_w |
| movsb CPUWORK #5 | movsb CPUWORK #5 |
| ldrh r6, [r9, #CPU_SI] | |
| ldr r0, [r9, #CPU_DS_FIX] | ldr r0, [r9, #CPU_DS_FIX] |
| ldrh r5, [r9, #CPU_SI] | tst r8, #D_FLAG |
| add r0, r5, r0 | moveq r4, #1 |
| bl i286_memoryread | movne r4, #-1 |
| ldr r2, [r9, #CPU_ES_BASE] | add r0, r6, r0 |
| bl i286a_memoryread | |
| ldrh r3, [r9, #CPU_DI] | ldrh r3, [r9, #CPU_DI] |
| and r12, r8, #D_FLAG | ldr r2, [r9, #CPU_ES_BASE] |
| add r6, r6, r4 | |
| mov r1, r0 | mov r1, r0 |
| mov r12, r12 lsr #(10 - 1) | add r0, r3, r2 |
| add r0, r2, r3 | add r3, r3, r4 |
| rsb r2, r12, #1 | strh r6, [r9, #CPU_SI] |
| mov lr, r11 | |
| add r5, r2, r5 | |
| add r3, r2, r3 | |
| strh r5, [r9, #CPU_SI] | |
| strh r3, [r9, #CPU_DI] | strh r3, [r9, #CPU_DI] |
| b i286_memorywrite | mov lr, r11 |
| b i286a_memorywrite | |
| movsw CPUWORK #5 | movsw CPUWORK #5 |
| ldrh r6, [r9, #CPU_SI] | |
| ldr r0, [r9, #CPU_DS_FIX] | ldr r0, [r9, #CPU_DS_FIX] |
| ldrh r5, [r9, #CPU_SI] | tst r8, #D_FLAG |
| add r0, r5, r0 | moveq r4, #2 |
| bl i286_memoryread_w | movne r4, #-2 |
| ldr r2, [r9, #CPU_ES_BASE] | add r0, r6, r0 |
| bl i286a_memoryread_w | |
| ldrh r3, [r9, #CPU_DI] | ldrh r3, [r9, #CPU_DI] |
| and r12, r8, #D_FLAG | ldr r2, [r9, #CPU_ES_BASE] |
| add r6, r6, r4 | |
| mov r1, r0 | mov r1, r0 |
| mov r12, r12 lsr #(10 - 2) | add r0, r3, r2 |
| add r0, r2, r3 | add r3, r3, r4 |
| rsb r2, r12, #2 | strh r6, [r9, #CPU_SI] |
| mov lr, r11 | |
| add r5, r2, r5 | |
| add r3, r2, r3 | |
| strh r5, [r9, #CPU_SI] | |
| strh r3, [r9, #CPU_DI] | strh r3, [r9, #CPU_DI] |
| b i286_memorywrite_w | mov lr, r11 |
| b i286a_memorywrite_w | |
| cmpsb CPUWORK #8 | cmpsb ldrh r5, [r9, #CPU_SI] |
| ldr r0, [r9, #CPU_DS_FIX] | ldr r0, [r9, #CPU_DS_FIX] |
| ldrh r5, [r9, #CPU_SI] | ldr r4, [r9, #CPU_ES_BASE] |
| add r0, r5, r0 | CPUWORK #8 |
| bl i286_memoryread | add r0, r0, r5 |
| ldr r2, [r9, #CPU_ES_BASE] | bl i286a_memoryread |
| ldrh r3, [r9, #CPU_DI] | ldrh r3, [r9, #CPU_DI] |
| mov r6, r0 | mov r6, r0 |
| 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, r3, r4 |
| rsb 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] |
| strh r3, [r9, #CPU_DI] | strh r3, [r9, #CPU_DI] |
| bl i286_memoryread | bl i286a_memoryread |
| SUB8 r6, r0 | SUB8 r6, r0 |
| mov pc, r11 | mov pc, r11 |
| cmpsw CPUWORK #8 | cmpsw ldrh r5, [r9, #CPU_SI] |
| ldr r0, [r9, #CPU_DS_FIX] | ldr r0, [r9, #CPU_DS_FIX] |
| ldrh r5, [r9, #CPU_SI] | ldr r4, [r9, #CPU_ES_BASE] |
| add r0, r5, r0 | CPUWORK #8 |
| bl i286_memoryread_w | add r0, r0, r5 |
| ldr r2, [r9, #CPU_ES_BASE] | bl i286a_memoryread_w |
| ldrh r3, [r9, #CPU_DI] | ldrh r3, [r9, #CPU_DI] |
| mov r6, r0 | mov r6, r0 |
| 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, r3, r4 |
| rsb 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] |
| strh r3, [r9, #CPU_DI] | strh r3, [r9, #CPU_DI] |
| bl i286_memoryread_w | bl i286a_memoryread_w |
| SUB16 r6, r0 | SUB16 r6, r0 |
| mov pc, r11 | mov pc, r11 |
| stosb CPUWORK #3 | stosb CPUWORK #3 |
| ldr r0, [r9, #CPU_ES_BASE] | |
| ldrb r1, [r9, #CPU_AL] | ldrb r1, [r9, #CPU_AL] |
| ldrh r2, [r9, #CPU_DI] | ldrh r2, [r9, #CPU_DI] |
| add r0, r2, r0 | ldr r0, [r9, #CPU_ES_BASE] |
| tst r8, #D_FLAG | tst r8, #D_FLAG |
| addeq r2, r2, #1 | addeq r3, r2, #1 |
| subne r2, r2, #1 | subne r3, r2, #1 |
| strh r2, [r9, #CPU_DI] | add r0, r2, r0 |
| strh r3, [r9, #CPU_DI] | |
| mov lr, r11 | mov lr, r11 |
| b i286_memorywrite | b i286a_memorywrite |
| stosw CPUWORK #3 | stosw CPUWORK #3 |
| ldr r0, [r9, #CPU_ES_BASE] | |
| ldrh r1, [r9, #CPU_AX] | ldrh r1, [r9, #CPU_AX] |
| ldrh r2, [r9, #CPU_DI] | ldrh r2, [r9, #CPU_DI] |
| add r0, r2, r0 | ldr r0, [r9, #CPU_ES_BASE] |
| tst r8, #D_FLAG | tst r8, #D_FLAG |
| addeq r2, r2, #2 | addeq r3, r2, #2 |
| subne r2, r2, #2 | subne r3, r2, #2 |
| strh r2, [r9, #CPU_DI] | add r0, r2, r0 |
| strh r3, [r9, #CPU_DI] | |
| mov lr, r11 | mov lr, r11 |
| b i286_memorywrite_w | b i286a_memorywrite_w |
| lodsb CPUWORK #5 | lodsb CPUWORK #5 |
| ldr r0, [r9, #CPU_DS_FIX] | |
| ldrh r5, [r9, #CPU_SI] | ldrh r5, [r9, #CPU_SI] |
| add r0, r5, r0 | ldr r0, [r9, #CPU_DS_FIX] |
| bl i286_memoryread | |
| tst r8, #D_FLAG | tst r8, #D_FLAG |
| addeq r5, r5, #1 | addeq r6, r5, #1 |
| subne r5, r5, #1 | subne r6, r5, #1 |
| add r0, r5, r0 | |
| bl i286a_memoryread | |
| strb r0, [r9, #CPU_AL] | strb r0, [r9, #CPU_AL] |
| strh r5, [r9, #CPU_SI] | strh r6, [r9, #CPU_SI] |
| mov pc, r11 | mov pc, r11 |
| lodsw CPUWORK #5 | lodsw CPUWORK #5 |
| ldr r0, [r9, #CPU_DS_FIX] | |
| ldrh r5, [r9, #CPU_SI] | ldrh r5, [r9, #CPU_SI] |
| add r0, r5, r0 | ldr r0, [r9, #CPU_DS_FIX] |
| bl i286_memoryread_w | |
| tst r8, #D_FLAG | tst r8, #D_FLAG |
| addeq r5, r5, #2 | addeq r6, r5, #2 |
| subne r5, r5, #2 | subne r6, r5, #2 |
| add r0, r5, r0 | |
| bl i286a_memoryread_w | |
| strh r0, [r9, #CPU_AX] | strh r0, [r9, #CPU_AX] |
| strh r5, [r9, #CPU_SI] | strh r6, [r9, #CPU_SI] |
| mov pc, r11 | mov pc, r11 |
| scasb CPUWORK #7 | scasb CPUWORK #7 |
| ldr r0, [r9, #CPU_DS_FIX] | ldrh r5, [r9, #CPU_DI] |
| ldrh r5, [r9, #CPU_SI] | ldr r0, [r9, #CPU_ES_BASE] |
| add r0, r5, r0 | |
| bl i286_memoryread | |
| tst r8, #D_FLAG | tst r8, #D_FLAG |
| addeq r5, r5, #1 | addeq r6, r5, #1 |
| subne r5, r5, #1 | subne r6, r5, #1 |
| strh r5, [r9, #CPU_SI] | add r0, r5, r0 |
| bl i286a_memoryread | |
| ldrb r5, [r9, #CPU_AL] | ldrb r5, [r9, #CPU_AL] |
| strh r6, [r9, #CPU_DI] | |
| SUB8 r5, r0 | SUB8 r5, r0 |
| mov pc, r11 | mov pc, r11 |
| scasw CPUWORK #7 | scasw CPUWORK #7 |
| ldr r0, [r9, #CPU_DS_FIX] | ldrh r5, [r9, #CPU_DI] |
| ldrh r5, [r9, #CPU_SI] | ldr r0, [r9, #CPU_ES_BASE] |
| add r0, r5, r0 | |
| bl i286_memoryread_w | |
| tst r8, #D_FLAG | tst r8, #D_FLAG |
| addeq r5, r5, #2 | addeq r6, r5, #2 |
| subne r5, r5, #2 | subne r6, r5, #2 |
| strh r5, [r9, #CPU_SI] | add r0, r5, r0 |
| bl i286a_memoryread_w | |
| ldrh r5, [r9, #CPU_AX] | ldrh r5, [r9, #CPU_AX] |
| strh r6, [r9, #CPU_DI] | |
| SUB16 r5, r0 | SUB16 r5, r0 |
| mov pc, r11 | mov pc, r11 |
| ret_near_d16 CPUWORK #11 | ret_near_d16 GETPC16 |
| GETPC16 | |
| ldrh r1, [r9, #CPU_SP] | ldrh r1, [r9, #CPU_SP] |
| ldr r2, [r9, #CPU_SS_BASE] | ldr r2, [r9, #CPU_SS_BASE] |
| CPUWORK #11 | |
| add r3, r0, r1 | add r3, r0, r1 |
| add r0, r1, r2 | add r0, r1, r2 |
| add r3, r3, #2 | add r3, r3, #2 |
| strh r3, [r9, #CPU_SP] | strh r3, [r9, #CPU_SP] |
| bl i286_memoryread_w | bl i286a_memoryread_w |
| mov r8, r8 lsl #16 | mov r8, r8 lsl #16 |
| mov r8, r8 lsr #16 | mov r8, r8 lsr #16 |
| orr r8, r8, r0 lsl #16 | orr r8, r8, r0 lsl #16 |
| mov pc, r11 | mov pc, r11 |
| ret_near CPUWORK #11 | ret_near CPUWORK #11 |
| ldrh r4, [r9, #CPU_SP] | ldrh r1, [r9, #CPU_SP] |
| ldr r0, [r9, #CPU_SS_BASE] | 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 lsl #16 |
| add r2, r1, #2 | |
| add r0, r1, r0 | |
| strh r2, [r9, #CPU_SP] | |
| mov r8, r8 lsr #16 | mov r8, r8 lsr #16 |
| bl i286a_memoryread_w | |
| orr r8, r8, r0 lsl #16 | orr r8, r8, r0 lsl #16 |
| mov pc, r11 | mov pc, r11 |
| les_r16_ea GETPC8 | les_r16_ea GETPCF8 |
| cmp r0, #&c0 | cmp r0, #&c0 |
| bcs lr16_r | bcs lr16_r |
| CPUWORK #3 | CPUWORK #3 |
| Line 1054 les_r16_ea GETPC8 | Line 1204 les_r16_ea GETPC8 |
| add r4, r0, #2 | add r4, r0, #2 |
| add r0, r0, r6 | add r0, r0, r6 |
| bic r4, r4, #(1 << 16) | bic r4, r4, #(1 << 16) |
| bl i286_memoryread_w | bl i286a_memoryread_w |
| strh r0, [r5, #CPU_REG] | strh r0, [r5, #CPU_REG] |
| add r0, r4, r6 | add r0, r4, r6 |
| bl i286_memoryread_w | ldrb r4, [r9, #CPU_MSW] |
| mov r1, r0 lsl #4 | bl i286a_memoryread_w |
| strh r0, [r9, #CPU_ES] | strh r0, [r9, #CPU_ES] |
| str r1, [r9, #CPU_ES_BASE] | tst r4, #MSW_PE |
| moveq r0, r0 lsl #4 | |
| blne i286a_selector | |
| str r0, [r9, #CPU_ES_BASE] | |
| mov pc, r11 | mov pc, r11 |
| lr16_r mov r6, #6 | lr16_r mov r6, #6 |
| sub r8, r8, #(2 << 16) | sub r8, r8, #(2 << 16) |
| b i286a_localint | b i286a_localint |
| lds_r16_ea GETPC8 | lds_r16_ea GETPCF8 |
| cmp r0, #&c0 | cmp r0, #&c0 |
| bcs lr16_r | bcs lr16_r |
| CPUWORK #3 | CPUWORK #3 |
| Line 1075 lds_r16_ea GETPC8 | Line 1228 lds_r16_ea GETPC8 |
| add r4, r0, #2 | add r4, r0, #2 |
| add r0, r0, r6 | add r0, r0, r6 |
| bic r4, r4, #(1 << 16) | bic r4, r4, #(1 << 16) |
| bl i286_memoryread_w | bl i286a_memoryread_w |
| strh r0, [r5, #CPU_REG] | strh r0, [r5, #CPU_REG] |
| add r0, r4, r6 | add r0, r4, r6 |
| bl i286_memoryread_w | ldrb r4, [r9, #CPU_MSW] |
| mov r1, r0 lsl #4 | bl i286a_memoryread_w |
| strh r0, [r9, #CPU_DS] | strh r0, [r9, #CPU_DS] |
| str r1, [r9, #CPU_DS_BASE] | tst r4, #MSW_PE |
| str r1, [r9, #CPU_DS_FIX] | moveq r0, r0 lsl #4 |
| blne i286a_selector | |
| str r0, [r9, #CPU_DS_BASE] | |
| str r0, [r9, #CPU_DS_FIX] | |
| mov pc, r11 | mov pc, r11 |
| mov_ea8_d8 GETPC8 | mov_ea8_d8 GETPCF8 |
| cmp r0, #&c0 | cmp r0, #&c0 |
| bcs med8_r | bcs med8_r |
| CPUWORK #3 | CPUWORK #3 |
| bl i286a_ea | bl i286a_ea |
| mov r4, r0 | mov r4, r0 |
| GETPC8 | GETPCF8 |
| mov r1, r0 | mov r1, r0 |
| mov r0, r4 | mov r0, r4 |
| mov lr, r11 | mov lr, r11 |
| b i286_memorywrite | b i286a_memorywrite |
| med8_r CPUWORK #2 | med8_r CPUWORK #2 |
| R8DST r0, r4 | R8DST r0, r4 |
| GETPC8 | GETPCF8 |
| ldrb r0, [r4, #CPU_REG] | strb r0, [r4, #CPU_REG] |
| mov pc, r11 | mov pc, r11 |
| mov_ea16_d16 GETPC8 | mov_ea16_d16 GETPCF8 |
| cmp r0, #&c0 | cmp r0, #&c0 |
| bcs med16_r | bcs med16_r |
| CPUWORK #3 | CPUWORK #3 |
| Line 1112 mov_ea16_d16 GETPC8 | Line 1268 mov_ea16_d16 GETPC8 |
| mov r1, r0 | mov r1, r0 |
| mov r0, r4 | mov r0, r4 |
| mov lr, r11 | mov lr, r11 |
| b i286_memorywrite_w | b i286a_memorywrite_w |
| med16_r CPUWORK #2 | med16_r CPUWORK #2 |
| R16DST r0, r4 | R16DST r0, r4 |
| GETPC16 | GETPC16 |
| ldrh r0, [r4, #CPU_REG] | strh r0, [r4, #CPU_REG] |
| mov pc, r11 | mov pc, r11 |
| enter ldrh r4, [r9, #CPU_SP] | enter ldrh r4, [r9, #CPU_SP] |
| Line 1126 enter ldrh r4, [r9, #CPU_SP] | Line 1282 enter ldrh r4, [r9, #CPU_SP] |
| addcc r4, r4, #&10000 | addcc r4, r4, #&10000 |
| mov r1, r5 | mov r1, r5 |
| add r0, r4, r0 | add r0, r4, r0 |
| bl i286_memorywrite_w | bl i286a_memorywrite_w |
| GETPC16 | GETPC16 |
| mov r6, r0 | mov r6, r0 |
| GETPC8 | GETPC8 |
| Line 1149 enterlv1 cmp r0, #1 | Line 1305 enterlv1 cmp r0, #1 |
| sub r2, r4, r6 | sub r2, r4, r6 |
| mov lr, r11 | mov lr, r11 |
| strh r2, [r9, #CPU_SP] | strh r2, [r9, #CPU_SP] |
| bl i286_memorywrite_w | bl i286a_memorywrite_w |
| enterlv2 mov r1, r0, lsl #2 | enterlv2 mov r1, r0, lsl #2 |
| add r1, r1, #12 | add r1, r1, #(12 + 4) |
| CPUWORK r1 | CPUWORK r1 |
| strh r4, [r9, #CPU_BP] | strh r4, [r9, #CPU_BP] |
| stmdb sp!, {r11} | str r11, [sp, #-4]! |
| mov r4, r4 lsl #16 | mov r4, r4 lsl #16 |
| sub r2, r4, r0 lsl #17 | sub r2, r4, r0 lsl #17 |
| sub r2, r4, #(2 << 16) | sub r2, r4, #(2 << 16) |
| Line 1163 enterlv2 mov r1, r0, lsl #2 | Line 1319 enterlv2 mov r1, r0, lsl #2 |
| strh r3, [r9, #CPU_SP] | strh r3, [r9, #CPU_SP] |
| mov r6, r0 | mov r6, r0 |
| ldr r11, [r9, #CPU_SS_BASE] | ldr r11, [r9, #CPU_SS_BASE] |
| add r0, r11, r2 | |
| mov r1, r5 | mov r1, r5 |
| mov r5, r5 lsl #16 | mov r5, r5 lsl #16 |
| bl i286_memorywrite_w | add r0, r11, r2 |
| bl i286a_memorywrite_w | |
| entlv2lp sub r5, r5, #(2 << 16) | entlv2lp sub r5, r5, #(2 << 16) |
| sub r4, r4, #(2 << 16) | sub r4, r4, #(2 << 16) |
| add r0, r11, r5 lsr #16 | add r0, r11, r5 lsr #16 |
| bl i286_memoryread_w | bl i286a_memoryread_w |
| mov r1, r0 | mov r1, r0 |
| add r0, r11, r4 | add r0, r11, r4 |
| bl i286_memorywrite_w | bl i286a_memorywrite_w |
| subs r6, r6, #1 | subs r6, r6, #1 |
| bne entlv2lp | bne entlv2lp |
| ldmia sp!, {pc} | ldr pc, [sp], #4 |
| leave CPUWORK #5 | leave ldrh r1, [r9, #CPU_BP] |
| ldrh r4, [r9, #CPU_BP] | |
| ldr r0, [r9, #CPU_SS_BASE] | ldr r0, [r9, #CPU_SS_BASE] |
| add r0, r4, r0 | CPUWORK #5 |
| bl i286_memoryread_w | add r4, r1, #2 |
| add r4, r4, #2 | add r0, r0, r1 |
| strh r0, [r9, #CPU_BP] | bl i286a_memoryread_w |
| strh r4, [r9, #CPU_SP] | strh r4, [r9, #CPU_SP] |
| strh r0, [r9, #CPU_BP] | |
| mov pc, r11 | mov pc, r11 |
| ret_far_d16 CPUWORK #15 | ret_far_d16 GETPC16 |
| GETPC16 | |
| mov r6, r0 | |
| ldrh r4, [r9, #CPU_SP] | ldrh r4, [r9, #CPU_SP] |
| ldr r5, [r9, #CPU_SS_BASE] | ldr r5, [r9, #CPU_SS_BASE] |
| add r0, r4, r5 | mov r6, r0 |
| CPUWORK #15 | |
| add r0, r5, r4 | |
| add r4, r4, #2 | add r4, r4, #2 |
| bl i286_memoryread_w | bl i286a_memoryread_w |
| mov r8, r8 lsl #16 | mov r8, r8 lsl #16 |
| mov r8, r8 lsr #16 | mov r8, r8 lsr #16 |
| orr r8, r8, r0 lsl #16 | orr r8, r8, r0 lsl #16 |
| bic r4, r4, #(1 << 16) | bic r4, r4, #(1 << 16) |
| add r0, r4, r5 | add r0, r4, r5 |
| add r4, r4, #2 | add r4, r4, #2 |
| bl i286_memoryread_w | bl i286a_memoryread_w |
| add r4, r6, r4 | add r4, r6, r4 |
| mov r1, r0 lsl #4 | ldrb r1, [r9, #CPU_MSW] |
| strh r4, [r9, #CPU_SP] | strh r4, [r9, #CPU_SP] |
| strh r0, [r9, #CPU_CS] | strh r0, [r9, #CPU_CS] |
| str r1, [r9, #CPU_CS_BASE] | tst r1, #MSW_PE |
| moveq r0, r0 lsl #4 | |
| blne i286a_selector | |
| str r0, [r9, #CPU_CS_BASE] | |
| mov pc, r11 | mov pc, r11 |
| ret_far CPUWORK #15 | ret_far ldrh r1, [r9, #CPU_SP] |
| ldrh r4, [r9, #CPU_SP] | |
| ldr r5, [r9, #CPU_SS_BASE] | ldr r5, [r9, #CPU_SS_BASE] |
| add r0, r4, r5 | CPUWORK #15 |
| add r4, r4, #2 | add r4, r1, #2 |
| bl i286_memoryread_w | add r0, r5, r1 |
| bl i286a_memoryread_w | |
| mov r8, r8 lsl #16 | mov r8, r8 lsl #16 |
| mov r8, r8 lsr #16 | mov r8, r8 lsr #16 |
| orr r8, r8, r0 lsl #16 | orr r8, r8, r0 lsl #16 |
| bic r4, r4, #(1 << 16) | bic r4, r4, #(1 << 16) |
| add r0, r4, r5 | add r0, r4, r5 |
| add r4, r4, #2 | add r4, r4, #2 |
| bl i286_memoryread_w | bl i286a_memoryread_w |
| mov r1, r0 lsl #4 | ldrb r1, [r9, #CPU_MSW] |
| strh r4, [r9, #CPU_SP] | strh r4, [r9, #CPU_SP] |
| strh r0, [r9, #CPU_CS] | strh r0, [r9, #CPU_CS] |
| str r1, [r9, #CPU_CS_BASE] | tst r1, #MSW_PE |
| moveq r0, r0 lsl #4 | |
| blne i286a_selector | |
| str r0, [r9, #CPU_CS_BASE] | |
| mov pc, r11 | mov pc, r11 |
| int_03 CPUWORK #3 | int_03 CPUWORK #3 |
| Line 1234 int_03 CPUWORK #3 | Line 1396 int_03 CPUWORK #3 |
| b i286a_localint | b i286a_localint |
| int_d8 CPUWORK #3 | int_d8 CPUWORK #3 |
| GETPC8 | GETPCF8 |
| mov r6, r0 | mov r6, r0 |
| b i286a_localint | b i286a_localint |
| Line 1244 into CPUWORK #4 | Line 1406 into CPUWORK #4 |
| mov r6, #4 | mov r6, #4 |
| b i286a_localint | b i286a_localint |
| iret ldrh r1, [r9, #CPU_SP] | |
| aam CPUWORK #16 | ldr r5, [r9, #CPU_SS_BASE] |
| GETPC8 | CPUWORK #31 |
| movs r0, r0, lsl #7 | add r4, r1, #2 |
| beq aamzero | add r0, r5, r1 |
| ldrb r1, [r9, #CPU_AL] | bl i286a_memoryread_w |
| mov r2, #&80 | bic r4, r4, #(1 << 16) |
| mov r3, #0 | mov r8, r0 lsl #16 |
| add r0, r4, r5 | |
| add r4, r4, #2 | |
| bl i286a_memoryread_w | |
| mov r1, r0 lsl #4 | |
| strh r0, [r9, #CPU_CS] | |
| str r1, [r9, #CPU_CS_BASE] | |
| bic r4, r4, #(1 << 16) | |
| add r0, r4, r5 | |
| add r4, r4, #2 | |
| bl i286a_memoryread_w | |
| strh r4, [r9, #CPU_SP] | |
| if 1 | |
| bic r1, r0, #&f000 | |
| and r2, r0, #(I_FLAG + T_FLAG) | |
| orr r8, r1, r8 | |
| cmp r2, #(I_FLAG + T_FLAG) | |
| beq iret_withirq | |
| else | |
| mov r2, #3 | |
| bic r1, r0, #&f000 ; i286 | |
| and r2, r2, r0 lsr #8 | |
| orr r8, r1, r8 | |
| ands r2, r2, r2 lsr #1 | |
| strb r2, [r9, #CPU_TRAP] | |
| bne iret_withirq | |
| endif | |
| ldr r0, iret_pic | |
| NOINTREXIT | |
| iret_withirq I286IRQCHECKTERM | |
| iret_pic dcd pic | |
| aam CPUWORK #16 | |
| GETPCF8 | |
| movs r0, r0 lsl #7 | |
| beq aamzero | |
| ldrb r1, [r9, #CPU_AL] | |
| mov r2, #&80 | |
| mov r3, #0 | |
| aamlp cmp r1, r0 | aamlp cmp r1, r0 |
| subcs r1, r1, r0 | subcs r1, r1, r0 |
| orrcs r3, r2, r3 | orrcs r3, r2, r3 |
| mov r0, r0 lsr #1 | |
| movs r2, r2 lsr #1 | movs r2, r2 lsr #1 |
| bne aamlp | bne aamlp |
| bic r8, r8, #(S_FLAG + Z_FLAG + P_FLAG) | |
| ldrb r2, [r10, r1] | ldrb r2, [r10, r1] |
| and r2, r2, #P_FLAG | add r1, r1, r3 lsl #8 |
| orr r8, r2, r8 | bic r8, r8, #(S_FLAG + Z_FLAG + P_FLAG) |
| orr r1, r1, r3 lsl #8 | movs r3, r1 lsl #16 |
| movs r2, r1 lsl #16 | |
| orreq r8, r8, #Z_FLAG | orreq r8, r8, #Z_FLAG |
| orrmi r8, r8, #S_FLAG | orrmi r8, r8, #S_FLAG |
| and r2, r2, #P_FLAG | |
| orr r8, r2, r8 | |
| strh r1, [r9, #CPU_AX] | strh r1, [r9, #CPU_AX] |
| mov pc, r11 | mov pc, r11 |
| aamzero sub r8, r8, #(2 << 16) | aamzero sub r8, r8, #(2 << 16) |
| mov r6, #0 | mov r6, #0 |
| b i286a_localint | b i286a_localint |
| aad CPUWORK #14 | aad ldrh r6, [r9, #CPU_AX] |
| GETPC8 | GETPCF8 |
| ldrh r1, [r9, #CPU_AX] | mov r2, r6 lsr #8 |
| mla r3, r2, r0, r6 | |
| bic r8, r8, #(S_FLAG + Z_FLAG + P_FLAG) | bic r8, r8, #(S_FLAG + Z_FLAG + P_FLAG) |
| mov r2, r1 lsr #8 | |
| mla r3, r2, r0, r1 | |
| and r1, r3, #&ff | and r1, r3, #&ff |
| ldrb r2, [r10, r1] | ldrb r2, [r1, r10] |
| strh r1, [r9, #CPU_AX] | strh r1, [r9, #CPU_AX] |
| CPUWORK #14 | |
| orr r8, r2, r8 | orr r8, r2, r8 |
| mov pc, r11 | mov pc, r11 |
| Line 1289 setalc CPUWORK #2 | Line 1491 setalc CPUWORK #2 |
| strb r0, [r9, #CPU_AL] | strb r0, [r9, #CPU_AL] |
| mov pc, r11 | mov pc, r11 |
| xlat CPUWORK #5 | xlat ldrb r0, [r9, #CPU_AL] |
| ldrb r0, [r9, #CPU_AL] | |
| ldrh r1, [r9, #CPU_BX] | ldrh r1, [r9, #CPU_BX] |
| ldr r2, [r9, #CPU_DS_FIX] | ldr r2, [r9, #CPU_DS_FIX] |
| ; | CPUWORK #5 |
| add r0, r1, r0 | add r0, r1, r0 |
| bic r0, r0, #(1 << 16) | bic r0, r0, #(1 << 16) |
| add r0, r2, r0 | add r0, r2, r0 |
| bl i286_memoryread | bl i286a_memoryread |
| strb r0, [r9, #CPU_AL] | strb r0, [r9, #CPU_AL] |
| mov pc, r11 | mov pc, r11 |
| esc CPUWORK #2 | esc CPUWORK #2 |
| GETPC8 | GETPCF8 |
| cmp r0, #&c0 | cmp r0, #&c0 |
| movcs pc, r11 | movcs pc, r11 |
| mov lr, r11 | mov lr, r11 |
| Line 1310 esc CPUWORK #2 | Line 1511 esc CPUWORK #2 |
| loopnz ldrh r0, [r9, #CPU_CX] | loopnz ldrh r0, [r9, #CPU_CX] |
| ; | |
| ; | |
| subs r0, r0, #1 | subs r0, r0, #1 |
| strh r0, [r9, #CPU_CX] | strh r0, [r9, #CPU_CX] |
| beq lpnznoj | beq lpnznoj |
| Line 1321 lpnznoj CPUWORK #4 | Line 1524 lpnznoj CPUWORK #4 |
| mov pc, r11 | mov pc, r11 |
| loopz ldrh r0, [r9, #CPU_CX] | loopz ldrh r0, [r9, #CPU_CX] |
| ; | |
| ; | |
| subs r0, r0, #1 | subs r0, r0, #1 |
| strh r0, [r9, #CPU_CX] | strh r0, [r9, #CPU_CX] |
| beq lpznoj | beq lpznoj |
| Line 1332 lpznoj CPUWORK #4 | Line 1537 lpznoj CPUWORK #4 |
| mov pc, r11 | mov pc, r11 |
| loop ldrh r0, [r9, #CPU_CX] | loop ldrh r0, [r9, #CPU_CX] |
| ; | |
| ; | |
| subs r0, r0, #1 | subs r0, r0, #1 |
| strh r0, [r9, #CPU_CX] | strh r0, [r9, #CPU_CX] |
| beq lpnoj | beq lpnoj |
| Line 1341 lpnoj CPUWORK #4 | Line 1548 lpnoj CPUWORK #4 |
| mov pc, r11 | mov pc, r11 |
| jcxz ldrh r0, [r9, #CPU_CX] | jcxz ldrh r0, [r9, #CPU_CX] |
| ; | |
| ; | |
| cmp r0, #0 | cmp r0, #0 |
| beq jcxzj | beq jcxzj |
| CPUWORK #4 | CPUWORK #4 |
| Line 1348 jcxz ldrh r0, [r9, #CPU_CX] | Line 1557 jcxz ldrh r0, [r9, #CPU_CX] |
| mov pc, r11 | mov pc, r11 |
| jcxzj JMPS #8 | jcxzj JMPS #8 |
| in_al_d8 CPUWORK #5 | in_al_d8 GETPCF8 |
| GETPC8 | CPUWORK #5 |
| add r3, r0, r8 lsr #16 | add r3, r5, r8 lsr #16 |
| CPUSV | CPUSV |
| str r3, [r9, #CPU_INPUT] | str r3, [r9, #CPU_INPUT] |
| bl iocore_inp8 | bl iocore_inp8 |
| Line 1361 in_al_d8 CPUWORK #5 | Line 1570 in_al_d8 CPUWORK #5 |
| mov pc, r11 | mov pc, r11 |
| in_ax_d8 CPUWORK #5 | in_ax_d8 CPUWORK #5 |
| GETPC8 | GETPCF8 |
| CPUSV | CPUSV |
| bl iocore_inp16 | bl iocore_inp16 |
| CPULD | CPULD |
| Line 1369 in_ax_d8 CPUWORK #5 | Line 1578 in_ax_d8 CPUWORK #5 |
| mov pc, r11 | mov pc, r11 |
| out_d8_al CPUWORK #3 | out_d8_al CPUWORK #3 |
| GETPC8 | GETPCF8 |
| ldrb r1, [r9, #CPU_AL] | ldrb r1, [r9, #CPU_AL] |
| CPUSV | CPUSV |
| bl iocore_out8 | bl iocore_out8 |
| Line 1377 out_d8_al CPUWORK #3 | Line 1586 out_d8_al CPUWORK #3 |
| mov pc, r11 | mov pc, r11 |
| out_d8_ax CPUWORK #3 | out_d8_ax CPUWORK #3 |
| GETPC8 | GETPCF8 |
| ldrh r1, [r9, #CPU_AX] | ldrh r1, [r9, #CPU_AX] |
| CPUSV | CPUSV |
| bl iocore_out16 | bl iocore_out16 |
| CPULD | CPULD |
| mov pc, r11 | mov pc, r11 |
| call_near CPUWORK #7 | call_near GETPC16 |
| GETPC16 | |
| ldrh r2, [r9, #CPU_SP] | ldrh r2, [r9, #CPU_SP] |
| ldr r3, [r9, #CPU_SS_BASE] | ldr r3, [r9, #CPU_SS_BASE] |
| CPUWORK #7 | |
| sub r1, r2, #2 | sub r1, r2, #2 |
| mov r2, r1 lsl #16 | mov r2, r1 lsl #16 |
| strh r1, [r9, #CPU_SP] | strh r1, [r9, #CPU_SP] |
| Line 1395 call_near CPUWORK #7 | Line 1604 call_near CPUWORK #7 |
| add r8, r8, r0 lsl #16 | add r8, r8, r0 lsl #16 |
| add r0, r3, r2 lsr #16 | add r0, r3, r2 lsr #16 |
| mov lr, r11 | mov lr, r11 |
| b i286_memorywrite_w | b i286a_memorywrite_w |
| jmp_near CPUWORK #7 | jmp_near ldr r4, [r9, #CPU_CS_BASE] |
| ldr r4, [r9, #CPU_CS_BASE] | |
| add r5, r8, #(2 << 16) | add r5, r8, #(2 << 16) |
| ; | CPUWORK #7 |
| add r0, r4, r8 lsr #16 | add r0, r4, r8 lsr #16 |
| bl i286_memoryread_w | bl i286a_memoryread_w |
| add r8, r5, r0 lsl #16 | add r8, r5, r0 lsl #16 |
| mov pc, r11 | mov pc, r11 |
| Line 1411 jmp_far CPUWORK #11 | Line 1619 jmp_far CPUWORK #11 |
| add r5, r8, #(2 << 16) | add r5, r8, #(2 << 16) |
| mov r6, r8 lsl #16 | mov r6, r8 lsl #16 |
| add r0, r4, r8 lsr #16 | add r0, r4, r8 lsr #16 |
| bl i286_memoryread_w | bl i286a_memoryread_w |
| mov r8, r0 lsl #16 | mov r8, r0 lsl #16 |
| add r0, r4, r5 lsr #16 | add r0, r4, r5 lsr #16 |
| bl i286_memoryread_w | bl i286a_memoryread_w |
| ldrb r1, [r9, #CPU_MSW] | |
| add r8, r8, r6 lsr #16 | add r8, r8, r6 lsr #16 |
| mov r1, r0 lsl #4 | |
| strh r0, [r9, #CPU_CS] | strh r0, [r9, #CPU_CS] |
| str r1, [r9, #CPU_CS_BASE] | tst r1, #MSW_PE |
| moveq r0, r0 lsl #4 | |
| blne i286a_selector | |
| str r0, [r9, #CPU_CS_BASE] | |
| mov pc, r11 | mov pc, r11 |
| in_al_dx CPUWORK #5 | in_al_dx CPUWORK #5 |
| Line 1473 stc CPUWORK #2 | Line 1684 stc CPUWORK #2 |
| orr r8, r8, #C_FLAG | orr r8, r8, #C_FLAG |
| mov pc, r11 | mov pc, r11 |
| cli CPUWORK #3 | cli CPUWORK #2 |
| if 1 | |
| bic r8, r8, #I_FLAG | |
| else | |
| mov r0, #0 | mov r0, #0 |
| bic r8, r8, #I_FLAG | bic r8, r8, #I_FLAG |
| strb r0, [r9, #CPU_TRAP] | strb r0, [r9, #CPU_TRAP] |
| endif | |
| mov pc, r11 | mov pc, r11 |
| sti CPUWORK #2 | |
| tst r8, #I_FLAG | |
| bne sti_noirq | |
| sti_set orr r8, r8, #I_FLAG | |
| if 1 | |
| ldr r0, sti_pic | |
| tst r8, #T_FLAG | |
| bne sti_withirq | |
| else | |
| mov r1, #(T_FLAG >> 8) | |
| ands r1, r1, r8 lsr #8 | |
| ldr r0, sti_pic | |
| strneb r1, [r9, #CPU_TRAP] | |
| bne sti_withirq | |
| endif | |
| PICEXISTINTR | |
| bne sti_withirq | |
| sti_noirq NEXT_OPCODE | |
| sti_pic dcd pic | |
| sti_withirq REMAIN_ADJUST #1 | |
| cld CPUWORK #2 | cld CPUWORK #2 |
| bic r8, r8, #D_FLAG | bic r8, r8, #D_FLAG |
| mov pc, r11 | mov pc, r11 |
| Line 1488 std CPUWORK #2 | Line 1724 std CPUWORK #2 |
| mov pc, r11 | mov pc, r11 |
| ; ---- cpu execute | |
| i286a_step stmdb sp!, {r4 - r11, lr} | i286a_step stmdb sp!, {r4 - r11, lr} |
| ldr r9, ias_r9 | ldr r9, ias_r9 |
| ldr r10, ias_r10 | ldr r10, ias_r10 |
| ; ldr r7, [r9, #CPU_REMAINCLOCK] | ; |
| ldr r8, [r9, #CPU_FLAG] | ldr r5, [r9, #CPU_CS_BASE] |
| CPULD | |
| ldr r0, [r9, #CPU_CS_BASE] | adr r4, optbl1 |
| add r0, r0, r8 lsr #16 | add r0, r5, r8 lsr #16 |
| bl i286_memoryread | bl i286a_memoryread |
| ldr r1, [r4, r0 lsl #2] | |
| add r8, r8, #(1 << 16) | add r8, r8, #(1 << 16) |
| mov r11, pc | |
| mov pc, r1 | |
| bl dmax86 | |
| CPUSV | |
| ldmia sp!, {r4 - r11, pc} | |
| adr r1, optbl1 | |
| i286a stmdb sp!, {r4 - r11, lr} | |
| ldr r9, ias_r9 | |
| ldr r2, ias_r1 | |
| ldr r10, ias_r10 | |
| CPULD | |
| ldr r5, [r9, #CPU_CS_BASE] | |
| ldrb r1, [r2, #DMAC_WORKING] | |
| and r0, r8, #(I_FLAG + T_FLAG) | |
| cmp r0, #(I_FLAG + T_FLAG) | |
| beq i286awithtrap | |
| cmp r1, #0 | |
| bne i286awithdma | |
| i286a_lp adr r4, optbl1 | |
| add r0, r5, r8 lsr #16 | |
| GETR0 | |
| ldr r1, [r4, r0 lsl #2] | |
| add r8, r8, #(1 << 16) | |
| mov r11, pc | mov r11, pc |
| ldr pc, [r1, r0 lsl #2] | mov pc, r1 |
| CPUDBGL | |
| cmp r7, #0 | |
| ldrgt r5, [r9, #CPU_CS_BASE] | |
| bgt i286a_lp | |
| CPUSV | |
| ldmia sp!, {r4 - r11, pc} | |
| str r8, [r9, #CPU_FLAG] | ias_r9 dcd i286acore + CPU_SIZE |
| ias_r1 dcd dmac | |
| ias_r10 dcd iflags | |
| i286awithdma adr r4, optbl1 | |
| add r0, r5, r8 lsr #16 | |
| GETR0 | |
| ldr r1, [r4, r0 lsl #2] | |
| add r8, r8, #(1 << 16) | |
| mov r11, pc | |
| mov pc, r1 | |
| bl dmax86 | |
| CPUDBGL | |
| cmp r7, #0 | |
| ldrgt r5, [r9, #CPU_CS_BASE] | |
| bgt i286awithdma | |
| CPUSV | |
| ldmia sp!, {r4 - r11, pc} | ldmia sp!, {r4 - r11, pc} |
| ias_r9 dcd i286core - CPU_REG | i286awithtrap adr r4, optbl1 |
| ias_r10 dcd _szpcflag8 | add r0, r5, r8 lsr #16 |
| GETR0 | |
| ldr r1, [r4, r0 lsl #2] | |
| add r8, r8, #(1 << 16) | |
| mov r11, pc | |
| mov pc, r1 | |
| bl dmax86 | |
| and r0, r8, #(I_FLAG + T_FLAG) | |
| cmp r0, #(I_FLAG + T_FLAG) | |
| bleq i286a_trapint | |
| CPUSV | |
| ldmia sp!, {r4 - r11, pc} | |
| optbl1 dcd add_ea_r8 ; 00 | optbl1 dcd add_ea_r8 ; 00 |
| dcd add_ea_r16 | dcd add_ea_r16 |
| Line 1526 optbl1 dcd add_ea_r8 ; 00 | Line 1820 optbl1 dcd add_ea_r8 ; 00 |
| dcd or_al_d8 | dcd or_al_d8 |
| dcd or_ax_d16 | dcd or_ax_d16 |
| dcd push_cs | dcd push_cs |
| dcd 0 ; op_0f/pop_cs | dcd i286a_cts |
| dcd adc_ea_r8 ; 10 | dcd adc_ea_r8 ; 10 |
| dcd adc_ea_r16 | dcd adc_ea_r16 |
| Line 1551 optbl1 dcd add_ea_r8 ; 00 | Line 1845 optbl1 dcd add_ea_r8 ; 00 |
| 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 segprefix_es |
| dcd 0 ; daa | dcd 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 segprefix_cs |
| dcd 0 ; das | dcd das |
| dcd xor_ea_r8 ; 30 | dcd xor_ea_r8 ; 30 |
| dcd xor_ea_r16 | dcd xor_ea_r16 |
| Line 1568 optbl1 dcd add_ea_r8 ; 00 | Line 1862 optbl1 dcd add_ea_r8 ; 00 |
| 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 segprefix_ss |
| dcd 0 ; aaa | dcd 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 segprefix_ds |
| dcd 0 ; aas | dcd aas |
| dcd inc_ax ; 40 | dcd inc_ax ; 40 |
| dcd inc_cx | dcd inc_cx |
| Line 1615 optbl1 dcd add_ea_r8 ; 00 | Line 1909 optbl1 dcd add_ea_r8 ; 00 |
| dcd pusha ; 60 | dcd pusha ; 60 |
| dcd popa | dcd popa |
| dcd 0 ; bound | dcd bound |
| dcd reserved ; arpl(reserved) | dcd reserved ; arpl(reserved) |
| dcd reserved | dcd reserved |
| dcd reserved | dcd reserved |
| dcd reserved | dcd reserved |
| dcd reserved | dcd reserved |
| dcd push_d16 | dcd push_d16 |
| dcd 0 ; imul_reg_ea_d16 | dcd imul_r_ea_d16 |
| dcd push_d8 | dcd push_d8 |
| dcd 0 ; imul_reg_ea_d8 | dcd imul_r_ea_d8 |
| dcd insb | dcd insb |
| dcd insw | dcd insw |
| dcd outsb | dcd outsb |
| Line 1659 optbl1 dcd add_ea_r8 ; 00 | Line 1953 optbl1 dcd add_ea_r8 ; 00 |
| 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 mov_ea_seg |
| dcd 0 ; lea_r16_ea | dcd lea_r16_ea |
| dcd 0 ; mov_seg_ea | dcd mov_seg_ea |
| dcd 0 ; pop_ea | dcd pop_ea |
| dcd 0 ; nop ; 90 | dcd nopandbios ; 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 1676 optbl1 dcd add_ea_r8 ; 00 | Line 1970 optbl1 dcd add_ea_r8 ; 00 |
| dcd cwd | dcd cwd |
| dcd call_far | dcd call_far |
| dcd wait | dcd wait |
| dcd 0 ; pushf | dcd pushf |
| dcd 0 ; popf | dcd popf |
| dcd sahf | dcd sahf |
| dcd lahf | dcd lahf |
| Line 1687 optbl1 dcd add_ea_r8 ; 00 | Line 1981 optbl1 dcd add_ea_r8 ; 00 |
| dcd mov_m16_ax | dcd mov_m16_ax |
| dcd movsb | dcd movsb |
| dcd movsw | dcd movsw |
| dcd 0 ; cmpsb | dcd cmpsb |
| dcd 0 ; cmpsw | dcd cmpsw |
| dcd test_al_d8 | dcd test_al_d8 |
| dcd test_ax_d16 | dcd test_ax_d16 |
| dcd stosb | dcd stosb |
| dcd stosw | dcd stosw |
| dcd lodsb | dcd lodsb |
| dcd lodsw | dcd lodsw |
| dcd 0 ; scasb | dcd scasb |
| dcd 0 ; scasw | dcd scasw |
| dcd mov_al_imm ; b0 | dcd mov_al_imm ; b0 |
| dcd mov_cl_imm | dcd mov_cl_imm |
| Line 1719 optbl1 dcd add_ea_r8 ; 00 | Line 2013 optbl1 dcd add_ea_r8 ; 00 |
| dcd i286asft16_d8 | dcd i286asft16_d8 |
| dcd ret_near_d16 | dcd ret_near_d16 |
| dcd ret_near | dcd ret_near |
| dcd 0 ; les_r16_ea (now testing i286a_a) | dcd les_r16_ea |
| dcd 0 ; lds_r16_ea (now testing i286a_a) | dcd lds_r16_ea |
| dcd mov_ea8_d8 | dcd mov_ea8_d8 |
| dcd mov_ea16_d16 | dcd mov_ea16_d16 |
| dcd 0 ; enter | dcd enter |
| dcd 0 ; leave | dcd leave |
| dcd ret_far_d16 | dcd ret_far_d16 |
| dcd ret_far | dcd ret_far |
| dcd int_03 | dcd int_03 |
| dcd int_d8 | dcd int_d8 |
| dcd into | dcd into |
| dcd 0 ; iret | dcd iret |
| dcd i286asft8_1 ; d0 | dcd i286asft8_1 ; d0 |
| dcd i286asft16_1 | dcd i286asft16_1 |
| dcd i286asft8_cl | dcd i286asft8_cl |
| dcd i286asft16_cl | dcd i286asft16_cl |
| dcd 0 ; aam | dcd aam |
| dcd 0 ; aad | dcd aad |
| dcd setalc | dcd setalc |
| dcd xlat | dcd xlat |
| dcd esc | dcd esc |
| Line 1768 optbl1 dcd add_ea_r8 ; 00 | Line 2062 optbl1 dcd add_ea_r8 ; 00 |
| dcd lock ; f0 | dcd lock ; f0 |
| dcd lock | dcd lock |
| dcd 0 ; repne | dcd repne |
| dcd 0 ; repe | dcd repe |
| dcd hlt | dcd hlt |
| dcd cmc | dcd cmc |
| dcd 0 ; ope0xf6 | dcd i286aopf6 |
| dcd 0 ; ope0xf7 | dcd i286aopf7 |
| dcd clc | dcd clc |
| dcd stc | dcd stc |
| dcd cli | dcd cli |
| dcd 0 ; sti | dcd sti |
| dcd cld | dcd cld |
| dcd std | dcd std |
| dcd i286aopfe | dcd i286aopfe |
| dcd i286aopff | dcd i286aopff |
| MACRO | |
| $label SEGPREFIX $b | |
| $label ldr r1, [r9, $b] | |
| ldrb r6, [r9, #CPU_PREFIX] | |
| ;; ldr r5, [r9, #CPU_CS_BASE] | |
| add r0, r5, r8 lsr #16 | |
| str r1, [r9, #CPU_SS_FIX] | |
| str r1, [r9, #CPU_DS_FIX] | |
| cmp r6, #0 | |
| streq r11, [sp, #-4]! | |
| adreq r11, prefix1_remove | |
| add r6, r6, #1 | |
| cmp r6, #MAX_PREFIX | |
| bcs prefix_fault | |
| GETR0 | |
| ldr r1, [r4, r0 lsl #2] | |
| add r8, r8, #(1 << 16) | |
| strb r6, [r9, #CPU_PREFIX] | |
| mov pc, r1 | |
| MEND | |
| segprefix_es SEGPREFIX #CPU_ES_BASE | |
| segprefix_cs SEGPREFIX #CPU_CS_BASE | |
| segprefix_ss SEGPREFIX #CPU_SS_BASE | |
| segprefix_ds SEGPREFIX #CPU_DS_BASE | |
| prefix_fault sub r8, r8, #((MAX_PREFIX - 1) << 16) | |
| mov r6, #6 | |
| mov r11, pc | |
| b i286a_localint | |
| prefix1_remove ldr r0, [r9, #CPU_SS_BASE] | |
| ldr r1, [r9, #CPU_DS_BASE] | |
| mov r2, #0 | |
| str r0, [r9, #CPU_SS_FIX] | |
| str r1, [r9, #CPU_DS_FIX] | |
| strb r2, [r9, #CPU_PREFIX] | |
| ldr pc, [sp], #4 | |
| ; ---- repne | |
| repne ldrb r6, [r9, #CPU_PREFIX] | |
| adr r4, optblne | |
| ;; ldr r5, [r9, #CPU_CS_BASE] | |
| add r0, r5, r8 lsr #16 | |
| cmp r6, #0 | |
| streq r11, [sp, #-4]! | |
| adreq r11, prefix1_remove | |
| add r6, r6, #1 | |
| cmp r6, #MAX_PREFIX | |
| bcs prefix_fault | |
| GETR0 | |
| ldr r1, [r4, r0 lsl #2] | |
| add r8, r8, #(1 << 16) | |
| strb r6, [r9, #CPU_PREFIX] | |
| mov pc, r1 | |
| optblne dcd add_ea_r8 ; 00 | |
| dcd add_ea_r16 | |
| dcd add_r8_ea | |
| dcd add_r16_ea | |
| dcd add_al_d8 | |
| dcd add_ax_d16 | |
| dcd push_es | |
| dcd pop_es | |
| dcd or_ea_r8 | |
| dcd or_ea_r16 | |
| dcd or_r8_ea | |
| dcd or_r16_ea | |
| dcd or_al_d8 | |
| dcd or_ax_d16 | |
| dcd push_cs | |
| dcd i286a_cts | |
| dcd adc_ea_r8 ; 10 | |
| dcd adc_ea_r16 | |
| dcd adc_r8_ea | |
| dcd adc_r16_ea | |
| dcd adc_al_d8 | |
| dcd adc_ax_d16 | |
| dcd push_ss | |
| dcd pop_ss | |
| dcd sbb_ea_r8 | |
| dcd sbb_ea_r16 | |
| dcd sbb_r8_ea | |
| dcd sbb_r16_ea | |
| dcd sbb_al_d8 | |
| dcd sbb_ax_d16 | |
| dcd push_ds | |
| dcd pop_ds | |
| dcd and_ea_r8 ; 20 | |
| dcd and_ea_r16 | |
| dcd and_r8_ea | |
| dcd and_r16_ea | |
| dcd and_al_d8 | |
| dcd and_ax_d16 | |
| dcd segprefix_es | |
| dcd daa | |
| dcd sub_ea_r8 | |
| dcd sub_ea_r16 | |
| dcd sub_r8_ea | |
| dcd sub_r16_ea | |
| dcd sub_al_d8 | |
| dcd sub_ax_d16 | |
| dcd segprefix_cs | |
| dcd das | |
| dcd xor_ea_r8 ; 30 | |
| dcd xor_ea_r16 | |
| dcd xor_r8_ea | |
| dcd xor_r16_ea | |
| dcd xor_al_d8 | |
| dcd xor_ax_d16 | |
| dcd segprefix_ss | |
| dcd aaa | |
| dcd cmp_ea_r8 | |
| dcd cmp_ea_r16 | |
| dcd cmp_r8_ea | |
| dcd cmp_r16_ea | |
| dcd cmp_al_d8 | |
| dcd cmp_ax_d16 | |
| dcd segprefix_ds | |
| dcd aas | |
| dcd inc_ax ; 40 | |
| dcd inc_cx | |
| dcd inc_dx | |
| dcd inc_bx | |
| dcd inc_sp | |
| dcd inc_bp | |
| dcd inc_si | |
| dcd inc_di | |
| dcd dec_ax | |
| dcd dec_cx | |
| dcd dec_dx | |
| dcd dec_bx | |
| dcd dec_sp | |
| dcd dec_bp | |
| dcd dec_si | |
| dcd dec_di | |
| dcd push_ax ; 50 | |
| dcd push_cx | |
| dcd push_dx | |
| dcd push_bx | |
| dcd push_sp | |
| dcd push_bp | |
| dcd push_si | |
| dcd push_di | |
| dcd pop_ax | |
| dcd pop_cx | |
| dcd pop_dx | |
| dcd pop_bx | |
| dcd pop_sp | |
| dcd pop_bp | |
| dcd pop_si | |
| dcd pop_di | |
| dcd pusha ; 60 | |
| dcd popa | |
| dcd bound | |
| dcd reserved ; arpl(reserved) | |
| dcd reserved | |
| dcd reserved | |
| dcd reserved | |
| dcd reserved | |
| dcd push_d16 | |
| dcd imul_r_ea_d16 | |
| dcd push_d8 | |
| dcd imul_r_ea_d8 | |
| dcd i286a_rep_insb | |
| dcd i286a_rep_insw | |
| dcd i286a_rep_outsb | |
| dcd i286a_rep_outsw | |
| dcd jo_short ; 70 | |
| dcd jno_short | |
| dcd jc_short | |
| dcd jnc_short | |
| dcd jz_short | |
| dcd jnz_short | |
| dcd jna_short | |
| dcd ja_short | |
| dcd js_short | |
| dcd jns_short | |
| dcd jp_short | |
| dcd jnp_short | |
| dcd jl_short | |
| dcd jnl_short | |
| dcd jle_short | |
| dcd jnle_short | |
| dcd i286aop80 ; 80 | |
| dcd i286aop81 | |
| dcd i286aop80 | |
| dcd i286aop83 | |
| dcd test_ea_r8 | |
| dcd test_ea_r16 | |
| dcd xchg_ea_r8 | |
| dcd xchg_ea_r16 | |
| dcd mov_ea_r8 | |
| dcd mov_ea_r16 | |
| dcd mov_r8_ea | |
| dcd mov_r16_ea | |
| dcd mov_ea_seg | |
| dcd lea_r16_ea | |
| dcd mov_seg_ea | |
| dcd pop_ea | |
| dcd nopandbios ; 90 | |
| dcd xchg_ax_cx | |
| dcd xchg_ax_dx | |
| dcd xchg_ax_bx | |
| dcd xchg_ax_sp | |
| dcd xchg_ax_bp | |
| dcd xchg_ax_si | |
| dcd xchg_ax_di | |
| dcd cbw | |
| dcd cwd | |
| dcd call_far | |
| dcd wait | |
| dcd pushf | |
| dcd popf | |
| dcd sahf | |
| dcd lahf | |
| dcd mov_al_m8 ; a0 | |
| dcd mov_ax_m16 | |
| dcd mov_m8_al | |
| dcd mov_m16_ax | |
| dcd i286a_rep_movsb | |
| dcd i286a_rep_movsw | |
| dcd i286a_repne_cmpsb | |
| dcd i286a_repne_cmpsw | |
| dcd test_al_d8 | |
| dcd test_ax_d16 | |
| dcd i286a_rep_stosb | |
| dcd i286a_rep_stosw | |
| dcd i286a_rep_lodsb | |
| dcd i286a_rep_lodsw | |
| dcd i286a_repne_scasb | |
| dcd i286a_repne_scasw | |
| dcd mov_al_imm ; b0 | |
| dcd mov_cl_imm | |
| dcd mov_dl_imm | |
| dcd mov_bl_imm | |
| dcd mov_ah_imm | |
| dcd mov_ch_imm | |
| dcd mov_dh_imm | |
| dcd mov_bh_imm | |
| dcd mov_ax_imm | |
| dcd mov_cx_imm | |
| dcd mov_dx_imm | |
| dcd mov_bx_imm | |
| dcd mov_sp_imm | |
| dcd mov_bp_imm | |
| dcd mov_si_imm | |
| dcd mov_di_imm | |
| dcd i286asft8_d8 ; c0 | |
| dcd i286asft16_d8 | |
| dcd ret_near_d16 | |
| dcd ret_near | |
| dcd les_r16_ea | |
| dcd lds_r16_ea | |
| dcd mov_ea8_d8 | |
| dcd mov_ea16_d16 | |
| dcd enter | |
| dcd leave | |
| dcd ret_far_d16 | |
| dcd ret_far | |
| dcd int_03 | |
| dcd int_d8 | |
| dcd into | |
| dcd iret | |
| dcd i286asft8_1 ; d0 | |
| dcd i286asft16_1 | |
| dcd i286asft8_cl | |
| dcd i286asft16_cl | |
| dcd aam | |
| dcd aad | |
| dcd setalc | |
| dcd xlat | |
| dcd esc | |
| dcd esc | |
| dcd esc | |
| dcd esc | |
| dcd esc | |
| dcd esc | |
| dcd esc | |
| dcd esc | |
| dcd loopnz ; e0 | |
| dcd loopz | |
| dcd loop | |
| dcd jcxz | |
| dcd in_al_d8 | |
| dcd in_ax_d8 | |
| dcd out_d8_al | |
| dcd out_d8_ax | |
| dcd call_near | |
| dcd jmp_near | |
| dcd jmp_far | |
| dcd jmp_short | |
| dcd in_al_dx | |
| dcd in_ax_dx | |
| dcd out_dx_al | |
| dcd out_dx_ax | |
| dcd lock ; f0 | |
| dcd lock | |
| dcd repne | |
| dcd repe | |
| dcd hlt | |
| dcd cmc | |
| dcd i286aopf6 | |
| dcd i286aopf7 | |
| dcd clc | |
| dcd stc | |
| dcd cli | |
| dcd sti | |
| dcd cld | |
| dcd std | |
| dcd i286aopfe | |
| dcd i286aopff | |
| ; ---- repe | |
| repe ldrb r6, [r9, #CPU_PREFIX] | |
| adr r4, optble | |
| ;; ldr r5, [r9, #CPU_CS_BASE] | |
| add r0, r5, r8 lsr #16 | |
| cmp r6, #0 | |
| streq r11, [sp, #-4]! | |
| adreq r11, prefix2_remove | |
| add r6, r6, #1 | |
| cmp r6, #MAX_PREFIX | |
| bcs prefix_fault | |
| GETR0 | |
| ldr r1, [r4, r0 lsl #2] | |
| add r8, r8, #(1 << 16) | |
| strb r6, [r9, #CPU_PREFIX] | |
| mov pc, r1 | |
| prefix2_remove ldr r0, [r9, #CPU_SS_BASE] | |
| ldr r1, [r9, #CPU_DS_BASE] | |
| mov r2, #0 | |
| str r0, [r9, #CPU_SS_FIX] | |
| str r1, [r9, #CPU_DS_FIX] | |
| strb r2, [r9, #CPU_PREFIX] | |
| ldr pc, [sp], #4 | |
| optble dcd add_ea_r8 ; 00 | |
| dcd add_ea_r16 | |
| dcd add_r8_ea | |
| dcd add_r16_ea | |
| dcd add_al_d8 | |
| dcd add_ax_d16 | |
| dcd push_es | |
| dcd pop_es | |
| dcd or_ea_r8 | |
| dcd or_ea_r16 | |
| dcd or_r8_ea | |
| dcd or_r16_ea | |
| dcd or_al_d8 | |
| dcd or_ax_d16 | |
| dcd push_cs | |
| dcd i286a_cts | |
| dcd adc_ea_r8 ; 10 | |
| dcd adc_ea_r16 | |
| dcd adc_r8_ea | |
| dcd adc_r16_ea | |
| dcd adc_al_d8 | |
| dcd adc_ax_d16 | |
| dcd push_ss | |
| dcd pop_ss | |
| dcd sbb_ea_r8 | |
| dcd sbb_ea_r16 | |
| dcd sbb_r8_ea | |
| dcd sbb_r16_ea | |
| dcd sbb_al_d8 | |
| dcd sbb_ax_d16 | |
| dcd push_ds | |
| dcd pop_ds | |
| dcd and_ea_r8 ; 20 | |
| dcd and_ea_r16 | |
| dcd and_r8_ea | |
| dcd and_r16_ea | |
| dcd and_al_d8 | |
| dcd and_ax_d16 | |
| dcd segprefix_es | |
| dcd daa | |
| dcd sub_ea_r8 | |
| dcd sub_ea_r16 | |
| dcd sub_r8_ea | |
| dcd sub_r16_ea | |
| dcd sub_al_d8 | |
| dcd sub_ax_d16 | |
| dcd segprefix_cs | |
| dcd das | |
| dcd xor_ea_r8 ; 30 | |
| dcd xor_ea_r16 | |
| dcd xor_r8_ea | |
| dcd xor_r16_ea | |
| dcd xor_al_d8 | |
| dcd xor_ax_d16 | |
| dcd segprefix_ss | |
| dcd aaa | |
| dcd cmp_ea_r8 | |
| dcd cmp_ea_r16 | |
| dcd cmp_r8_ea | |
| dcd cmp_r16_ea | |
| dcd cmp_al_d8 | |
| dcd cmp_ax_d16 | |
| dcd segprefix_ds | |
| dcd aas | |
| dcd inc_ax ; 40 | |
| dcd inc_cx | |
| dcd inc_dx | |
| dcd inc_bx | |
| dcd inc_sp | |
| dcd inc_bp | |
| dcd inc_si | |
| dcd inc_di | |
| dcd dec_ax | |
| dcd dec_cx | |
| dcd dec_dx | |
| dcd dec_bx | |
| dcd dec_sp | |
| dcd dec_bp | |
| dcd dec_si | |
| dcd dec_di | |
| dcd push_ax ; 50 | |
| dcd push_cx | |
| dcd push_dx | |
| dcd push_bx | |
| dcd push_sp | |
| dcd push_bp | |
| dcd push_si | |
| dcd push_di | |
| dcd pop_ax | |
| dcd pop_cx | |
| dcd pop_dx | |
| dcd pop_bx | |
| dcd pop_sp | |
| dcd pop_bp | |
| dcd pop_si | |
| dcd pop_di | |
| dcd pusha ; 60 | |
| dcd popa | |
| dcd bound | |
| dcd reserved ; arpl(reserved) | |
| dcd reserved | |
| dcd reserved | |
| dcd reserved | |
| dcd reserved | |
| dcd push_d16 | |
| dcd imul_r_ea_d16 | |
| dcd push_d8 | |
| dcd imul_r_ea_d8 | |
| dcd i286a_rep_insb | |
| dcd i286a_rep_insw | |
| dcd i286a_rep_outsb | |
| dcd i286a_rep_outsw | |
| dcd jo_short ; 70 | |
| dcd jno_short | |
| dcd jc_short | |
| dcd jnc_short | |
| dcd jz_short | |
| dcd jnz_short | |
| dcd jna_short | |
| dcd ja_short | |
| dcd js_short | |
| dcd jns_short | |
| dcd jp_short | |
| dcd jnp_short | |
| dcd jl_short | |
| dcd jnl_short | |
| dcd jle_short | |
| dcd jnle_short | |
| dcd i286aop80 ; 80 | |
| dcd i286aop81 | |
| dcd i286aop80 | |
| dcd i286aop83 | |
| dcd test_ea_r8 | |
| dcd test_ea_r16 | |
| dcd xchg_ea_r8 | |
| dcd xchg_ea_r16 | |
| dcd mov_ea_r8 | |
| dcd mov_ea_r16 | |
| dcd mov_r8_ea | |
| dcd mov_r16_ea | |
| dcd mov_ea_seg | |
| dcd lea_r16_ea | |
| dcd mov_seg_ea | |
| dcd pop_ea | |
| dcd nopandbios ; 90 | |
| dcd xchg_ax_cx | |
| dcd xchg_ax_dx | |
| dcd xchg_ax_bx | |
| dcd xchg_ax_sp | |
| dcd xchg_ax_bp | |
| dcd xchg_ax_si | |
| dcd xchg_ax_di | |
| dcd cbw | |
| dcd cwd | |
| dcd call_far | |
| dcd wait | |
| dcd pushf | |
| dcd popf | |
| dcd sahf | |
| dcd lahf | |
| dcd mov_al_m8 ; a0 | |
| dcd mov_ax_m16 | |
| dcd mov_m8_al | |
| dcd mov_m16_ax | |
| dcd i286a_rep_movsb | |
| dcd i286a_rep_movsw | |
| dcd i286a_repe_cmpsb | |
| dcd i286a_repe_cmpsw | |
| dcd test_al_d8 | |
| dcd test_ax_d16 | |
| dcd i286a_rep_stosb | |
| dcd i286a_rep_stosw | |
| dcd i286a_rep_lodsb | |
| dcd i286a_rep_lodsw | |
| dcd i286a_repe_scasb | |
| dcd i286a_repe_scasw | |
| dcd mov_al_imm ; b0 | |
| dcd mov_cl_imm | |
| dcd mov_dl_imm | |
| dcd mov_bl_imm | |
| dcd mov_ah_imm | |
| dcd mov_ch_imm | |
| dcd mov_dh_imm | |
| dcd mov_bh_imm | |
| dcd mov_ax_imm | |
| dcd mov_cx_imm | |
| dcd mov_dx_imm | |
| dcd mov_bx_imm | |
| dcd mov_sp_imm | |
| dcd mov_bp_imm | |
| dcd mov_si_imm | |
| dcd mov_di_imm | |
| dcd i286asft8_d8 ; c0 | |
| dcd i286asft16_d8 | |
| dcd ret_near_d16 | |
| dcd ret_near | |
| dcd les_r16_ea | |
| dcd lds_r16_ea | |
| dcd mov_ea8_d8 | |
| dcd mov_ea16_d16 | |
| dcd enter | |
| dcd leave | |
| dcd ret_far_d16 | |
| dcd ret_far | |
| dcd int_03 | |
| dcd int_d8 | |
| dcd into | |
| dcd iret | |
| dcd i286asft8_1 ; d0 | |
| dcd i286asft16_1 | |
| dcd i286asft8_cl | |
| dcd i286asft16_cl | |
| dcd aam | |
| dcd aad | |
| dcd setalc | |
| dcd xlat | |
| dcd esc | |
| dcd esc | |
| dcd esc | |
| dcd esc | |
| dcd esc | |
| dcd esc | |
| dcd esc | |
| dcd esc | |
| dcd loopnz ; e0 | |
| dcd loopz | |
| dcd loop | |
| dcd jcxz | |
| dcd in_al_d8 | |
| dcd in_ax_d8 | |
| dcd out_d8_al | |
| dcd out_d8_ax | |
| dcd call_near | |
| dcd jmp_near | |
| dcd jmp_far | |
| dcd jmp_short | |
| dcd in_al_dx | |
| dcd in_ax_dx | |
| dcd out_dx_al | |
| dcd out_dx_ax | |
| dcd lock ; f0 | |
| dcd lock | |
| dcd repne | |
| dcd repe | |
| dcd hlt | |
| dcd cmc | |
| dcd i286aopf6 | |
| dcd i286aopf7 | |
| dcd clc | |
| dcd stc | |
| dcd cli | |
| dcd sti | |
| dcd cld | |
| dcd std | |
| dcd i286aopfe | |
| dcd i286aopff | |
| END | END |