Annotation of nono/exp/cas1.has, revision 1.1

1.1     ! root        1: ; vi:set ts=8:
        !             2: 
        !             3: ; nono
        !             4: ; Copyright (C) 2025 nono project
        !             5: ;
        !             6: ; Redistribution and use in source and binary forms, with or without
        !             7: ; modification, are permitted provided that the following conditions
        !             8: ; are met:
        !             9: ; 1. Redistributions of source code must retain the above copyright
        !            10: ;    notice, this list of conditions and the following disclaimer.
        !            11: ; 2. Redistributions in binary form must reproduce the above copyright
        !            12: ;    notice, this list of conditions and the following disclaimer in the
        !            13: ;    documentation and/or other materials provided with the distribution.
        !            14: ;
        !            15: ; THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
        !            16: ; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
        !            17: ; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
        !            18: ; IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
        !            19: ; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
        !            20: ; BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
        !            21: ; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
        !            22: ; AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
        !            23: ; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            24: ; OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            25: ; SUCH DAMAGE.
        !            26: 
        !            27: ; CAS.[BWL] Dc,Du,<ea>
        !            28: ;
        !            29: ;  cc := *(ea) - Dc
        !            30: ;  If (Z), *(ea) := Du
        !            31: ;  Else    Dc := *(ea)
        !            32: 
        !            33:        .xref   hexstr_long
        !            34:        .include doscall.mac
        !            35:        .list
        !            36:        .cpu    68030
        !            37: 
        !            38: PRINT  .macro  msg
        !            39:        pea.l   msg
        !            40:        DOS     _PRINT
        !            41:        addq.l  #4,sp
        !            42:        .endm
        !            43: 
        !            44:        .offset 0
        !            45: o_initea:      .ds.l   1
        !            46: o_exp_dc:      .ds.l   1
        !            47: o_exp_du:      .ds.l   1
        !            48: o_exp_ac:      .ds.l   1
        !            49: o_exp_au:      .ds.l   1
        !            50: o_exp_ea:      .ds.l   1
        !            51: o_inst:                .ds.w   3
        !            52: o_msg:         .ds.b   0
        !            53: 
        !            54:        .text
        !            55:        .even
        !            56: 
        !            57:        ; d0-d1 汎用
        !            58:        ; d2-d3 Dc,Du 用
        !            59:        ; d4    <ea> 入出力用
        !            60:        ; d7    テスト番号
        !            61:        ; a2-a3 Ac,Au 用
        !            62:        ; a4    <ea>
        !            63:        ; a5    テストデータ
        !            64: 
        !            65: start:
        !            66:        lea.l   data(pc),a4
        !            67: 
        !            68:        moveq.l #0,d7
        !            69: loop:
        !            70:        bsr     do_test
        !            71:        addq.l  #1,d7
        !            72:        cmpi.l  #8,d7
        !            73:        bne     loop
        !            74: 
        !            75:        DOS     _EXIT
        !            76: 
        !            77: do_test:
        !            78:        lea.l   testdata,a5
        !            79:        move.l  (a5,d7.l*4),a5
        !            80:        PRINT   o_msg(a5)
        !            81:        ; Exec
        !            82:        movem.l initial(pc),d2-d3/a2-a3
        !            83:        move.l  o_initea(a5),(a4)
        !            84:        jsr     o_inst(a5)
        !            85: check:
        !            86: check_dc:
        !            87:        move.l  o_exp_dc(a5),d1
        !            88:        cmp.l   d1,d2
        !            89:        beq     @f
        !            90:        pea.l   msg_dc(pc)
        !            91:        move.l  d1,-(sp)
        !            92:        move.l  d2,-(sp)
        !            93:        bsr     fail
        !            94:        lea.l   12(sp),sp
        !            95: @@:
        !            96: check_du:
        !            97:        move.l  o_exp_du(a5),d1
        !            98:        cmp.l   d1,d3
        !            99:        beq     @f
        !           100:        pea.l   msg_du(pc)
        !           101:        move.l  d1,-(sp)
        !           102:        move.l  d3,-(sp)
        !           103:        bsr     fail
        !           104:        lea.l   12(sp),sp
        !           105: @@:
        !           106: check_ac:
        !           107:        move.l  o_exp_ac(a5),d1
        !           108:        cmpa.l  d1,a2
        !           109:        beq     @f
        !           110:        pea.l   msg_ac(pc)
        !           111:        move.l  d1,-(sp)
        !           112:        move.l  a2,-(sp)
        !           113:        bsr     fail
        !           114:        lea.l   12(sp),sp
        !           115: @@:
        !           116: check_au:
        !           117:        move.l  o_exp_au(a5),d1
        !           118:        cmpa.l  d1,a3
        !           119:        beq     @f
        !           120:        pea.l   msg_au(pc)
        !           121:        move.l  d1,-(sp)
        !           122:        move.l  a3,-(sp)
        !           123:        bsr     fail
        !           124:        lea.l   12(sp),sp
        !           125: @@:
        !           126: check_ea:
        !           127:        move.l  o_exp_ea(a5),d1
        !           128:        cmp.l   (a4),d1
        !           129:        beq     @f
        !           130:        pea.l   msg_ea(pc)
        !           131:        move.l  d1,-(sp)
        !           132:        move.l  (a4),-(sp)
        !           133:        bsr     fail
        !           134:        lea.l   12(sp),sp
        !           135: @@:
        !           136: check_done:
        !           137:        rts
        !           138: 
        !           139: ; arg: +$4.l actual
        !           140: ;      +$8.l expected
        !           141: ;      +$c.l name
        !           142: fail:
        !           143:        PRINT   msg_fail(pc)
        !           144:        move.l  $c(sp),-(sp)
        !           145:        DOS     _PRINT
        !           146:        addq.l  #4,sp
        !           147:        PRINT   msg_expects(pc)
        !           148:        move.l  $8(sp),d0
        !           149:        lea.l   hexbuf(pc),a0
        !           150:        bsr     hexstr_long
        !           151:        PRINT   hexbuf(pc)
        !           152:        PRINT   msg_but(pc)
        !           153:        move.l  $4(sp),d0
        !           154:        lea.l   hexbuf(pc),a0
        !           155:        bsr     hexstr_long
        !           156:        PRINT   hexbuf(pc)
        !           157:        PRINT   msg_crlf(pc)
        !           158:        rts
        !           159: 
        !           160:        ; d2-d3/a2-a3 の初期値
        !           161: initial:
        !           162:        .dc.l   1, 2, 3, 4
        !           163: 
        !           164: testdata:
        !           165:        .dc.l   testdata0
        !           166:        .dc.l   testdata1
        !           167:        .dc.l   testdata2
        !           168:        .dc.l   testdata3
        !           169:        .dc.l   testdata4
        !           170:        .dc.l   testdata5
        !           171:        .dc.l   testdata6
        !           172:        .dc.l   testdata7
        !           173: 
        !           174:        ; <ea> の初期値
        !           175:        ; Dc, Du, Ac, Au, <ea> の期待値
        !           176:        ; 実行する命令; rts
        !           177:        ; 表示するテスト名
        !           178: 
        !           179: testdata0:
        !           180:        .dc.l   1
        !           181:        .dc.l   1, 2, 3, 4, 2
        !           182:        cas.l   d2,d3,(a4)
        !           183:        rts
        !           184:        .dc.b   "CAS Dc,Du,<ea> (EQ)",$d,$a,0
        !           185:        .even
        !           186: testdata1:
        !           187:        .dc.l   0
        !           188:        .dc.l   0, 2, 3, 4, 0
        !           189:        cas.l   d2,d3,(a4)
        !           190:        rts
        !           191:        .dc.b   "CAS Dc,Du,<ea> (NE)",$d,$a,0
        !           192:        .even
        !           193: testdata2:
        !           194:        .dc.l   1
        !           195:        .dc.l   1, 2, 3, 4, 2
        !           196:        .dc.w   $0ed4, $2+($b<<6)       ; cas.l d2,a3,(a4)
        !           197:        rts
        !           198:        .dc.b   "CAS Dc,Au,<ea> (EQ)",$d,$a,0
        !           199:        .even
        !           200: testdata3:
        !           201:        .dc.l   0
        !           202:        .dc.l   0, 2, 3, 4, 0
        !           203:        .dc.w   $0ed4, $2+($b<<6)       ; cas.l d2,a3,(a4)
        !           204:        rts
        !           205:        .dc.b   "CAS Dc,Au,<ea> (NE)",$d,$a,0
        !           206:        .even
        !           207: testdata4:
        !           208:        .dc.l   3
        !           209:        .dc.l   1, 2, 3, 4, 2
        !           210:        .dc.w   $0ed4, $a+($3<<6)       ; cas.l a2,d3,(a4)
        !           211:        rts
        !           212:        .dc.b   "CAS Ac,Du,<ea> (EQ)",$d,$a,0
        !           213:        .even
        !           214: testdata5:
        !           215:        .dc.l   0
        !           216:        .dc.l   1, 2, 0, 4, 0
        !           217:        .dc.w   $0ed4, $a+($3<<6)       ; cas.l a2,d3,(a4)
        !           218:        rts
        !           219:        .dc.b   "CAS Ac,Du,<ea> (NE)",$d,$a,0
        !           220:        .even
        !           221: testdata6:
        !           222:        .dc.l   3
        !           223:        .dc.l   1, 2, 3, 4, 4
        !           224:        .dc.w   $0ed4, $a+($b<<6)       ; cas.l a2,a3,(a4)
        !           225:        rts
        !           226:        .dc.b   "CAS Ac,Au,<ea> (EQ)",$d,$a,0
        !           227:        .even
        !           228: testdata7:
        !           229:        .dc.l   0
        !           230:        .dc.l   1, 2, 0, 4, 0
        !           231:        .dc.w   $0ed4, $a+($b<<6)       ; cas.l a2,a3,(a4)
        !           232:        rts
        !           233:        .dc.b   "CAS Ac,Au,<ea> (NE)",$d,$a,0
        !           234:        .even
        !           235: 
        !           236: msg_dc:        .dc.b   "Dc",0
        !           237: msg_du:        .dc.b   "Du",0
        !           238: msg_ac:        .dc.b   "Ac",0
        !           239: msg_au:        .dc.b   "Au",0
        !           240: msg_ea:        .dc.b   "<ea>",0
        !           241: msg_crlf:
        !           242:        .dc.b   $d,$a,0
        !           243: msg_fail:
        !           244:        .dc.b   $9,"*** ",0
        !           245: msg_expects:
        !           246:        .dc.b   " expects ",0
        !           247: msg_but:
        !           248:        .dc.b   " but got ",0
        !           249: 
        !           250:        .bss
        !           251: data:
        !           252:        .ds.l   1
        !           253: hexbuf:
        !           254:        .ds.b   16

unix.superglobalmegacorp.com

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