|
|
1.1 ! root 1: ; vi:set ts=8: ! 2: ! 3: ; nono ! 4: ; Copyright (C) 2025 Tetsuya Isaki ! 5: ; ! 6: ; Permission to use, copy, modify, and/or distribute this software for any ! 7: ; purpose with or without fee is hereby granted. ! 8: ; ! 9: ; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ! 10: ; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ! 11: ; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ! 12: ; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ! 13: ; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ! 14: ; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ! 15: ; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ! 16: ! 17: ; PACK/UNPK のアクセスサイズを調べる。 ! 18: ; 68030 実機ではどちらもワードアクセスをしている。 ! 19: ; ! 20: ; How to build and use: ! 21: ; > has pack1.has ! 22: ; > hlk pack1.o ! 23: ; > pack1.x ! 24: ; PACK SSW.size=2 ! 25: ; UNPK SSW.size=2 ! 26: ! 27: .include doscall.mac ! 28: .include iocscall.mac ! 29: ! 30: .cpu 68030 ! 31: .list ! 32: .text ! 33: .even ! 34: start: ! 35: ; バスエラーハンドラを差し替える。 ! 36: pea.l buserr_handler ! 37: move.w #2,-(sp) ! 38: DOS _INTVCS ! 39: addq.l #6,sp ! 40: move.l d0,buserr_backup ! 41: ! 42: test_pack: ! 43: ; PACK -(Ax),-(Ay),#imm は ! 44: ; -(Ax) から2バイト読んで -(Ay) に1バイト書き込む。 ! 45: ; この読み込みのアクセスサイズを調べる。 ! 46: pea.l msg_pack(pc) ! 47: DOS _PRINT ! 48: addq.l #4,sp ! 49: ! 50: move.l #$ed4002,d0 ! 51: movea.l d0,a0 ! 52: lea.l buf+2(pc),a1 ! 53: lea.l @f,a2 ! 54: pack -(a0),-(a1),#0 ! 55: @@: ! 56: move.b d0,msg_res0 ! 57: pea msg_res(pc) ! 58: DOS _PRINT ! 59: addq.l #4,sp ! 60: ! 61: test_unpk: ! 62: ; UNPK -(Ax),-(Ay),#imm は ! 63: ; -(Ax) から1バイト読んで -(Ay) に2バイト書き込む。 ! 64: ; この書き込みのアクセスサイズを調べる。 ! 65: pea.l msg_unpk(pc) ! 66: DOS _PRINT ! 67: addq.l #4,sp ! 68: ! 69: lea.l buf+2(pc),a0 ! 70: move.l #$ed4002,d0 ! 71: movea.l d0,a1 ! 72: lea.l @f,a2 ! 73: unpk -(a0),-(a1),#0 ! 74: @@: ! 75: move.b d0,msg_res0 ! 76: pea msg_res(pc) ! 77: DOS _PRINT ! 78: addq.l #4,sp ! 79: ! 80: done: ! 81: move.l buserr_handler,-(sp) ! 82: move.w #2,-(sp) ! 83: DOS _INTVCS ! 84: ! 85: DOS _EXIT ! 86: ! 87: ; SSW のサイズフィールドから '1' or '2' を d0 に入れて a2 に帰る。 ! 88: buserr_handler: ! 89: move.w $a(sp),d0 ! 90: andi.w #$0eff,d0 ; Clear Rerun flags ! 91: move.w d0,$a(sp) ! 92: lsr.w #4,d0 ! 93: andi.w #3,d0 ! 94: addi.b #'0',d0 ! 95: move.l a2,2(sp) ! 96: rte ! 97: ! 98: msg_pack: ! 99: .dc.b "PACK",0 ! 100: msg_unpk: ! 101: .dc.b "UNPK",0 ! 102: .data ! 103: .even ! 104: buf: ! 105: .dc.b 2 ! 106: msg_res: ! 107: .dc.b ": SSW.size=" ! 108: msg_res0: ! 109: .dc.b "x",$d,$a,0 ! 110: ! 111: .bss ! 112: .even ! 113: buserr_backup: ! 114: .ds.l 1 ! 115: .end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.