Skip to content

EDR-DOS macro orgabs resets org when it shouldn't #19

@ecm-pushbx

Description

@ecm-pushbx

This test case is based on the revision in https://hg.pushbx.org/ecm/edrdos/rev/8d01d7fe3cc1

This is the source of the test case, which is a part of drbio/init.asm plus all the files it includes: https://hg.pushbx.org/ecm/testjwas/file/5e082442d4c4

This is the resulting listing file: https://pushbx.org/ecm/test/20230814/repo/init.lst

The error is that the orgabs macro should detect that offset 171h is above 16Ch and therefore the org was directive should be run. However, it appears that the directive is not run, as the devno variable ends up at 16Ch.

This works correctly on MASM 6.11, and for JWasm the same macro does work in several other spots but not in this one.

Output:

$ jwasm -c -Zm -Flinit.lst init.asm
JWasm v2.18, Aug 14 2023, Masm-compatible assembler.
Portions Copyright (c) 1992-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.

init.asm: 378 lines, 3 passes, 2 ms, 0 warnings, 0 errors
$ grep -E "orgabs\s+MACRO" -A11 init.asm
orgabs  MACRO   address
        local   was,is
        was = offset $
        org address
        is = offset $
        if was GT is
;       if2
;               %OUT ERROR - absolute data overwritten !! moving it
;       endif
        org     was
endif
ENDM
$ grep oldxbda,newxbda -A12 init.lst
                                        Public  oldxbda,newxbda,xbdalen,oldmemtop
0169 0000                       oldxbda         dw      0               ; old XBDA segment address
016B 0000                       newxbda         dw      0               ; new XBDA segment address
016D 0000                       xbdalen         dw      0               ; length of XBDA in words
016F 0000                       oldmemtop       dw      0               ; old conventional mem limit

                                        orgabs  16ch                    ; PRN:/AUX: the device number
00000171 = 171               1          ??0006 = offset $
                             1          org 16ch
0000016C = 16C               1          ??0007 = offset $

016C 0000                       devno   db      0,0                     ;** fixed location **

$

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions