--- np2/i286a/i286a.inc 2003/12/18 13:21:32 1.6 +++ np2/i286a/i286a.inc 2004/07/17 20:43:02 1.20 @@ -12,188 +12,192 @@ I_FLAG equ &0200 D_FLAG equ &0400 O_FLAG equ &0800 -CPU_REG equ 0 - 112 -CPU_REMAINCLOCK equ 28 - 112 -; cpu_baseclock equ 32 - 112 -; cpu_clock equ 36 - 112 -; cpu_adrsmask equ 40 - 112 -CPU_ES_BASE equ 44 - 112 -CPU_CS_BASE equ 48 - 112 -CPU_SS_BASE equ 52 - 112 -CPU_DS_BASE equ 56 - 112 -CPU_SS_FIX equ 60 - 112 -CPU_DS_FIX equ 64 - 112 -; cpu_prefix equ 68 - 112 -CPU_TRAP equ 70 - 112 -; cpu_type equ 71 - 112 -; cpu_pf_semaphore equ 72 - 112 -; cpu_repbak equ 76 - 112 -CPU_INPUT equ 80 - 112 -; cpu_ovflag equ 84 - 112 -CPU_GDTR equ 88 - 112 -CPU_IDTR equ 94 - 112 -CPU_MSW equ 100 - 112 -; cpu_resetreq equ 102 - 112 -; cpu_itfbank equ 103 - 112 -; cpu_extmem equ 104 - 112 -; cpu_extmemsize equ 108 - 112 -; cpu_mainmem equ 112 - 112 - -CPU_AL equ 0 - 112 -CPU_AH equ 1 - 112 -CPU_CL equ 2 - 112 -CPU_CH equ 3 - 112 -CPU_DL equ 4 - 112 -CPU_DH equ 5 - 112 -CPU_BL equ 6 - 112 -CPU_BH equ 7 - 112 - -CPU_AX equ 0 - 112 -CPU_CX equ 2 - 112 -CPU_DX equ 4 - 112 -CPU_BX equ 6 - 112 -CPU_SP equ 8 - 112 -CPU_BP equ 10 - 112 -CPU_SI equ 12 - 112 -CPU_DI equ 14 - 112 -CPU_ES equ 16 - 112 -CPU_CS equ 18 - 112 -CPU_SS equ 20 - 112 -CPU_DS equ 22 - 112 -CPU_FLAG equ 24 - 112 -CPU_IP equ 26 - 112 +MSW_PE equ &0001 +MSW_MP equ &0002 +MSW_EM equ &0004 +MSW_TS equ &0008 + +CPU_SIZE equ (104 + 32) +CPU_STAT equ (0 - CPU_SIZE) +CPU_EXT equ (104 - CPU_SIZE) + +CPU_REG equ CPU_STAT + 0 +CPU_SEG equ CPU_STAT + 16 +CPU_ES_BASE equ CPU_STAT + 28 +CPU_CS_BASE equ CPU_STAT + 32 +CPU_SS_BASE equ CPU_STAT + 36 +CPU_DS_BASE equ CPU_STAT + 40 +CPU_SS_FIX equ CPU_STAT + 44 +CPU_DS_FIX equ CPU_STAT + 48 +CPU_ADRSMASK equ CPU_STAT + 52 +CPU_PREFIX equ CPU_STAT + 56 +; cpu_resetreq equ CPU_STAT + 57 +CPU_GDTR equ CPU_STAT + 58 +CPU_MSW equ CPU_STAT + 64 +CPU_IDTR equ CPU_STAT + 66 +CPU_LDTR equ CPU_STAT + 72 +CPU_LDTRC equ CPU_STAT + 74 +CPU_TR equ CPU_STAT + 80 +CPU_TRC equ CPU_STAT + 82 +; cpu_type equ CPU_STAT + 88 +CPU_ITFBANK equ CPU_STAT + 89 +; cpu_ram_d0 equ CPU_STAT + 90 +CPU_REMAINCLOCK equ CPU_STAT + 92 +CPU_BASECLOCK equ CPU_STAT + 96 +; cpu_clock equ CPU_STAT + 100 +; cpu_stat_size equ 104 + +CPU_AL equ CPU_STAT + 0 +CPU_AH equ CPU_STAT + 1 +CPU_CL equ CPU_STAT + 2 +CPU_CH equ CPU_STAT + 3 +CPU_DL equ CPU_STAT + 4 +CPU_DH equ CPU_STAT + 5 +CPU_BL equ CPU_STAT + 6 +CPU_BH equ CPU_STAT + 7 + +CPU_AX equ CPU_STAT + 0 +CPU_CX equ CPU_STAT + 2 +CPU_DX equ CPU_STAT + 4 +CPU_BX equ CPU_STAT + 6 +CPU_SP equ CPU_STAT + 8 +CPU_BP equ CPU_STAT + 10 +CPU_SI equ CPU_STAT + 12 +CPU_DI equ CPU_STAT + 14 +CPU_ES equ CPU_STAT + 16 +CPU_CS equ CPU_STAT + 18 +CPU_SS equ CPU_STAT + 20 +CPU_DS equ CPU_STAT + 22 +CPU_FLAG equ CPU_STAT + 24 +CPU_IP equ CPU_STAT + 26 + + +CPU_EXTMEM equ CPU_EXT + 0 +CPU_EXTMEMSIZE equ CPU_EXT + 4 +CPU_EMS equ CPU_EXT + 8 +CPU_INPUT equ CPU_EXT + 24 +MEMWAIT_TRAM equ CPU_EXT + 28 +MEMWAIT_VRAM equ CPU_EXT + 29 +MEMWAIT_GRCG equ CPU_EXT + 30 +; cpu_ext_size equ 32 + +MAX_PREFIX equ 8 + + + + MACRO +$label CPUDBGS +$label ;; str r7, [r9, #CPU_REMAINCLOCK] + MEND + + MACRO +$label CPUDBGL +$label ;; ldr r7, [r9, #CPU_REMAINCLOCK] + MEND MACRO -$label CPUWORK $clock -$label ldr r7, [r9, #CPU_REMAINCLOCK] - sub r7, r7, $clock - str r7, [r9, #CPU_REMAINCLOCK] +$label CPUSVC +$label str r7, [r9, #CPU_REMAINCLOCK] MEND MACRO -$label CREMSET $clock -$label mov r7, $clock - str r7, [r9, #CPU_REMAINCLOCK] +$label CPULDC +$label ldr r7, [r9, #CPU_REMAINCLOCK] MEND MACRO -$label CPUSV +$label CPUSVF $label str r8, [r9, #CPU_FLAG] MEND MACRO -$label CPULD +$label CPULDF $label ldr r8, [r9, #CPU_FLAG] MEND - MACRO -$label GETPC8 -$label ldr r0, [r9, #CPU_CS_BASE] - add r0, r0, r8 lsr #16 - bl i286_memoryread - add r8, r8, #(1 << 16) +$label CPUSV +$label CPUSVF + CPUSVC MEND MACRO -$label GETPC16 -$label ldr r0, [r9, #CPU_CS_BASE] - add r0, r0, r8 lsr #16 - bl i286_memoryread_w - add r8, r8, #(2 << 16) +$label CPULD +$label CPULDF + CPULDC MEND MACRO -$label R8SRC $op, $out -$label and $out, $op, #3 - add $out, r9, $out lsl #1 - tst $op, #(1 << 2) - addne $out, $out, #1 - MEND - - MACRO -$label R8DST $op, $out -$label and $out, $op, #(6 << 2) - add $out, r9, $out lsr #2 - tst $op, #(1 << 5) - addne $out, $out, #1 +$label CPUWORK $clock +$label CPUDBGL + sub r7, r7, $clock + CPUDBGS MEND MACRO -$label EAREG8 $src -$label ldr r0, [r9, #CPU_CS_BASE] - add r0, r0, r8 lsr #16 - bl i286_memoryread - add r8, r8, #(1 << 16) - and $src, r0, #(6 << 2) - add $src, r9, $src lsr #2 - tst r0, #(1 << 5) - addne $src, $src, #1 +$label CPUWKS $clock +$label CPUDBGL + subs r7, r7, $clock + CPUDBGS MEND MACRO -$label REG8EA $dst, $regclk, $memclk -$label ldr r0, [r9, #CPU_CS_BASE] - add r0, r0, r8 lsr #16 - bl i286_memoryread - 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 +$label CREMSET $clock +$label mov r7, $clock + CPUDBGS MEND - MACRO -$label R16SRC $op, $out -$label and $out, $op, #7 - add $out, r9, $out lsl #1 +$label NEXT_OPCODE +$label CPUDBGL + 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] + CPUDBGS + mov pc, r11 MEND MACRO -$label R16DST $op, $out -$label and $out, $op, #(7 << 3) - add $out, r9, $out lsr #2 +$label REMAIN_ADJUST $clk +$label CPUDBGL + cmp r7, $clk + moveq pc, r11 + ldr r0, [r9, #CPU_BASECLOCK] + rsb r1, r7, $clk + mov r7, $clk + add r0, r0, r1 + str r0, [r9, #CPU_BASECLOCK] + CPUDBGS + mov pc, r11 MEND MACRO -$label EAREG16 $src -$label ldr r0, [r9, #CPU_CS_BASE] - add r0, r0, r8 lsr #16 - bl i286_memoryread - add r8, r8, #(1 << 16) - and $src, r0, #(7 << 3) - add $src, r9, $src lsr #2 +$label I286IRQCHECKTERM +$label CPUDBGL + cmp r7, #0 + movle pc, r11 + ldr r0, [r9, #CPU_BASECLOCK] + mov r1, r7 + mov r7, #0 + sub r0, r0, r1 + str r0, [r9, #CPU_BASECLOCK] + CPUDBGS + mov pc, r11 MEND MACRO -$label REG16EA $dst, $regclk, $memclk -$label ldr r0, [r9, #CPU_CS_BASE] - add r0, r0, r8 lsr #16 - bl i286_memoryread - add r8, r8, #(1 << 16) - R16DST r0, $dst - cmp r0, #&c0 - bcc $label.1 - CPUWORK $regclk - R16SRC r0, r12 - ldrh r0, [r12, #CPU_REG] - b $label.2 -$label.1 CPUWORK $memclk - bl i286a_ea - bl i286_memoryread_w -$label.2 +$label ACCWORD $r, $l +$label tst $r, #1 + bne $l + cmp $r, #I286_MEMWRITEMAX + bcs $l MEND - END