Changeset 97518 in vbox
- Timestamp:
- Nov 11, 2022 11:23:43 PM (2 years ago)
- svn:sync-xref-src-repo-rev:
- 154542
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-basic-2-template.mac
r97516 r97518 45 45 ;* Defined Constants And Macros * 46 46 ;********************************************************************************************************************************* 47 %ifndef BS3_CPUBAS2_UD_OFF_DEFINED 48 %define BS3_CPUBAS2_UD_OFF_DEFINED 47 %ifnmacro BS3_CPUBAS2_UD_OFF 49 48 %macro BS3_CPUBAS2_UD_OFF 1 50 49 BS3_GLOBAL_NAME_EX BS3_CMN_NM(%1) %+ _offUD, , 1 … … 56 55 %if TMPL_BITS == 16 57 56 %define BS3_CPUBAS2_REF_LABEL_VIA_CS(a_Label) cs:a_Label 58 %define BS3_CPUBAS2_JMP_FAR_MEM_LABEL(a_Label) jmp far [BS3_CPUBAS2_REF_LABEL_VIA_CS(a_Label)]59 57 %elif TMPL_BITS == 32 60 58 %define BS3_CPUBAS2_REF_LABEL_VIA_CS(a_Label) cs:a_Label wrt FLAT 61 %define BS3_CPUBAS2_JMP_FAR_MEM_LABEL(a_Label) jmp far [BS3_CPUBAS2_REF_LABEL_VIA_CS(a_Label)]62 59 %elif TMPL_BITS == 64 63 60 %define BS3_CPUBAS2_REF_LABEL_VIA_CS(a_Label) a_Label wrt FLAT 64 %define BS3_CPUBAS2_JMP_FAR_MEM_LABEL(a_Label) jmp far [BS3_CPUBAS2_REF_LABEL_VIA_CS(a_Label)]65 61 %else 66 62 %error TMPL_BITS … … 71 67 ; 72 68 ; @param 1 The label of the memory pointer. 73 ; @param 2 Set to 0 for no prefix, 1 for REX.W prefix. 74 %ifndef BS3_CPUBAS2_JMP_FAR_MEM_LABEL_DEFINED 75 %define BS3_CPUBAS2_JMP_FAR_MEM_LABEL_DEFINED 69 ; @param 2 Prefix: 0: none, 1: 066h, 2: REX.W, 3: 066h REX.W 70 %ifnmacro BS3_CPUBAS2_JMP_FAR_MEM_LABEL 76 71 %macro BS3_CPUBAS2_JMP_FAR_MEM_LABEL 2 72 %if (%2) == 1 || (%2) == 3 73 db 066h ; o16/o32 74 %endif 77 75 %if TMPL_BITS != 64 78 76 jmp far [BS3_CPUBAS2_REF_LABEL_VIA_CS(%1)] 79 77 %elif TMPL_BITS == 64 80 78 ; 48FF2C25[040C0000] <3> jmp far [BS3_CPUBAS2_REF_LABLE_VIA_CS(.fpfn)] 81 %if %2 != 079 %if (%2) == 2 || (%2) == 3 82 80 db 048h ; REX.W 83 81 %endif … … 88 86 %endif 89 87 %endmacro 90 %endif ; BS3_CPUBAS2_JMP_FAR_MEM_LABEL_DEFINED88 %endif 91 89 92 90 ;; … … 94 92 ; 95 93 ; @param 1 The label of the memory pointer. 96 ; @param 2 Set to 0 for no prefix, 1 for REX.W prefix. 97 %ifndef BS3_CPUBAS2_CALL_FAR_MEM_LABEL_DEFINED 98 %define BS3_CPUBAS2_CALL_FAR_MEM_LABEL_DEFINED 94 ; @param 2 Prefix: 0: none, 1: 066h, 2: REX.W, 3: 066h REX.W 95 %ifnmacro BS3_CPUBAS2_CALL_FAR_MEM_LABEL 99 96 %macro BS3_CPUBAS2_CALL_FAR_MEM_LABEL 2 97 %if (%2) == 1 || (%2) == 3 98 db 066h ; o16/o32 99 %endif 100 100 %if TMPL_BITS != 64 101 101 call far [BS3_CPUBAS2_REF_LABEL_VIA_CS(%1)] 102 102 %elif TMPL_BITS == 64 103 %if %2 != 0103 %if (%2) == 2 || (%2) == 3 104 104 db 048h ; REX.W 105 105 %endif … … 110 110 %endif 111 111 %endmacro 112 %endif ; BS3_CPUBAS2_CALL_FAR_MEM_LABEL_DEFINED112 %endif 113 113 114 114 … … 1296 1296 ; Since AMD and Intel treat REX.W differently, we need two versions of the 1297 1297 ; test functions here and use a macro to accomplish that. 1298 %ifndef jmpf_macro_defined 1299 %define jmpf_macro_defined 1298 ; 1299 ; @param 1 Symbol suffix 1300 ; @param 2 0 for AMD, 1 for Intel. 1301 ; 1302 %ifnmacro jmpf_macro 1300 1303 %macro jmpf_macro 2 1301 1304 1302 1305 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_same_r0__ud2 %+ %1 1303 1306 BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_same_r0__ud2 %+ %1, BS3_PBC_NEAR 1304 jmp far [BS3_CPUBAS2_REF_LABEL_VIA_CS(.fpfn)]1307 BS3_CPUBAS2_JMP_FAR_MEM_LABEL .fpfn, 2 1305 1308 .fpfn: 1306 1309 %if TMPL_BITS == 16 … … 1326 1329 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_same_r1__ud2 %+ %1 1327 1330 BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_same_r1__ud2 %+ %1, BS3_PBC_NEAR 1328 jmp far [BS3_CPUBAS2_REF_LABEL_VIA_CS(.fpfn)]1331 BS3_CPUBAS2_JMP_FAR_MEM_LABEL .fpfn, 2 1329 1332 .fpfn: 1330 1333 %if TMPL_BITS == 16 … … 1365 1368 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_same_r3__ud2 %+ %1 1366 1369 BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_same_r3__ud2 %+ %1, BS3_PBC_NEAR 1367 BS3_CPUBAS2_JMP_FAR_MEM_LABEL .fpfn, 11370 BS3_CPUBAS2_JMP_FAR_MEM_LABEL .fpfn, 2 1368 1371 .fpfn: 1369 1372 %if TMPL_BITS == 16 … … 1386 1389 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_r0_cs16__ud2 %+ %1 1387 1390 BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_r0_cs16__ud2 %+ %1, BS3_PBC_NEAR 1388 %if TMPL_BITS != 16 1389 db 66h 1390 %endif 1391 BS3_CPUBAS2_JMP_FAR_MEM_LABEL .fpfn, 0 1391 BS3_CPUBAS2_JMP_FAR_MEM_LABEL .fpfn, (TMPL_BITS != 16) ; TMPL_BITS != 16 ? 1 : 0 1392 1392 .fpfn: 1393 1393 dw .again wrt CGROUP16 … … 1400 1400 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_r0_cs32__ud2 %+ %1 1401 1401 BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_r0_cs32__ud2 %+ %1, BS3_PBC_NEAR 1402 %if TMPL_BITS == 16 1403 db 66h 1404 %endif 1405 BS3_CPUBAS2_JMP_FAR_MEM_LABEL .fpfn, 0 1402 BS3_CPUBAS2_JMP_FAR_MEM_LABEL .fpfn, (TMPL_BITS == 16) ; TMPL_BITS == 16 ? 1 : 0 1406 1403 .fpfn: 1407 1404 dd .again wrt FLAT … … 1416 1413 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_r0_cs64__ud2 %+ %1 1417 1414 BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_r0_cs64__ud2 %+ %1, BS3_PBC_NEAR 1418 %if TMPL_BITS == 16 1419 db 066h 1420 %endif 1421 jmp far [BS3_CPUBAS2_REF_LABEL_VIA_CS(.fpfn)] 1415 BS3_CPUBAS2_JMP_FAR_MEM_LABEL .fpfn, (2 - (TMPL_BITS == 16)) ; TMPL_BITS == 16 ? 1 : 2 1422 1416 .fpfn: 1423 1417 dd .jmp_target wrt FLAT … … 1441 1435 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_jmpf_mem_r0_cs16l__ud2 %+ %1 1442 1436 BS3_PROC_BEGIN_CMN bs3CpuBasic2_jmpf_mem_r0_cs16l__ud2 %+ %1, BS3_PBC_NEAR 1443 %if TMPL_BITS == 32 1444 db 066h 1445 %endif 1446 BS3_CPUBAS2_JMP_FAR_MEM_LABEL .fpfn, 0 1437 BS3_CPUBAS2_JMP_FAR_MEM_LABEL .fpfn, (TMPL_BITS == 32) ; TMPL_BITS == 32 ? 1 : 0 1447 1438 .fpfn: 1448 1439 %if TMPL_BITS != 64 … … 1495 1486 ; Since AMD and Intel treat REX.W differently, we need two versions of the 1496 1487 ; test functions here and use a macro to accomplish that. 1497 %ifndef callf_macro_defined 1498 %define callf_macro_defined 1488 ; 1489 ; @param 1 Symbol suffix 1490 ; @param 2 0 for AMD, 1 for Intel. 1491 ; 1492 %ifnmacro callf_macro 1499 1493 %macro callf_macro 2 1500 1494 1501 1495 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_callf_mem_same_r0__ud2 %+ %1 1502 1496 BS3_PROC_BEGIN_CMN bs3CpuBasic2_callf_mem_same_r0__ud2 %+ %1, BS3_PBC_NEAR 1503 call far [BS3_CPUBAS2_REF_LABEL_VIA_CS(.fpfn)]1497 BS3_CPUBAS2_CALL_FAR_MEM_LABEL .fpfn, 2 1504 1498 .fpfn: 1505 1499 %if TMPL_BITS == 16 … … 1525 1519 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_callf_mem_same_r1__ud2 %+ %1 1526 1520 BS3_PROC_BEGIN_CMN bs3CpuBasic2_callf_mem_same_r1__ud2 %+ %1, BS3_PBC_NEAR 1527 call far [BS3_CPUBAS2_REF_LABEL_VIA_CS(.fpfn)]1521 BS3_CPUBAS2_CALL_FAR_MEM_LABEL .fpfn, 2 1528 1522 .fpfn: 1529 1523 %if TMPL_BITS == 16 … … 1564 1558 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_callf_mem_same_r3__ud2 %+ %1 1565 1559 BS3_PROC_BEGIN_CMN bs3CpuBasic2_callf_mem_same_r3__ud2 %+ %1, BS3_PBC_NEAR 1566 BS3_CPUBAS2_CALL_FAR_MEM_LABEL .fpfn, 11560 BS3_CPUBAS2_CALL_FAR_MEM_LABEL .fpfn, 2 1567 1561 .fpfn: 1568 1562 %if TMPL_BITS == 16 … … 1585 1579 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_callf_mem_r0_cs16__ud2 %+ %1 1586 1580 BS3_PROC_BEGIN_CMN bs3CpuBasic2_callf_mem_r0_cs16__ud2 %+ %1, BS3_PBC_NEAR 1587 %if TMPL_BITS != 16 1588 db 66h 1589 %endif 1590 BS3_CPUBAS2_CALL_FAR_MEM_LABEL .fpfn, 0 1581 BS3_CPUBAS2_CALL_FAR_MEM_LABEL .fpfn, (TMPL_BITS != 16) ; (TMPL_BITS == 16 ? 0 : 1) 1591 1582 .fpfn: 1592 1583 dw .again wrt CGROUP16 … … 1599 1590 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_callf_mem_r0_cs32__ud2 %+ %1 1600 1591 BS3_PROC_BEGIN_CMN bs3CpuBasic2_callf_mem_r0_cs32__ud2 %+ %1, BS3_PBC_NEAR 1601 %if TMPL_BITS == 16 1602 db 66h 1603 %endif 1604 BS3_CPUBAS2_CALL_FAR_MEM_LABEL .fpfn, 0 1592 BS3_CPUBAS2_CALL_FAR_MEM_LABEL .fpfn, (TMPL_BITS == 16) ; (TMPL_BITS == 16 ? 1 : 0) 1605 1593 .fpfn: 1606 1594 dd .again wrt FLAT … … 1615 1603 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_callf_mem_r0_cs64__ud2 %+ %1 1616 1604 BS3_PROC_BEGIN_CMN bs3CpuBasic2_callf_mem_r0_cs64__ud2 %+ %1, BS3_PBC_NEAR 1617 %if TMPL_BITS == 16 1618 db 066h 1619 %endif 1620 call far [BS3_CPUBAS2_REF_LABEL_VIA_CS(.fpfn)] 1605 BS3_CPUBAS2_CALL_FAR_MEM_LABEL .fpfn, (2 - (TMPL_BITS == 16)) ; (TMPL_BITS == 16 ? 1 : 2) 1621 1606 .fpfn: 1622 1607 dd .call_target wrt FLAT … … 1640 1625 BS3_CPUBAS2_UD_OFF bs3CpuBasic2_callf_mem_r0_cs16l__ud2 %+ %1 1641 1626 BS3_PROC_BEGIN_CMN bs3CpuBasic2_callf_mem_r0_cs16l__ud2 %+ %1, BS3_PBC_NEAR 1642 %if TMPL_BITS == 32 1643 db 066h 1644 %endif 1645 BS3_CPUBAS2_CALL_FAR_MEM_LABEL .fpfn, 0 1627 BS3_CPUBAS2_CALL_FAR_MEM_LABEL .fpfn, (TMPL_BITS == 32) ; (TMPL_BITS == 32 ? 1 : 0) 1646 1628 .fpfn: 1647 1629 %if TMPL_BITS != 64
Note:
See TracChangeset
for help on using the changeset viewer.