Changeset 631 in xtideuniversalbios for trunk/Assembly_Library


Ignore:
Timestamp:
Feb 1, 2025, 12:45:33 PM (12 hours ago)
Author:
Krister Nordvall
Message:

Changes:

  • Fixed a bug in XTIDECFG where changing the COM port for a virtual serial device would not work at all. Thanks to Jaroslaw Jablonski for reporting this problem.
  • Added a couple of macros to the library, LPUSH and LPOP, which creates the long (two bytes) encoding of PUSH and POP respectively. They are pretty much useless except LPOP can be used to differentiate between 808x and NEC V CPUs.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Assembly_Library/Inc/Macros.inc

    r602 r631  
    77
    88;--------------------------------------------------------------------
     9; The long (two byte) form of PUSH. Supported by NEC V20/V30.
     10;
     11; LPUSH
     12;   Parameters:
     13;       %1:     Any 16 bit general purpose register.
     14;   Returns:
     15;       Nothing
     16;   Corrupts registers:
     17;       Nothing
     18;--------------------------------------------------------------------
     19%macro LPUSH 1.nolist
     20    %ifidni     %1, ax
     21        db      0FFh, 0F0h
     22    %elifidni   %1, cx
     23        db      0FFh, 0F1h
     24    %elifidni   %1, dx
     25        db      0FFh, 0F2h
     26    %elifidni   %1, bx
     27        db      0FFh, 0F3h
     28    %elifidni   %1, sp
     29        db      0FFh, 0F4h
     30    %elifidni   %1, bp
     31        db      0FFh, 0F5h
     32    %elifidni   %1, si
     33        db      0FFh, 0F6h
     34    %elifidni   %1, di
     35        db      0FFh, 0F7h
     36    %else
     37        %error "Invalid parameter passed to LPUSH"
     38    %endif
     39%endmacro
     40
     41
     42;--------------------------------------------------------------------
     43; The long (two byte) form of POP. Not supported by NEC V20/V30.
     44; NEC V20/V30 CPU:s will adjust SP but not actually move the contents
     45; of the top WORD on the stack to the destination register.
     46;
     47; LPOP
     48;   Parameters:
     49;       %1:     Any 16 bit general purpose register.
     50;   Returns:
     51;       Nothing
     52;   Corrupts registers:
     53;       Nothing
     54;--------------------------------------------------------------------
     55%macro LPOP 1.nolist
     56    %ifidni     %1, ax
     57        db      8Fh, 0C0h
     58    %elifidni   %1, cx
     59        db      8Fh, 0C1h
     60    %elifidni   %1, dx
     61        db      8Fh, 0C2h
     62    %elifidni   %1, bx
     63        db      8Fh, 0C3h
     64    %elifidni   %1, sp
     65        db      8Fh, 0C4h
     66    %elifidni   %1, bp
     67        db      8Fh, 0C5h
     68    %elifidni   %1, si
     69        db      8Fh, 0C6h
     70    %elifidni   %1, di
     71        db      8Fh, 0C7h
     72    %else
     73        %error "Invalid parameter passed to LPOP"
     74    %endif
     75%endmacro
     76
     77
     78;--------------------------------------------------------------------
    979; Skips the immediately following 1 byte instruction by using it
    1080; as an immediate value to a dummy instruction.
     
    2191%macro SKIP1B 1.nolist
    2292    %ifidni     %1, f
    23         db  03Ch                    ; Opcode byte for CMP AL, <immed>
    24         ;db 0A8h                    ; Alt. version TEST AL, <immed>
     93        db      03Ch                ; Opcode byte for CMP AL, <immed>
     94        ;db     0A8h                ; Alt. version TEST AL, <immed>
    2595    %elifidni   %1, al
    26         db  0B0h                    ; Opcode byte for MOV AL, <immed>
     96        db      0B0h                ; Opcode byte for MOV AL, <immed>
    2797    %elifidni   %1, ah
    28         db  0B4h                    ; Opcode byte for MOV AH, <immed>
     98        db      0B4h                ; Opcode byte for MOV AH, <immed>
    2999    %elifidni   %1, bl
    30         db  0B3h                    ; Opcode byte for MOV BL, <immed>
     100        db      0B3h                ; Opcode byte for MOV BL, <immed>
    31101    %elifidni   %1, bh
    32         db  0B7h                    ; Opcode byte for MOV BH, <immed>
     102        db      0B7h                ; Opcode byte for MOV BH, <immed>
    33103    %elifidni   %1, cl
    34         db  0B1h                    ; Opcode byte for MOV CL, <immed>
     104        db      0B1h                ; Opcode byte for MOV CL, <immed>
    35105    %elifidni   %1, ch
    36         db  0B5h                    ; Opcode byte for MOV CH, <immed>
     106        db      0B5h                ; Opcode byte for MOV CH, <immed>
    37107    %elifidni   %1, dl
    38         db  0B2h                    ; Opcode byte for MOV DL, <immed>
     108        db      0B2h                ; Opcode byte for MOV DL, <immed>
    39109    %elifidni   %1, dh
    40         db  0B6h                    ; Opcode byte for MOV DH, <immed>
     110        db      0B6h                ; Opcode byte for MOV DH, <immed>
    41111    %else
    42112        %error "Invalid parameter passed to SKIP1B"
    43113    %endif
    44114%endmacro
     115
    45116
    46117;--------------------------------------------------------------------
     
    59130%macro SKIP2B 1.nolist
    60131    %ifidni     %1, f
    61         db  03Dh                    ; Opcode byte for CMP AX, <immed>
    62         ;db 0A9h                    ; Alt. version TEST AX, <immed>
     132        db      03Dh                ; Opcode byte for CMP AX, <immed>
     133        ;db     0A9h                ; Alt. version TEST AX, <immed>
    63134    %elifidni   %1, ax
    64         db  0B8h                    ; Opcode byte for MOV AX, <immed>
     135        db      0B8h                ; Opcode byte for MOV AX, <immed>
    65136    %elifidni   %1, cx
    66         db  0B9h                    ; Opcode byte for MOV CX, <immed>
     137        db      0B9h                ; Opcode byte for MOV CX, <immed>
    67138    %elifidni   %1, dx
    68         db  0BAh                    ; Opcode byte for MOV DX, <immed>
     139        db      0BAh                ; Opcode byte for MOV DX, <immed>
    69140    %elifidni   %1, bx
    70         db  0BBh                    ; Opcode byte for MOV BX, <immed>
     141        db      0BBh                ; Opcode byte for MOV BX, <immed>
    71142    %elifidni   %1, sp
    72         db  0BCh                    ; Opcode byte for MOV SP, <immed>
     143        db      0BCh                ; Opcode byte for MOV SP, <immed>
    73144    %elifidni   %1, bp
    74         db  0BDh                    ; Opcode byte for MOV BP, <immed>
     145        db      0BDh                ; Opcode byte for MOV BP, <immed>
    75146    %elifidni   %1, si
    76         db  0BEh                    ; Opcode byte for MOV SI, <immed>
     147        db      0BEh                ; Opcode byte for MOV SI, <immed>
    77148    %elifidni   %1, di
    78         db  0BFh                    ; Opcode byte for MOV DI, <immed>
     149        db      0BFh                ; Opcode byte for MOV DI, <immed>
    79150    %else
    80151        %error "Invalid parameter passed to SKIP2B"
Note: See TracChangeset for help on using the changeset viewer.