|
|
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.