📄 unsq.html
字号:
<!doctype html public "-//W3C//DTD HTML 3.2//EN"><html><head><title>How to unsqueeze a program</title><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" /><meta http-equiv="content-language" content="en" /><meta name="resource-type" content="document"><meta name="copyright" content="This document copyright 2001 by Richard Murray. Use for non-profit and education purposes explicitly granted."><meta name="author" content="Richard Murray"><meta name="rating" content="general"></head><!-- /assembler/unsq.html --><!-- --><!-- (C) Copyright 2001 Richard Murray --><!-- Designed by Richard Murray --><!-- rmurray@heyrick.co.uk --><!-- --><body bgcolor="#f0f0f0" text="#000000" link="#0022dd" vlink="#002288"><table border = "0" width="100%"> <tr> <td align=center width=100> <img src="arm3.gif" width=79 height=78 align = middle> </td> <td> <h1 align="center"><font color="#800080">How to unsqueeze <br>a program</font></h1> </td> <td align=center width=100> <img src="arm3.gif" width=79 height=78 align = middle> </td></table><p> <p>Sometimes an application or program is set up in such a way as to make UnSqueeze fail tounsqueeze the code. Or alternatively your unsqueezer may fail for one reason or another.<br>But it is still perfectly possible to unsqueeze the code.<p>D. Ruck wrote how to do this in <i>comp.sys.acorn.programmer</i>. I reproduce the originalarticle here.<br><code>Message ID: comp.sys.acorn.programmer <111325544a.druck@druck.freeuk.net></code><p> <p><pre>You could always do it by hand:-1) F122) *Load <program>3) *MEMORYI 8000 +4 note address1 in the BL instruction4) *MEMORYI <BL address1> +100 look for MOV PC, Rx instruction, note registerX and address25) *BreakSet <instruction address2>6) *GO 8000 (runs, stops at breakpoint)7) *ShowRegs Note address3 in the Rx register 8) *MemoryI <Rx address3> look for MOV PC, Ry instruction, note registerY and address4 9) *BreakSet <instruction address4>10) *Continue (continues, stops at breakpoint) 11) *ShowRegs Note address in the Ry register 12) If Ry is &8004 its an AIF format, so *Save <program> 8000 <address3> *SetType <program> FF8 Other wise is a plain executable *Save <program> 8000 <address3> <address4>---druck</pre><p> <p> <p>The above doesn't seem to apply to the newer types of squeezed file. So here's my suck'n'seemethod.<pre> 1. Note the size of the WimpSlot. Then convert it to hex-&8000. Ie, a 324K wimpslot would be 49000. 2. *Load the program. 3. *MemoryI 8000 +4 Note the address in the BL instruction. 4. *MemoryI <BL address> +100 Look for ADD PC, Rx,#&xx It should follow SWI "XOS_SynchroniseCodeAreas". Note the register and what is added. Note the address of this instruction. 5. *BreakSet <instruction address> 6. *Go 8000 7. If you don't Darren Salt's Debugger Plus, type *ShowRegs. 8. Note the value of the register you noted in step 4. Now add to the value of the register, the amount added in step 4. This is your new address. 9. *MemoryI <new address> Look for B &8000 after "XOS_SynchroniseCodeAreas". Note that address. 10. *BreakSet <B &8000 instruction address> 11. *Continue 12. *Save <filename> 8000 +<slot value from step 1> I think you can replace the slot value with the address from step 8. Try it.</pre><p> <p><hr size = 3><a href="index.html#14">Return to assembler index</a><hr size = "3"><address>Copyright © 2001 Richard Murray / David J. Ruck</address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -