Annotation of frontvm/as68k/test.s.S, revision 1.1

1.1     ! root        1: #define __Dpoo 0x24
        !             2:        .align 4
        !             3: jtab:
        !             4:        .long   bad_jmp
        !             5:        .long   bad_jmp
        !             6:        .long   bad_jmp
        !             7:        .long   bad_jmp
        !             8:        .long   bad_jmp
        !             9:        .long   bad_jmp
        !            10:        .long   bad_jmp
        !            11:        .long   bad_jmp
        !            12:        .long   bad_jmp
        !            13:        .long   bad_jmp
        !            14:        .long   bad_jmp
        !            15:        .long   bad_jmp
        !            16:        .long   bad_jmp
        !            17:        .long   bad_jmp
        !            18:        .long   __l1c
        !            19: jumptable:
        !            20:        cmpl    $0x1c,%eax
        !            21:        jg      bad_jmp2
        !            22:        shrl    $1,%eax
        !            23:        jmp     *jtab(,%eax,4)
        !            24:        .section        .rodata
        !            25: bad_jmp_str:   .string "Error. Bad jump target: $%x at line %d.\n"
        !            26:        .text
        !            27: bad_jmp:
        !            28:        shll    $1,%eax
        !            29: bad_jmp2:
        !            30:        pushl   line_no
        !            31:        pushl   %eax
        !            32:        pushl   $bad_jmp_str
        !            33:        call    printf
        !            34:        addl    $8,%esp
        !            35:        call    abort
        !            36: #define MEM_SIZE       0x110000
        !            37: #define PROC_STATE 64
        !            38: #define MemBase        STData+PROC_STATE
        !            39: 
        !            40:        .data
        !            41:        .comm   STData,MEM_SIZE+PROC_STATE
        !            42:        .comm   X,4
        !            43:        .comm   N,4
        !            44:        .comm   Z,4
        !            45:        .comm   V,4
        !            46:        .comm   C,4
        !            47:        .comm   bX,4
        !            48:        .comm   bN,4
        !            49:        .comm   bZ,4
        !            50:        .comm   bV,4
        !            51:        .comm   bC,4
        !            52:        .comm   rdest,4
        !            53:        .comm   exceptions_pending_mask,4
        !            54:        .comm   exceptions_pending_nums,32
        !            55:        .comm   exception_handlers,4*32
        !            56:        .comm   line_no,4
        !            57: debugstr:      .string "$%x $%x $%x $%x $%x $%x $%x $%x*$%x $%x $%x $%x $%x $%x $%x $%x:%d\n"
        !            58:        .global STRam
        !            59: STRam: .long   STData+PROC_STATE
        !            60:        .section        .rodata
        !            61: bin_filename:  .string "test.s.bin"
        !            62: open_mode:     .string "r"
        !            63: 
        !            64: dreg_fmt:              .string "D%d = $%08x    "
        !            65: areg_fmt:      .string "A%d = $%08x\n"
        !            66: cr:            .string "\n"
        !            67: cc_names:      .string "XNZVC"
        !            68: hex_fmt:               .string "$%02x "
        !            69: illegal_fmt:   .string "Illegal instruction at line %d.\n"
        !            70:        .text
        !            71: .globl SetZFlag
        !            72: SetZFlag:
        !            73:        movl    4(%esp),%eax
        !            74:        movb    %al,Z
        !            75:        ret
        !            76: .globl GetXFlag
        !            77: GetXFlag:
        !            78:        movl    X,%eax
        !            79:        ret
        !            80: .globl GetZFlag
        !            81: GetZFlag:
        !            82:        movl    Z,%eax
        !            83:        ret
        !            84: .globl GetCFlag
        !            85: GetCFlag:
        !            86:        movl    C,%eax
        !            87:        ret
        !            88: .globl GetNFlag
        !            89: GetNFlag:
        !            90:        movl    N,%eax
        !            91:        ret
        !            92: .globl GetVFlag
        !            93: GetVFlag:
        !            94:        movl    V,%eax
        !            95:        ret
        !            96: .globl DumpRegs
        !            97: DumpRegs:
        !            98:        pushl   %ebp
        !            99:        pushl   %ebx
        !           100:        pushl   %ecx
        !           101:        pushl   %esi
        !           102:        movl    $STData,%ebx
        !           103:        xorl    %eax,%eax
        !           104: 1:     pushl   %eax
        !           105:        pushl   (%ebx,%eax,4)
        !           106:        pushl   %eax
        !           107:        pushl   $dreg_fmt
        !           108:        call    printf
        !           109:        addl    $12,%esp
        !           110:        movl    (%esp),%eax
        !           111:        pushl   8*4(%ebx,%eax,4)
        !           112:        pushl   %eax
        !           113:        pushl   $areg_fmt
        !           114:        call    printf
        !           115:        addl    $12,%esp
        !           116:        popl    %eax
        !           117:        inc     %eax
        !           118:        cmpl    $8,%eax
        !           119:        jl      1b
        !           120:        movb    X,%al
        !           121:        movl    $0,%ecx
        !           122:        call    print_scat
        !           123:        movb    N,%al
        !           124:        movl    $1,%ecx
        !           125:        call    print_scat
        !           126:        movb    Z,%al
        !           127:        movl    $2,%ecx
        !           128:        call    print_scat
        !           129:        movb    V,%al
        !           130:        movl    $3,%ecx
        !           131:        call    print_scat
        !           132:        movb    C,%al
        !           133:        movl    $4,%ecx
        !           134:        call    print_scat
        !           135:        pushl   $cr
        !           136:        call    printf
        !           137:        addl    $4,%esp
        !           138:        movl    $STData+PROC_STATE,%esi
        !           139:        movl    $MEM_SIZE,%ebx
        !           140: 1:     movzbl  (%esi),%eax
        !           141:        pushl   %eax
        !           142:        pushl   $hex_fmt
        !           143:        call    printf
        !           144:        addl    $8,%esp
        !           145:        inc     %esi
        !           146:        dec     %ebx
        !           147:        testl   $15,%ebx
        !           148:        jz      3f
        !           149: 2:     testl   %ebx,%ebx
        !           150:        jnz     1b
        !           151:        popl    %esi
        !           152:        popl    %ecx
        !           153:        popl    %ebx
        !           154:        popl    %ebp
        !           155:        ret
        !           156: 3:     pushl   $cr
        !           157:        call    printf
        !           158:        addl    $4,%esp
        !           159:        jmp     2b
        !           160: print_scat:
        !           161:        xorl    %ebx,%ebx
        !           162:        cmpb    %al,%bl
        !           163:        jz      1f
        !           164:        movb    cc_names(%ecx),%al
        !           165:        pushl   %eax
        !           166:        call    putchar
        !           167:        addl    $4,%esp
        !           168: 1:     ret
        !           169: .globl FlagException
        !           170: FlagException:
        !           171:        movl    4(%esp),%eax
        !           172:        btsl    %eax,exceptions_pending_mask
        !           173:        incb    exceptions_pending_nums(%eax)
        !           174:        ret
        !           175: .globl MemReadByte
        !           176: MemReadByte:
        !           177:        movl    4(%esp),%eax
        !           178:        movsbl  STData+PROC_STATE(%eax),%eax
        !           179:        ret
        !           180: .globl MemReadWord
        !           181: MemReadWord:
        !           182:        movl    4(%esp),%eax
        !           183:        movswl  STData+PROC_STATE(%eax),%eax
        !           184:        xchg    %al,%ah
        !           185:        ret
        !           186: .globl MemReadLong
        !           187: MemReadLong:
        !           188:        movl    4(%esp),%eax
        !           189:        movl    STData+PROC_STATE(%eax),%eax
        !           190:        bswap   %eax
        !           191:        ret
        !           192: .globl MemWriteByte
        !           193: MemWriteByte:
        !           194:        movl    4(%esp),%eax
        !           195:        movl    8(%esp),%edx
        !           196:        movb    %dl,STData+PROC_STATE(%eax)
        !           197:        ret
        !           198: .globl MemWriteWord
        !           199: MemWriteWord:
        !           200:        movl    8(%esp),%edx
        !           201:        movl    4(%esp),%eax
        !           202:        xchg    %dl,%dh
        !           203:        movw    %dx,STData+PROC_STATE(%eax)
        !           204:        ret
        !           205: .globl MemWriteLong
        !           206: MemWriteLong:
        !           207:        movl    8(%esp),%edx
        !           208:        movl    4(%esp),%eax
        !           209:        bswap   %edx
        !           210:        movl    %edx,STData+PROC_STATE(%eax)
        !           211:        ret
        !           212: .globl GetReg
        !           213: GetReg:
        !           214:        movl    4(%esp),%eax
        !           215:        movl    STData(,%eax,4),%eax
        !           216:        ret
        !           217: .globl SetReg
        !           218: SetReg:
        !           219:        movl    4(%esp),%eax
        !           220:        movl    8(%esp),%edx
        !           221:        movl    %edx,STData(,%eax,4)
        !           222:        ret
        !           223: .globl Init680x0
        !           224: Init680x0:
        !           225:        pushl   %esi
        !           226:        pushl   %ebx
        !           227:        pushl   $open_mode
        !           228:        pushl   $bin_filename
        !           229:        call    fopen
        !           230:        movl    %eax, %ebx
        !           231:        popl    %eax
        !           232:        xorl    %eax, %eax
        !           233:        testl   %ebx, %ebx
        !           234:        popl    %edx
        !           235:        je      1f
        !           236:        pushl   $2
        !           237:        pushl   $0
        !           238:        pushl   %ebx
        !           239:        call    fseek
        !           240:        pushl   %ebx
        !           241:        call    ftell
        !           242:        pushl   $0
        !           243:        movl    %eax, %esi
        !           244:        pushl   $0
        !           245:        pushl   %ebx
        !           246:        call    fseek
        !           247:        addl    $28, %esp
        !           248:        xorl    %eax, %eax
        !           249:        cmpl    $MEM_SIZE, %esi
        !           250:        jge     1f
        !           251:        pushl   %ebx
        !           252:        pushl   %esi
        !           253:        pushl   $1
        !           254:        pushl   $STData+PROC_STATE
        !           255:        call    fread
        !           256:        pushl   %ebx
        !           257:        call    fclose
        !           258:        movl    $1, %eax
        !           259:        addl    $20, %esp
        !           260: 1:
        !           261:        popl    %ebx
        !           262:        popl    %esi
        !           263:        ret
        !           264: .globl Start680x0
        !           265: Start680x0:
        !           266:        pushl   %ebp
        !           267:        pushl   %esi
        !           268:        pushl   %edi
        !           269:        pushl   %edx
        !           270:        pushl   %ecx
        !           271:        pushl   %ebx
        !           272:        movl    $STData+PROC_STATE,%ebp
        !           273: 
        !           274: __l1c:
        !           275:        movl    $1, line_no
        !           276:        movl    $0,%eax
        !           277: 
        !           278: /* 0x1e */
        !           279:        movl    $2, line_no
        !           280:        movw    __Dpoo(%ebp),%bx
        !           281:        rorw    $8,%bx
        !           282:        addw    %bx,%ax
        !           283:        sets    N
        !           284:        seto    V
        !           285:        setc    C
        !           286:        setz    Z
        !           287:        setc    X
        !           288: 
        !           289:        movl    %eax,-64(%ebp)
        !           290:        popl    %ebx
        !           291:        popl    %ecx
        !           292:        popl    %edx
        !           293:        popl    %edi
        !           294:        popl    %esi
        !           295:        popl    %ebp
        !           296:        ret
        !           297: handle_exception:
        !           298:        movl    rdest,%ebx
        !           299:        testl   %ebx,%ebx
        !           300:        jnz     jumptable
        !           301:        movl    %eax,rdest
        !           302:        movl    exceptions_pending_mask,%edx
        !           303:        xorl    %ecx,%ecx
        !           304: 1:
        !           305:        btl     %ecx,%edx
        !           306:        jnc     2f
        !           307:        movl    $exception_handlers,%ebx
        !           308:        movb    exceptions_pending_nums(%ecx),%al
        !           309:        decb    %al
        !           310:        jnz     3f
        !           311:        btrl    %ecx,exceptions_pending_mask
        !           312:        3: movb %al,exceptions_pending_nums(%ecx)
        !           313:        movl    (%ebx,%ecx,4),%eax
        !           314:        movb    X,%bh
        !           315:        movb    N,%bl
        !           316:        movb    Z,%ch
        !           317:        movb    V,%cl
        !           318:        movb    C,%dh
        !           319:        movb    %bh,bX
        !           320:        movb    %bl,bN
        !           321:        movb    %ch,bZ
        !           322:        movb    %cl,bV
        !           323:        movb    %dh,bC
        !           324:        jmp     jumptable
        !           325: 2:
        !           326:        inc     %ecx
        !           327:        cmpl    $32,%ecx
        !           328:        jl      1b
        !           329:        movl    rdest,%eax
        !           330:        movl    $0,rdest
        !           331:        jmp     jumptable

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.