Created
February 11, 2022 14:54
-
-
Save kg68k/eb7074083f3de897cb2be9f92fb48603 to your computer and use it in GitHub Desktop.
COMMAND.XだけでSRAMの全体をゼロクリア
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.title COMMAND.XだけでSRAMの全体をゼロクリア | |
;https://twitter.com/kamadox/status/1490317638958223364 | |
;逆アセンブルして注釈を追加 | |
.include iocscall.mac | |
.cpu 68000 | |
.text | |
L000000: | |
eor d4,d4 ;d4.w=0 | |
;スーパーバイザモードに切り換える | |
movea d4,a1 ;a1.l=0 | |
moveq #.low..not._B_SUPER,d0 | |
not d0 ;d0.b=$81=_B_SUPER | |
trap #15 ;IOCSコール | |
movea.l d0,a4 ;以前のssp | |
lea (a4),a1 ;ユーザーモードに戻すときのために保存 | |
;rtsをDOS _EXIT($ff00)に書き換える(命令キャッシュ消去は後で行う) | |
pea (L00006c,pc,d4.w) | |
movea.l (sp)+,a4 | |
st (a4)+ ;$ff | |
sf (a4)+ ;$00 | |
movea.l (L00006e,pc,d4.w),a2 | |
movea.l (L000072,pc,d4.w),a3 | |
bra L000078 | |
L000022: | |
bra L00004a | |
L000024: | |
bra L00006c | |
L000026: | |
.dc.b $30,$31 | |
L000028: | |
;SRAMアドレスを求める | |
movea.l a2,a4 ;$55a45555 | |
adda.l a2,a2 ;a2.l=$ab48aaaa | |
adda.l a4,a2 ;a2.l=$00ecffff | |
addq #1,a2 ;a2.l=$00ed0000 | |
;SRAM書き込み許可 | |
movea.l a3,a4 ;$3361c669 | |
adda.l a3,a3 ;a3.l=$66c38cd2 | |
adda.l a3,a3 ;a3.l=$cd8719a4 | |
adda.l a4,a3 ;a3.l=$00e8e00d SystemPort#7 | |
subq #1,a3 ;a3.l=$00e8e00c | |
move #$3131,(a3) ;上位バイトはダミー | |
;SRAM容量の(word数-1)を求める | |
move (L000076,pc,d4.w),d0 ;$b555 | |
move (L000076,pc,d4.w),d1 | |
add d0,d0 ;d0.w=$6aaa | |
add d1,d0 ;d0.w=$1fff=16*1024/2-1 | |
;SRAMをクリアする | |
L00004a: | |
clr (a2)+ | |
subq #1,d0 | |
bcc L000022 ;bcc L00004a だとオペコードが有効な文字に | |
;ならないため、わざと遠くに迂回する | |
;SRAM書き込み禁止 | |
move #$3232,(a3) ;上位バイトはダミー | |
;ユーザーモードに戻す | |
moveq #.low..not._B_SUPER,d0 | |
not d0 ;d0.b=$81=_B_SUPER | |
trap #15 ;IOCSコール | |
;スケーリングファクタを使用してMPU判別 | |
; 68000/68010ならSFは無視されるので L000026-1+1 ($30) が参照される | |
; 68020以降なら L000026-1+1*2 ($31) が参照される | |
clr d3 | |
addq #1,d3 | |
.cpu 68020 | |
and.b (L000026-1,pc,d3.w*2),d3 | |
beq L000024 ;68010以下 | |
;68020以上ならキャッシュを消去する | |
clr d1 | |
addq #3,d1 ;d1.w=3 ... キャッシュ消去 | |
IOCS _SYS_STAT | |
.cpu 68000 | |
;プログラム終了 | |
L00006c: | |
rts ;DOS _EXITに書き換えられる | |
L00006e: | |
.dc.l $55a45555 ;($1_00ed0000-1)/3 | |
L000072: | |
.dc.l $3361c669 ;$1_00e8e00d/5 | |
L000076: | |
.dc.w $b555 ;($2_0000+16*1024/2-1)/3 | |
L000078: | |
bra L000028 | |
L00007a: | |
.dc.b $0d,$0a ;echoコマンドで出力された改行なので使用されない | |
L00007c: | |
.end L000000 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.title COMMAND.XだけでSRAMの全体をゼロクリア | |
;https://twitter.com/kamadox/status/1490317638958223364 | |
;逆アセンブルのみ(disに-rオプションを指定してオペコードを出力) | |
.include iocscall.mac | |
.cpu 68000 | |
.text | |
L000000: | |
eor d4,d4 ;$b944 | |
movea d4,a1 ;$3244 | |
moveq #$7e,d0 ;'~' ;$707e | |
not d0 ;$4640 | |
trap #15 ;$4e4f | |
movea.l d0,a4 ;$2840 | |
lea (a4),a1 ;$43d4 | |
pea (L00006c,pc,d4.w) ;$487b,$405c | |
movea.l (sp)+,a4 ;$285f | |
st (a4)+ ;$50dc | |
sf (a4)+ ;$51dc | |
movea.l (L00006e,pc,d4.w),a2 ;$247b,$4054 | |
movea.l (L000072,pc,d4.w),a3 ;$267b,$4054 | |
bra L000078 ;$6056 | |
L000022: | |
bra L00004a ;$6026 | |
L000024: | |
bra L00006c ;$6046 | |
L000026: | |
.dc.b $30,$31 | |
L000028: | |
movea.l a2,a4 ;$284a | |
adda.l a2,a2 ;$d5ca | |
adda.l a4,a2 ;$d5cc | |
addq #1,a2 ;$524a | |
movea.l a3,a4 ;$284b | |
adda.l a3,a3 ;$d7cb | |
adda.l a3,a3 ;$d7cb | |
adda.l a4,a3 ;$d7cc | |
subq #1,a3 ;$534b | |
move #$3131,(a3) ;'11' ;$36bc,$3131 | |
move (L000076,pc,d4.w),d0 ;$303b,$4036 | |
move (L000076,pc,d4.w),d1 ;$323b,$4032 | |
add d0,d0 ;$d040 | |
add d1,d0 ;$d041 | |
L00004a: | |
clr (a2)+ ;$425a | |
subq #1,d0 ;$5340 | |
bcc L000022 ;$64d2 | |
move #$3232,(a3) ;'22' ;$36bc,$3232 | |
moveq #$7e,d0 ;'~' ;$707e | |
not d0 ;$4640 | |
trap #15 ;$4e4f | |
clr d3 ;$4243 | |
addq #1,d3 ;$5243 | |
.cpu 68020 | |
and.b (L000024+1,pc,d3.w*2),d3 ;$c63b,$32c5 | |
beq L000024 ;$67c0 | |
clr d1 ;$4241 | |
addq #3,d1 ;$5641 | |
IOCS _SYS_STAT ;$70ac,$4e4f | |
L00006c: | |
rts ;$4e75 | |
L00006e: | |
.dc.l $55a45555 | |
L000072: | |
.dc.l $3361c669 | |
L000076: | |
.dc.w $b555 | |
L000078: | |
bra L000028 ;$60ae | |
L00007a: | |
.dc.b $0d,$0a | |
L00007c: | |
.end L000000 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
https://twitter.com/kamadox/status/1490317638958223364
鎌田さんの「COMMAND.XだけでSRAMの全体をゼロクリア」のネタバレです。