Commit abe89a3

Nick committed on
More WIP porting work
commit abe89a3c570e99ca65d1a6a80d9d7ce52cedafdf parent 5b6378f
1 changed files +85−55
ModifiedCpu/z80cpu.pas +85−55
@@ -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