|
|
| version 1.19, 2003/12/26 00:11:51 | version 1.22, 2004/01/07 12:51:29 |
|---|---|
| Line 9 | Line 9 |
| IMPORT iflags | IMPORT iflags |
| IMPORT i286a_localint | IMPORT i286a_localint |
| IMPORT i286a_trapint | IMPORT i286a_trapint |
| EXPORT i286a_trapintr | IMPORT i286a_selector |
| IMPORT i286a_ea | IMPORT i286a_ea |
| IMPORT i286a_lea | IMPORT i286a_lea |
| IMPORT i286a_a | IMPORT i286a_a |
| Line 781 leareg mov r6, #6 | Line 781 leareg mov r6, #6 |
| sub r8, r8, #(2 << 16) | sub r8, r8, #(2 << 16) |
| b i286a_localint | b i286a_localint |
| mov_seg_ea GETPCF8 | mov_seg_ea ldrh r6, [r9, #CPU_MSW] |
| GETPCF8 | |
| adr r2, msegea_tbl | adr r2, msegea_tbl |
| and r1, r0, #(3 << 3) | and r1, r0, #(3 << 3) |
| tst r6, #MSW_PE | |
| orrne r1, r1, #(4 << 3) | |
| mov r6, r8 | mov r6, r8 |
| ldr r2, [r2, r1 lsr #1] | ldr r2, [r2, r1 lsr #1] |
| cmp r0, #&c0 | cmp r0, #&c0 |
| Line 801 msegea_tbl dcd msegea_es | Line 804 msegea_tbl dcd msegea_es |
| dcd msegea_cs | dcd msegea_cs |
| dcd msegea_ss | dcd msegea_ss |
| dcd msegea_ds | 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 | msegea_es mov r1, r0 lsl #4 |
| strh r0, [r9, #CPU_ES] | strh r0, [r9, #CPU_ES] |
| str r1, [r9, #CPU_ES_BASE] | str r1, [r9, #CPU_ES_BASE] |
| Line 815 msegea_ss mov r1, r0 lsl #4 | Line 822 msegea_ss mov r1, r0 lsl #4 |
| str r1, [r9, #CPU_SS_BASE] | str r1, [r9, #CPU_SS_BASE] |
| str r1, [r9, #CPU_SS_FIX] | str r1, [r9, #CPU_SS_FIX] |
| NEXT_OPCODE | 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) | msegea_cs sub r8, r6, #(2 << 16) |
| mov r6, #6 | mov r6, #6 |
| b i286a_localint | b i286a_localint |
| pop_ea POP #5 | pop_ea POP #5 |
| mov r6, r0 | mov r6, r0 |
| GETPCF8 | GETPCF8 |
| Line 918 pushf CPUWORK #3 | Line 942 pushf CPUWORK #3 |
| b i286a_memorywrite_w | b i286a_memorywrite_w |
| popf POP #5 | 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 r2, #3 |
| mov r8, r8 lsr #16 | mov r8, r8 lsr #16 |
| and r2, r2, r0 lsr #8 | and r2, r2, r0 lsr #8 |
| Line 926 popf POP #5 | Line 958 popf POP #5 |
| orr r8, r1, r8 lsl #16 | orr r8, r1, r8 lsl #16 |
| strb r2, [r9, #CPU_TRAP] | strb r2, [r9, #CPU_TRAP] |
| bne popf_withirq | bne popf_withirq |
| endif | |
| ldr r0, popf_pic | ldr r0, popf_pic |
| NOINTREXIT | NOINTREXIT |
| popf_withirq I286IRQCHECKTERM | popf_withirq I286IRQCHECKTERM |
| Line 1372 iret bl extirq_pop | Line 1405 iret bl extirq_pop |
| add r4, r4, #2 | add r4, r4, #2 |
| bl i286a_memoryread_w | bl i286a_memoryread_w |
| strh r4, [r9, #CPU_SP] | 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 | mov r2, #3 |
| bic r1, r0, #&f000 ; i286 | bic r1, r0, #&f000 ; i286 |
| and r2, r2, r0 lsr #8 | and r2, r2, r0 lsr #8 |
| Line 1379 iret bl extirq_pop | Line 1419 iret bl extirq_pop |
| ands r2, r2, r2 lsr #1 | ands r2, r2, r2 lsr #1 |
| strb r2, [r9, #CPU_TRAP] | strb r2, [r9, #CPU_TRAP] |
| bne iret_withirq | bne iret_withirq |
| endif | |
| ldr r0, iret_pic | ldr r0, iret_pic |
| NOINTREXIT | NOINTREXIT |
| iret_withirq I286IRQCHECKTERM | iret_withirq I286IRQCHECKTERM |
| Line 1621 stc CPUWORK #2 | Line 1662 stc CPUWORK #2 |
| mov pc, r11 | mov pc, r11 |
| cli CPUWORK #2 | 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 | sti CPUWORK #2 |
| tst r8, #I_FLAG | tst r8, #I_FLAG |
| bne sti_noirq | bne sti_noirq |
| sti_set orr r8, r8, #I_FLAG | 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) | mov r1, #(T_FLAG >> 8) |
| ands r1, r1, r8 lsr #8 | ands r1, r1, r8 lsr #8 |
| ldr r0, sti_pic | ldr r0, sti_pic |
| strneb r1, [r9, #CPU_TRAP] | strneb r1, [r9, #CPU_TRAP] |
| bne sti_withirq | bne sti_withirq |
| endif | |
| PICEXISTINTR sti_noirq | PICEXISTINTR sti_noirq |
| bne sti_withirq | bne sti_withirq |
| sti_noirq NEXT_OPCODE | sti_noirq NEXT_OPCODE |
| Line 1678 i286a stmdb sp!, {r4 - r11, lr} | Line 1729 i286a stmdb sp!, {r4 - r11, lr} |
| ldr r10, ias_r10 | ldr r10, ias_r10 |
| CPULD | CPULD |
| ldr r5, [r9, #CPU_CS_BASE] | ldr r5, [r9, #CPU_CS_BASE] |
| ldr r1, [r2, #DMAC_WORKING] | ldrb r1, [r2, #DMAC_WORKING] |
| and r0, r8, #(I_FLAG + T_FLAG) | and r0, r8, #(I_FLAG + T_FLAG) |
| cmp r0, #(I_FLAG + T_FLAG) | cmp r0, #(I_FLAG + T_FLAG) |
| beq i286awithtrap | beq i286awithtrap |
| Line 1727 i286awithtrap adr r4, optbl1 | Line 1778 i286awithtrap adr r4, optbl1 |
| bl dmap_i286 | bl dmap_i286 |
| and r0, r8, #(I_FLAG + T_FLAG) | and r0, r8, #(I_FLAG + T_FLAG) |
| cmp r0, #(I_FLAG + T_FLAG) | cmp r0, #(I_FLAG + T_FLAG) |
| beq i286a_trapint | bleq i286a_trapint |
| i286a_trapintr CPUSV | CPUSV |
| ldmia sp!, {r4 - r11, pc} | ldmia sp!, {r4 - r11, pc} |
| optbl1 dcd add_ea_r8 ; 00 | optbl1 dcd add_ea_r8 ; 00 |