@@ -25,6 +25,7 @@ var |
| 25 |
cycle: byte; |
25 |
cycle: byte; |
| 26 |
b1: byte; |
26 |
b1: byte; |
| 27 |
w1, w2: word; |
27 |
w1, w2: word; |
|
|
28 |
i1, i2: Integer; |
| 28 |
|
29 |
|
| 29 |
function NOP: byte; |
30 |
function NOP: byte; |
| 30 |
begin |
31 |
begin |
@@ -959,7 +960,7 @@ begin |
| 959 |
//PUSH dword ptr pc.w |
960 |
//PUSH dword ptr pc.w |
| 960 |
//CALL speekb |
961 |
//CALL speekb |
| 961 |
//LEA ESP,[ESP+4] |
962 |
//LEA ESP,[ESP+4] |
| 962 |
MOV EAX, w1 |
963 |
MOV AX, w1 |
| 963 |
INC word ptr pc.w |
964 |
INC word ptr pc.w |
| 964 |
TEST af.l,1 |
965 |
TEST af.l,1 |
| 965 |
MOV cycle,8 |
966 |
MOV cycle,8 |
@@ -2519,24 +2520,34 @@ end; |
| 2519 |
function RET_NZ: byte; |
2520 |
function RET_NZ: byte; |
| 2520 |
|
2521 |
|
| 2521 |
begin |
2522 |
begin |
| 2522 |
//w1 := speekb(sp_.w); |
2523 |
if (af.l and 64) = 1 then Exit(8); |
| 2523 |
// TODO |
2524 |
|
|
|
2525 |
i1 := speekb(sp_.w); |
|
|
2526 |
Inc(sp_.w); |
|
|
2527 |
i2 := speekb(sp_.w); |
|
|
2528 |
Inc(sp_.w); |
|
|
2529 |
|
| 2524 |
asm |
2530 |
asm |
| 2525 |
TEST af.l,64 |
2531 |
//TEST af.l,64 |
| 2526 |
MOV cycle,8 |
2532 |
//MOV cycle,8 |
| 2527 |
JNZ @ende |
2533 |
//JNZ @ende |
| 2528 |
PUSH dword ptr sp_.w |
2534 |
//PUSH dword ptr sp_.w |
| 2529 |
CALL speekb |
2535 |
//CALL speekb |
| 2530 |
LEA ESP,[ESP+4] |
2536 |
//LEA ESP,[ESP+4] |
| 2531 |
MOV AX, w1 |
2537 |
// |
| 2532 |
INC word ptr sp_.w |
2538 |
//INC word ptr sp_.w |
| 2533 |
PUSH EAX |
2539 |
//PUSH EAX |
| 2534 |
PUSH dword ptr sp_.w |
2540 |
//PUSH dword ptr sp_.w |
| 2535 |
CALL speekb |
2541 |
//CALL speekb |
| 2536 |
LEA ESP,[ESP+4] |
2542 |
//LEA ESP,[ESP+4] |
| 2537 |
INC word ptr sp_.w |
2543 |
//INC word ptr sp_.w |
|
|
2544 |
MOV EAX,i2 |
|
|
2545 |
|
| 2538 |
SHL EAX,8 |
2546 |
SHL EAX,8 |
| 2539 |
POP EBX |
2547 |
|
|
|
2548 |
//POP EBX |
|
|
2549 |
MOV EBX,i1 |
|
|
2550 |
|
| 2540 |
MOV AL,BL |
2551 |
MOV AL,BL |
| 2541 |
MOV pc.w,AX |
2552 |
MOV pc.w,AX |
| 2542 |
MOV cycle,20 |
2553 |
MOV cycle,20 |
@@ -2969,7 +2980,7 @@ begin |
| 2969 |
//PUSH EAX |
2980 |
//PUSH EAX |
| 2970 |
//CALL SpokeB |
2981 |
//CALL SpokeB |
| 2971 |
//LEA ESP,[ESP+8] |
2982 |
//LEA ESP,[ESP+8] |
| 2972 |
MOV w1, EAX |
2983 |
MOV w1, AX |
| 2973 |
end; |
2984 |
end; |
| 2974 |
|
2985 |
|
| 2975 |
spokeb(w1, af.h); |
2986 |
spokeb(w1, af.h); |
@@ -3074,27 +3085,39 @@ end; |
| 3074 |
|
3085 |
|
| 3075 |
function JP_PE: byte; |
3086 |
function JP_PE: byte; |
| 3076 |
begin |
3087 |
begin |
| 3077 |
// TODO |
3088 |
i1 := speekb(pc.w); |
|
|
3089 |
Inc(pc.w); |
|
|
3090 |
i2 := speekb(pc.w); |
|
|
3091 |
Inc(pc.w); |
| 3078 |
|
3092 |
|
| 3079 |
asm |
3093 |
asm |
| 3080 |
PUSH dword ptr pc.w |
3094 |
//PUSH dword ptr pc.w |
| 3081 |
CALL speekb |
3095 |
//CALL speekb |
| 3082 |
LEA ESP,[ESP+4] |
3096 |
//LEA ESP,[ESP+4] |
| 3083 |
PUSH EAX |
3097 |
//PUSH EAX |
| 3084 |
INC word ptr pc.w |
3098 |
//INC word ptr pc.w |
| 3085 |
PUSH dword ptr pc.w |
3099 |
//PUSH dword ptr pc.w |
| 3086 |
CALL speekb |
3100 |
//CALL speekb |
| 3087 |
LEA ESP,[ESP+4] |
3101 |
//LEA ESP,[ESP+4] |
| 3088 |
INC word ptr pc.w |
3102 |
//INC word ptr pc.w |
|
|
3103 |
MOV EAX,i2 |
|
|
3104 |
|
| 3089 |
SHL EAX,8 |
3105 |
SHL EAX,8 |
| 3090 |
POP EBX |
3106 |
|
|
|
3107 |
//POP EBX |
|
|
3108 |
MOV EBX,i1 |
|
|
3109 |
|
| 3091 |
MOV AL,BL |
3110 |
MOV AL,BL |
| 3092 |
PUSH dword ptr af.h |
3111 |
|
| 3093 |
PUSH EAX |
3112 |
//PUSH dword ptr af.h |
| 3094 |
CALL SpokeB |
3113 |
//PUSH EAX |
| 3095 |
LEA ESP,[ESP+8] |
3114 |
//CALL SpokeB |
|
|
3115 |
//LEA ESP,[ESP+8] |
|
|
3116 |
MOV i1, EAX |
| 3096 |
end; |
3117 |
end; |
| 3097 |
|
3118 |
|
|
|
3119 |
spokeb(i1, af.h); |
|
|
3120 |
|
| 3098 |
Result := 16; |
3121 |
Result := 16; |
| 3099 |
end; |
3122 |
end; |
| 3100 |
|
3123 |
|
@@ -3157,7 +3180,6 @@ end; |
| 3157 |
|
3180 |
|
| 3158 |
function RET_P: byte; |
3181 |
function RET_P: byte; |
| 3159 |
begin |
3182 |
begin |
| 3160 |
// TODO |
|
|
| 3161 |
w1 := speekb(pc.w); |
3183 |
w1 := speekb(pc.w); |
| 3162 |
asm |
3184 |
asm |
| 3163 |
//PUSH dword ptr pc.w |
3185 |
//PUSH dword ptr pc.w |
@@ -3169,12 +3191,15 @@ begin |
| 3169 |
XOR AH,AH |
3191 |
XOR AH,AH |
| 3170 |
MOV BX,$ff00 |
3192 |
MOV BX,$ff00 |
| 3171 |
ADD AX,BX |
3193 |
ADD AX,BX |
| 3172 |
// ? |
3194 |
|
| 3173 |
PUSH EAX |
3195 |
|
| 3174 |
CALL speekb |
3196 |
MOV i1,EAX |
| 3175 |
LEA ESP,[ESP+4] |
3197 |
//PUSH EAX |
| 3176 |
MOV af.h,AL |
3198 |
//CALL speekb |
|
|
3199 |
//LEA ESP,[ESP+4] |
|
|
3200 |
//MOV af.h,AL |
| 3177 |
end; |
3201 |
end; |
|
|
3202 |
af.h := speekb(i1); |
| 3178 |
|
3203 |
|
| 3179 |
Result := 12; |
3204 |
Result := 12; |
| 3180 |
end; |
3205 |
end; |
@@ -3201,17 +3226,19 @@ end; |
| 3201 |
|
3226 |
|
| 3202 |
function JP_P: byte; |
3227 |
function JP_P: byte; |
| 3203 |
begin |
3228 |
begin |
| 3204 |
// TODO |
|
|
| 3205 |
asm |
3229 |
asm |
| 3206 |
MOV AL,bc.l |
3230 |
MOV AL,bc.l |
| 3207 |
XOR AH,AH |
3231 |
XOR AH,AH |
| 3208 |
MOV BX,$ff00 |
3232 |
MOV BX,$ff00 |
| 3209 |
ADD AX,BX |
3233 |
ADD AX,BX |
| 3210 |
PUSH EAX |
3234 |
|
| 3211 |
CALL speekb |
3235 |
mov i1,EAX |
| 3212 |
LEA ESP,[ESP+4] |
3236 |
//PUSH EAX |
| 3213 |
MOV af.h,AL |
3237 |
//CALL speekb |
|
|
3238 |
//LEA ESP,[ESP+4] |
|
|
3239 |
//MOV af.h,AL |
| 3214 |
end; |
3240 |
end; |
|
|
3241 |
af.h := speekb(i1); |
| 3215 |
|
3242 |
|
| 3216 |
Result := 8; |
3243 |
Result := 8; |
| 3217 |
end; |
3244 |
end; |
@@ -3307,9 +3334,7 @@ end; |
| 3307 |
|
3334 |
|
| 3308 |
function JP_M: byte; |
3335 |
function JP_M: byte; |
| 3309 |
begin |
3336 |
begin |
| 3310 |
// TODO |
3337 |
{asm |
| 3311 |
|
|
|
| 3312 |
asm |
|
|
| 3313 |
PUSH dword ptr pc.w |
3338 |
PUSH dword ptr pc.w |
| 3314 |
CALL speekb |
3339 |
CALL speekb |
| 3315 |
LEA ESP,[ESP+4] |
3340 |
LEA ESP,[ESP+4] |
@@ -3326,9 +3351,11 @@ begin |
| 3326 |
CALL speekb |
3351 |
CALL speekb |
| 3327 |
LEA ESP,[ESP+4] |
3352 |
LEA ESP,[ESP+4] |
| 3328 |
MOV af.h,AL |
3353 |
MOV af.h,AL |
| 3329 |
end; |
3354 |
end;} |
| 3330 |
|
|
|
| 3331 |
|
3355 |
|
|
|
3356 |
w1 := wordpeek(pc.w); |
|
|
3357 |
af.h := speekb(w1); |
|
|
3358 |
Inc(pc.w, 2); |
| 3332 |
|
3359 |
|
| 3333 |
Result := 16; |
3360 |
Result := 16; |
| 3334 |
end; |
3361 |
end; |
@@ -5854,8 +5881,7 @@ end; |
| 5854 |
|
5881 |
|
| 5855 |
function SET3_xHL: byte; |
5882 |
function SET3_xHL: byte; |
| 5856 |
begin |
5883 |
begin |
| 5857 |
// TODO |
5884 |
{asm |
| 5858 |
asm |
|
|
| 5859 |
MOV AX,hl.w |
5885 |
MOV AX,hl.w |
| 5860 |
PUSH EAX |
5886 |
PUSH EAX |
| 5861 |
PUSH EAX |
5887 |
PUSH EAX |
@@ -5867,7 +5893,9 @@ begin |
| 5867 |
PUSH EBX |
5893 |
PUSH EBX |
| 5868 |
CALL SpokeB |
5894 |
CALL SpokeB |
| 5869 |
LEA ESP,[ESP+8] |
5895 |
LEA ESP,[ESP+8] |
| 5870 |
end; |
5896 |
end;} |
|
|
5897 |
|
|
|
5898 |
spokeb(hl.w, speekb(hl.w) or 8); |
| 5871 |
|
5899 |
|
| 5872 |
Result := 16; |
5900 |
Result := 16; |
| 5873 |
end; |
5901 |
end; |
@@ -6073,8 +6101,7 @@ end; |
| 6073 |
|
6101 |
|
| 6074 |
function SET7_xHL: byte; |
6102 |
function SET7_xHL: byte; |
| 6075 |
begin |
6103 |
begin |
| 6076 |
// TODO |
6104 |
{asm |
| 6077 |
asm |
|
|
| 6078 |
MOV AX,hl.w |
6105 |
MOV AX,hl.w |
| 6079 |
PUSH EAX |
6106 |
PUSH EAX |
| 6080 |
PUSH EAX |
6107 |
PUSH EAX |
@@ -6086,7 +6113,10 @@ begin |
| 6086 |
PUSH EBX |
6113 |
PUSH EBX |
| 6087 |
CALL SpokeB |
6114 |
CALL SpokeB |
| 6088 |
LEA ESP,[ESP+8] |
6115 |
LEA ESP,[ESP+8] |
| 6089 |
end; |
6116 |
end;} |
|
|
6117 |
|
|
|
6118 |
spokeb(hl.w, speekb(hl.w) or 128); |
|
|
6119 |
|
| 6090 |
Result := 16; |
6120 |
Result := 16; |
| 6091 |
end; |
6121 |
end; |
| 6092 |
|
6122 |
|