|
|
| version 1.4, 2003/12/17 10:41:06 | version 1.9, 2003/12/19 02:09:30 |
|---|---|
| Line 13 D_FLAG equ &0400 | Line 13 D_FLAG equ &0400 |
| O_FLAG equ &0800 | O_FLAG equ &0800 |
| CPU_REG equ 0 - 112 | CPU_REG equ 0 - 112 |
| CPU_SEG equ 16 - 112 | |
| CPU_REMAINCLOCK equ 28 - 112 | CPU_REMAINCLOCK equ 28 - 112 |
| ; cpu_baseclock equ 32 - 112 | CPU_BASECLOCK equ 32 - 112 |
| ; cpu_clock equ 36 - 112 | ; cpu_clock equ 36 - 112 |
| ; cpu_adrsmask equ 40 - 112 | ; cpu_adrsmask equ 40 - 112 |
| CPU_ES_BASE equ 44 - 112 | CPU_ES_BASE equ 44 - 112 |
| Line 23 CPU_SS_BASE equ 52 - 112 | Line 24 CPU_SS_BASE equ 52 - 112 |
| CPU_DS_BASE equ 56 - 112 | CPU_DS_BASE equ 56 - 112 |
| CPU_SS_FIX equ 60 - 112 | CPU_SS_FIX equ 60 - 112 |
| CPU_DS_FIX equ 64 - 112 | CPU_DS_FIX equ 64 - 112 |
| ; cpu_prefix equ 68 - 112 | CPU_PREFIX equ 68 - 112 |
| CPU_TRAP equ 70 - 112 | CPU_TRAP equ 70 - 112 |
| ; cpu_type equ 71 - 112 | ; cpu_type equ 71 - 112 |
| ; cpu_pf_semaphore equ 72 - 112 | ; cpu_pf_semaphore equ 72 - 112 |
| ; cpu_repbak equ 76 - 112 | ; cpu_repbak equ 76 - 112 |
| ; cpu_inport equ 80 - 112 | CPU_INPUT equ 80 - 112 |
| ; cpu_ovflag equ 84 - 112 | ; cpu_ovflag equ 84 - 112 |
| CPU_GDTR equ 88 - 112 | CPU_GDTR equ 88 - 112 |
| CPU_IDTR equ 94 - 112 | CPU_IDTR equ 94 - 112 |
| ; cpu_MSW equ 100 - 112 | CPU_MSW equ 100 - 112 |
| ; cpu_resetreq equ 102 - 112 | ; cpu_resetreq equ 102 - 112 |
| ; cpu_itfbank equ 103 - 112 | ; cpu_itfbank equ 103 - 112 |
| ; cpu_extmem equ 104 - 112 | CPU_EXTMEM equ 104 - 112 |
| ; cpu_extmemsize equ 108 - 112 | CPU_EXTMEMSIZE equ 108 - 112 |
| ; cpu_mainmem equ 112 - 112 | ; cpu_mainmem equ 112 - 112 |
| CPU_AL equ 0 - 112 | CPU_AL equ 0 - 112 |
| Line 63 CPU_DS equ 22 - 112 | Line 64 CPU_DS equ 22 - 112 |
| CPU_FLAG equ 24 - 112 | CPU_FLAG equ 24 - 112 |
| CPU_IP equ 26 - 112 | CPU_IP equ 26 - 112 |
| MAX_PREFIX equ 8 | |
| MACRO | |
| $label CPUWORK $clock | |
| $label ldr r7, [r9, #CPU_REMAINCLOCK] | |
| sub r7, r7, $clock | |
| str r7, [r9, #CPU_REMAINCLOCK] | |
| MEND | |
| MACRO | |
| $label CREMSET $clock | |
| $label mov r7, $clock | |
| str r7, [r9, #CPU_REMAINCLOCK] | |
| MEND | |
| MACRO | MACRO |
| $label CPUSV | $label CPUSVC |
| $label | $label |
| MEND | MEND |
| MACRO | MACRO |
| $label CPULD | $label CPULDC |
| $label | $label |
| MEND | MEND |
| MACRO | MACRO |
| $label GETPC8 | $label CPUSVF |
| $label ldr r0, [r9, #CPU_CS_BASE] | $label str r8, [r9, #CPU_FLAG] |
| add r0, r0, r8 lsr #16 | |
| bl i286_memoryread | |
| add r8, r8, #(1 << 16) | |
| MEND | MEND |
| MACRO | MACRO |
| $label GETPC16 | $label CPULDF |
| $label ldr r0, [r9, #CPU_CS_BASE] | $label ldr r8, [r9, #CPU_FLAG] |
| add r0, r0, r8 lsr #16 | |
| bl i286_memoryread_w | |
| add r8, r8, #(2 << 16) | |
| MEND | MEND |
| MACRO | MACRO |
| $label R8SRC $op, $out | $label CPUSV |
| $label and $out, $op, #3 | $label CPUSVF |
| add $out, r9, $out lsl #1 | CPUSVC |
| tst $op, #(1 << 2) | |
| addne $out, $out, #1 | |
| MEND | MEND |
| MACRO | MACRO |
| $label R8DST $op, $out | $label CPULD |
| $label and $out, $op, #(6 << 2) | $label CPULDF |
| add $out, r9, $out lsr #2 | CPULDC |
| tst $op, #(1 << 5) | |
| addne $out, $out, #1 | |
| MEND | MEND |
| MACRO | MACRO |
| $label EAREG8 $src | $label CPUWORK $clock |
| $label ldr r0, [r9, #CPU_CS_BASE] | $label ldr r7, [r9, #CPU_REMAINCLOCK] |
| add r0, r0, r8 lsr #16 | sub r7, r7, $clock |
| bl i286_memoryread | str r7, [r9, #CPU_REMAINCLOCK] |
| add r8, r8, #(1 << 16) | |
| and $src, r0, #(6 << 2) | |
| add $src, r9, $src lsr #2 | |
| tst r0, #(1 << 5) | |
| addne $src, $src, #1 | |
| MEND | MEND |
| MACRO | MACRO |
| $label REG8EA $dst, $regclk, $memclk | $label CPUWKS $clock |
| $label ldr r0, [r9, #CPU_CS_BASE] | $label ldr r7, [r9, #CPU_REMAINCLOCK] |
| add r0, r0, r8 lsr #16 | subs r7, r7, $clock |
| bl i286_memoryread | str r7, [r9, #CPU_REMAINCLOCK] |
| add r8, r8, #(1 << 16) | |
| R8DST r0, $dst | |
| cmp r0, #&c0 | |
| bcc $label.1 | |
| CPUWORK $regclk | |
| R8SRC r0, r12 | |
| ldrb r0, [r12, #CPU_REG] | |
| b $label.2 | |
| $label.1 CPUWORK $memclk | |
| bl i286a_ea | |
| bl i286_memoryread | |
| $label.2 | |
| MEND | MEND |
| MACRO | MACRO |
| $label R16SRC $op, $out | $label CREMSET $clock |
| $label and $out, $op, #7 | $label mov r7, $clock |
| add $out, r9, $out lsl #1 | str r7, [r9, #CPU_REMAINCLOCK] |
| MEND | MEND |
| MACRO | MACRO |
| $label R16DST $op, $out | $label NEXT_OPCODE |
| $label and $out, $op, #(7 << 3) | $label ldr r7, [r9, #CPU_REMAINCLOCK] |
| add $out, r9, $out lsr #2 | cmp r7, #1 |
| movge pc, r11 | |
| ldr r0, [r9, #CPU_BASECLOCK] | |
| rsb r1, r7, #1 | |
| mov r7, #1 | |
| add r0, r0, r1 | |
| str r0, [r9, #CPU_BASECLOCK] | |
| str r7, [r9, #CPU_REMAINCLOCK] | |
| mov pc, r11 | |
| MEND | MEND |
| MACRO | MACRO |
| $label EAREG16 $src | $label REMAIN_ADJUST $clk |
| $label ldr r0, [r9, #CPU_CS_BASE] | $label ldr r7, [r9, #CPU_REMAINCLOCK] |
| add r0, r0, r8 lsr #16 | cmp r7, $clk |
| bl i286_memoryread | moveq pc, r11 |
| add r8, r8, #(1 << 16) | ldr r0, [r9, #CPU_BASECLOCK] |
| and $src, r0, #(7 << 3) | rsb r1, r7, $clk |
| add $src, r9, $src lsr #2 | mov r7, $clk |
| add r0, r0, r1 | |
| str r0, [r9, #CPU_BASECLOCK] | |
| str r7, [r9, #CPU_REMAINCLOCK] | |
| mov pc, r11 | |
| MEND | MEND |
| MACRO | MACRO |
| $label REG16EA $dst, $regclk, $memclk | $label I286IRQCHECKTERM |
| $label ldr r0, [r9, #CPU_CS_BASE] | $label ldr r7, [r9, #CPU_REMAINCLOCK] |
| add r0, r0, r8 lsr #16 | cmp r7, #0 |
| bl i286_memoryread | movgt pc, r11 |
| add r8, r8, #(1 << 16) | ldr r0, [r9, #CPU_BASECLOCK] |
| R16DST r0, $dst | mov r1, r7 |
| cmp r0, #&c0 | mov r7, #0 |
| bcc $label.1 | sub r0, r0, r1 |
| CPUWORK $regclk | str r7, [r9, #CPU_REMAINCLOCK] |
| R16SRC r0, r12 | str r0, [r9, #CPU_BASECLOCK] |
| ldrh r0, [r12, #CPU_REG] | mov pc, r11 |
| b $label.2 | |
| $label.1 CPUWORK $memclk | |
| bl i286a_ea | |
| bl i286_memoryread_w | |
| $label.2 | |
| MEND | MEND |
| END | END |