mirror of
https://github.com/joncampbell123/dosbox-x.git
synced 2025-10-14 02:17:36 +08:00
more
This commit is contained in:
@@ -311,14 +311,12 @@ define encoding "sib" {
|
||||
subset "base" bit range(2:0);
|
||||
}
|
||||
|
||||
define function "mrm_dataseg" {
|
||||
return type segment reference;
|
||||
|
||||
define register "mrm_dataseg" {
|
||||
if segref != null {
|
||||
return segref;
|
||||
}
|
||||
|
||||
return segment reference "DS";
|
||||
return register "DS";
|
||||
}
|
||||
|
||||
define function "mrm16_eaofs" {
|
||||
@@ -353,12 +351,12 @@ define function "mrm16_eaofs" {
|
||||
return null;
|
||||
}
|
||||
|
||||
define function "mrm16_eadisp" {
|
||||
define effective address "mrm16_eadisp" {
|
||||
return type memory reference;
|
||||
input "x" encoding "mrm";
|
||||
input "mrm" encoding "mrm";
|
||||
input "disp" type int16_t;
|
||||
require !(x.mod == 0 && x.rm == 6); /* make sure it's not [offset] */
|
||||
require x.mod != 3; /* mod == 3 means r/m is register */
|
||||
require !(mrm.mod == 0 && mrm.rm == 6); /* make sure it's not [offset] */
|
||||
require mrm.mod != 3; /* mod == 3 means r/m is register */
|
||||
|
||||
define var "ofs" description "offset" type uint16_t;
|
||||
define var "seg" description "segment" type segment reference;
|
||||
@@ -366,7 +364,7 @@ define function "mrm16_eadisp" {
|
||||
if segref != null {
|
||||
seg = segref;
|
||||
}
|
||||
else if x.rm == 2 || x.rm == 3 || x.rm == 6 {
|
||||
else if mrm.rm == 2 || mrm.rm == 3 || mrm.rm == 6 {
|
||||
/* anything involving BP refers by default to the stack segment */
|
||||
seg = segment reference "SS";
|
||||
}
|
||||
@@ -380,7 +378,7 @@ define function "mrm16_eadisp" {
|
||||
}
|
||||
|
||||
define effective address "mrm16" {
|
||||
input "x" encoding "mrm";
|
||||
input "mrm" encoding "mrm";
|
||||
input "w" type boolean;
|
||||
if x.mod == 3 {
|
||||
return register map "genreg" with param "w" = w;
|
||||
@@ -388,7 +386,7 @@ define effective address "mrm16" {
|
||||
else if x.mod == 0 && x.rm == 6 {
|
||||
define var "disp" description "offset" type uint16_t;
|
||||
disp = cpu instruction fetch uint16_t;
|
||||
return memory reference segment mrm_dataseg() offset disp;
|
||||
return memory reference offset "mrm_dataseg" offset disp;
|
||||
}
|
||||
else {
|
||||
define var "disp" description "displacement" type int16_t; /* signed two's complement */
|
||||
@@ -403,7 +401,7 @@ define effective address "mrm16" {
|
||||
disp = 0;
|
||||
}
|
||||
|
||||
return mrm16_eadisp(x,disp);
|
||||
return effective address "mem16_eadisp" with param "mrm" = mrm with param "disp" = disp;
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user