Home » Archimedes archive » Zipped Apps » 6502em » !6502Em/src/HWScroll

!6502Em/src/HWScroll

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Zipped Apps » 6502em
Filename: !6502Em/src/HWScroll
Read OK:
File size: 71D5 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM > HWScroll
   20
   30DEFFNhardwarescroll
   40LOCAL l%,pass%
   50pass%=p
   60[OPT pass%
   70.rloffsetmod4is0
   80          ; We are moving from word boundary to word boundary.
   90          ; First, align source to a word
  100          TST R0,#1
  110          LDRNEB R2,[R0],#1
  120          STRNEB R2,[R1],#1
  130          SUBNE R12,R12,#1
  140          TST R0,#2
  150          LDRNEB R2,[R0],#1
  160          STRNEB R2,[R1],#1
  170          LDRNEB R2,[R0],#1
  180          STRNEB R2,[R1],#1
  190          SUBNE R12,R12,#2
  200          ; Move line left.
  210          BIC   R2,R12,#31
  220          RSBS  R2,R2,#160
  230          ADDGE PC,PC,R2,LSR#2    ;(32>>2=8)
  240          B error
  250          LDMIA R0!,{R2-R9}  ;1
  260          STMIA R1!,{R2-R9}
  270          LDMIA R0!,{R2-R9}  ;2
  280          STMIA R1!,{R2-R9}
  290          LDMIA R0!,{R2-R9}  ;3
  300          STMIA R1!,{R2-R9}
  310          LDMIA R0!,{R2-R9}  ;4
  320          STMIA R1!,{R2-R9}
  330          LDMIA R0!,{R2-R9}  ;5
  340          STMIA R1!,{R2-R9}
  350          TST R12,#16
  360          LDMNEIA R0!,{R2-R5}
  370          STMNEIA R1!,{R2-R5}
  380          TST R12,#8
  390          LDMNEIA R0!,{R2-R3}
  400          STMNEIA R1!,{R2-R3}
  410          TST R12,#4
  420          LDRNE R2,[R0],#4
  430          STRNE R2,[R1],#4
  440          TST R12,#2
  450          LDRNEB R2,[R0],#1
  460          STRNEB R2,[R1],#1
  470          LDRNEB R2,[R0],#1
  480          STRNEB R2,[R1],#1
  490          TST R12,#1
  500          LDRNEB R2,[R0],#1
  510          STRNEB R2,[R1],#1
  520          MOVS PC,R14
  530
  540.rloffsetmod4is1
  550          ; First, align source to 1 before a word
  560          AND R2,R0,#3
  570          CMP R2,#3            ;if off by 0, move 3.
  580          LDRLTB R3,[R0],#1    ;if off by 1, move 2.
  590          STRLTB R3,[R1],#1    ;if off by 2, move 1.
  600          SUBLT R12,R12,#1     ;if off by 3, move 0.
  610          CMP R2,#2
  620          LDRLTB R3,[R0],#1
  630          STRLTB R3,[R1],#1
  640          SUBLT R12,R12,#1
  650          CMP R2,#1
  660          LDRLTB R3,[R0],#1
  670          STRLTB R3,[R1],#1
  680          SUBLT R12,R12,#1
  690
  700          ; Load 1 to make us aligned...
  710          LDRB R10,[R0],#1
  720          MOV R10,R10,ASL#24
  730
  740          ; Move line left.
  750          ; Source now aligned...
  760          BIC    R3,R12,#31
  770          RSBS   R3,R3,#160
  780          ADD    R3,R3,R3,LSL#3
  790          ADDGE  PC,PC,R3,LSR#2    ;(32>>2=8)
  800          B error
  810]:FOR l%=0 TO 4:[OPT pass%
  820          MOV R2,R10,LSR#24
  830          LDMIA R0!,{R3-R10}
  840          ORR R2,R2,R3,ASL#8
  850          MOV R3,R3,LSR#24
  860          ORR R3,R3,R4,ASL#8
  870          MOV R4,R4,LSR#24
  880          ORR R4,R4,R5,ASL#8
  890          MOV R5,R5,LSR#24
  900          ORR R5,R5,R6,ASL#8
  910          MOV R6,R6,LSR#24
  920          ORR R6,R6,R7,ASL#8
  930          MOV R7,R7,LSR#24
  940          ORR R7,R7,R8,ASL#8
  950          MOV R8,R8,LSR#24
  960          ORR R8,R8,R9,ASL#8
  970          MOV R9,R9,LSR#24
  980          ORR R9,R9,R10,ASL#8
  990          STMIA R1!,{R2-R9}
 1000]:NEXT:[OPT pass%
 1010
 1020          TST R12,#16
 1030          MOVNE R6,R10,LSR#24
 1040          LDMNEIA R0!,{R7-R10}
 1050          ORRNE R6,R6,R7,ASL#8
 1060          MOVNE R7,R7,LSR#24
 1070          ORRNE R7,R7,R8,ASL#8
 1080          MOVNE R8,R8,LSR#24
 1090          ORRNE R8,R8,R9,ASL#8
 1100          MOVNE R9,R9,LSR#24
 1110          ORRNE R9,R9,R10,ASL#8
 1120          STMNEIA R1!,{R6-R9}
 1130
 1140          TST R12,#8
 1150          MOVNE R8,R10,LSR#24
 1160          LDMNEIA R0!,{R9-R10}
 1170          ORRNE R8,R8,R9,ASL#8
 1180          MOVNE R9,R9,LSR#24
 1190          ORRNE R9,R9,R10,ASL#8
 1200          STMNEIA R1!,{R8-R9}
 1210
 1220          TST R12,#4
 1230          MOVNE R9,R10,LSR#24
 1240          LDRNE R10,[R0],#4
 1250          ORRNE R9,R9,R10,ASL#8
 1260          STRNE R9,[R1],#4
 1270
 1280          MOV R9,R10,LSR#24
 1290
 1300          TST R12,#2
 1310          STRNEB R9,[R1],#1
 1320          LDRNEB R9,[R0],#1
 1330          STRNEB R9,[R1],#1
 1340          LDRNEB R9,[R0],#1
 1350          
 1360          TST R12,#1
 1370          STRNEB R9,[R1],#1
 1380          MOVS PC,R14
 1390
 1400.rloffsetmod4is2
 1410          ; First, align source to 2 before a word
 1420          AND R2,R0,#3
 1430          CMP R2,#3            ;if off by 0, move 2.
 1440          LDREQB R3,[R0],#1    ;if off by 1, move 1.
 1450          STREQB R3,[R1],#1    ;if off by 2, move 0.
 1460          SUBEQ R12,R12,#1     ;if off by 3, move 3.
 1470          CMP R2,#2
 1480          LDRNEB R3,[R0],#1
 1490          STRNEB R3,[R1],#1
 1500          SUBNE R12,R12,#1
 1510          CMP R2,#0
 1520          CMPNE R2,#3
 1530          LDREQB R3,[R0],#1
 1540          STREQB R3,[R1],#1
 1550          SUBEQ R12,R12,#1
 1560
 1570          ; Load 2 to make us aligned...
 1580          LDRB R10,[R0],#1
 1590          LDRB R9,[R0],#1
 1600          ORR R10,R10,R9,ASL#8
 1610          MOV R10,R10,ASL#16
 1620          
 1630          ; Move line left.
 1640          ; Source now aligned...
 1650          BIC    R3,R12,#31
 1660          RSBS   R3,R3,#160
 1670          ADD    R3,R3,R3,ASL#3
 1680          ADDGE  PC,PC,R3,LSR#2    ;(32>>2=8)
 1690          B error
 1700]:FOR l%=0 TO 4:[OPT pass%
 1710          MOV R2,R10,LSR#16
 1720          LDMIA R0!,{R3-R10}
 1730          ORR R2,R2,R3,ASL#16
 1740          MOV R3,R3,LSR#16
 1750          ORR R3,R3,R4,ASL#16
 1760          MOV R4,R4,LSR#16
 1770          ORR R4,R4,R5,ASL#16
 1780          MOV R5,R5,LSR#16
 1790          ORR R5,R5,R6,ASL#16
 1800          MOV R6,R6,LSR#16
 1810          ORR R6,R6,R7,ASL#16
 1820          MOV R7,R7,LSR#16
 1830          ORR R7,R7,R8,ASL#16
 1840          MOV R8,R8,LSR#16
 1850          ORR R8,R8,R9,ASL#16
 1860          MOV R9,R9,LSR#16
 1870          ORR R9,R9,R10,ASL#16
 1880          STMIA R1!,{R2-R9}
 1890]:NEXT:[OPT pass%
 1900          TST R12,#16
 1910          MOVNE R6,R10,LSR#16
 1920          LDMNEIA R0!,{R7-R10}
 1930          ORRNE R6,R6,R7,ASL#16
 1940          MOVNE R7,R7,LSR#16
 1950          ORRNE R7,R7,R8,ASL#16
 1960          MOVNE R8,R8,LSR#16
 1970          ORRNE R8,R8,R9,ASL#16
 1980          MOVNE R9,R9,LSR#16
 1990          ORRNE R9,R9,R10,ASL#16
 2000          STMNEIA R1!,{R6-R9}
 2010
 2020          TST R12,#8
 2030          MOVNE R8,R10,LSR#16
 2040          LDMNEIA R0!,{R9-R10}
 2050          ORRNE R8,R8,R9,ASL#16
 2060          MOVNE R9,R9,LSR#16
 2070          ORRNE R9,R9,R10,ASL#16
 2080          STMNEIA R1!,{R8-R9}
 2090
 2100          TST R12,#4
 2110          MOVNE R9,R10,LSR#16
 2120          LDRNE R10,[R0],#4
 2130          ORRNE R9,R9,R10,ASL#16
 2140          STRNE R9,[R1],#4
 2150
 2160          MOV R9,R10,LSR#16
 2170
 2180          TST R12,#2
 2190          STRNEB R9,[R1],#1
 2200          MOVNE R9,R9,LSR#8
 2210          STRNEB R9,[R1],#1
 2220          TSTNE R12,#1
 2230          LDRNEB R9,[R0],#1
 2240          
 2250          TST R12,#1
 2260          STRNEB R9,[R1],#1
 2270          MOVS PC,R14
 2280
 2290.rloffsetmod4is3
 2300          ; First, align source to 3 before a word
 2310          AND R2,R0,#3
 2320          CMP R2,#2            ;if off by 0, move 1.
 2330          LDREQB R3,[R0],#1    ;if off by 1, move 0.
 2340          STREQB R3,[R1],#1    ;if off by 2, move 3.
 2350          SUBEQ R12,R12,#1     ;if off by 3, move 2.
 2360          LDRGEB R3,[R0],#1
 2370          STRGEB R3,[R1],#1
 2380          SUBGE R12,R12,#1
 2390          CMP R2,#1
 2400          LDRNEB R3,[R0],#1
 2410          STRNEB R3,[R1],#1
 2420          SUBNE R12,R12,#1
 2430
 2440          ; Load 1 to make us aligned...
 2450          LDRB R10,[R0],#1
 2460          LDRB R9,[R0],#1
 2470          ORR R10,R10,R9,ASL#8
 2480          LDRB R9,[R0],#1
 2490          ORR R10,R10,R9,ASL#16
 2500          MOV R10,R10,ASL#8
 2510
 2520          ; Move line left.
 2530          ; Source now aligned...
 2540          BIC    R3,R12,#31
 2550          RSBS   R3,R3,#160
 2560          ADD    R3,R3,R3,LSL#3
 2570          ADDGE  PC,PC,R3,LSR#2    ;(32>>2=8)
 2580          B error
 2590]:FOR l%=0 TO 4:[OPT pass%
 2600          MOV R2,R10,LSR#8
 2610          LDMIA R0!,{R3-R10}
 2620          ORR R2,R2,R3,ASL#24
 2630          MOV R3,R3,LSR#8
 2640          ORR R3,R3,R4,ASL#24
 2650          MOV R4,R4,LSR#8
 2660          ORR R4,R4,R5,ASL#24
 2670          MOV R5,R5,LSR#8
 2680          ORR R5,R5,R6,ASL#24
 2690          MOV R6,R6,LSR#8
 2700          ORR R6,R6,R7,ASL#24
 2710          MOV R7,R7,LSR#8
 2720          ORR R7,R7,R8,ASL#24
 2730          MOV R8,R8,LSR#8
 2740          ORR R8,R8,R9,ASL#24
 2750          MOV R9,R9,LSR#8
 2760          ORR R9,R9,R10,ASL#24
 2770          STMIA R1!,{R2-R9}
 2780]:NEXT:[OPT pass%
 2790
 2800          TST R12,#16
 2810          MOVNE R6,R10,LSR#8
 2820          LDMNEIA R0!,{R7-R10}
 2830          ORRNE R6,R6,R7,ASL#24
 2840          MOVNE R7,R7,LSR#8
 2850          ORRNE R7,R7,R8,ASL#24
 2860          MOVNE R8,R8,LSR#8
 2870          ORRNE R8,R8,R9,ASL#24
 2880          MOVNE R9,R9,LSR#8
 2890          ORRNE R9,R9,R10,ASL#24
 2900          STMNEIA R1!,{R6-R9}
 2910
 2920          TST R12,#8
 2930          MOVNE R8,R10,LSR#8
 2940          LDMNEIA R0!,{R9-R10}
 2950          ORRNE R8,R8,R9,ASL#24
 2960          MOVNE R9,R9,LSR#8
 2970          ORRNE R9,R9,R10,ASL#24
 2980          STMNEIA R1!,{R8-R9}
 2990
 3000          TST R12,#4
 3010          MOVNE R9,R10,LSR#8
 3020          LDRNE R10,[R0],#4
 3030          ORRNE R9,R9,R10,ASL#24
 3040          STRNE R9,[R1],#4
 3050
 3060          MOV R9,R10,LSR#8
 3070
 3080          TST R12,#2
 3090          STRNEB R9,[R1],#1
 3100          MOVNE R9,R9,LSR#8
 3110          STRNEB R9,[R1],#1
 3120          MOVNE R9,R9,LSR#8
 3130          
 3140          TST R12,#1
 3150          STRNEB R9,[R1],#1
 3160.error
 3170          MOVS PC,R14
 3180                    
 3190.lroffsetmod4is0
 3200          ; We are moving from word boundary to word boundary.
 3210          ADD R0,R0,R12
 3220          ADD R1,R1,R12
 3230          ; First, align source to a word
 3240          TST R0,#1
 3250          LDRNEB R2,[R0,#-1]!
 3260          STRNEB R2,[R1,#-1]!
 3270          SUBNE R12,R12,#1
 3280          TST R0,#2
 3290          LDRNEB R2,[R0,#-1]!
 3300          STRNEB R2,[R1,#-1]!
 3310          LDRNEB R2,[R0,#-1]!
 3320          STRNEB R2,[R1,#-1]!
 3330          SUBNE R12,R12,#2
 3340          ; Move line right.
 3350          BIC    R2,R12,#31
 3360          RSBS   R2,R2,#320
 3370          ADDGE  PC,PC,R2,LSR#2    ;(32>>2=8)
 3380          B error
 3390          LDMDB R0!,{R2-R9}  ;1
 3400          STMDB R1!,{R2-R9}
 3410          LDMDB R0!,{R2-R9}  ;2
 3420          STMDB R1!,{R2-R9}
 3430          LDMDB R0!,{R2-R9}  ;3
 3440          STMDB R1!,{R2-R9}
 3450          LDMDB R0!,{R2-R9}  ;4
 3460          STMDB R1!,{R2-R9}
 3470          LDMDB R0!,{R2-R9}  ;5
 3480          STMDB R1!,{R2-R9}
 3490          LDMDB R0!,{R2-R9}  ;1
 3500          STMDB R1!,{R2-R9}
 3510          LDMDB R0!,{R2-R9}  ;2
 3520          STMDB R1!,{R2-R9}
 3530          LDMDB R0!,{R2-R9}  ;3
 3540          STMDB R1!,{R2-R9}
 3550          LDMDB R0!,{R2-R9}  ;4
 3560          STMDB R1!,{R2-R9}
 3570          LDMDB R0!,{R2-R9}  ;5
 3580          STMDB R1!,{R2-R9}
 3590          TST R12,#16
 3600          LDMNEDB R0!,{R2-R5}
 3610          STMNEDB R1!,{R2-R5}
 3620          TST R12,#8
 3630          LDMNEDB R0!,{R2-R3}
 3640          STMNEDB R1!,{R2-R3}
 3650          TST R12,#4
 3660          LDRNE R2,[R0,#-4]!
 3670          STRNE R2,[R1,#-4]!
 3680          TST R12,#2
 3690          LDRNEB R2,[R0,#-1]!
 3700          STRNEB R2,[R1,#-1]!
 3710          LDRNEB R2,[R0,#-1]!
 3720          STRNEB R2,[R1,#-1]!
 3730          TST R12,#1
 3740          LDRNEB R2,[R0,#-1]!
 3750          STRNEB R2,[R1,#-1]!
 3760          MOVS PC,R14
 3770
 3780.lroffsetmod4is3
 3790          ADD R0,R0,R12
 3800          ADD R1,R1,R12
 3810          ; First, align source to 1 before a word
 3820          AND R2,R0,#3
 3830          CMP R2,#0             ;if off by 0, move 3.
 3840          LDREQB R3,[R0,#-1]!   ;if off by 1, move 0.
 3850          STREQB R3,[R1,#-1]!   ;if off by 2, move 1.
 3860          SUBEQ  R12,R12,#1     ;if off by 3, move 2.
 3870          CMP R2,#1
 3880          LDRNEB R3,[R0,#-1]!
 3890          STRNEB R3,[R1,#-1]!
 3900          SUBNE  R12,R12,#1
 3910          CMP R2,#0
 3920          CMPNE R2,#3
 3930          LDREQB R3,[R0,#-1]!
 3940          STREQB R3,[R1,#-1]!
 3950          SUBEQ R12,R12,#1
 3960
 3970          ; Load 1 to make us aligned...
 3980          LDRB R2,[R0,#-1]!
 3990
 4000          ; Move line right.
 4010          ; Source now aligned...
 4020          BIC    R3,R12,#31
 4030          RSBS   R3,R3,#320
 4040          ADD    R3,R3,R3,LSL#3
 4050          ADDGE  PC,PC,R3,LSR#2    ;(32>>2=8)
 4060          B error
 4070]:FOR l%=0 TO 9:[OPT pass%
 4080          MOV R10,R2,LSL#24
 4090          LDMDB R0!,{R2-R9}
 4100          ORR R10,R10,R9,LSR#8
 4110          MOV R9,R9,LSL#24
 4120          ORR R9,R9,R8,LSR#8
 4130          MOV R8,R8,LSL#24
 4140          ORR R8,R8,R7,LSR#8
 4150          MOV R7,R7,LSL#24
 4160          ORR R7,R7,R6,LSR#8
 4170          MOV R6,R6,LSL#24
 4180          ORR R6,R6,R5,LSR#8
 4190          MOV R5,R5,LSL#24
 4200          ORR R5,R5,R4,LSR#8
 4210          MOV R4,R4,LSL#24
 4220          ORR R4,R4,R3,LSR#8
 4230          MOV R3,R3,LSL#24
 4240          ORR R3,R3,R2,LSR#8
 4250          STMDB R1!,{R3-R10}
 4260]:NEXT:[OPT pass%
 4270
 4280          TST R12,#16
 4290          MOVNE R6,R2,LSL#24
 4300          LDMNEDB R0!,{R2-R5}
 4310          ORRNE R6,R6,R5,LSR#8
 4320          MOVNE R5,R5,LSL#24
 4330          ORRNE R5,R5,R4,LSR#8
 4340          MOVNE R4,R4,LSL#24
 4350          ORRNE R4,R4,R3,LSR#8
 4360          MOVNE R3,R3,LSL#24
 4370          ORRNE R3,R3,R2,LSR#8
 4380          STMNEDB R1!,{R3-R6}
 4390
 4400          TST R12,#8
 4410          MOVNE R4,R2,LSL#24
 4420          LDMNEDB R0!,{R2-R3}
 4430          ORRNE R4,R4,R3,LSR#8
 4440          MOVNE R3,R3,LSL#24
 4450          ORRNE R3,R3,R2,LSR#8
 4460          STMNEDB R1!,{R3-R4}
 4470
 4480          TST R12,#4
 4490          MOVNE R3,R2,LSL#24
 4500          LDRNE R2,[R0,#-4]!
 4510          ORRNE R3,R3,R2,LSR#8
 4520          STRNE R3,[R1,#-4]!
 4530
 4540          TST R12,#2
 4550          STRNEB R2,[R1,#-1]!
 4560          LDRNEB R2,[R0,#-1]!
 4570          STRNEB R2,[R1,#-1]!
 4580          
 4590          TST R12,#1
 4600          ;LDRNEB R2,[R0,#-1]!
 4610          STRNEB R2,[R1,#-1]!
 4620          MOVS PC,R14
 4630
 4640.lroffsetmod4is2
 4650          ADD R0,R0,R12
 4660          ADD R1,R1,R12
 4670          ; First, align source to 2 before a word
 4680          AND R2,R0,#3
 4690          CMP R2,#2            ;if off by 0, move 2.
 4700          LDRNEB R3,[R0,#-1]!  ;if off by 1, move 3.
 4710          STRNEB R3,[R1,#-1]!  ;if off by 2, move 0.
 4720          SUBNE R12,R12,#1     ;if off by 3, move 1.
 4730          LDRLTB R3,[R0,#-1]!
 4740          STRLTB R3,[R1,#-1]!
 4750          SUBLT R12,R12,#1
 4760          CMP R2,#1
 4770          LDREQB R3,[R0,#-1]!
 4780          STREQB R3,[R1,#-1]!
 4790          SUBEQ R12,R12,#1
 4800
 4810          ; Load 2 to make us aligned...
 4820          LDRB R10,[R0,#-1]!
 4830          LDRB R9,[R0,#-1]!
 4840          ORR R2,R9,R10,ASL#8
 4850          
 4860          ; Move line left.
 4870          ; Source now aligned...
 4880          BIC    R3,R12,#31
 4890          RSBS   R3,R3,#320
 4900          ADD    R3,R3,R3,LSL#3
 4910          ADDGE  PC,PC,R3,LSR#2    ;(32>>2=8)
 4920          B error
 4930]:FOR l%=0 TO 9:[OPT pass%
 4940          MOV R10,R2,LSL#16
 4950          LDMDB R0!,{R2-R9}
 4960          ORR R10,R10,R9,LSR#16
 4970          MOV R9,R9,LSL#16
 4980          ORR R9,R9,R8,LSR#16
 4990          MOV R8,R8,LSL#16
 5000          ORR R8,R8,R7,LSR#16
 5010          MOV R7,R7,LSL#16
 5020          ORR R7,R7,R6,LSR#16
 5030          MOV R6,R6,LSL#16
 5040          ORR R6,R6,R5,LSR#16
 5050          MOV R5,R5,LSL#16
 5060          ORR R5,R5,R4,LSR#16
 5070          MOV R4,R4,LSL#16
 5080          ORR R4,R4,R3,LSR#16
 5090          MOV R3,R3,LSL#16
 5100          ORR R3,R3,R2,LSR#16
 5110          STMDB R1!,{R3-R10}
 5120]:NEXT:[OPT pass%
 5130
 5140          TST R12,#16
 5150          MOVNE R6,R2,LSL#16
 5160          LDMNEDB R0!,{R2-R5}
 5170          ORRNE R6,R6,R5,LSR#16
 5180          MOVNE R5,R5,LSL#16
 5190          ORRNE R5,R5,R4,LSR#16
 5200          MOVNE R4,R4,LSL#16
 5210          ORRNE R4,R4,R3,LSR#16
 5220          MOVNE R3,R3,LSL#16
 5230          ORRNE R3,R3,R2,LSR#16
 5240          STMNEDB R1!,{R3-R6}
 5250
 5260          TST R12,#8
 5270          MOVNE R4,R2,ASL#16
 5280          LDMNEDB R0!,{R2-R3}
 5290          ORRNE R4,R4,R3,LSR#16
 5300          MOVNE R3,R3,ASL#16
 5310          ORRNE R3,R3,R2,LSR#16
 5320          STMNEDB R1!,{R3-R4}
 5330
 5340          TST R12,#4
 5350          MOVNE R3,R2,ASL#16
 5360          LDRNE R2,[R0,#-4]!
 5370          ORRNE R3,R3,R2,LSR#16
 5380          STRNE R3,[R1,#-4]!
 5390
 5400          MOV    R2,R2,ROR#8
 5410          TST R12,#2
 5420          STRNEB R2,[R1,#-1]!
 5430          MOVNE  R2,R2,ROR#24
 5440          STRNEB R2,[R1,#-1]!
 5450          TSTNE R12,#1
 5460          LDRNEB R2,[R0,#-1]!
 5470
 5480          TST R12,#1
 5490          STRNEB R2,[R1,#-1]!
 5500          MOVS PC,R14
 5510
 5520.lroffsetmod4is1
 5530          ADD R0,R0,R12
 5540          ADD R1,R1,R12
 5550          ; First, align source to 3 after a word
 5560          AND R2,R0,#3
 5570          CMP R2,#2            ;if off by 0, move 1.
 5580          LDRLEB R3,[R0,#-1]!  ;if off by 1, move 2.
 5590          STRLEB R3,[R1,#-1]!  ;if off by 2, move 3.
 5600          SUBLE  R12,R12,#1    ;if off by 3, move 0.
 5610          LDREQB R3,[R0,#-1]!
 5620          STREQB R3,[R1,#-1]!
 5630          SUBEQ  R12,R12,#1
 5640          CMPNE  R2,#1
 5650          LDREQB R3,[R0,#-1]!
 5660          STREQB R3,[R1,#-1]!
 5670          SUBEQ  R12,R12,#1
 5680
 5690          ; Load 1 to make us aligned...
 5700          LDRB R10,[R0,#-1]!
 5710          LDRB R9,[R0,#-1]!
 5720          ORR R10,R9,R10,ASL#8
 5730          LDRB R9,[R0,#-1]!
 5740          ORR R2,R9,R10,ASL#8
 5750          
 5760          ; Move line right.
 5770          ; Source now aligned...
 5780          BIC    R3,R12,#31
 5790          RSBS   R3,R3,#320
 5800          ADD    R3,R3,R3,LSL#3
 5810          ADDGE  PC,PC,R3,LSR#2    ;(32>>2=8)
 5820          B error
 5830]:FOR l%=0 TO 9:[OPT pass%
 5840          MOV R10,R2,ASL#8
 5850          LDMDB R0!,{R2-R9}
 5860          ORR R10,R10,R9,LSR#24
 5870          MOV R9,R9,ASL#8
 5880          ORR R9,R9,R8,LSR#24
 5890          MOV R8,R8,ASL#8
 5900          ORR R8,R8,R7,LSR#24
 5910          MOV R7,R7,ASL#8
 5920          ORR R7,R7,R6,LSR#24
 5930          MOV R6,R6,ASL#8
 5940          ORR R6,R6,R5,LSR#24
 5950          MOV R5,R5,ASL#8
 5960          ORR R5,R5,R4,LSR#24
 5970          MOV R4,R4,ASL#8
 5980          ORR R4,R4,R3,LSR#24
 5990          MOV R3,R3,ASL#8
 6000          ORR R3,R3,R2,LSR#24
 6010          STMDB R1!,{R3-R10}
 6020]:NEXT:[OPT pass%
 6030
 6040          TST R12,#16
 6050          MOVNE R6,R2,ASL#8
 6060          LDMNEDB R0!,{R2-R5}
 6070          ORRNE R6,R6,R5,LSR#24
 6080          MOVNE R5,R5,ASL#8
 6090          ORRNE R5,R5,R4,LSR#24
 6100          MOVNE R4,R4,ASL#8
 6110          ORRNE R4,R4,R3,LSR#24
 6120          MOVNE R3,R3,ASL#8
 6130          ORRNE R3,R3,R2,LSR#24
 6140          STMNEDB R1!,{R3-R6}
 6150
 6160          TST R12,#8
 6170          MOVNE R4,R2,ASL#8
 6180          LDMNEDB R0!,{R2-R3}
 6190          ORRNE R4,R4,R3,LSR#24
 6200          MOVNE R3,R3,ASL#8
 6210          ORRNE R3,R3,R2,LSR#24
 6220          STMNEDB R1!,{R3-R4}
 6230
 6240          TST R12,#4
 6250          MOVNE R3,R2,ASL#8
 6260          LDRNE R2,[R0,#-4]!
 6270          ORRNE R3,R3,R2,LSR#24
 6280          STRNE R3,[R1,#-4]!
 6290
 6300          MOV R2,R2,ROR#16
 6310
 6320          TST R12,#2
 6330          STRNEB R2,[R1,#-1]!
 6340          MOVNE R2,R2,ROR#24
 6350          STRNEB R2,[R1,#-1]!
 6360          MOVNE R2,R2,ROR#24
 6370
 6380          TST R12,#1
 6390          STRNEB R2,[R1,#-1]!
 6400.error
 6410          MOVS PC,R14
 6420.small_copy
 6430          MOVS PC,R14
 6440.move_nw
 6450          ; On entry R0=src, R1=dest, R11 = height, R12=width
 6460          ;          R4=linelength
 6470          STMFD R13!,{R0-R12,R14}
 6480          LDR R2,[mem,#arc_screenstart]
 6490          ADD R0,R0,R2
 6500          ADD R1,R1,R2
 6510
 6520          MOV R2,R4
 6530          SUB R3,R1,R0
 6540          AND R3,R3,#3
 6550.move_nw_loop1
 6560          STMFD R13!,{R0-R3,R12}
 6570          ADD PC,PC,R3,LSL#3
 6580          EQUD 0
 6590          BL rloffsetmod4is0
 6600          B move_nw_skip
 6610          BL rloffsetmod4is1
 6620          B move_nw_skip
 6630          BL rloffsetmod4is2
 6640          B move_nw_skip
 6650          BL rloffsetmod4is3
 6660.move_nw_skip
 6670          LDMFD R13!,{R0-R3,R12}
 6680          ADD R0,R0,R2
 6690          ADD R1,R1,R2
 6700          SUBS R11,R11,#1
 6710          BGT move_nw_loop1
 6720          LDMFD R13!,{R0-R12,PC}^
 6730.move_ne
 6740          ; On entry R0=src, R1=dest, R11 = height, R12=width
 6750          STMFD R13!,{R0-R12,R14}
 6760          LDR R2,[mem,#arc_screenstart]
 6770          ADD R0,R0,R2
 6780          ADD R1,R1,R2
 6790
 6800          MOV R2,R4
 6810          SUBS R3,R1,R0
 6820          AND R3,R3,#3
 6830.move_ne_loop1
 6840          STMFD R13!,{R0-R3,R12}
 6850          ADD PC,PC,R3,LSL#3
 6860          EQUD 0
 6870          BL lroffsetmod4is0
 6880          B move_ne_skip
 6890          BL lroffsetmod4is1
 6900          B move_ne_skip
 6910          BL lroffsetmod4is2
 6920          B move_ne_skip
 6930          BL lroffsetmod4is3
 6940.move_ne_skip
 6950          LDMFD R13!,{R0-R3,R12}
 6960          ADD R0,R0,R2
 6970          ADD R1,R1,R2
 6980          SUBS R11,R11,#1
 6990          BGT move_ne_loop1
 7000.move_ne_end
 7010          LDMFD R13!,{R0-R12,PC}^
 7020.move_sw
 7030          ; On entry R0=src, R1=dest, R11 = height, R12=width
 7040          STMFD R13!,{R0-R12,R14}
 7050          LDR R3,[mem,#arc_screenstart]
 7060          MOV R2,R4
 7070          
 7080          MLA R3,R2,R11,R3    ; Offset to the bottom
 7090          SUB R3,R3,R2
 7100          ADD R0,R0,R3
 7110          ADD R1,R1,R3
 7120          
 7130          SUB R3,R1,R0
 7140          AND R3,R3,#3
 7150.move_sw_loop1
 7160          STMFD R13!,{R0-R3,R12}
 7170          ADD PC,PC,R3,LSL#3
 7180          EQUD 0
 7190          BL rloffsetmod4is0
 7200          B move_sw_skip
 7210          BL rloffsetmod4is1
 7220          B move_sw_skip
 7230          BL rloffsetmod4is2
 7240          B move_sw_skip
 7250          BL rloffsetmod4is3
 7260.move_sw_skip
 7270          LDMFD R13!,{R0-R3,R12}
 7280          SUB R0,R0,R2
 7290          SUB R1,R1,R2
 7300          SUBS R11,R11,#1
 7310          BGT move_sw_loop1
 7320          LDMFD R13!,{R0-R12,PC}^
 7330.move_se
 7340          ; On entry R0=src, R1=dest, R11 = height, R12=width
 7350          STMFD R13!,{R0-R12,R14}
 7360          LDR R3,[mem,#arc_screenstart]
 7370
 7380          MOV R2,R4
 7390
 7400          MLA R3,R2,R11,R3  ; Offset to the bottom
 7410          SUB R3,R3,R2
 7420          ADD R0,R0,R3
 7430          ADD R1,R1,R3
 7440
 7450          SUB R3,R1,R0
 7460          AND R3,R3,#3
 7470.move_se_loop1
 7480          STMFD R13!,{R0-R3,R12}
 7490          ADD PC,PC,R3,LSL#3
 7500          EQUD 0
 7510          BL lroffsetmod4is0
 7520          B move_se_skip
 7530          BL lroffsetmod4is1
 7540          B move_se_skip
 7550          BL lroffsetmod4is2
 7560          B move_se_skip
 7570          BL lroffsetmod4is3
 7580.move_se_skip
 7590          LDMFD R13!,{R0-R3,R12}
 7600          SUB R0,R0,R2
 7610          SUB R1,R1,R2
 7620          SUBS R11,R11,#1
 7630          BGT move_se_loop1
 7640          LDMFD R13!,{R0-R12,PC}^
 7650]
 7660=pass%
 7670:
 7680DEFFNdohardwarescroll
 7690[OPT p
 7700          ADR R13,hardware_scroll_stack_space_top-4
 7710          STMFD R13!,{R0-R12,R14}
 7720          ; CHECK IF MODE CHANGED????
 7730          ;LDRB R0,[mem,#lastmode]
 7750          ;CMP R0,#7
 7760          ;;CMPNE R0,#99
 7770          ;SWIEQ &100+ASC"P"
 7780          ;BEQ no_scroll_reqd
 7781          LDRB R0,[mem,#tamper]
 7782          CMP R0,#0
 7783          BNE no_scroll_reqd
 7790          
 7800          ; First get where the screen is...
 7810          LDRB R1,[mem,#crt_regs+13]
 7820          LDRB R0,[mem,#crt_regs+12]
 7830          AND R0,R0,#%1111
 7840          ADD R1,R1,R0,LSL#8
 7850
 7860          SUB R2,mem,#512 ; sheila
 7870          LDRB R2,[R2,#&20]
 7880          MOVS R2,R2,LSR#2
 7890
 7900          AND R2,R2,#7
 7910          ;Test for Mode 4
 7920          CMP   R2,#%000
 7930          CMPNE R2,#%010
 7940          MOVEQ R4,#160 ; 40
 7950          MOVEQ R5,#4 ; 1
 7960          ;Test for Mode 0
 7970          CMP   R2,#%011
 7980          CMPNE R2,#%111
 7990          MOVEQ R4,#80
 8000          MOVEQ R5,#1
 8010          ;Test for Mode 2
 8020          CMP   R2,#%101
 8030          MOVEQ R4,#320 ; 320
 8040          MOVEQ R5,#2 ; 4
 8050          ;Test for Mode 1
 8060          CMP   R2,#%100
 8070          CMPNE R2,#%110
 8080          MOVEQ R4,#80
 8090          MOVEQ R5,#1
 8100          ;Test for Mode 5
 8110          CMP   R2,#%001
 8120          MOVEQ R4,#160
 8130          MOVEQ R5,#4
 8140          
 8150          ; And then where it used to be
 8160          LDR R0,[mem,#screenstart_previous]
 8170          
 8180          ; If it hasn't moved then do nothing...
 8190          SUBS R0,R1,R0
 8200          SWIEQ &100+ASC"K"
 8210          BEQ no_scroll_reqd
 8220          STR R1,[mem,#screenstart_previous]
 8230          
 8240          LDRB R12,[mem,#crt_regs+1] ; horiz. chars
 8250          LDRB R11,[mem,#crt_regs+6] ; vert. chars
 8260          MUL R2,R12,R11
 8270          ADDLT R0,R2,R0
 8280          
 8290          CMP R0,R2
 8300          SWIGE &100+ASC"L"
 8310          BGE no_scroll_reqd
 8320          
 8330          CMP R12,#0
 8340          CMPNE R11,#0
 8350          SWIEQ &100+ASC"M"
 8360          BEQ no_scroll_reqd
 8370                    
 8380          ; So we have to do some scrolling...
 8390          ;R0=R0 MOD R12
 8400          ;R2=R0 DIV R12
 8410          ;R0 < R12*32
 8420          MOV R2,#0
 8430          CMP R0,R12,LSL#4
 8440          SUBGE R0,R0,R12,LSL#4
 8450          ADDGE R2,R2,#1<<4
 8460          CMP R0,R12,LSL#3
 8470          SUBGE R0,R0,R12,LSL#3
 8480          ADDGE R2,R2,#1<<3
 8490          CMP R0,R12,LSL#2
 8500          SUBGE R0,R0,R12,LSL#2
 8510          ADDGE R2,R2,#1<<2
 8520          CMP R0,R12,LSL#1
 8530          SUBGE R0,R0,R12,LSL#1
 8540          ADDGE R2,R2,#1<<1
 8550          CMP R0,R12
 8560          SUBGE R0,R0,R12
 8570          ADDGE R2,R2,#1
 8580
 8590          ; So now we want to scroll left/right by R0,
 8600          ; and up/down by R2
 8610
 8620          CMP R0,R12,ASR#1    ; HALf of screenful
 8630          ADDGE R2,R2,#1      ; which way
 8640          CMP R2,R11
 8650          SUBGE R2,R2,R11
 8660
 8670          ; By verification 0<=R0<R12
 8680          ;CMP R0,#0
 8690          ;SWILT &100+ASC"!"
 8700          ;CMP R0,R12
 8710          ;SWIGE &100+ASC"!"
 8720          ; By verification 0<=R2<R11
 8730          ;CMP R2,#0
 8740          ;SWILT &100+ASC"!"
 8750          ;CMP R2,R11
 8760          ;SWIGE &100+ASC"!"
 8770
 8780          CMP R0,R12,ASR#1
 8790          BGE must_scroll_w
 8800          ; We are definately moving eastwards
 8810          CMP R2,R11,ASR#1
 8820          BGT must_scroll_ne
 8830.must_scroll_se
 8840          ; We are definately moving SE, so call move_nw
 8850          ; We need R0=src, R1=dest, R11 = height, R12=width
 8860          ; R4 = linelength
 8870          ;SWI &100+ASC"S"
 8880          ;SWI &100+ASC"E"
 8890          ;SWI &100+ASC" "
 8900          ;R11=(R11-R2)*8
 8910          SUB R11,R11,R2
 8920          MOV R11,R11,LSL#3
 8930          ;R12=(R12-R0)*rowmult
 8940          SUB R12,R12,R0
 8950          MUL R12,R5,R12
 8960          ;R0=R0*R5+R2*linelen*8
 8970          MUL R2,R4,R2
 8980          MUL R0,R5,R0
 8990          ADD R0,R0,R2,LSL#3
 9000          MOV R1,#0
 9010          ;MOV R0,#4
 9020          ;MOV R11,#256
 9030          ;MOV R12,#320-4
 9040          ;SWI &100+ASC"!"
 9050          BL move_nw
 9060          B scroll_done
 9070          B no_scroll_reqd
 9080.must_scroll_ne
 9090          ; We are definately moving NE, so call move_sw
 9100          ; We need R0=src, R1=dest, R11 = height, R12=width
 9110          ; R4 = linelength
 9120          ;SWI &100+ASC"N"
 9130          ;SWI &100+ASC"E"
 9140          ;SWI &100+ASC" "
 9150          ;R1=(R11-R2)*linelen*8
 9160          SUB R1,R11,R2
 9170          MUL R1,R4,R1
 9180          MOV R1,R1,LSL#3
 9190          ;R11=R2*8
 9200          MOV R11,R2,LSL#3
 9210          ;R12=(R12-R0)*rowmult
 9220          SUB R12,R12,R0
 9230          MUL R12,R5,R12
 9240          ;R0=R0*R5
 9250          MUL R0,R5,R0
 9260          BL move_sw
 9270          B scroll_done
 9280          B no_scroll_reqd
 9290.must_scroll_w
 9300          CMP R2,R11,ASR#1
 9310          BGT must_scroll_nw
 9320.must_scroll_sw
 9330          ; We are definately moving SW, so call move_ne
 9340          ; We need R0=src, R1=dest, R11 = height, R12=width
 9350          ; R4 = linelength
 9360          ;SWI &100+ASC"S"
 9370          ;SWI &100+ASC"W"
 9380          ;SWI &100+ASC" "
 9390          ;R1=(R12-R0)*rowmult
 9400          SUB R1,R12,R0
 9410          MUL R1,R5,R1
 9420          ;R11=(R11-R2)*8
 9430          SUB R11,R11,R2
 9440          MOV R11,R11,LSL#3
 9450          ;R12=R0*rowmult
 9460          MUL R12,R0,R5
 9470          ;R0=R2*linelen*8
 9480          MUL R2,R4,R2
 9490          MOV R0,R2,LSL#3
 9500          BL move_ne
 9510          B scroll_done
 9520          B no_scroll_reqd
 9530.must_scroll_nw
 9540          ; We are definately moving NW, so call move_se
 9550          ; We need R0=src, R1=dest, R11 = height, R12=width
 9560          ; R4 = linelength
 9570          ;SWI &100+ASC"N"
 9580          ;SWI &100+ASC"W"
 9590          ;SWI &100+ASC" "
 9600          ADD R0,R0,#1
 9610          ;R1=(R11-R2)*linelen*8+(R12-R0)*R5
 9620          SUB R1,R11,R2
 9630          MUL R1,R5,R1
 9640          SUB R12,R12,R0
 9650          MUL R12,R5,R12
 9660          ADD R1,R12,R1,LSL#3
 9670          ;R11=R2*8
 9680          MOV R11,R2,LSL#3
 9690          ;R12=R0*rowmult
 9700          MUL R12,R5,R0
 9710          ;R0=0
 9720          MOV R0,#0
 9730          BL move_se
 9740          B scroll_done
 9750          B no_scroll_reqd
 9760          
 9770.no_scroll_reqd
 9780          ;SWI &100+ASC"O"
 9790          LDMFD R13!,{R0-R12,PC}^
 9800.scroll_done
 9810          LDMFD R13!,{R0-R12,PC}^
 9820          ;LDR PC,this_is_getting_really_horrible
 9830]
 9840=p

� > HWScroll

ݤhardwarescroll
(� l%,pass%
2pass%=p
<[OPT pass%
F.rloffsetmod4is0
PB          ; We are moving from word boundary to word boundary.
Z-          ; First, align source to a word
d          TST R0,#1
n          LDRNEB R2,[R0],#1
x          STRNEB R2,[R1],#1
�          SUBNE R12,R12,#1
�          TST R0,#2
�          LDRNEB R2,[R0],#1
�          STRNEB R2,[R1],#1
�          LDRNEB R2,[R0],#1
�          STRNEB R2,[R1],#1
�          SUBNE R12,R12,#2
�          ; Move line left.
�          BIC   R2,R12,#31
�          RSBS  R2,R2,#160
�0          ADDGE PC,PC,R2,LSR#2    ;(32>>2=8)
�          B error
�#          LDMIA R0!,{R2-R9}  ;1
          STMIA R1!,{R2-R9}
#          LDMIA R0!,{R2-R9}  ;2
          STMIA R1!,{R2-R9}
"#          LDMIA R0!,{R2-R9}  ;3
,          STMIA R1!,{R2-R9}
6#          LDMIA R0!,{R2-R9}  ;4
@          STMIA R1!,{R2-R9}
J#          LDMIA R0!,{R2-R9}  ;5
T          STMIA R1!,{R2-R9}
^          TST R12,#16
h!          LDMNEIA R0!,{R2-R5}
r!          STMNEIA R1!,{R2-R5}
|          TST R12,#8
�!          LDMNEIA R0!,{R2-R3}
�!          STMNEIA R1!,{R2-R3}
�          TST R12,#4
�          LDRNE R2,[R0],#4
�          STRNE R2,[R1],#4
�          TST R12,#2
�          LDRNEB R2,[R0],#1
�          STRNEB R2,[R1],#1
�          LDRNEB R2,[R0],#1
�          STRNEB R2,[R1],#1
�          TST R12,#1
�          LDRNEB R2,[R0],#1
�          STRNEB R2,[R1],#1
          MOVS PC,R14

.rloffsetmod4is1
&6          ; First, align source to 1 before a word
0          � R2,R0,#3
:8          CMP R2,#3            ;if off by 0, move 3.
D8          LDRLTB R3,[R0],#1    ;if off by 1, move 2.
N8          STRLTB R3,[R1],#1    ;if off by 2, move 1.
X8          SUBLT R12,R12,#1     ;if off by 3, move 0.
b          CMP R2,#2
l          LDRLTB R3,[R0],#1
v          STRLTB R3,[R1],#1
�          SUBLT R12,R12,#1
�          CMP R2,#1
�          LDRLTB R3,[R0],#1
�          STRLTB R3,[R1],#1
�          SUBLT R12,R12,#1
�
�,          ; Load 1 to make us aligned...
�          LDRB R10,[R0],#1
�           MOV R10,R10,ASL#24
�
�          ; Move line left.
�%          ; Source now aligned...
�          BIC    R3,R12,#31
          RSBS   R3,R3,#160
#          ADD    R3,R3,R3,LSL#3
1          ADDGE  PC,PC,R3,LSR#2    ;(32>>2=8)
           B error
*]:� l%=0 � 4:[OPT pass%
4          MOV R2,R10,LSR#24
>           LDMIA R0!,{R3-R10}
H          �R R2,R2,R3,ASL#8
R          MOV R3,R3,LSR#24
\          �R R3,R3,R4,ASL#8
f          MOV R4,R4,LSR#24
p          �R R4,R4,R5,ASL#8
z          MOV R5,R5,LSR#24
�          �R R5,R5,R6,ASL#8
�          MOV R6,R6,LSR#24
�          �R R6,R6,R7,ASL#8
�          MOV R7,R7,LSR#24
�          �R R7,R7,R8,ASL#8
�          MOV R8,R8,LSR#24
�          �R R8,R8,R9,ASL#8
�          MOV R9,R9,LSR#24
�           �R R9,R9,R10,ASL#8
�          STMIA R1!,{R2-R9}
�]:�:[OPT pass%
�
�          TST R12,#16
!          MOVNE R6,R10,LSR#24
"          LDMNEIA R0!,{R7-R10}
!          �RNE R6,R6,R7,ASL#8
$           MOVNE R7,R7,LSR#24
.!          �RNE R7,R7,R8,ASL#8
8           MOVNE R8,R8,LSR#24
B!          �RNE R8,R8,R9,ASL#8
L           MOVNE R9,R9,LSR#24
V"          �RNE R9,R9,R10,ASL#8
`!          STMNEIA R1!,{R6-R9}
j
t          TST R12,#8
~!          MOVNE R8,R10,LSR#24
�"          LDMNEIA R0!,{R9-R10}
�!          �RNE R8,R8,R9,ASL#8
�           MOVNE R9,R9,LSR#24
�"          �RNE R9,R9,R10,ASL#8
�!          STMNEIA R1!,{R8-R9}
�
�          TST R12,#4
�!          MOVNE R9,R10,LSR#24
�          LDRNE R10,[R0],#4
�"          �RNE R9,R9,R10,ASL#8
�          STRNE R9,[R1],#4
�
          MOV R9,R10,LSR#24


          TST R12,#2
          STRNEB R9,[R1],#1
(          LDRNEB R9,[R0],#1
2          STRNEB R9,[R1],#1
<          LDRNEB R9,[R0],#1
F          
P          TST R12,#1
Z          STRNEB R9,[R1],#1
d          MOVS PC,R14
n
x.rloffsetmod4is2
�6          ; First, align source to 2 before a word
�          � R2,R0,#3
�8          CMP R2,#3            ;if off by 0, move 2.
�8          LDREQB R3,[R0],#1    ;if off by 1, move 1.
�8          STREQB R3,[R1],#1    ;if off by 2, move 0.
�8          SUBEQ R12,R12,#1     ;if off by 3, move 3.
�          CMP R2,#2
�          LDRNEB R3,[R0],#1
�          STRNEB R3,[R1],#1
�          SUBNE R12,R12,#1
�          CMP R2,#0
�          CMPNE R2,#3
�          LDREQB R3,[R0],#1
          STREQB R3,[R1],#1
          SUBEQ R12,R12,#1

",          ; Load 2 to make us aligned...
,          LDRB R10,[R0],#1
6          LDRB R9,[R0],#1
@!          �R R10,R10,R9,ASL#8
J           MOV R10,R10,ASL#16
T          
^          ; Move line left.
h%          ; Source now aligned...
r          BIC    R3,R12,#31
|          RSBS   R3,R3,#160
�#          ADD    R3,R3,R3,ASL#3
�1          ADDGE  PC,PC,R3,LSR#2    ;(32>>2=8)
�          B error
�]:� l%=0 � 4:[OPT pass%
�          MOV R2,R10,LSR#16
�           LDMIA R0!,{R3-R10}
�           �R R2,R2,R3,ASL#16
�          MOV R3,R3,LSR#16
�           �R R3,R3,R4,ASL#16
�          MOV R4,R4,LSR#16
�           �R R4,R4,R5,ASL#16
�          MOV R5,R5,LSR#16
�           �R R5,R5,R6,ASL#16
          MOV R6,R6,LSR#16
           �R R6,R6,R7,ASL#16
          MOV R7,R7,LSR#16
&           �R R7,R7,R8,ASL#16
0          MOV R8,R8,LSR#16
:           �R R8,R8,R9,ASL#16
D          MOV R9,R9,LSR#16
N!          �R R9,R9,R10,ASL#16
X          STMIA R1!,{R2-R9}
b]:�:[OPT pass%
l          TST R12,#16
v!          MOVNE R6,R10,LSR#16
�"          LDMNEIA R0!,{R7-R10}
�"          �RNE R6,R6,R7,ASL#16
�           MOVNE R7,R7,LSR#16
�"          �RNE R7,R7,R8,ASL#16
�           MOVNE R8,R8,LSR#16
�"          �RNE R8,R8,R9,ASL#16
�           MOVNE R9,R9,LSR#16
�#          �RNE R9,R9,R10,ASL#16
�!          STMNEIA R1!,{R6-R9}
�
�          TST R12,#8
�!          MOVNE R8,R10,LSR#16
�"          LDMNEIA R0!,{R9-R10}
"          �RNE R8,R8,R9,ASL#16
           MOVNE R9,R9,LSR#16
#          �RNE R9,R9,R10,ASL#16
 !          STMNEIA R1!,{R8-R9}
*
4          TST R12,#4
>!          MOVNE R9,R10,LSR#16
H          LDRNE R10,[R0],#4
R#          �RNE R9,R9,R10,ASL#16
\          STRNE R9,[R1],#4
f
p          MOV R9,R10,LSR#16
z
�          TST R12,#2
�          STRNEB R9,[R1],#1
�          MOVNE R9,R9,LSR#8
�          STRNEB R9,[R1],#1
�          TSTNE R12,#1
�          LDRNEB R9,[R0],#1
�          
�          TST R12,#1
�          STRNEB R9,[R1],#1
�          MOVS PC,R14
�
�.rloffsetmod4is3
�6          ; First, align source to 3 before a word
	          � R2,R0,#3
	8          CMP R2,#2            ;if off by 0, move 1.
	8          LDREQB R3,[R0],#1    ;if off by 1, move 0.
	$8          STREQB R3,[R1],#1    ;if off by 2, move 3.
	.8          SUBEQ R12,R12,#1     ;if off by 3, move 2.
	8          LDRGEB R3,[R0],#1
	B          STRGEB R3,[R1],#1
	L          SUBGE R12,R12,#1
	V          CMP R2,#1
	`          LDRNEB R3,[R0],#1
	j          STRNEB R3,[R1],#1
	t          SUBNE R12,R12,#1
	~
	�,          ; Load 1 to make us aligned...
	�          LDRB R10,[R0],#1
	�          LDRB R9,[R0],#1
	�!          �R R10,R10,R9,ASL#8
	�          LDRB R9,[R0],#1
	�"          �R R10,R10,R9,ASL#16
	�          MOV R10,R10,ASL#8
	�
	�          ; Move line left.
	�%          ; Source now aligned...
	�          BIC    R3,R12,#31
	�          RSBS   R3,R3,#160
#          ADD    R3,R3,R3,LSL#3

1          ADDGE  PC,PC,R3,LSR#2    ;(32>>2=8)
          B error
]:� l%=0 � 4:[OPT pass%
(          MOV R2,R10,LSR#8
2           LDMIA R0!,{R3-R10}
<           �R R2,R2,R3,ASL#24
F          MOV R3,R3,LSR#8
P           �R R3,R3,R4,ASL#24
Z          MOV R4,R4,LSR#8
d           �R R4,R4,R5,ASL#24
n          MOV R5,R5,LSR#8
x           �R R5,R5,R6,ASL#24
�          MOV R6,R6,LSR#8
�           �R R6,R6,R7,ASL#24
�          MOV R7,R7,LSR#8
�           �R R7,R7,R8,ASL#24
�          MOV R8,R8,LSR#8
�           �R R8,R8,R9,ASL#24
�          MOV R9,R9,LSR#8
�!          �R R9,R9,R10,ASL#24
�          STMIA R1!,{R2-R9}
�]:�:[OPT pass%
�
�          TST R12,#16
�           MOVNE R6,R10,LSR#8
"          LDMNEIA R0!,{R7-R10}
"          �RNE R6,R6,R7,ASL#24
          MOVNE R7,R7,LSR#8
""          �RNE R7,R7,R8,ASL#24
,          MOVNE R8,R8,LSR#8
6"          �RNE R8,R8,R9,ASL#24
@          MOVNE R9,R9,LSR#8
J#          �RNE R9,R9,R10,ASL#24
T!          STMNEIA R1!,{R6-R9}
^
h          TST R12,#8
r           MOVNE R8,R10,LSR#8
|"          LDMNEIA R0!,{R9-R10}
�"          �RNE R8,R8,R9,ASL#24
�          MOVNE R9,R9,LSR#8
�#          �RNE R9,R9,R10,ASL#24
�!          STMNEIA R1!,{R8-R9}
�
�          TST R12,#4
�           MOVNE R9,R10,LSR#8
�          LDRNE R10,[R0],#4
�#          �RNE R9,R9,R10,ASL#24
�          STRNE R9,[R1],#4
�
�          MOV R9,R10,LSR#8
�
          TST R12,#2
          STRNEB R9,[R1],#1
          MOVNE R9,R9,LSR#8
&          STRNEB R9,[R1],#1
0          MOVNE R9,R9,LSR#8
:          
D          TST R12,#1
N          STRNEB R9,[R1],#1
X
.error
b          MOVS PC,R14
l                    
v.lroffsetmod4is0
�B          ; We are moving from word boundary to word boundary.
�          ADD R0,R0,R12
�          ADD R1,R1,R12
�-          ; First, align source to a word
�          TST R0,#1
�!          LDRNEB R2,[R0,#-1]!
�!          STRNEB R2,[R1,#-1]!
�          SUBNE R12,R12,#1
�          TST R0,#2
�!          LDRNEB R2,[R0,#-1]!
�!          STRNEB R2,[R1,#-1]!
�!          LDRNEB R2,[R0,#-1]!
�!          STRNEB R2,[R1,#-1]!

          SUBNE R12,R12,#2

           ; Move line right.

          BIC    R2,R12,#31

           RSBS   R2,R2,#320

*1          ADDGE  PC,PC,R2,LSR#2    ;(32>>2=8)

4          B error

>#          LDMDB R0!,{R2-R9}  ;1

H          STMDB R1!,{R2-R9}

R#          LDMDB R0!,{R2-R9}  ;2

\          STMDB R1!,{R2-R9}

f#          LDMDB R0!,{R2-R9}  ;3

p          STMDB R1!,{R2-R9}

z#          LDMDB R0!,{R2-R9}  ;4

�          STMDB R1!,{R2-R9}

�#          LDMDB R0!,{R2-R9}  ;5

�          STMDB R1!,{R2-R9}

�#          LDMDB R0!,{R2-R9}  ;1

�          STMDB R1!,{R2-R9}

�#          LDMDB R0!,{R2-R9}  ;2

�          STMDB R1!,{R2-R9}

�#          LDMDB R0!,{R2-R9}  ;3

�          STMDB R1!,{R2-R9}

�#          LDMDB R0!,{R2-R9}  ;4

�          STMDB R1!,{R2-R9}

�#          LDMDB R0!,{R2-R9}  ;5

�          STMDB R1!,{R2-R9}
          TST R12,#16
!          LDMNEDB R0!,{R2-R5}
!          STMNEDB R1!,{R2-R5}
$          TST R12,#8
.!          LDMNEDB R0!,{R2-R3}
8!          STMNEDB R1!,{R2-R3}
B          TST R12,#4
L           LDRNE R2,[R0,#-4]!
V           STRNE R2,[R1,#-4]!
`          TST R12,#2
j!          LDRNEB R2,[R0,#-1]!
t!          STRNEB R2,[R1,#-1]!
~!          LDRNEB R2,[R0,#-1]!
�!          STRNEB R2,[R1,#-1]!
�          TST R12,#1
�!          LDRNEB R2,[R0,#-1]!
�!          STRNEB R2,[R1,#-1]!
�          MOVS PC,R14
�
�.lroffsetmod4is3
�          ADD R0,R0,R12
�          ADD R1,R1,R12
�6          ; First, align source to 1 before a word
�          � R2,R0,#3
�9          CMP R2,#0             ;if off by 0, move 3.
9          LDREQB R3,[R0,#-1]!   ;if off by 1, move 0.

9          STREQB R3,[R1,#-1]!   ;if off by 2, move 1.
9          SUBEQ  R12,R12,#1     ;if off by 3, move 2.
          CMP R2,#1
(!          LDRNEB R3,[R0,#-1]!
2!          STRNEB R3,[R1,#-1]!
<          SUBNE  R12,R12,#1
F          CMP R2,#0
P          CMPNE R2,#3
Z!          LDREQB R3,[R0,#-1]!
d!          STREQB R3,[R1,#-1]!
n          SUBEQ R12,R12,#1
x
�,          ; Load 1 to make us aligned...
�          LDRB R2,[R0,#-1]!
�
�           ; Move line right.
�%          ; Source now aligned...
�          BIC    R3,R12,#31
�          RSBS   R3,R3,#320
�#          ADD    R3,R3,R3,LSL#3
�1          ADDGE  PC,PC,R3,LSR#2    ;(32>>2=8)
�          B error
�]:� l%=0 � 9:[OPT pass%
�          MOV R10,R2,LSL#24
�          LDMDB R0!,{R2-R9}
!          �R R10,R10,R9,LSR#8
          MOV R9,R9,LSL#24
          �R R9,R9,R8,LSR#8
"          MOV R8,R8,LSL#24
,          �R R8,R8,R7,LSR#8
6          MOV R7,R7,LSL#24
@          �R R7,R7,R6,LSR#8
J          MOV R6,R6,LSL#24
T          �R R6,R6,R5,LSR#8
^          MOV R5,R5,LSL#24
h          �R R5,R5,R4,LSR#8
r          MOV R4,R4,LSL#24
|          �R R4,R4,R3,LSR#8
�          MOV R3,R3,LSL#24
�          �R R3,R3,R2,LSR#8
�           STMDB R1!,{R3-R10}
�]:�:[OPT pass%
�
�          TST R12,#16
�           MOVNE R6,R2,LSL#24
�!          LDMNEDB R0!,{R2-R5}
�!          �RNE R6,R6,R5,LSR#8
�           MOVNE R5,R5,LSL#24
�!          �RNE R5,R5,R4,LSR#8
�           MOVNE R4,R4,LSL#24
�!          �RNE R4,R4,R3,LSR#8
           MOVNE R3,R3,LSL#24
!          �RNE R3,R3,R2,LSR#8
!          STMNEDB R1!,{R3-R6}
&
0          TST R12,#8
:           MOVNE R4,R2,LSL#24
D!          LDMNEDB R0!,{R2-R3}
N!          �RNE R4,R4,R3,LSR#8
X           MOVNE R3,R3,LSL#24
b!          �RNE R3,R3,R2,LSR#8
l!          STMNEDB R1!,{R3-R4}
v
�          TST R12,#4
�           MOVNE R3,R2,LSL#24
�           LDRNE R2,[R0,#-4]!
�!          �RNE R3,R3,R2,LSR#8
�           STRNE R3,[R1,#-4]!
�
�          TST R12,#2
�!          STRNEB R2,[R1,#-1]!
�!          LDRNEB R2,[R0,#-1]!
�!          STRNEB R2,[R1,#-1]!
�          
�          TST R12,#1
�"          ;LDRNEB R2,[R0,#-1]!
!          STRNEB R2,[R1,#-1]!
          MOVS PC,R14

 .lroffsetmod4is2
*          ADD R0,R0,R12
4          ADD R1,R1,R12
>6          ; First, align source to 2 before a word
H          � R2,R0,#3
R8          CMP R2,#2            ;if off by 0, move 2.
\8          LDRNEB R3,[R0,#-1]!  ;if off by 1, move 3.
f8          STRNEB R3,[R1,#-1]!  ;if off by 2, move 0.
p8          SUBNE R12,R12,#1     ;if off by 3, move 1.
z!          LDRLTB R3,[R0,#-1]!
�!          STRLTB R3,[R1,#-1]!
�          SUBLT R12,R12,#1
�          CMP R2,#1
�!          LDREQB R3,[R0,#-1]!
�!          STREQB R3,[R1,#-1]!
�          SUBEQ R12,R12,#1
�
�,          ; Load 2 to make us aligned...
�           LDRB R10,[R0,#-1]!
�          LDRB R9,[R0,#-1]!
�           �R R2,R9,R10,ASL#8
�          
�          ; Move line left.
%          ; Source now aligned...
          BIC    R3,R12,#31
          RSBS   R3,R3,#320
$#          ADD    R3,R3,R3,LSL#3
.1          ADDGE  PC,PC,R3,LSR#2    ;(32>>2=8)
8          B error
B]:� l%=0 � 9:[OPT pass%
L          MOV R10,R2,LSL#16
V          LDMDB R0!,{R2-R9}
`"          �R R10,R10,R9,LSR#16
j          MOV R9,R9,LSL#16
t           �R R9,R9,R8,LSR#16
~          MOV R8,R8,LSL#16
�           �R R8,R8,R7,LSR#16
�          MOV R7,R7,LSL#16
�           �R R7,R7,R6,LSR#16
�          MOV R6,R6,LSL#16
�           �R R6,R6,R5,LSR#16
�          MOV R5,R5,LSL#16
�           �R R5,R5,R4,LSR#16
�          MOV R4,R4,LSL#16
�           �R R4,R4,R3,LSR#16
�          MOV R3,R3,LSL#16
�           �R R3,R3,R2,LSR#16
�           STMDB R1!,{R3-R10}
]:�:[OPT pass%


          TST R12,#16
           MOVNE R6,R2,LSL#16
(!          LDMNEDB R0!,{R2-R5}
2"          �RNE R6,R6,R5,LSR#16
<           MOVNE R5,R5,LSL#16
F"          �RNE R5,R5,R4,LSR#16
P           MOVNE R4,R4,LSL#16
Z"          �RNE R4,R4,R3,LSR#16
d           MOVNE R3,R3,LSL#16
n"          �RNE R3,R3,R2,LSR#16
x!          STMNEDB R1!,{R3-R6}
�
�          TST R12,#8
�           MOVNE R4,R2,ASL#16
�!          LDMNEDB R0!,{R2-R3}
�"          �RNE R4,R4,R3,LSR#16
�           MOVNE R3,R3,ASL#16
�"          �RNE R3,R3,R2,LSR#16
�!          STMNEDB R1!,{R3-R4}
�
�          TST R12,#4
�           MOVNE R3,R2,ASL#16
�           LDRNE R2,[R0,#-4]!
�"          �RNE R3,R3,R2,LSR#16
           STRNE R3,[R1,#-4]!

           MOV    R2,R2,ROR#8
"          TST R12,#2
,!          STRNEB R2,[R1,#-1]!
6!          MOVNE  R2,R2,ROR#24
@!          STRNEB R2,[R1,#-1]!
J          TSTNE R12,#1
T!          LDRNEB R2,[R0,#-1]!
^
h          TST R12,#1
r!          STRNEB R2,[R1,#-1]!
|          MOVS PC,R14
�
�.lroffsetmod4is1
�          ADD R0,R0,R12
�          ADD R1,R1,R12
�5          ; First, align source to 3 after a word
�          � R2,R0,#3
�8          CMP R2,#2            ;if off by 0, move 1.
�8          LDRLEB R3,[R0,#-1]!  ;if off by 1, move 2.
�8          STRLEB R3,[R1,#-1]!  ;if off by 2, move 3.
�8          SUBLE  R12,R12,#1    ;if off by 3, move 0.
�!          LDREQB R3,[R0,#-1]!
�!          STREQB R3,[R1,#-1]!
�          SUBEQ  R12,R12,#1
          CMPNE  R2,#1
!          LDREQB R3,[R0,#-1]!
!          STREQB R3,[R1,#-1]!
&          SUBEQ  R12,R12,#1
0
:,          ; Load 1 to make us aligned...
D           LDRB R10,[R0,#-1]!
N          LDRB R9,[R0,#-1]!
X!          �R R10,R9,R10,ASL#8
b          LDRB R9,[R0,#-1]!
l           �R R2,R9,R10,ASL#8
v          
�           ; Move line right.
�%          ; Source now aligned...
�          BIC    R3,R12,#31
�          RSBS   R3,R3,#320
�#          ADD    R3,R3,R3,LSL#3
�1          ADDGE  PC,PC,R3,LSR#2    ;(32>>2=8)
�          B error
�]:� l%=0 � 9:[OPT pass%
�          MOV R10,R2,ASL#8
�          LDMDB R0!,{R2-R9}
�"          �R R10,R10,R9,LSR#24
�          MOV R9,R9,ASL#8
�           �R R9,R9,R8,LSR#24
          MOV R8,R8,ASL#8
           �R R8,R8,R7,LSR#24
          MOV R7,R7,ASL#8
            �R R7,R7,R6,LSR#24
*          MOV R6,R6,ASL#8
4           �R R6,R6,R5,LSR#24
>          MOV R5,R5,ASL#8
H           �R R5,R5,R4,LSR#24
R          MOV R4,R4,ASL#8
\           �R R4,R4,R3,LSR#24
f          MOV R3,R3,ASL#8
p           �R R3,R3,R2,LSR#24
z           STMDB R1!,{R3-R10}
�]:�:[OPT pass%
�
�          TST R12,#16
�          MOVNE R6,R2,ASL#8
�!          LDMNEDB R0!,{R2-R5}
�"          �RNE R6,R6,R5,LSR#24
�          MOVNE R5,R5,ASL#8
�"          �RNE R5,R5,R4,LSR#24
�          MOVNE R4,R4,ASL#8
�"          �RNE R4,R4,R3,LSR#24
�          MOVNE R3,R3,ASL#8
�"          �RNE R3,R3,R2,LSR#24
�!          STMNEDB R1!,{R3-R6}

          TST R12,#8
          MOVNE R4,R2,ASL#8
$!          LDMNEDB R0!,{R2-R3}
."          �RNE R4,R4,R3,LSR#24
8          MOVNE R3,R3,ASL#8
B"          �RNE R3,R3,R2,LSR#24
L!          STMNEDB R1!,{R3-R4}
V
`          TST R12,#4
j          MOVNE R3,R2,ASL#8
t           LDRNE R2,[R0,#-4]!
~"          �RNE R3,R3,R2,LSR#24
�           STRNE R3,[R1,#-4]!
�
�          MOV R2,R2,ROR#16
�
�          TST R12,#2
�!          STRNEB R2,[R1,#-1]!
�           MOVNE R2,R2,ROR#24
�!          STRNEB R2,[R1,#-1]!
�           MOVNE R2,R2,ROR#24
�
�          TST R12,#1
�!          STRNEB R2,[R1,#-1]!

.error

          MOVS PC,R14
.small_copy
          MOVS PC,R14
(.move_nw
2A          ; On entry R0=src, R1=dest, R11 = height, R12=width
<&          ;          R4=linelength
F%          STMFD R13!,{R0-R12,R14}
P+          LDR R2,[mem,#arc_screenstart]
Z          ADD R0,R0,R2
d          ADD R1,R1,R2
n
x          MOV R2,R4
�          SUB R3,R1,R0
�          � R3,R3,#3
�.move_nw_loop1
�$          STMFD R13!,{R0-R3,R12}
�           ADD PC,PC,R3,LSL#3
�          EQUD 0
�           BL rloffsetmod4is0
�          B move_nw_skip
�           BL rloffsetmod4is1
�          B move_nw_skip
�           BL rloffsetmod4is2
�          B move_nw_skip
�           BL rloffsetmod4is3
.move_nw_skip
$          LDMFD R13!,{R0-R3,R12}
          ADD R0,R0,R2
"          ADD R1,R1,R2
,          SUBS R11,R11,#1
6          BGT move_nw_loop1
@%          LDMFD R13!,{R0-R12,PC}^
J.move_ne
TA          ; On entry R0=src, R1=dest, R11 = height, R12=width
^%          STMFD R13!,{R0-R12,R14}
h+          LDR R2,[mem,#arc_screenstart]
r          ADD R0,R0,R2
|          ADD R1,R1,R2
�
�          MOV R2,R4
�          SUBS R3,R1,R0
�          � R3,R3,#3
�.move_ne_loop1
�$          STMFD R13!,{R0-R3,R12}
�           ADD PC,PC,R3,LSL#3
�          EQUD 0
�           BL lroffsetmod4is0
�          B move_ne_skip
�           BL lroffsetmod4is1
�          B move_ne_skip
�           BL lroffsetmod4is2
          B move_ne_skip
           BL lroffsetmod4is3
.move_ne_skip
&$          LDMFD R13!,{R0-R3,R12}
0          ADD R0,R0,R2
:          ADD R1,R1,R2
D          SUBS R11,R11,#1
N          BGT move_ne_loop1
X.move_ne_end
b%          LDMFD R13!,{R0-R12,PC}^
l.move_sw
vA          ; On entry R0=src, R1=dest, R11 = height, R12=width
�%          STMFD R13!,{R0-R12,R14}
�+          LDR R3,[mem,#arc_screenstart]
�          MOV R2,R4
�          
�8          MLA R3,R2,R11,R3    ; Offset to the bottom
�          SUB R3,R3,R2
�          ADD R0,R0,R3
�          ADD R1,R1,R3
�          
�          SUB R3,R1,R0
�          � R3,R3,#3
�.move_sw_loop1
�$          STMFD R13!,{R0-R3,R12}
           ADD PC,PC,R3,LSL#3
          EQUD 0
           BL rloffsetmod4is0
           B move_sw_skip
*           BL rloffsetmod4is1
4          B move_sw_skip
>           BL rloffsetmod4is2
H          B move_sw_skip
R           BL rloffsetmod4is3
\.move_sw_skip
f$          LDMFD R13!,{R0-R3,R12}
p          SUB R0,R0,R2
z          SUB R1,R1,R2
�          SUBS R11,R11,#1
�          BGT move_sw_loop1
�%          LDMFD R13!,{R0-R12,PC}^
�.move_se
�A          ; On entry R0=src, R1=dest, R11 = height, R12=width
�%          STMFD R13!,{R0-R12,R14}
�+          LDR R3,[mem,#arc_screenstart]
�
�          MOV R2,R4
�
�6          MLA R3,R2,R11,R3  ; Offset to the bottom
�          SUB R3,R3,R2
�          ADD R0,R0,R3
          ADD R1,R1,R3

          SUB R3,R1,R0
$          � R3,R3,#3
..move_se_loop1
8$          STMFD R13!,{R0-R3,R12}
B           ADD PC,PC,R3,LSL#3
L          EQUD 0
V           BL lroffsetmod4is0
`          B move_se_skip
j           BL lroffsetmod4is1
t          B move_se_skip
~           BL lroffsetmod4is2
�          B move_se_skip
�           BL lroffsetmod4is3
�.move_se_skip
�$          LDMFD R13!,{R0-R3,R12}
�          SUB R0,R0,R2
�          SUB R1,R1,R2
�          SUBS R11,R11,#1
�          BGT move_se_loop1
�%          LDMFD R13!,{R0-R12,PC}^
�]
�
=pass%
�:
ݤdohardwarescroll


[OPT p
7          ADR R13,hardware_scroll_stack_space_top-4
%          STMFD R13!,{R0-R12,R14}
(%          ; CHECK � � CHANGED????
2&          ;LDRB R0,[mem,#lastmode]
F          ;CMP R0,#7
P          ;;CMPNE R0,#99
Z          ;SWIEQ &100+�"P"
d!          ;BEQ no_scroll_reqd
e#          LDRB R0,[mem,#tamper]
f          CMP R0,#0
g           BNE no_scroll_reqd
n          
x0          ; First get where the screen is...
�(          LDRB R1,[mem,#crt_regs+13]
�(          LDRB R0,[mem,#crt_regs+12]
�          � R0,R0,#%1111
�           ADD R1,R1,R0,LSL#8
�
�&          SUB R2,mem,#512 ; sheila
�          LDRB R2,[R2,#&20]
�          MOVS R2,R2,LSR#2
�
�          � R2,R2,#7
�          ;Test for Mode 4
�          CMP   R2,#%000
�          CMPNE R2,#%010
          �Q R4,#160 ; 40
          �Q R5,#4 ; 1
          ;Test for Mode 0
"          CMP   R2,#%011
,          CMPNE R2,#%111
6          �Q R4,#80
@          �Q R5,#1
J          ;Test for Mode 2
T          CMP   R2,#%101
^          �Q R4,#320 ; 320
h          �Q R5,#2 ; 4
r          ;Test for Mode 1
|          CMP   R2,#%100
�          CMPNE R2,#%110
�          �Q R4,#80
�          �Q R5,#1
�          ;Test for Mode 5
�          CMP   R2,#%001
�          �Q R4,#160
�          �Q R5,#4
�          
�,          ; And then where it used to be
�0          LDR R0,[mem,#screenstart_previous]
�          
�5          ; If it hasn't moved then do nothing...
�          SUBS R0,R1,R0
           SWIEQ &100+�"K"
            BEQ no_scroll_reqd
 0          STR R1,[mem,#screenstart_previous]
 &          
 07          LDRB R12,[mem,#crt_regs+1] ; horiz. chars
 :6          LDRB R11,[mem,#crt_regs+6] ; vert. chars
 D          MUL R2,R12,R11
 N          ADDLT R0,R2,R0
 X          
 b          CMP R0,R2
 l          SWIGE &100+�"L"
 v           BGE no_scroll_reqd
 �          
 �          CMP R12,#0
 �          CMPNE R11,#0
 �          SWIEQ &100+�"M"
 �           BEQ no_scroll_reqd
 �                    
 �2          ; So we have to do some scrolling...
 �          ;R0=R0 � R12
 �          ;R2=R0 � R12
 �          ;R0 < R12*32
 �          MOV R2,#0
 �          CMP R0,R12,LSL#4
 �#          SUBGE R0,R0,R12,LSL#4
!          ADDGE R2,R2,#1<<4
!          CMP R0,R12,LSL#3
!#          SUBGE R0,R0,R12,LSL#3
!           ADDGE R2,R2,#1<<3
!*          CMP R0,R12,LSL#2
!4#          SUBGE R0,R0,R12,LSL#2
!>          ADDGE R2,R2,#1<<2
!H          CMP R0,R12,LSL#1
!R#          SUBGE R0,R0,R12,LSL#1
!\          ADDGE R2,R2,#1<<1
!f          CMP R0,R12
!p          SUBGE R0,R0,R12
!z          ADDGE R2,R2,#1
!�
!�:          ; So now we want to scroll left/right by R0,
!�!          ; and up/down by R2
!�
!�5          CMP R0,R12,ASR#1    ; HALf of screenful
!�-          ADDGE R2,R2,#1      ; which way
!�          CMP R2,R11
!�          SUBGE R2,R2,R11
!�
!�)          ; By verification 0<=R0<R12
!�          ;CMP R0,#0
!�          ;SWILT &100+�"!"
!�          ;CMP R0,R12
"          ;SWIGE &100+�"!"
")          ; By verification 0<=R2<R11
"          ;CMP R2,#0
"$          ;SWILT &100+�"!"
".          ;CMP R2,R11
"8          ;SWIGE &100+�"!"
"B
"L          CMP R0,R12,ASR#1
"V          BGE must_scroll_w
"`2          ; We are definately moving eastwards
"j          CMP R2,R11,ASR#1
"t           BGT must_scroll_ne
"~.must_scroll_se
"�<          ; We are definately moving SE, so call move_nw
"�@          ; We need R0=src, R1=dest, R11 = height, R12=width
"�          ; R4 = linelength
"�          ;SWI &100+�"S"
"�          ;SWI &100+�"E"
"�          ;SWI &100+�" "
"�          ;R11=(R11-R2)*8
"�          SUB R11,R11,R2
"�          MOV R11,R11,LSL#3
"�#          ;R12=(R12-R0)*rowmult
"�          SUB R12,R12,R0
"�          MUL R12,R5,R12
#$          ;R0=R0*R5+R2*linelen*8
#
          MUL R2,R4,R2
#          MUL R0,R5,R0
#           ADD R0,R0,R2,LSL#3
#(          MOV R1,#0
#2          ;MOV R0,#4
#<          ;MOV R11,#256
#F          ;MOV R12,#320-4
#P          ;SWI &100+�"!"
#Z          BL move_nw
#d          B scroll_done
#n          B no_scroll_reqd
#x.must_scroll_ne
#�<          ; We are definately moving NE, so call move_sw
#�@          ; We need R0=src, R1=dest, R11 = height, R12=width
#�          ; R4 = linelength
#�          ;SWI &100+�"N"
#�          ;SWI &100+�"E"
#�          ;SWI &100+�" "
#�$          ;R1=(R11-R2)*linelen*8
#�          SUB R1,R11,R2
#�          MUL R1,R4,R1
#�          MOV R1,R1,LSL#3
#�          ;R11=R2*8
#�          MOV R11,R2,LSL#3
#�#          ;R12=(R12-R0)*rowmult
$          SUB R12,R12,R0
$          MUL R12,R5,R12
$          ;R0=R0*R5
$"          MUL R0,R5,R0
$,          BL move_sw
$6          B scroll_done
$@          B no_scroll_reqd
$J.must_scroll_w
$T          CMP R2,R11,ASR#1
$^           BGT must_scroll_nw
$h.must_scroll_sw
$r<          ; We are definately moving SW, so call move_ne
$|@          ; We need R0=src, R1=dest, R11 = height, R12=width
$�          ; R4 = linelength
$�          ;SWI &100+�"S"
$�          ;SWI &100+�"W"
$�          ;SWI &100+�" "
$�"          ;R1=(R12-R0)*rowmult
$�          SUB R1,R12,R0
$�          MUL R1,R5,R1
$�          ;R11=(R11-R2)*8
$�          SUB R11,R11,R2
$�          MOV R11,R11,LSL#3
$�          ;R12=R0*rowmult
$�          MUL R12,R0,R5
$�          ;R0=R2*linelen*8
%          MUL R2,R4,R2
%          MOV R0,R2,LSL#3
%          BL move_ne
%&          B scroll_done
%0          B no_scroll_reqd
%:.must_scroll_nw
%D<          ; We are definately moving NW, so call move_se
%N@          ; We need R0=src, R1=dest, R11 = height, R12=width
%X          ; R4 = linelength
%b          ;SWI &100+�"N"
%l          ;SWI &100+�"W"
%v          ;SWI &100+�" "
%�          ADD R0,R0,#1
%�0          ;R1=(R11-R2)*linelen*8+(R12-R0)*R5
%�          SUB R1,R11,R2
%�          MUL R1,R5,R1
%�          SUB R12,R12,R0
%�          MUL R12,R5,R12
%�!          ADD R1,R12,R1,LSL#3
%�          ;R11=R2*8
%�          MOV R11,R2,LSL#3
%�          ;R12=R0*rowmult
%�          MUL R12,R5,R0
%�          ;R0=0
%�          MOV R0,#0
&          BL move_se
&          B scroll_done
&          B no_scroll_reqd
&           
&*.no_scroll_reqd
&4          ;SWI &100+�"O"
&>%          LDMFD R13!,{R0-R12,PC}^
&H.scroll_done
&R%          LDMFD R13!,{R0-R12,PC}^
&\5          ;LDR PC,this_is_getting_really_horrible
&f]
&p=p
�
00000000  0d 00 0a 10 f4 20 3e 20  48 57 53 63 72 6f 6c 6c  |..... > HWScroll|
00000010  0d 00 14 04 0d 00 1e 14  dd a4 68 61 72 64 77 61  |..........hardwa|
00000020  72 65 73 63 72 6f 6c 6c  0d 00 28 0e ea 20 6c 25  |rescroll..(.. l%|
00000030  2c 70 61 73 73 25 0d 00  32 0b 70 61 73 73 25 3d  |,pass%..2.pass%=|
00000040  70 0d 00 3c 0e 5b 4f 50  54 20 70 61 73 73 25 0d  |p..<.[OPT pass%.|
00000050  00 46 14 2e 72 6c 6f 66  66 73 65 74 6d 6f 64 34  |.F..rloffsetmod4|
00000060  69 73 30 0d 00 50 42 20  20 20 20 20 20 20 20 20  |is0..PB         |
00000070  20 3b 20 57 65 20 61 72  65 20 6d 6f 76 69 6e 67  | ; We are moving|
00000080  20 66 72 6f 6d 20 77 6f  72 64 20 62 6f 75 6e 64  | from word bound|
00000090  61 72 79 20 74 6f 20 77  6f 72 64 20 62 6f 75 6e  |ary to word boun|
000000a0  64 61 72 79 2e 0d 00 5a  2d 20 20 20 20 20 20 20  |dary...Z-       |
000000b0  20 20 20 3b 20 46 69 72  73 74 2c 20 61 6c 69 67  |   ; First, alig|
000000c0  6e 20 73 6f 75 72 63 65  20 74 6f 20 61 20 77 6f  |n source to a wo|
000000d0  72 64 0d 00 64 17 20 20  20 20 20 20 20 20 20 20  |rd..d.          |
000000e0  54 53 54 20 52 30 2c 23  31 0d 00 6e 1f 20 20 20  |TST R0,#1..n.   |
000000f0  20 20 20 20 20 20 20 4c  44 52 4e 45 42 20 52 32  |       LDRNEB R2|
00000100  2c 5b 52 30 5d 2c 23 31  0d 00 78 1f 20 20 20 20  |,[R0],#1..x.    |
00000110  20 20 20 20 20 20 53 54  52 4e 45 42 20 52 32 2c  |      STRNEB R2,|
00000120  5b 52 31 5d 2c 23 31 0d  00 82 1e 20 20 20 20 20  |[R1],#1....     |
00000130  20 20 20 20 20 53 55 42  4e 45 20 52 31 32 2c 52  |     SUBNE R12,R|
00000140  31 32 2c 23 31 0d 00 8c  17 20 20 20 20 20 20 20  |12,#1....       |
00000150  20 20 20 54 53 54 20 52  30 2c 23 32 0d 00 96 1f  |   TST R0,#2....|
00000160  20 20 20 20 20 20 20 20  20 20 4c 44 52 4e 45 42  |          LDRNEB|
00000170  20 52 32 2c 5b 52 30 5d  2c 23 31 0d 00 a0 1f 20  | R2,[R0],#1.... |
00000180  20 20 20 20 20 20 20 20  20 53 54 52 4e 45 42 20  |         STRNEB |
00000190  52 32 2c 5b 52 31 5d 2c  23 31 0d 00 aa 1f 20 20  |R2,[R1],#1....  |
000001a0  20 20 20 20 20 20 20 20  4c 44 52 4e 45 42 20 52  |        LDRNEB R|
000001b0  32 2c 5b 52 30 5d 2c 23  31 0d 00 b4 1f 20 20 20  |2,[R0],#1....   |
000001c0  20 20 20 20 20 20 20 53  54 52 4e 45 42 20 52 32  |       STRNEB R2|
000001d0  2c 5b 52 31 5d 2c 23 31  0d 00 be 1e 20 20 20 20  |,[R1],#1....    |
000001e0  20 20 20 20 20 20 53 55  42 4e 45 20 52 31 32 2c  |      SUBNE R12,|
000001f0  52 31 32 2c 23 32 0d 00  c8 1f 20 20 20 20 20 20  |R12,#2....      |
00000200  20 20 20 20 3b 20 4d 6f  76 65 20 6c 69 6e 65 20  |    ; Move line |
00000210  6c 65 66 74 2e 0d 00 d2  1e 20 20 20 20 20 20 20  |left.....       |
00000220  20 20 20 42 49 43 20 20  20 52 32 2c 52 31 32 2c  |   BIC   R2,R12,|
00000230  23 33 31 0d 00 dc 1e 20  20 20 20 20 20 20 20 20  |#31....         |
00000240  20 52 53 42 53 20 20 52  32 2c 52 32 2c 23 31 36  | RSBS  R2,R2,#16|
00000250  30 0d 00 e6 30 20 20 20  20 20 20 20 20 20 20 41  |0...0          A|
00000260  44 44 47 45 20 50 43 2c  50 43 2c 52 32 2c 4c 53  |DDGE PC,PC,R2,LS|
00000270  52 23 32 20 20 20 20 3b  28 33 32 3e 3e 32 3d 38  |R#2    ;(32>>2=8|
00000280  29 0d 00 f0 15 20 20 20  20 20 20 20 20 20 20 42  |)....          B|
00000290  20 65 72 72 6f 72 0d 00  fa 23 20 20 20 20 20 20  | error...#      |
000002a0  20 20 20 20 4c 44 4d 49  41 20 52 30 21 2c 7b 52  |    LDMIA R0!,{R|
000002b0  32 2d 52 39 7d 20 20 3b  31 0d 01 04 1f 20 20 20  |2-R9}  ;1....   |
000002c0  20 20 20 20 20 20 20 53  54 4d 49 41 20 52 31 21  |       STMIA R1!|
000002d0  2c 7b 52 32 2d 52 39 7d  0d 01 0e 23 20 20 20 20  |,{R2-R9}...#    |
000002e0  20 20 20 20 20 20 4c 44  4d 49 41 20 52 30 21 2c  |      LDMIA R0!,|
000002f0  7b 52 32 2d 52 39 7d 20  20 3b 32 0d 01 18 1f 20  |{R2-R9}  ;2.... |
00000300  20 20 20 20 20 20 20 20  20 53 54 4d 49 41 20 52  |         STMIA R|
00000310  31 21 2c 7b 52 32 2d 52  39 7d 0d 01 22 23 20 20  |1!,{R2-R9}.."#  |
00000320  20 20 20 20 20 20 20 20  4c 44 4d 49 41 20 52 30  |        LDMIA R0|
00000330  21 2c 7b 52 32 2d 52 39  7d 20 20 3b 33 0d 01 2c  |!,{R2-R9}  ;3..,|
00000340  1f 20 20 20 20 20 20 20  20 20 20 53 54 4d 49 41  |.          STMIA|
00000350  20 52 31 21 2c 7b 52 32  2d 52 39 7d 0d 01 36 23  | R1!,{R2-R9}..6#|
00000360  20 20 20 20 20 20 20 20  20 20 4c 44 4d 49 41 20  |          LDMIA |
00000370  52 30 21 2c 7b 52 32 2d  52 39 7d 20 20 3b 34 0d  |R0!,{R2-R9}  ;4.|
00000380  01 40 1f 20 20 20 20 20  20 20 20 20 20 53 54 4d  |.@.          STM|
00000390  49 41 20 52 31 21 2c 7b  52 32 2d 52 39 7d 0d 01  |IA R1!,{R2-R9}..|
000003a0  4a 23 20 20 20 20 20 20  20 20 20 20 4c 44 4d 49  |J#          LDMI|
000003b0  41 20 52 30 21 2c 7b 52  32 2d 52 39 7d 20 20 3b  |A R0!,{R2-R9}  ;|
000003c0  35 0d 01 54 1f 20 20 20  20 20 20 20 20 20 20 53  |5..T.          S|
000003d0  54 4d 49 41 20 52 31 21  2c 7b 52 32 2d 52 39 7d  |TMIA R1!,{R2-R9}|
000003e0  0d 01 5e 19 20 20 20 20  20 20 20 20 20 20 54 53  |..^.          TS|
000003f0  54 20 52 31 32 2c 23 31  36 0d 01 68 21 20 20 20  |T R12,#16..h!   |
00000400  20 20 20 20 20 20 20 4c  44 4d 4e 45 49 41 20 52  |       LDMNEIA R|
00000410  30 21 2c 7b 52 32 2d 52  35 7d 0d 01 72 21 20 20  |0!,{R2-R5}..r!  |
00000420  20 20 20 20 20 20 20 20  53 54 4d 4e 45 49 41 20  |        STMNEIA |
00000430  52 31 21 2c 7b 52 32 2d  52 35 7d 0d 01 7c 18 20  |R1!,{R2-R5}..|. |
00000440  20 20 20 20 20 20 20 20  20 54 53 54 20 52 31 32  |         TST R12|
00000450  2c 23 38 0d 01 86 21 20  20 20 20 20 20 20 20 20  |,#8...!         |
00000460  20 4c 44 4d 4e 45 49 41  20 52 30 21 2c 7b 52 32  | LDMNEIA R0!,{R2|
00000470  2d 52 33 7d 0d 01 90 21  20 20 20 20 20 20 20 20  |-R3}...!        |
00000480  20 20 53 54 4d 4e 45 49  41 20 52 31 21 2c 7b 52  |  STMNEIA R1!,{R|
00000490  32 2d 52 33 7d 0d 01 9a  18 20 20 20 20 20 20 20  |2-R3}....       |
000004a0  20 20 20 54 53 54 20 52  31 32 2c 23 34 0d 01 a4  |   TST R12,#4...|
000004b0  1e 20 20 20 20 20 20 20  20 20 20 4c 44 52 4e 45  |.          LDRNE|
000004c0  20 52 32 2c 5b 52 30 5d  2c 23 34 0d 01 ae 1e 20  | R2,[R0],#4.... |
000004d0  20 20 20 20 20 20 20 20  20 53 54 52 4e 45 20 52  |         STRNE R|
000004e0  32 2c 5b 52 31 5d 2c 23  34 0d 01 b8 18 20 20 20  |2,[R1],#4....   |
000004f0  20 20 20 20 20 20 20 54  53 54 20 52 31 32 2c 23  |       TST R12,#|
00000500  32 0d 01 c2 1f 20 20 20  20 20 20 20 20 20 20 4c  |2....          L|
00000510  44 52 4e 45 42 20 52 32  2c 5b 52 30 5d 2c 23 31  |DRNEB R2,[R0],#1|
00000520  0d 01 cc 1f 20 20 20 20  20 20 20 20 20 20 53 54  |....          ST|
00000530  52 4e 45 42 20 52 32 2c  5b 52 31 5d 2c 23 31 0d  |RNEB R2,[R1],#1.|
00000540  01 d6 1f 20 20 20 20 20  20 20 20 20 20 4c 44 52  |...          LDR|
00000550  4e 45 42 20 52 32 2c 5b  52 30 5d 2c 23 31 0d 01  |NEB R2,[R0],#1..|
00000560  e0 1f 20 20 20 20 20 20  20 20 20 20 53 54 52 4e  |..          STRN|
00000570  45 42 20 52 32 2c 5b 52  31 5d 2c 23 31 0d 01 ea  |EB R2,[R1],#1...|
00000580  18 20 20 20 20 20 20 20  20 20 20 54 53 54 20 52  |.          TST R|
00000590  31 32 2c 23 31 0d 01 f4  1f 20 20 20 20 20 20 20  |12,#1....       |
000005a0  20 20 20 4c 44 52 4e 45  42 20 52 32 2c 5b 52 30  |   LDRNEB R2,[R0|
000005b0  5d 2c 23 31 0d 01 fe 1f  20 20 20 20 20 20 20 20  |],#1....        |
000005c0  20 20 53 54 52 4e 45 42  20 52 32 2c 5b 52 31 5d  |  STRNEB R2,[R1]|
000005d0  2c 23 31 0d 02 08 19 20  20 20 20 20 20 20 20 20  |,#1....         |
000005e0  20 4d 4f 56 53 20 50 43  2c 52 31 34 0d 02 12 04  | MOVS PC,R14....|
000005f0  0d 02 1c 14 2e 72 6c 6f  66 66 73 65 74 6d 6f 64  |.....rloffsetmod|
00000600  34 69 73 31 0d 02 26 36  20 20 20 20 20 20 20 20  |4is1..&6        |
00000610  20 20 3b 20 46 69 72 73  74 2c 20 61 6c 69 67 6e  |  ; First, align|
00000620  20 73 6f 75 72 63 65 20  74 6f 20 31 20 62 65 66  | source to 1 bef|
00000630  6f 72 65 20 61 20 77 6f  72 64 0d 02 30 18 20 20  |ore a word..0.  |
00000640  20 20 20 20 20 20 20 20  80 20 52 32 2c 52 30 2c  |        . R2,R0,|
00000650  23 33 0d 02 3a 38 20 20  20 20 20 20 20 20 20 20  |#3..:8          |
00000660  43 4d 50 20 52 32 2c 23  33 20 20 20 20 20 20 20  |CMP R2,#3       |
00000670  20 20 20 20 20 3b 69 66  20 6f 66 66 20 62 79 20  |     ;if off by |
00000680  30 2c 20 6d 6f 76 65 20  33 2e 0d 02 44 38 20 20  |0, move 3...D8  |
00000690  20 20 20 20 20 20 20 20  4c 44 52 4c 54 42 20 52  |        LDRLTB R|
000006a0  33 2c 5b 52 30 5d 2c 23  31 20 20 20 20 3b 69 66  |3,[R0],#1    ;if|
000006b0  20 6f 66 66 20 62 79 20  31 2c 20 6d 6f 76 65 20  | off by 1, move |
000006c0  32 2e 0d 02 4e 38 20 20  20 20 20 20 20 20 20 20  |2...N8          |
000006d0  53 54 52 4c 54 42 20 52  33 2c 5b 52 31 5d 2c 23  |STRLTB R3,[R1],#|
000006e0  31 20 20 20 20 3b 69 66  20 6f 66 66 20 62 79 20  |1    ;if off by |
000006f0  32 2c 20 6d 6f 76 65 20  31 2e 0d 02 58 38 20 20  |2, move 1...X8  |
00000700  20 20 20 20 20 20 20 20  53 55 42 4c 54 20 52 31  |        SUBLT R1|
00000710  32 2c 52 31 32 2c 23 31  20 20 20 20 20 3b 69 66  |2,R12,#1     ;if|
00000720  20 6f 66 66 20 62 79 20  33 2c 20 6d 6f 76 65 20  | off by 3, move |
00000730  30 2e 0d 02 62 17 20 20  20 20 20 20 20 20 20 20  |0...b.          |
00000740  43 4d 50 20 52 32 2c 23  32 0d 02 6c 1f 20 20 20  |CMP R2,#2..l.   |
00000750  20 20 20 20 20 20 20 4c  44 52 4c 54 42 20 52 33  |       LDRLTB R3|
00000760  2c 5b 52 30 5d 2c 23 31  0d 02 76 1f 20 20 20 20  |,[R0],#1..v.    |
00000770  20 20 20 20 20 20 53 54  52 4c 54 42 20 52 33 2c  |      STRLTB R3,|
00000780  5b 52 31 5d 2c 23 31 0d  02 80 1e 20 20 20 20 20  |[R1],#1....     |
00000790  20 20 20 20 20 53 55 42  4c 54 20 52 31 32 2c 52  |     SUBLT R12,R|
000007a0  31 32 2c 23 31 0d 02 8a  17 20 20 20 20 20 20 20  |12,#1....       |
000007b0  20 20 20 43 4d 50 20 52  32 2c 23 31 0d 02 94 1f  |   CMP R2,#1....|
000007c0  20 20 20 20 20 20 20 20  20 20 4c 44 52 4c 54 42  |          LDRLTB|
000007d0  20 52 33 2c 5b 52 30 5d  2c 23 31 0d 02 9e 1f 20  | R3,[R0],#1.... |
000007e0  20 20 20 20 20 20 20 20  20 53 54 52 4c 54 42 20  |         STRLTB |
000007f0  52 33 2c 5b 52 31 5d 2c  23 31 0d 02 a8 1e 20 20  |R3,[R1],#1....  |
00000800  20 20 20 20 20 20 20 20  53 55 42 4c 54 20 52 31  |        SUBLT R1|
00000810  32 2c 52 31 32 2c 23 31  0d 02 b2 04 0d 02 bc 2c  |2,R12,#1.......,|
00000820  20 20 20 20 20 20 20 20  20 20 3b 20 4c 6f 61 64  |          ; Load|
00000830  20 31 20 74 6f 20 6d 61  6b 65 20 75 73 20 61 6c  | 1 to make us al|
00000840  69 67 6e 65 64 2e 2e 2e  0d 02 c6 1e 20 20 20 20  |igned.......    |
00000850  20 20 20 20 20 20 4c 44  52 42 20 52 31 30 2c 5b  |      LDRB R10,[|
00000860  52 30 5d 2c 23 31 0d 02  d0 20 20 20 20 20 20 20  |R0],#1...       |
00000870  20 20 20 20 4d 4f 56 20  52 31 30 2c 52 31 30 2c  |    MOV R10,R10,|
00000880  41 53 4c 23 32 34 0d 02  da 04 0d 02 e4 1f 20 20  |ASL#24........  |
00000890  20 20 20 20 20 20 20 20  3b 20 4d 6f 76 65 20 6c  |        ; Move l|
000008a0  69 6e 65 20 6c 65 66 74  2e 0d 02 ee 25 20 20 20  |ine left....%   |
000008b0  20 20 20 20 20 20 20 3b  20 53 6f 75 72 63 65 20  |       ; Source |
000008c0  6e 6f 77 20 61 6c 69 67  6e 65 64 2e 2e 2e 0d 02  |now aligned.....|
000008d0  f8 1f 20 20 20 20 20 20  20 20 20 20 42 49 43 20  |..          BIC |
000008e0  20 20 20 52 33 2c 52 31  32 2c 23 33 31 0d 03 02  |   R3,R12,#31...|
000008f0  1f 20 20 20 20 20 20 20  20 20 20 52 53 42 53 20  |.          RSBS |
00000900  20 20 52 33 2c 52 33 2c  23 31 36 30 0d 03 0c 23  |  R3,R3,#160...#|
00000910  20 20 20 20 20 20 20 20  20 20 41 44 44 20 20 20  |          ADD   |
00000920  20 52 33 2c 52 33 2c 52  33 2c 4c 53 4c 23 33 0d  | R3,R3,R3,LSL#3.|
00000930  03 16 31 20 20 20 20 20  20 20 20 20 20 41 44 44  |..1          ADD|
00000940  47 45 20 20 50 43 2c 50  43 2c 52 33 2c 4c 53 52  |GE  PC,PC,R3,LSR|
00000950  23 32 20 20 20 20 3b 28  33 32 3e 3e 32 3d 38 29  |#2    ;(32>>2=8)|
00000960  0d 03 20 15 20 20 20 20  20 20 20 20 20 20 42 20  |.. .          B |
00000970  65 72 72 6f 72 0d 03 2a  1b 5d 3a e3 20 6c 25 3d  |error..*.]:. l%=|
00000980  30 20 b8 20 34 3a 5b 4f  50 54 20 70 61 73 73 25  |0 . 4:[OPT pass%|
00000990  0d 03 34 1f 20 20 20 20  20 20 20 20 20 20 4d 4f  |..4.          MO|
000009a0  56 20 52 32 2c 52 31 30  2c 4c 53 52 23 32 34 0d  |V R2,R10,LSR#24.|
000009b0  03 3e 20 20 20 20 20 20  20 20 20 20 20 4c 44 4d  |.>           LDM|
000009c0  49 41 20 52 30 21 2c 7b  52 33 2d 52 31 30 7d 0d  |IA R0!,{R3-R10}.|
000009d0  03 48 1f 20 20 20 20 20  20 20 20 20 20 84 52 20  |.H.          .R |
000009e0  52 32 2c 52 32 2c 52 33  2c 41 53 4c 23 38 0d 03  |R2,R2,R3,ASL#8..|
000009f0  52 1e 20 20 20 20 20 20  20 20 20 20 4d 4f 56 20  |R.          MOV |
00000a00  52 33 2c 52 33 2c 4c 53  52 23 32 34 0d 03 5c 1f  |R3,R3,LSR#24..\.|
00000a10  20 20 20 20 20 20 20 20  20 20 84 52 20 52 33 2c  |          .R R3,|
00000a20  52 33 2c 52 34 2c 41 53  4c 23 38 0d 03 66 1e 20  |R3,R4,ASL#8..f. |
00000a30  20 20 20 20 20 20 20 20  20 4d 4f 56 20 52 34 2c  |         MOV R4,|
00000a40  52 34 2c 4c 53 52 23 32  34 0d 03 70 1f 20 20 20  |R4,LSR#24..p.   |
00000a50  20 20 20 20 20 20 20 84  52 20 52 34 2c 52 34 2c  |       .R R4,R4,|
00000a60  52 35 2c 41 53 4c 23 38  0d 03 7a 1e 20 20 20 20  |R5,ASL#8..z.    |
00000a70  20 20 20 20 20 20 4d 4f  56 20 52 35 2c 52 35 2c  |      MOV R5,R5,|
00000a80  4c 53 52 23 32 34 0d 03  84 1f 20 20 20 20 20 20  |LSR#24....      |
00000a90  20 20 20 20 84 52 20 52  35 2c 52 35 2c 52 36 2c  |    .R R5,R5,R6,|
00000aa0  41 53 4c 23 38 0d 03 8e  1e 20 20 20 20 20 20 20  |ASL#8....       |
00000ab0  20 20 20 4d 4f 56 20 52  36 2c 52 36 2c 4c 53 52  |   MOV R6,R6,LSR|
00000ac0  23 32 34 0d 03 98 1f 20  20 20 20 20 20 20 20 20  |#24....         |
00000ad0  20 84 52 20 52 36 2c 52  36 2c 52 37 2c 41 53 4c  | .R R6,R6,R7,ASL|
00000ae0  23 38 0d 03 a2 1e 20 20  20 20 20 20 20 20 20 20  |#8....          |
00000af0  4d 4f 56 20 52 37 2c 52  37 2c 4c 53 52 23 32 34  |MOV R7,R7,LSR#24|
00000b00  0d 03 ac 1f 20 20 20 20  20 20 20 20 20 20 84 52  |....          .R|
00000b10  20 52 37 2c 52 37 2c 52  38 2c 41 53 4c 23 38 0d  | R7,R7,R8,ASL#8.|
00000b20  03 b6 1e 20 20 20 20 20  20 20 20 20 20 4d 4f 56  |...          MOV|
00000b30  20 52 38 2c 52 38 2c 4c  53 52 23 32 34 0d 03 c0  | R8,R8,LSR#24...|
00000b40  1f 20 20 20 20 20 20 20  20 20 20 84 52 20 52 38  |.          .R R8|
00000b50  2c 52 38 2c 52 39 2c 41  53 4c 23 38 0d 03 ca 1e  |,R8,R9,ASL#8....|
00000b60  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 52 39  |          MOV R9|
00000b70  2c 52 39 2c 4c 53 52 23  32 34 0d 03 d4 20 20 20  |,R9,LSR#24...   |
00000b80  20 20 20 20 20 20 20 20  84 52 20 52 39 2c 52 39  |        .R R9,R9|
00000b90  2c 52 31 30 2c 41 53 4c  23 38 0d 03 de 1f 20 20  |,R10,ASL#8....  |
00000ba0  20 20 20 20 20 20 20 20  53 54 4d 49 41 20 52 31  |        STMIA R1|
00000bb0  21 2c 7b 52 32 2d 52 39  7d 0d 03 e8 12 5d 3a ed  |!,{R2-R9}....]:.|
00000bc0  3a 5b 4f 50 54 20 70 61  73 73 25 0d 03 f2 04 0d  |:[OPT pass%.....|
00000bd0  03 fc 19 20 20 20 20 20  20 20 20 20 20 54 53 54  |...          TST|
00000be0  20 52 31 32 2c 23 31 36  0d 04 06 21 20 20 20 20  | R12,#16...!    |
00000bf0  20 20 20 20 20 20 4d 4f  56 4e 45 20 52 36 2c 52  |      MOVNE R6,R|
00000c00  31 30 2c 4c 53 52 23 32  34 0d 04 10 22 20 20 20  |10,LSR#24..."   |
00000c10  20 20 20 20 20 20 20 4c  44 4d 4e 45 49 41 20 52  |       LDMNEIA R|
00000c20  30 21 2c 7b 52 37 2d 52  31 30 7d 0d 04 1a 21 20  |0!,{R7-R10}...! |
00000c30  20 20 20 20 20 20 20 20  20 84 52 4e 45 20 52 36  |         .RNE R6|
00000c40  2c 52 36 2c 52 37 2c 41  53 4c 23 38 0d 04 24 20  |,R6,R7,ASL#8..$ |
00000c50  20 20 20 20 20 20 20 20  20 20 4d 4f 56 4e 45 20  |          MOVNE |
00000c60  52 37 2c 52 37 2c 4c 53  52 23 32 34 0d 04 2e 21  |R7,R7,LSR#24...!|
00000c70  20 20 20 20 20 20 20 20  20 20 84 52 4e 45 20 52  |          .RNE R|
00000c80  37 2c 52 37 2c 52 38 2c  41 53 4c 23 38 0d 04 38  |7,R7,R8,ASL#8..8|
00000c90  20 20 20 20 20 20 20 20  20 20 20 4d 4f 56 4e 45  |           MOVNE|
00000ca0  20 52 38 2c 52 38 2c 4c  53 52 23 32 34 0d 04 42  | R8,R8,LSR#24..B|
00000cb0  21 20 20 20 20 20 20 20  20 20 20 84 52 4e 45 20  |!          .RNE |
00000cc0  52 38 2c 52 38 2c 52 39  2c 41 53 4c 23 38 0d 04  |R8,R8,R9,ASL#8..|
00000cd0  4c 20 20 20 20 20 20 20  20 20 20 20 4d 4f 56 4e  |L           MOVN|
00000ce0  45 20 52 39 2c 52 39 2c  4c 53 52 23 32 34 0d 04  |E R9,R9,LSR#24..|
00000cf0  56 22 20 20 20 20 20 20  20 20 20 20 84 52 4e 45  |V"          .RNE|
00000d00  20 52 39 2c 52 39 2c 52  31 30 2c 41 53 4c 23 38  | R9,R9,R10,ASL#8|
00000d10  0d 04 60 21 20 20 20 20  20 20 20 20 20 20 53 54  |..`!          ST|
00000d20  4d 4e 45 49 41 20 52 31  21 2c 7b 52 36 2d 52 39  |MNEIA R1!,{R6-R9|
00000d30  7d 0d 04 6a 04 0d 04 74  18 20 20 20 20 20 20 20  |}..j...t.       |
00000d40  20 20 20 54 53 54 20 52  31 32 2c 23 38 0d 04 7e  |   TST R12,#8..~|
00000d50  21 20 20 20 20 20 20 20  20 20 20 4d 4f 56 4e 45  |!          MOVNE|
00000d60  20 52 38 2c 52 31 30 2c  4c 53 52 23 32 34 0d 04  | R8,R10,LSR#24..|
00000d70  88 22 20 20 20 20 20 20  20 20 20 20 4c 44 4d 4e  |."          LDMN|
00000d80  45 49 41 20 52 30 21 2c  7b 52 39 2d 52 31 30 7d  |EIA R0!,{R9-R10}|
00000d90  0d 04 92 21 20 20 20 20  20 20 20 20 20 20 84 52  |...!          .R|
00000da0  4e 45 20 52 38 2c 52 38  2c 52 39 2c 41 53 4c 23  |NE R8,R8,R9,ASL#|
00000db0  38 0d 04 9c 20 20 20 20  20 20 20 20 20 20 20 4d  |8...           M|
00000dc0  4f 56 4e 45 20 52 39 2c  52 39 2c 4c 53 52 23 32  |OVNE R9,R9,LSR#2|
00000dd0  34 0d 04 a6 22 20 20 20  20 20 20 20 20 20 20 84  |4..."          .|
00000de0  52 4e 45 20 52 39 2c 52  39 2c 52 31 30 2c 41 53  |RNE R9,R9,R10,AS|
00000df0  4c 23 38 0d 04 b0 21 20  20 20 20 20 20 20 20 20  |L#8...!         |
00000e00  20 53 54 4d 4e 45 49 41  20 52 31 21 2c 7b 52 38  | STMNEIA R1!,{R8|
00000e10  2d 52 39 7d 0d 04 ba 04  0d 04 c4 18 20 20 20 20  |-R9}........    |
00000e20  20 20 20 20 20 20 54 53  54 20 52 31 32 2c 23 34  |      TST R12,#4|
00000e30  0d 04 ce 21 20 20 20 20  20 20 20 20 20 20 4d 4f  |...!          MO|
00000e40  56 4e 45 20 52 39 2c 52  31 30 2c 4c 53 52 23 32  |VNE R9,R10,LSR#2|
00000e50  34 0d 04 d8 1f 20 20 20  20 20 20 20 20 20 20 4c  |4....          L|
00000e60  44 52 4e 45 20 52 31 30  2c 5b 52 30 5d 2c 23 34  |DRNE R10,[R0],#4|
00000e70  0d 04 e2 22 20 20 20 20  20 20 20 20 20 20 84 52  |..."          .R|
00000e80  4e 45 20 52 39 2c 52 39  2c 52 31 30 2c 41 53 4c  |NE R9,R9,R10,ASL|
00000e90  23 38 0d 04 ec 1e 20 20  20 20 20 20 20 20 20 20  |#8....          |
00000ea0  53 54 52 4e 45 20 52 39  2c 5b 52 31 5d 2c 23 34  |STRNE R9,[R1],#4|
00000eb0  0d 04 f6 04 0d 05 00 1f  20 20 20 20 20 20 20 20  |........        |
00000ec0  20 20 4d 4f 56 20 52 39  2c 52 31 30 2c 4c 53 52  |  MOV R9,R10,LSR|
00000ed0  23 32 34 0d 05 0a 04 0d  05 14 18 20 20 20 20 20  |#24........     |
00000ee0  20 20 20 20 20 54 53 54  20 52 31 32 2c 23 32 0d  |     TST R12,#2.|
00000ef0  05 1e 1f 20 20 20 20 20  20 20 20 20 20 53 54 52  |...          STR|
00000f00  4e 45 42 20 52 39 2c 5b  52 31 5d 2c 23 31 0d 05  |NEB R9,[R1],#1..|
00000f10  28 1f 20 20 20 20 20 20  20 20 20 20 4c 44 52 4e  |(.          LDRN|
00000f20  45 42 20 52 39 2c 5b 52  30 5d 2c 23 31 0d 05 32  |EB R9,[R0],#1..2|
00000f30  1f 20 20 20 20 20 20 20  20 20 20 53 54 52 4e 45  |.          STRNE|
00000f40  42 20 52 39 2c 5b 52 31  5d 2c 23 31 0d 05 3c 1f  |B R9,[R1],#1..<.|
00000f50  20 20 20 20 20 20 20 20  20 20 4c 44 52 4e 45 42  |          LDRNEB|
00000f60  20 52 39 2c 5b 52 30 5d  2c 23 31 0d 05 46 0e 20  | R9,[R0],#1..F. |
00000f70  20 20 20 20 20 20 20 20  20 0d 05 50 18 20 20 20  |         ..P.   |
00000f80  20 20 20 20 20 20 20 54  53 54 20 52 31 32 2c 23  |       TST R12,#|
00000f90  31 0d 05 5a 1f 20 20 20  20 20 20 20 20 20 20 53  |1..Z.          S|
00000fa0  54 52 4e 45 42 20 52 39  2c 5b 52 31 5d 2c 23 31  |TRNEB R9,[R1],#1|
00000fb0  0d 05 64 19 20 20 20 20  20 20 20 20 20 20 4d 4f  |..d.          MO|
00000fc0  56 53 20 50 43 2c 52 31  34 0d 05 6e 04 0d 05 78  |VS PC,R14..n...x|
00000fd0  14 2e 72 6c 6f 66 66 73  65 74 6d 6f 64 34 69 73  |..rloffsetmod4is|
00000fe0  32 0d 05 82 36 20 20 20  20 20 20 20 20 20 20 3b  |2...6          ;|
00000ff0  20 46 69 72 73 74 2c 20  61 6c 69 67 6e 20 73 6f  | First, align so|
00001000  75 72 63 65 20 74 6f 20  32 20 62 65 66 6f 72 65  |urce to 2 before|
00001010  20 61 20 77 6f 72 64 0d  05 8c 18 20 20 20 20 20  | a word....     |
00001020  20 20 20 20 20 80 20 52  32 2c 52 30 2c 23 33 0d  |     . R2,R0,#3.|
00001030  05 96 38 20 20 20 20 20  20 20 20 20 20 43 4d 50  |..8          CMP|
00001040  20 52 32 2c 23 33 20 20  20 20 20 20 20 20 20 20  | R2,#3          |
00001050  20 20 3b 69 66 20 6f 66  66 20 62 79 20 30 2c 20  |  ;if off by 0, |
00001060  6d 6f 76 65 20 32 2e 0d  05 a0 38 20 20 20 20 20  |move 2....8     |
00001070  20 20 20 20 20 4c 44 52  45 51 42 20 52 33 2c 5b  |     LDREQB R3,[|
00001080  52 30 5d 2c 23 31 20 20  20 20 3b 69 66 20 6f 66  |R0],#1    ;if of|
00001090  66 20 62 79 20 31 2c 20  6d 6f 76 65 20 31 2e 0d  |f by 1, move 1..|
000010a0  05 aa 38 20 20 20 20 20  20 20 20 20 20 53 54 52  |..8          STR|
000010b0  45 51 42 20 52 33 2c 5b  52 31 5d 2c 23 31 20 20  |EQB R3,[R1],#1  |
000010c0  20 20 3b 69 66 20 6f 66  66 20 62 79 20 32 2c 20  |  ;if off by 2, |
000010d0  6d 6f 76 65 20 30 2e 0d  05 b4 38 20 20 20 20 20  |move 0....8     |
000010e0  20 20 20 20 20 53 55 42  45 51 20 52 31 32 2c 52  |     SUBEQ R12,R|
000010f0  31 32 2c 23 31 20 20 20  20 20 3b 69 66 20 6f 66  |12,#1     ;if of|
00001100  66 20 62 79 20 33 2c 20  6d 6f 76 65 20 33 2e 0d  |f by 3, move 3..|
00001110  05 be 17 20 20 20 20 20  20 20 20 20 20 43 4d 50  |...          CMP|
00001120  20 52 32 2c 23 32 0d 05  c8 1f 20 20 20 20 20 20  | R2,#2....      |
00001130  20 20 20 20 4c 44 52 4e  45 42 20 52 33 2c 5b 52  |    LDRNEB R3,[R|
00001140  30 5d 2c 23 31 0d 05 d2  1f 20 20 20 20 20 20 20  |0],#1....       |
00001150  20 20 20 53 54 52 4e 45  42 20 52 33 2c 5b 52 31  |   STRNEB R3,[R1|
00001160  5d 2c 23 31 0d 05 dc 1e  20 20 20 20 20 20 20 20  |],#1....        |
00001170  20 20 53 55 42 4e 45 20  52 31 32 2c 52 31 32 2c  |  SUBNE R12,R12,|
00001180  23 31 0d 05 e6 17 20 20  20 20 20 20 20 20 20 20  |#1....          |
00001190  43 4d 50 20 52 32 2c 23  30 0d 05 f0 19 20 20 20  |CMP R2,#0....   |
000011a0  20 20 20 20 20 20 20 43  4d 50 4e 45 20 52 32 2c  |       CMPNE R2,|
000011b0  23 33 0d 05 fa 1f 20 20  20 20 20 20 20 20 20 20  |#3....          |
000011c0  4c 44 52 45 51 42 20 52  33 2c 5b 52 30 5d 2c 23  |LDREQB R3,[R0],#|
000011d0  31 0d 06 04 1f 20 20 20  20 20 20 20 20 20 20 53  |1....          S|
000011e0  54 52 45 51 42 20 52 33  2c 5b 52 31 5d 2c 23 31  |TREQB R3,[R1],#1|
000011f0  0d 06 0e 1e 20 20 20 20  20 20 20 20 20 20 53 55  |....          SU|
00001200  42 45 51 20 52 31 32 2c  52 31 32 2c 23 31 0d 06  |BEQ R12,R12,#1..|
00001210  18 04 0d 06 22 2c 20 20  20 20 20 20 20 20 20 20  |....",          |
00001220  3b 20 4c 6f 61 64 20 32  20 74 6f 20 6d 61 6b 65  |; Load 2 to make|
00001230  20 75 73 20 61 6c 69 67  6e 65 64 2e 2e 2e 0d 06  | us aligned.....|
00001240  2c 1e 20 20 20 20 20 20  20 20 20 20 4c 44 52 42  |,.          LDRB|
00001250  20 52 31 30 2c 5b 52 30  5d 2c 23 31 0d 06 36 1d  | R10,[R0],#1..6.|
00001260  20 20 20 20 20 20 20 20  20 20 4c 44 52 42 20 52  |          LDRB R|
00001270  39 2c 5b 52 30 5d 2c 23  31 0d 06 40 21 20 20 20  |9,[R0],#1..@!   |
00001280  20 20 20 20 20 20 20 84  52 20 52 31 30 2c 52 31  |       .R R10,R1|
00001290  30 2c 52 39 2c 41 53 4c  23 38 0d 06 4a 20 20 20  |0,R9,ASL#8..J   |
000012a0  20 20 20 20 20 20 20 20  4d 4f 56 20 52 31 30 2c  |        MOV R10,|
000012b0  52 31 30 2c 41 53 4c 23  31 36 0d 06 54 0e 20 20  |R10,ASL#16..T.  |
000012c0  20 20 20 20 20 20 20 20  0d 06 5e 1f 20 20 20 20  |        ..^.    |
000012d0  20 20 20 20 20 20 3b 20  4d 6f 76 65 20 6c 69 6e  |      ; Move lin|
000012e0  65 20 6c 65 66 74 2e 0d  06 68 25 20 20 20 20 20  |e left...h%     |
000012f0  20 20 20 20 20 3b 20 53  6f 75 72 63 65 20 6e 6f  |     ; Source no|
00001300  77 20 61 6c 69 67 6e 65  64 2e 2e 2e 0d 06 72 1f  |w aligned.....r.|
00001310  20 20 20 20 20 20 20 20  20 20 42 49 43 20 20 20  |          BIC   |
00001320  20 52 33 2c 52 31 32 2c  23 33 31 0d 06 7c 1f 20  | R3,R12,#31..|. |
00001330  20 20 20 20 20 20 20 20  20 52 53 42 53 20 20 20  |         RSBS   |
00001340  52 33 2c 52 33 2c 23 31  36 30 0d 06 86 23 20 20  |R3,R3,#160...#  |
00001350  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 52  |        ADD    R|
00001360  33 2c 52 33 2c 52 33 2c  41 53 4c 23 33 0d 06 90  |3,R3,R3,ASL#3...|
00001370  31 20 20 20 20 20 20 20  20 20 20 41 44 44 47 45  |1          ADDGE|
00001380  20 20 50 43 2c 50 43 2c  52 33 2c 4c 53 52 23 32  |  PC,PC,R3,LSR#2|
00001390  20 20 20 20 3b 28 33 32  3e 3e 32 3d 38 29 0d 06  |    ;(32>>2=8)..|
000013a0  9a 15 20 20 20 20 20 20  20 20 20 20 42 20 65 72  |..          B er|
000013b0  72 6f 72 0d 06 a4 1b 5d  3a e3 20 6c 25 3d 30 20  |ror....]:. l%=0 |
000013c0  b8 20 34 3a 5b 4f 50 54  20 70 61 73 73 25 0d 06  |. 4:[OPT pass%..|
000013d0  ae 1f 20 20 20 20 20 20  20 20 20 20 4d 4f 56 20  |..          MOV |
000013e0  52 32 2c 52 31 30 2c 4c  53 52 23 31 36 0d 06 b8  |R2,R10,LSR#16...|
000013f0  20 20 20 20 20 20 20 20  20 20 20 4c 44 4d 49 41  |           LDMIA|
00001400  20 52 30 21 2c 7b 52 33  2d 52 31 30 7d 0d 06 c2  | R0!,{R3-R10}...|
00001410  20 20 20 20 20 20 20 20  20 20 20 84 52 20 52 32  |           .R R2|
00001420  2c 52 32 2c 52 33 2c 41  53 4c 23 31 36 0d 06 cc  |,R2,R3,ASL#16...|
00001430  1e 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 52  |.          MOV R|
00001440  33 2c 52 33 2c 4c 53 52  23 31 36 0d 06 d6 20 20  |3,R3,LSR#16...  |
00001450  20 20 20 20 20 20 20 20  20 84 52 20 52 33 2c 52  |         .R R3,R|
00001460  33 2c 52 34 2c 41 53 4c  23 31 36 0d 06 e0 1e 20  |3,R4,ASL#16.... |
00001470  20 20 20 20 20 20 20 20  20 4d 4f 56 20 52 34 2c  |         MOV R4,|
00001480  52 34 2c 4c 53 52 23 31  36 0d 06 ea 20 20 20 20  |R4,LSR#16...    |
00001490  20 20 20 20 20 20 20 84  52 20 52 34 2c 52 34 2c  |       .R R4,R4,|
000014a0  52 35 2c 41 53 4c 23 31  36 0d 06 f4 1e 20 20 20  |R5,ASL#16....   |
000014b0  20 20 20 20 20 20 20 4d  4f 56 20 52 35 2c 52 35  |       MOV R5,R5|
000014c0  2c 4c 53 52 23 31 36 0d  06 fe 20 20 20 20 20 20  |,LSR#16...      |
000014d0  20 20 20 20 20 84 52 20  52 35 2c 52 35 2c 52 36  |     .R R5,R5,R6|
000014e0  2c 41 53 4c 23 31 36 0d  07 08 1e 20 20 20 20 20  |,ASL#16....     |
000014f0  20 20 20 20 20 4d 4f 56  20 52 36 2c 52 36 2c 4c  |     MOV R6,R6,L|
00001500  53 52 23 31 36 0d 07 12  20 20 20 20 20 20 20 20  |SR#16...        |
00001510  20 20 20 84 52 20 52 36  2c 52 36 2c 52 37 2c 41  |   .R R6,R6,R7,A|
00001520  53 4c 23 31 36 0d 07 1c  1e 20 20 20 20 20 20 20  |SL#16....       |
00001530  20 20 20 4d 4f 56 20 52  37 2c 52 37 2c 4c 53 52  |   MOV R7,R7,LSR|
00001540  23 31 36 0d 07 26 20 20  20 20 20 20 20 20 20 20  |#16..&          |
00001550  20 84 52 20 52 37 2c 52  37 2c 52 38 2c 41 53 4c  | .R R7,R7,R8,ASL|
00001560  23 31 36 0d 07 30 1e 20  20 20 20 20 20 20 20 20  |#16..0.         |
00001570  20 4d 4f 56 20 52 38 2c  52 38 2c 4c 53 52 23 31  | MOV R8,R8,LSR#1|
00001580  36 0d 07 3a 20 20 20 20  20 20 20 20 20 20 20 84  |6..:           .|
00001590  52 20 52 38 2c 52 38 2c  52 39 2c 41 53 4c 23 31  |R R8,R8,R9,ASL#1|
000015a0  36 0d 07 44 1e 20 20 20  20 20 20 20 20 20 20 4d  |6..D.          M|
000015b0  4f 56 20 52 39 2c 52 39  2c 4c 53 52 23 31 36 0d  |OV R9,R9,LSR#16.|
000015c0  07 4e 21 20 20 20 20 20  20 20 20 20 20 84 52 20  |.N!          .R |
000015d0  52 39 2c 52 39 2c 52 31  30 2c 41 53 4c 23 31 36  |R9,R9,R10,ASL#16|
000015e0  0d 07 58 1f 20 20 20 20  20 20 20 20 20 20 53 54  |..X.          ST|
000015f0  4d 49 41 20 52 31 21 2c  7b 52 32 2d 52 39 7d 0d  |MIA R1!,{R2-R9}.|
00001600  07 62 12 5d 3a ed 3a 5b  4f 50 54 20 70 61 73 73  |.b.]:.:[OPT pass|
00001610  25 0d 07 6c 19 20 20 20  20 20 20 20 20 20 20 54  |%..l.          T|
00001620  53 54 20 52 31 32 2c 23  31 36 0d 07 76 21 20 20  |ST R12,#16..v!  |
00001630  20 20 20 20 20 20 20 20  4d 4f 56 4e 45 20 52 36  |        MOVNE R6|
00001640  2c 52 31 30 2c 4c 53 52  23 31 36 0d 07 80 22 20  |,R10,LSR#16..." |
00001650  20 20 20 20 20 20 20 20  20 4c 44 4d 4e 45 49 41  |         LDMNEIA|
00001660  20 52 30 21 2c 7b 52 37  2d 52 31 30 7d 0d 07 8a  | R0!,{R7-R10}...|
00001670  22 20 20 20 20 20 20 20  20 20 20 84 52 4e 45 20  |"          .RNE |
00001680  52 36 2c 52 36 2c 52 37  2c 41 53 4c 23 31 36 0d  |R6,R6,R7,ASL#16.|
00001690  07 94 20 20 20 20 20 20  20 20 20 20 20 4d 4f 56  |..           MOV|
000016a0  4e 45 20 52 37 2c 52 37  2c 4c 53 52 23 31 36 0d  |NE R7,R7,LSR#16.|
000016b0  07 9e 22 20 20 20 20 20  20 20 20 20 20 84 52 4e  |.."          .RN|
000016c0  45 20 52 37 2c 52 37 2c  52 38 2c 41 53 4c 23 31  |E R7,R7,R8,ASL#1|
000016d0  36 0d 07 a8 20 20 20 20  20 20 20 20 20 20 20 4d  |6...           M|
000016e0  4f 56 4e 45 20 52 38 2c  52 38 2c 4c 53 52 23 31  |OVNE R8,R8,LSR#1|
000016f0  36 0d 07 b2 22 20 20 20  20 20 20 20 20 20 20 84  |6..."          .|
00001700  52 4e 45 20 52 38 2c 52  38 2c 52 39 2c 41 53 4c  |RNE R8,R8,R9,ASL|
00001710  23 31 36 0d 07 bc 20 20  20 20 20 20 20 20 20 20  |#16...          |
00001720  20 4d 4f 56 4e 45 20 52  39 2c 52 39 2c 4c 53 52  | MOVNE R9,R9,LSR|
00001730  23 31 36 0d 07 c6 23 20  20 20 20 20 20 20 20 20  |#16...#         |
00001740  20 84 52 4e 45 20 52 39  2c 52 39 2c 52 31 30 2c  | .RNE R9,R9,R10,|
00001750  41 53 4c 23 31 36 0d 07  d0 21 20 20 20 20 20 20  |ASL#16...!      |
00001760  20 20 20 20 53 54 4d 4e  45 49 41 20 52 31 21 2c  |    STMNEIA R1!,|
00001770  7b 52 36 2d 52 39 7d 0d  07 da 04 0d 07 e4 18 20  |{R6-R9}........ |
00001780  20 20 20 20 20 20 20 20  20 54 53 54 20 52 31 32  |         TST R12|
00001790  2c 23 38 0d 07 ee 21 20  20 20 20 20 20 20 20 20  |,#8...!         |
000017a0  20 4d 4f 56 4e 45 20 52  38 2c 52 31 30 2c 4c 53  | MOVNE R8,R10,LS|
000017b0  52 23 31 36 0d 07 f8 22  20 20 20 20 20 20 20 20  |R#16..."        |
000017c0  20 20 4c 44 4d 4e 45 49  41 20 52 30 21 2c 7b 52  |  LDMNEIA R0!,{R|
000017d0  39 2d 52 31 30 7d 0d 08  02 22 20 20 20 20 20 20  |9-R10}..."      |
000017e0  20 20 20 20 84 52 4e 45  20 52 38 2c 52 38 2c 52  |    .RNE R8,R8,R|
000017f0  39 2c 41 53 4c 23 31 36  0d 08 0c 20 20 20 20 20  |9,ASL#16...     |
00001800  20 20 20 20 20 20 4d 4f  56 4e 45 20 52 39 2c 52  |      MOVNE R9,R|
00001810  39 2c 4c 53 52 23 31 36  0d 08 16 23 20 20 20 20  |9,LSR#16...#    |
00001820  20 20 20 20 20 20 84 52  4e 45 20 52 39 2c 52 39  |      .RNE R9,R9|
00001830  2c 52 31 30 2c 41 53 4c  23 31 36 0d 08 20 21 20  |,R10,ASL#16.. ! |
00001840  20 20 20 20 20 20 20 20  20 53 54 4d 4e 45 49 41  |         STMNEIA|
00001850  20 52 31 21 2c 7b 52 38  2d 52 39 7d 0d 08 2a 04  | R1!,{R8-R9}..*.|
00001860  0d 08 34 18 20 20 20 20  20 20 20 20 20 20 54 53  |..4.          TS|
00001870  54 20 52 31 32 2c 23 34  0d 08 3e 21 20 20 20 20  |T R12,#4..>!    |
00001880  20 20 20 20 20 20 4d 4f  56 4e 45 20 52 39 2c 52  |      MOVNE R9,R|
00001890  31 30 2c 4c 53 52 23 31  36 0d 08 48 1f 20 20 20  |10,LSR#16..H.   |
000018a0  20 20 20 20 20 20 20 4c  44 52 4e 45 20 52 31 30  |       LDRNE R10|
000018b0  2c 5b 52 30 5d 2c 23 34  0d 08 52 23 20 20 20 20  |,[R0],#4..R#    |
000018c0  20 20 20 20 20 20 84 52  4e 45 20 52 39 2c 52 39  |      .RNE R9,R9|
000018d0  2c 52 31 30 2c 41 53 4c  23 31 36 0d 08 5c 1e 20  |,R10,ASL#16..\. |
000018e0  20 20 20 20 20 20 20 20  20 53 54 52 4e 45 20 52  |         STRNE R|
000018f0  39 2c 5b 52 31 5d 2c 23  34 0d 08 66 04 0d 08 70  |9,[R1],#4..f...p|
00001900  1f 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 52  |.          MOV R|
00001910  39 2c 52 31 30 2c 4c 53  52 23 31 36 0d 08 7a 04  |9,R10,LSR#16..z.|
00001920  0d 08 84 18 20 20 20 20  20 20 20 20 20 20 54 53  |....          TS|
00001930  54 20 52 31 32 2c 23 32  0d 08 8e 1f 20 20 20 20  |T R12,#2....    |
00001940  20 20 20 20 20 20 53 54  52 4e 45 42 20 52 39 2c  |      STRNEB R9,|
00001950  5b 52 31 5d 2c 23 31 0d  08 98 1f 20 20 20 20 20  |[R1],#1....     |
00001960  20 20 20 20 20 4d 4f 56  4e 45 20 52 39 2c 52 39  |     MOVNE R9,R9|
00001970  2c 4c 53 52 23 38 0d 08  a2 1f 20 20 20 20 20 20  |,LSR#8....      |
00001980  20 20 20 20 53 54 52 4e  45 42 20 52 39 2c 5b 52  |    STRNEB R9,[R|
00001990  31 5d 2c 23 31 0d 08 ac  1a 20 20 20 20 20 20 20  |1],#1....       |
000019a0  20 20 20 54 53 54 4e 45  20 52 31 32 2c 23 31 0d  |   TSTNE R12,#1.|
000019b0  08 b6 1f 20 20 20 20 20  20 20 20 20 20 4c 44 52  |...          LDR|
000019c0  4e 45 42 20 52 39 2c 5b  52 30 5d 2c 23 31 0d 08  |NEB R9,[R0],#1..|
000019d0  c0 0e 20 20 20 20 20 20  20 20 20 20 0d 08 ca 18  |..          ....|
000019e0  20 20 20 20 20 20 20 20  20 20 54 53 54 20 52 31  |          TST R1|
000019f0  32 2c 23 31 0d 08 d4 1f  20 20 20 20 20 20 20 20  |2,#1....        |
00001a00  20 20 53 54 52 4e 45 42  20 52 39 2c 5b 52 31 5d  |  STRNEB R9,[R1]|
00001a10  2c 23 31 0d 08 de 19 20  20 20 20 20 20 20 20 20  |,#1....         |
00001a20  20 4d 4f 56 53 20 50 43  2c 52 31 34 0d 08 e8 04  | MOVS PC,R14....|
00001a30  0d 08 f2 14 2e 72 6c 6f  66 66 73 65 74 6d 6f 64  |.....rloffsetmod|
00001a40  34 69 73 33 0d 08 fc 36  20 20 20 20 20 20 20 20  |4is3...6        |
00001a50  20 20 3b 20 46 69 72 73  74 2c 20 61 6c 69 67 6e  |  ; First, align|
00001a60  20 73 6f 75 72 63 65 20  74 6f 20 33 20 62 65 66  | source to 3 bef|
00001a70  6f 72 65 20 61 20 77 6f  72 64 0d 09 06 18 20 20  |ore a word....  |
00001a80  20 20 20 20 20 20 20 20  80 20 52 32 2c 52 30 2c  |        . R2,R0,|
00001a90  23 33 0d 09 10 38 20 20  20 20 20 20 20 20 20 20  |#3...8          |
00001aa0  43 4d 50 20 52 32 2c 23  32 20 20 20 20 20 20 20  |CMP R2,#2       |
00001ab0  20 20 20 20 20 3b 69 66  20 6f 66 66 20 62 79 20  |     ;if off by |
00001ac0  30 2c 20 6d 6f 76 65 20  31 2e 0d 09 1a 38 20 20  |0, move 1....8  |
00001ad0  20 20 20 20 20 20 20 20  4c 44 52 45 51 42 20 52  |        LDREQB R|
00001ae0  33 2c 5b 52 30 5d 2c 23  31 20 20 20 20 3b 69 66  |3,[R0],#1    ;if|
00001af0  20 6f 66 66 20 62 79 20  31 2c 20 6d 6f 76 65 20  | off by 1, move |
00001b00  30 2e 0d 09 24 38 20 20  20 20 20 20 20 20 20 20  |0...$8          |
00001b10  53 54 52 45 51 42 20 52  33 2c 5b 52 31 5d 2c 23  |STREQB R3,[R1],#|
00001b20  31 20 20 20 20 3b 69 66  20 6f 66 66 20 62 79 20  |1    ;if off by |
00001b30  32 2c 20 6d 6f 76 65 20  33 2e 0d 09 2e 38 20 20  |2, move 3....8  |
00001b40  20 20 20 20 20 20 20 20  53 55 42 45 51 20 52 31  |        SUBEQ R1|
00001b50  32 2c 52 31 32 2c 23 31  20 20 20 20 20 3b 69 66  |2,R12,#1     ;if|
00001b60  20 6f 66 66 20 62 79 20  33 2c 20 6d 6f 76 65 20  | off by 3, move |
00001b70  32 2e 0d 09 38 1f 20 20  20 20 20 20 20 20 20 20  |2...8.          |
00001b80  4c 44 52 47 45 42 20 52  33 2c 5b 52 30 5d 2c 23  |LDRGEB R3,[R0],#|
00001b90  31 0d 09 42 1f 20 20 20  20 20 20 20 20 20 20 53  |1..B.          S|
00001ba0  54 52 47 45 42 20 52 33  2c 5b 52 31 5d 2c 23 31  |TRGEB R3,[R1],#1|
00001bb0  0d 09 4c 1e 20 20 20 20  20 20 20 20 20 20 53 55  |..L.          SU|
00001bc0  42 47 45 20 52 31 32 2c  52 31 32 2c 23 31 0d 09  |BGE R12,R12,#1..|
00001bd0  56 17 20 20 20 20 20 20  20 20 20 20 43 4d 50 20  |V.          CMP |
00001be0  52 32 2c 23 31 0d 09 60  1f 20 20 20 20 20 20 20  |R2,#1..`.       |
00001bf0  20 20 20 4c 44 52 4e 45  42 20 52 33 2c 5b 52 30  |   LDRNEB R3,[R0|
00001c00  5d 2c 23 31 0d 09 6a 1f  20 20 20 20 20 20 20 20  |],#1..j.        |
00001c10  20 20 53 54 52 4e 45 42  20 52 33 2c 5b 52 31 5d  |  STRNEB R3,[R1]|
00001c20  2c 23 31 0d 09 74 1e 20  20 20 20 20 20 20 20 20  |,#1..t.         |
00001c30  20 53 55 42 4e 45 20 52  31 32 2c 52 31 32 2c 23  | SUBNE R12,R12,#|
00001c40  31 0d 09 7e 04 0d 09 88  2c 20 20 20 20 20 20 20  |1..~....,       |
00001c50  20 20 20 3b 20 4c 6f 61  64 20 31 20 74 6f 20 6d  |   ; Load 1 to m|
00001c60  61 6b 65 20 75 73 20 61  6c 69 67 6e 65 64 2e 2e  |ake us aligned..|
00001c70  2e 0d 09 92 1e 20 20 20  20 20 20 20 20 20 20 4c  |.....          L|
00001c80  44 52 42 20 52 31 30 2c  5b 52 30 5d 2c 23 31 0d  |DRB R10,[R0],#1.|
00001c90  09 9c 1d 20 20 20 20 20  20 20 20 20 20 4c 44 52  |...          LDR|
00001ca0  42 20 52 39 2c 5b 52 30  5d 2c 23 31 0d 09 a6 21  |B R9,[R0],#1...!|
00001cb0  20 20 20 20 20 20 20 20  20 20 84 52 20 52 31 30  |          .R R10|
00001cc0  2c 52 31 30 2c 52 39 2c  41 53 4c 23 38 0d 09 b0  |,R10,R9,ASL#8...|
00001cd0  1d 20 20 20 20 20 20 20  20 20 20 4c 44 52 42 20  |.          LDRB |
00001ce0  52 39 2c 5b 52 30 5d 2c  23 31 0d 09 ba 22 20 20  |R9,[R0],#1..."  |
00001cf0  20 20 20 20 20 20 20 20  84 52 20 52 31 30 2c 52  |        .R R10,R|
00001d00  31 30 2c 52 39 2c 41 53  4c 23 31 36 0d 09 c4 1f  |10,R9,ASL#16....|
00001d10  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 52 31  |          MOV R1|
00001d20  30 2c 52 31 30 2c 41 53  4c 23 38 0d 09 ce 04 0d  |0,R10,ASL#8.....|
00001d30  09 d8 1f 20 20 20 20 20  20 20 20 20 20 3b 20 4d  |...          ; M|
00001d40  6f 76 65 20 6c 69 6e 65  20 6c 65 66 74 2e 0d 09  |ove line left...|
00001d50  e2 25 20 20 20 20 20 20  20 20 20 20 3b 20 53 6f  |.%          ; So|
00001d60  75 72 63 65 20 6e 6f 77  20 61 6c 69 67 6e 65 64  |urce now aligned|
00001d70  2e 2e 2e 0d 09 ec 1f 20  20 20 20 20 20 20 20 20  |.......         |
00001d80  20 42 49 43 20 20 20 20  52 33 2c 52 31 32 2c 23  | BIC    R3,R12,#|
00001d90  33 31 0d 09 f6 1f 20 20  20 20 20 20 20 20 20 20  |31....          |
00001da0  52 53 42 53 20 20 20 52  33 2c 52 33 2c 23 31 36  |RSBS   R3,R3,#16|
00001db0  30 0d 0a 00 23 20 20 20  20 20 20 20 20 20 20 41  |0...#          A|
00001dc0  44 44 20 20 20 20 52 33  2c 52 33 2c 52 33 2c 4c  |DD    R3,R3,R3,L|
00001dd0  53 4c 23 33 0d 0a 0a 31  20 20 20 20 20 20 20 20  |SL#3...1        |
00001de0  20 20 41 44 44 47 45 20  20 50 43 2c 50 43 2c 52  |  ADDGE  PC,PC,R|
00001df0  33 2c 4c 53 52 23 32 20  20 20 20 3b 28 33 32 3e  |3,LSR#2    ;(32>|
00001e00  3e 32 3d 38 29 0d 0a 14  15 20 20 20 20 20 20 20  |>2=8)....       |
00001e10  20 20 20 42 20 65 72 72  6f 72 0d 0a 1e 1b 5d 3a  |   B error....]:|
00001e20  e3 20 6c 25 3d 30 20 b8  20 34 3a 5b 4f 50 54 20  |. l%=0 . 4:[OPT |
00001e30  70 61 73 73 25 0d 0a 28  1e 20 20 20 20 20 20 20  |pass%..(.       |
00001e40  20 20 20 4d 4f 56 20 52  32 2c 52 31 30 2c 4c 53  |   MOV R2,R10,LS|
00001e50  52 23 38 0d 0a 32 20 20  20 20 20 20 20 20 20 20  |R#8..2          |
00001e60  20 4c 44 4d 49 41 20 52  30 21 2c 7b 52 33 2d 52  | LDMIA R0!,{R3-R|
00001e70  31 30 7d 0d 0a 3c 20 20  20 20 20 20 20 20 20 20  |10}..<          |
00001e80  20 84 52 20 52 32 2c 52  32 2c 52 33 2c 41 53 4c  | .R R2,R2,R3,ASL|
00001e90  23 32 34 0d 0a 46 1d 20  20 20 20 20 20 20 20 20  |#24..F.         |
00001ea0  20 4d 4f 56 20 52 33 2c  52 33 2c 4c 53 52 23 38  | MOV R3,R3,LSR#8|
00001eb0  0d 0a 50 20 20 20 20 20  20 20 20 20 20 20 84 52  |..P           .R|
00001ec0  20 52 33 2c 52 33 2c 52  34 2c 41 53 4c 23 32 34  | R3,R3,R4,ASL#24|
00001ed0  0d 0a 5a 1d 20 20 20 20  20 20 20 20 20 20 4d 4f  |..Z.          MO|
00001ee0  56 20 52 34 2c 52 34 2c  4c 53 52 23 38 0d 0a 64  |V R4,R4,LSR#8..d|
00001ef0  20 20 20 20 20 20 20 20  20 20 20 84 52 20 52 34  |           .R R4|
00001f00  2c 52 34 2c 52 35 2c 41  53 4c 23 32 34 0d 0a 6e  |,R4,R5,ASL#24..n|
00001f10  1d 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 52  |.          MOV R|
00001f20  35 2c 52 35 2c 4c 53 52  23 38 0d 0a 78 20 20 20  |5,R5,LSR#8..x   |
00001f30  20 20 20 20 20 20 20 20  84 52 20 52 35 2c 52 35  |        .R R5,R5|
00001f40  2c 52 36 2c 41 53 4c 23  32 34 0d 0a 82 1d 20 20  |,R6,ASL#24....  |
00001f50  20 20 20 20 20 20 20 20  4d 4f 56 20 52 36 2c 52  |        MOV R6,R|
00001f60  36 2c 4c 53 52 23 38 0d  0a 8c 20 20 20 20 20 20  |6,LSR#8...      |
00001f70  20 20 20 20 20 84 52 20  52 36 2c 52 36 2c 52 37  |     .R R6,R6,R7|
00001f80  2c 41 53 4c 23 32 34 0d  0a 96 1d 20 20 20 20 20  |,ASL#24....     |
00001f90  20 20 20 20 20 4d 4f 56  20 52 37 2c 52 37 2c 4c  |     MOV R7,R7,L|
00001fa0  53 52 23 38 0d 0a a0 20  20 20 20 20 20 20 20 20  |SR#8...         |
00001fb0  20 20 84 52 20 52 37 2c  52 37 2c 52 38 2c 41 53  |  .R R7,R7,R8,AS|
00001fc0  4c 23 32 34 0d 0a aa 1d  20 20 20 20 20 20 20 20  |L#24....        |
00001fd0  20 20 4d 4f 56 20 52 38  2c 52 38 2c 4c 53 52 23  |  MOV R8,R8,LSR#|
00001fe0  38 0d 0a b4 20 20 20 20  20 20 20 20 20 20 20 84  |8...           .|
00001ff0  52 20 52 38 2c 52 38 2c  52 39 2c 41 53 4c 23 32  |R R8,R8,R9,ASL#2|
00002000  34 0d 0a be 1d 20 20 20  20 20 20 20 20 20 20 4d  |4....          M|
00002010  4f 56 20 52 39 2c 52 39  2c 4c 53 52 23 38 0d 0a  |OV R9,R9,LSR#8..|
00002020  c8 21 20 20 20 20 20 20  20 20 20 20 84 52 20 52  |.!          .R R|
00002030  39 2c 52 39 2c 52 31 30  2c 41 53 4c 23 32 34 0d  |9,R9,R10,ASL#24.|
00002040  0a d2 1f 20 20 20 20 20  20 20 20 20 20 53 54 4d  |...          STM|
00002050  49 41 20 52 31 21 2c 7b  52 32 2d 52 39 7d 0d 0a  |IA R1!,{R2-R9}..|
00002060  dc 12 5d 3a ed 3a 5b 4f  50 54 20 70 61 73 73 25  |..]:.:[OPT pass%|
00002070  0d 0a e6 04 0d 0a f0 19  20 20 20 20 20 20 20 20  |........        |
00002080  20 20 54 53 54 20 52 31  32 2c 23 31 36 0d 0a fa  |  TST R12,#16...|
00002090  20 20 20 20 20 20 20 20  20 20 20 4d 4f 56 4e 45  |           MOVNE|
000020a0  20 52 36 2c 52 31 30 2c  4c 53 52 23 38 0d 0b 04  | R6,R10,LSR#8...|
000020b0  22 20 20 20 20 20 20 20  20 20 20 4c 44 4d 4e 45  |"          LDMNE|
000020c0  49 41 20 52 30 21 2c 7b  52 37 2d 52 31 30 7d 0d  |IA R0!,{R7-R10}.|
000020d0  0b 0e 22 20 20 20 20 20  20 20 20 20 20 84 52 4e  |.."          .RN|
000020e0  45 20 52 36 2c 52 36 2c  52 37 2c 41 53 4c 23 32  |E R6,R6,R7,ASL#2|
000020f0  34 0d 0b 18 1f 20 20 20  20 20 20 20 20 20 20 4d  |4....          M|
00002100  4f 56 4e 45 20 52 37 2c  52 37 2c 4c 53 52 23 38  |OVNE R7,R7,LSR#8|
00002110  0d 0b 22 22 20 20 20 20  20 20 20 20 20 20 84 52  |..""          .R|
00002120  4e 45 20 52 37 2c 52 37  2c 52 38 2c 41 53 4c 23  |NE R7,R7,R8,ASL#|
00002130  32 34 0d 0b 2c 1f 20 20  20 20 20 20 20 20 20 20  |24..,.          |
00002140  4d 4f 56 4e 45 20 52 38  2c 52 38 2c 4c 53 52 23  |MOVNE R8,R8,LSR#|
00002150  38 0d 0b 36 22 20 20 20  20 20 20 20 20 20 20 84  |8..6"          .|
00002160  52 4e 45 20 52 38 2c 52  38 2c 52 39 2c 41 53 4c  |RNE R8,R8,R9,ASL|
00002170  23 32 34 0d 0b 40 1f 20  20 20 20 20 20 20 20 20  |#24..@.         |
00002180  20 4d 4f 56 4e 45 20 52  39 2c 52 39 2c 4c 53 52  | MOVNE R9,R9,LSR|
00002190  23 38 0d 0b 4a 23 20 20  20 20 20 20 20 20 20 20  |#8..J#          |
000021a0  84 52 4e 45 20 52 39 2c  52 39 2c 52 31 30 2c 41  |.RNE R9,R9,R10,A|
000021b0  53 4c 23 32 34 0d 0b 54  21 20 20 20 20 20 20 20  |SL#24..T!       |
000021c0  20 20 20 53 54 4d 4e 45  49 41 20 52 31 21 2c 7b  |   STMNEIA R1!,{|
000021d0  52 36 2d 52 39 7d 0d 0b  5e 04 0d 0b 68 18 20 20  |R6-R9}..^...h.  |
000021e0  20 20 20 20 20 20 20 20  54 53 54 20 52 31 32 2c  |        TST R12,|
000021f0  23 38 0d 0b 72 20 20 20  20 20 20 20 20 20 20 20  |#8..r           |
00002200  4d 4f 56 4e 45 20 52 38  2c 52 31 30 2c 4c 53 52  |MOVNE R8,R10,LSR|
00002210  23 38 0d 0b 7c 22 20 20  20 20 20 20 20 20 20 20  |#8..|"          |
00002220  4c 44 4d 4e 45 49 41 20  52 30 21 2c 7b 52 39 2d  |LDMNEIA R0!,{R9-|
00002230  52 31 30 7d 0d 0b 86 22  20 20 20 20 20 20 20 20  |R10}..."        |
00002240  20 20 84 52 4e 45 20 52  38 2c 52 38 2c 52 39 2c  |  .RNE R8,R8,R9,|
00002250  41 53 4c 23 32 34 0d 0b  90 1f 20 20 20 20 20 20  |ASL#24....      |
00002260  20 20 20 20 4d 4f 56 4e  45 20 52 39 2c 52 39 2c  |    MOVNE R9,R9,|
00002270  4c 53 52 23 38 0d 0b 9a  23 20 20 20 20 20 20 20  |LSR#8...#       |
00002280  20 20 20 84 52 4e 45 20  52 39 2c 52 39 2c 52 31  |   .RNE R9,R9,R1|
00002290  30 2c 41 53 4c 23 32 34  0d 0b a4 21 20 20 20 20  |0,ASL#24...!    |
000022a0  20 20 20 20 20 20 53 54  4d 4e 45 49 41 20 52 31  |      STMNEIA R1|
000022b0  21 2c 7b 52 38 2d 52 39  7d 0d 0b ae 04 0d 0b b8  |!,{R8-R9}.......|
000022c0  18 20 20 20 20 20 20 20  20 20 20 54 53 54 20 52  |.          TST R|
000022d0  31 32 2c 23 34 0d 0b c2  20 20 20 20 20 20 20 20  |12,#4...        |
000022e0  20 20 20 4d 4f 56 4e 45  20 52 39 2c 52 31 30 2c  |   MOVNE R9,R10,|
000022f0  4c 53 52 23 38 0d 0b cc  1f 20 20 20 20 20 20 20  |LSR#8....       |
00002300  20 20 20 4c 44 52 4e 45  20 52 31 30 2c 5b 52 30  |   LDRNE R10,[R0|
00002310  5d 2c 23 34 0d 0b d6 23  20 20 20 20 20 20 20 20  |],#4...#        |
00002320  20 20 84 52 4e 45 20 52  39 2c 52 39 2c 52 31 30  |  .RNE R9,R9,R10|
00002330  2c 41 53 4c 23 32 34 0d  0b e0 1e 20 20 20 20 20  |,ASL#24....     |
00002340  20 20 20 20 20 53 54 52  4e 45 20 52 39 2c 5b 52  |     STRNE R9,[R|
00002350  31 5d 2c 23 34 0d 0b ea  04 0d 0b f4 1e 20 20 20  |1],#4........   |
00002360  20 20 20 20 20 20 20 4d  4f 56 20 52 39 2c 52 31  |       MOV R9,R1|
00002370  30 2c 4c 53 52 23 38 0d  0b fe 04 0d 0c 08 18 20  |0,LSR#8........ |
00002380  20 20 20 20 20 20 20 20  20 54 53 54 20 52 31 32  |         TST R12|
00002390  2c 23 32 0d 0c 12 1f 20  20 20 20 20 20 20 20 20  |,#2....         |
000023a0  20 53 54 52 4e 45 42 20  52 39 2c 5b 52 31 5d 2c  | STRNEB R9,[R1],|
000023b0  23 31 0d 0c 1c 1f 20 20  20 20 20 20 20 20 20 20  |#1....          |
000023c0  4d 4f 56 4e 45 20 52 39  2c 52 39 2c 4c 53 52 23  |MOVNE R9,R9,LSR#|
000023d0  38 0d 0c 26 1f 20 20 20  20 20 20 20 20 20 20 53  |8..&.          S|
000023e0  54 52 4e 45 42 20 52 39  2c 5b 52 31 5d 2c 23 31  |TRNEB R9,[R1],#1|
000023f0  0d 0c 30 1f 20 20 20 20  20 20 20 20 20 20 4d 4f  |..0.          MO|
00002400  56 4e 45 20 52 39 2c 52  39 2c 4c 53 52 23 38 0d  |VNE R9,R9,LSR#8.|
00002410  0c 3a 0e 20 20 20 20 20  20 20 20 20 20 0d 0c 44  |.:.          ..D|
00002420  18 20 20 20 20 20 20 20  20 20 20 54 53 54 20 52  |.          TST R|
00002430  31 32 2c 23 31 0d 0c 4e  1f 20 20 20 20 20 20 20  |12,#1..N.       |
00002440  20 20 20 53 54 52 4e 45  42 20 52 39 2c 5b 52 31  |   STRNEB R9,[R1|
00002450  5d 2c 23 31 0d 0c 58 0a  2e 65 72 72 6f 72 0d 0c  |],#1..X..error..|
00002460  62 19 20 20 20 20 20 20  20 20 20 20 4d 4f 56 53  |b.          MOVS|
00002470  20 50 43 2c 52 31 34 0d  0c 6c 18 20 20 20 20 20  | PC,R14..l.     |
00002480  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 0d  |               .|
00002490  0c 76 14 2e 6c 72 6f 66  66 73 65 74 6d 6f 64 34  |.v..lroffsetmod4|
000024a0  69 73 30 0d 0c 80 42 20  20 20 20 20 20 20 20 20  |is0...B         |
000024b0  20 3b 20 57 65 20 61 72  65 20 6d 6f 76 69 6e 67  | ; We are moving|
000024c0  20 66 72 6f 6d 20 77 6f  72 64 20 62 6f 75 6e 64  | from word bound|
000024d0  61 72 79 20 74 6f 20 77  6f 72 64 20 62 6f 75 6e  |ary to word boun|
000024e0  64 61 72 79 2e 0d 0c 8a  1b 20 20 20 20 20 20 20  |dary.....       |
000024f0  20 20 20 41 44 44 20 52  30 2c 52 30 2c 52 31 32  |   ADD R0,R0,R12|
00002500  0d 0c 94 1b 20 20 20 20  20 20 20 20 20 20 41 44  |....          AD|
00002510  44 20 52 31 2c 52 31 2c  52 31 32 0d 0c 9e 2d 20  |D R1,R1,R12...- |
00002520  20 20 20 20 20 20 20 20  20 3b 20 46 69 72 73 74  |         ; First|
00002530  2c 20 61 6c 69 67 6e 20  73 6f 75 72 63 65 20 74  |, align source t|
00002540  6f 20 61 20 77 6f 72 64  0d 0c a8 17 20 20 20 20  |o a word....    |
00002550  20 20 20 20 20 20 54 53  54 20 52 30 2c 23 31 0d  |      TST R0,#1.|
00002560  0c b2 21 20 20 20 20 20  20 20 20 20 20 4c 44 52  |..!          LDR|
00002570  4e 45 42 20 52 32 2c 5b  52 30 2c 23 2d 31 5d 21  |NEB R2,[R0,#-1]!|
00002580  0d 0c bc 21 20 20 20 20  20 20 20 20 20 20 53 54  |...!          ST|
00002590  52 4e 45 42 20 52 32 2c  5b 52 31 2c 23 2d 31 5d  |RNEB R2,[R1,#-1]|
000025a0  21 0d 0c c6 1e 20 20 20  20 20 20 20 20 20 20 53  |!....          S|
000025b0  55 42 4e 45 20 52 31 32  2c 52 31 32 2c 23 31 0d  |UBNE R12,R12,#1.|
000025c0  0c d0 17 20 20 20 20 20  20 20 20 20 20 54 53 54  |...          TST|
000025d0  20 52 30 2c 23 32 0d 0c  da 21 20 20 20 20 20 20  | R0,#2...!      |
000025e0  20 20 20 20 4c 44 52 4e  45 42 20 52 32 2c 5b 52  |    LDRNEB R2,[R|
000025f0  30 2c 23 2d 31 5d 21 0d  0c e4 21 20 20 20 20 20  |0,#-1]!...!     |
00002600  20 20 20 20 20 53 54 52  4e 45 42 20 52 32 2c 5b  |     STRNEB R2,[|
00002610  52 31 2c 23 2d 31 5d 21  0d 0c ee 21 20 20 20 20  |R1,#-1]!...!    |
00002620  20 20 20 20 20 20 4c 44  52 4e 45 42 20 52 32 2c  |      LDRNEB R2,|
00002630  5b 52 30 2c 23 2d 31 5d  21 0d 0c f8 21 20 20 20  |[R0,#-1]!...!   |
00002640  20 20 20 20 20 20 20 53  54 52 4e 45 42 20 52 32  |       STRNEB R2|
00002650  2c 5b 52 31 2c 23 2d 31  5d 21 0d 0d 02 1e 20 20  |,[R1,#-1]!....  |
00002660  20 20 20 20 20 20 20 20  53 55 42 4e 45 20 52 31  |        SUBNE R1|
00002670  32 2c 52 31 32 2c 23 32  0d 0d 0c 20 20 20 20 20  |2,R12,#2...     |
00002680  20 20 20 20 20 20 3b 20  4d 6f 76 65 20 6c 69 6e  |      ; Move lin|
00002690  65 20 72 69 67 68 74 2e  0d 0d 16 1f 20 20 20 20  |e right.....    |
000026a0  20 20 20 20 20 20 42 49  43 20 20 20 20 52 32 2c  |      BIC    R2,|
000026b0  52 31 32 2c 23 33 31 0d  0d 20 1f 20 20 20 20 20  |R12,#31.. .     |
000026c0  20 20 20 20 20 52 53 42  53 20 20 20 52 32 2c 52  |     RSBS   R2,R|
000026d0  32 2c 23 33 32 30 0d 0d  2a 31 20 20 20 20 20 20  |2,#320..*1      |
000026e0  20 20 20 20 41 44 44 47  45 20 20 50 43 2c 50 43  |    ADDGE  PC,PC|
000026f0  2c 52 32 2c 4c 53 52 23  32 20 20 20 20 3b 28 33  |,R2,LSR#2    ;(3|
00002700  32 3e 3e 32 3d 38 29 0d  0d 34 15 20 20 20 20 20  |2>>2=8)..4.     |
00002710  20 20 20 20 20 42 20 65  72 72 6f 72 0d 0d 3e 23  |     B error..>#|
00002720  20 20 20 20 20 20 20 20  20 20 4c 44 4d 44 42 20  |          LDMDB |
00002730  52 30 21 2c 7b 52 32 2d  52 39 7d 20 20 3b 31 0d  |R0!,{R2-R9}  ;1.|
00002740  0d 48 1f 20 20 20 20 20  20 20 20 20 20 53 54 4d  |.H.          STM|
00002750  44 42 20 52 31 21 2c 7b  52 32 2d 52 39 7d 0d 0d  |DB R1!,{R2-R9}..|
00002760  52 23 20 20 20 20 20 20  20 20 20 20 4c 44 4d 44  |R#          LDMD|
00002770  42 20 52 30 21 2c 7b 52  32 2d 52 39 7d 20 20 3b  |B R0!,{R2-R9}  ;|
00002780  32 0d 0d 5c 1f 20 20 20  20 20 20 20 20 20 20 53  |2..\.          S|
00002790  54 4d 44 42 20 52 31 21  2c 7b 52 32 2d 52 39 7d  |TMDB R1!,{R2-R9}|
000027a0  0d 0d 66 23 20 20 20 20  20 20 20 20 20 20 4c 44  |..f#          LD|
000027b0  4d 44 42 20 52 30 21 2c  7b 52 32 2d 52 39 7d 20  |MDB R0!,{R2-R9} |
000027c0  20 3b 33 0d 0d 70 1f 20  20 20 20 20 20 20 20 20  | ;3..p.         |
000027d0  20 53 54 4d 44 42 20 52  31 21 2c 7b 52 32 2d 52  | STMDB R1!,{R2-R|
000027e0  39 7d 0d 0d 7a 23 20 20  20 20 20 20 20 20 20 20  |9}..z#          |
000027f0  4c 44 4d 44 42 20 52 30  21 2c 7b 52 32 2d 52 39  |LDMDB R0!,{R2-R9|
00002800  7d 20 20 3b 34 0d 0d 84  1f 20 20 20 20 20 20 20  |}  ;4....       |
00002810  20 20 20 53 54 4d 44 42  20 52 31 21 2c 7b 52 32  |   STMDB R1!,{R2|
00002820  2d 52 39 7d 0d 0d 8e 23  20 20 20 20 20 20 20 20  |-R9}...#        |
00002830  20 20 4c 44 4d 44 42 20  52 30 21 2c 7b 52 32 2d  |  LDMDB R0!,{R2-|
00002840  52 39 7d 20 20 3b 35 0d  0d 98 1f 20 20 20 20 20  |R9}  ;5....     |
00002850  20 20 20 20 20 53 54 4d  44 42 20 52 31 21 2c 7b  |     STMDB R1!,{|
00002860  52 32 2d 52 39 7d 0d 0d  a2 23 20 20 20 20 20 20  |R2-R9}...#      |
00002870  20 20 20 20 4c 44 4d 44  42 20 52 30 21 2c 7b 52  |    LDMDB R0!,{R|
00002880  32 2d 52 39 7d 20 20 3b  31 0d 0d ac 1f 20 20 20  |2-R9}  ;1....   |
00002890  20 20 20 20 20 20 20 53  54 4d 44 42 20 52 31 21  |       STMDB R1!|
000028a0  2c 7b 52 32 2d 52 39 7d  0d 0d b6 23 20 20 20 20  |,{R2-R9}...#    |
000028b0  20 20 20 20 20 20 4c 44  4d 44 42 20 52 30 21 2c  |      LDMDB R0!,|
000028c0  7b 52 32 2d 52 39 7d 20  20 3b 32 0d 0d c0 1f 20  |{R2-R9}  ;2.... |
000028d0  20 20 20 20 20 20 20 20  20 53 54 4d 44 42 20 52  |         STMDB R|
000028e0  31 21 2c 7b 52 32 2d 52  39 7d 0d 0d ca 23 20 20  |1!,{R2-R9}...#  |
000028f0  20 20 20 20 20 20 20 20  4c 44 4d 44 42 20 52 30  |        LDMDB R0|
00002900  21 2c 7b 52 32 2d 52 39  7d 20 20 3b 33 0d 0d d4  |!,{R2-R9}  ;3...|
00002910  1f 20 20 20 20 20 20 20  20 20 20 53 54 4d 44 42  |.          STMDB|
00002920  20 52 31 21 2c 7b 52 32  2d 52 39 7d 0d 0d de 23  | R1!,{R2-R9}...#|
00002930  20 20 20 20 20 20 20 20  20 20 4c 44 4d 44 42 20  |          LDMDB |
00002940  52 30 21 2c 7b 52 32 2d  52 39 7d 20 20 3b 34 0d  |R0!,{R2-R9}  ;4.|
00002950  0d e8 1f 20 20 20 20 20  20 20 20 20 20 53 54 4d  |...          STM|
00002960  44 42 20 52 31 21 2c 7b  52 32 2d 52 39 7d 0d 0d  |DB R1!,{R2-R9}..|
00002970  f2 23 20 20 20 20 20 20  20 20 20 20 4c 44 4d 44  |.#          LDMD|
00002980  42 20 52 30 21 2c 7b 52  32 2d 52 39 7d 20 20 3b  |B R0!,{R2-R9}  ;|
00002990  35 0d 0d fc 1f 20 20 20  20 20 20 20 20 20 20 53  |5....          S|
000029a0  54 4d 44 42 20 52 31 21  2c 7b 52 32 2d 52 39 7d  |TMDB R1!,{R2-R9}|
000029b0  0d 0e 06 19 20 20 20 20  20 20 20 20 20 20 54 53  |....          TS|
000029c0  54 20 52 31 32 2c 23 31  36 0d 0e 10 21 20 20 20  |T R12,#16...!   |
000029d0  20 20 20 20 20 20 20 4c  44 4d 4e 45 44 42 20 52  |       LDMNEDB R|
000029e0  30 21 2c 7b 52 32 2d 52  35 7d 0d 0e 1a 21 20 20  |0!,{R2-R5}...!  |
000029f0  20 20 20 20 20 20 20 20  53 54 4d 4e 45 44 42 20  |        STMNEDB |
00002a00  52 31 21 2c 7b 52 32 2d  52 35 7d 0d 0e 24 18 20  |R1!,{R2-R5}..$. |
00002a10  20 20 20 20 20 20 20 20  20 54 53 54 20 52 31 32  |         TST R12|
00002a20  2c 23 38 0d 0e 2e 21 20  20 20 20 20 20 20 20 20  |,#8...!         |
00002a30  20 4c 44 4d 4e 45 44 42  20 52 30 21 2c 7b 52 32  | LDMNEDB R0!,{R2|
00002a40  2d 52 33 7d 0d 0e 38 21  20 20 20 20 20 20 20 20  |-R3}..8!        |
00002a50  20 20 53 54 4d 4e 45 44  42 20 52 31 21 2c 7b 52  |  STMNEDB R1!,{R|
00002a60  32 2d 52 33 7d 0d 0e 42  18 20 20 20 20 20 20 20  |2-R3}..B.       |
00002a70  20 20 20 54 53 54 20 52  31 32 2c 23 34 0d 0e 4c  |   TST R12,#4..L|
00002a80  20 20 20 20 20 20 20 20  20 20 20 4c 44 52 4e 45  |           LDRNE|
00002a90  20 52 32 2c 5b 52 30 2c  23 2d 34 5d 21 0d 0e 56  | R2,[R0,#-4]!..V|
00002aa0  20 20 20 20 20 20 20 20  20 20 20 53 54 52 4e 45  |           STRNE|
00002ab0  20 52 32 2c 5b 52 31 2c  23 2d 34 5d 21 0d 0e 60  | R2,[R1,#-4]!..`|
00002ac0  18 20 20 20 20 20 20 20  20 20 20 54 53 54 20 52  |.          TST R|
00002ad0  31 32 2c 23 32 0d 0e 6a  21 20 20 20 20 20 20 20  |12,#2..j!       |
00002ae0  20 20 20 4c 44 52 4e 45  42 20 52 32 2c 5b 52 30  |   LDRNEB R2,[R0|
00002af0  2c 23 2d 31 5d 21 0d 0e  74 21 20 20 20 20 20 20  |,#-1]!..t!      |
00002b00  20 20 20 20 53 54 52 4e  45 42 20 52 32 2c 5b 52  |    STRNEB R2,[R|
00002b10  31 2c 23 2d 31 5d 21 0d  0e 7e 21 20 20 20 20 20  |1,#-1]!..~!     |
00002b20  20 20 20 20 20 4c 44 52  4e 45 42 20 52 32 2c 5b  |     LDRNEB R2,[|
00002b30  52 30 2c 23 2d 31 5d 21  0d 0e 88 21 20 20 20 20  |R0,#-1]!...!    |
00002b40  20 20 20 20 20 20 53 54  52 4e 45 42 20 52 32 2c  |      STRNEB R2,|
00002b50  5b 52 31 2c 23 2d 31 5d  21 0d 0e 92 18 20 20 20  |[R1,#-1]!....   |
00002b60  20 20 20 20 20 20 20 54  53 54 20 52 31 32 2c 23  |       TST R12,#|
00002b70  31 0d 0e 9c 21 20 20 20  20 20 20 20 20 20 20 4c  |1...!          L|
00002b80  44 52 4e 45 42 20 52 32  2c 5b 52 30 2c 23 2d 31  |DRNEB R2,[R0,#-1|
00002b90  5d 21 0d 0e a6 21 20 20  20 20 20 20 20 20 20 20  |]!...!          |
00002ba0  53 54 52 4e 45 42 20 52  32 2c 5b 52 31 2c 23 2d  |STRNEB R2,[R1,#-|
00002bb0  31 5d 21 0d 0e b0 19 20  20 20 20 20 20 20 20 20  |1]!....         |
00002bc0  20 4d 4f 56 53 20 50 43  2c 52 31 34 0d 0e ba 04  | MOVS PC,R14....|
00002bd0  0d 0e c4 14 2e 6c 72 6f  66 66 73 65 74 6d 6f 64  |.....lroffsetmod|
00002be0  34 69 73 33 0d 0e ce 1b  20 20 20 20 20 20 20 20  |4is3....        |
00002bf0  20 20 41 44 44 20 52 30  2c 52 30 2c 52 31 32 0d  |  ADD R0,R0,R12.|
00002c00  0e d8 1b 20 20 20 20 20  20 20 20 20 20 41 44 44  |...          ADD|
00002c10  20 52 31 2c 52 31 2c 52  31 32 0d 0e e2 36 20 20  | R1,R1,R12...6  |
00002c20  20 20 20 20 20 20 20 20  3b 20 46 69 72 73 74 2c  |        ; First,|
00002c30  20 61 6c 69 67 6e 20 73  6f 75 72 63 65 20 74 6f  | align source to|
00002c40  20 31 20 62 65 66 6f 72  65 20 61 20 77 6f 72 64  | 1 before a word|
00002c50  0d 0e ec 18 20 20 20 20  20 20 20 20 20 20 80 20  |....          . |
00002c60  52 32 2c 52 30 2c 23 33  0d 0e f6 39 20 20 20 20  |R2,R0,#3...9    |
00002c70  20 20 20 20 20 20 43 4d  50 20 52 32 2c 23 30 20  |      CMP R2,#0 |
00002c80  20 20 20 20 20 20 20 20  20 20 20 20 3b 69 66 20  |            ;if |
00002c90  6f 66 66 20 62 79 20 30  2c 20 6d 6f 76 65 20 33  |off by 0, move 3|
00002ca0  2e 0d 0f 00 39 20 20 20  20 20 20 20 20 20 20 4c  |....9          L|
00002cb0  44 52 45 51 42 20 52 33  2c 5b 52 30 2c 23 2d 31  |DREQB R3,[R0,#-1|
00002cc0  5d 21 20 20 20 3b 69 66  20 6f 66 66 20 62 79 20  |]!   ;if off by |
00002cd0  31 2c 20 6d 6f 76 65 20  30 2e 0d 0f 0a 39 20 20  |1, move 0....9  |
00002ce0  20 20 20 20 20 20 20 20  53 54 52 45 51 42 20 52  |        STREQB R|
00002cf0  33 2c 5b 52 31 2c 23 2d  31 5d 21 20 20 20 3b 69  |3,[R1,#-1]!   ;i|
00002d00  66 20 6f 66 66 20 62 79  20 32 2c 20 6d 6f 76 65  |f off by 2, move|
00002d10  20 31 2e 0d 0f 14 39 20  20 20 20 20 20 20 20 20  | 1....9         |
00002d20  20 53 55 42 45 51 20 20  52 31 32 2c 52 31 32 2c  | SUBEQ  R12,R12,|
00002d30  23 31 20 20 20 20 20 3b  69 66 20 6f 66 66 20 62  |#1     ;if off b|
00002d40  79 20 33 2c 20 6d 6f 76  65 20 32 2e 0d 0f 1e 17  |y 3, move 2.....|
00002d50  20 20 20 20 20 20 20 20  20 20 43 4d 50 20 52 32  |          CMP R2|
00002d60  2c 23 31 0d 0f 28 21 20  20 20 20 20 20 20 20 20  |,#1..(!         |
00002d70  20 4c 44 52 4e 45 42 20  52 33 2c 5b 52 30 2c 23  | LDRNEB R3,[R0,#|
00002d80  2d 31 5d 21 0d 0f 32 21  20 20 20 20 20 20 20 20  |-1]!..2!        |
00002d90  20 20 53 54 52 4e 45 42  20 52 33 2c 5b 52 31 2c  |  STRNEB R3,[R1,|
00002da0  23 2d 31 5d 21 0d 0f 3c  1f 20 20 20 20 20 20 20  |#-1]!..<.       |
00002db0  20 20 20 53 55 42 4e 45  20 20 52 31 32 2c 52 31  |   SUBNE  R12,R1|
00002dc0  32 2c 23 31 0d 0f 46 17  20 20 20 20 20 20 20 20  |2,#1..F.        |
00002dd0  20 20 43 4d 50 20 52 32  2c 23 30 0d 0f 50 19 20  |  CMP R2,#0..P. |
00002de0  20 20 20 20 20 20 20 20  20 43 4d 50 4e 45 20 52  |         CMPNE R|
00002df0  32 2c 23 33 0d 0f 5a 21  20 20 20 20 20 20 20 20  |2,#3..Z!        |
00002e00  20 20 4c 44 52 45 51 42  20 52 33 2c 5b 52 30 2c  |  LDREQB R3,[R0,|
00002e10  23 2d 31 5d 21 0d 0f 64  21 20 20 20 20 20 20 20  |#-1]!..d!       |
00002e20  20 20 20 53 54 52 45 51  42 20 52 33 2c 5b 52 31  |   STREQB R3,[R1|
00002e30  2c 23 2d 31 5d 21 0d 0f  6e 1e 20 20 20 20 20 20  |,#-1]!..n.      |
00002e40  20 20 20 20 53 55 42 45  51 20 52 31 32 2c 52 31  |    SUBEQ R12,R1|
00002e50  32 2c 23 31 0d 0f 78 04  0d 0f 82 2c 20 20 20 20  |2,#1..x....,    |
00002e60  20 20 20 20 20 20 3b 20  4c 6f 61 64 20 31 20 74  |      ; Load 1 t|
00002e70  6f 20 6d 61 6b 65 20 75  73 20 61 6c 69 67 6e 65  |o make us aligne|
00002e80  64 2e 2e 2e 0d 0f 8c 1f  20 20 20 20 20 20 20 20  |d.......        |
00002e90  20 20 4c 44 52 42 20 52  32 2c 5b 52 30 2c 23 2d  |  LDRB R2,[R0,#-|
00002ea0  31 5d 21 0d 0f 96 04 0d  0f a0 20 20 20 20 20 20  |1]!.......      |
00002eb0  20 20 20 20 20 3b 20 4d  6f 76 65 20 6c 69 6e 65  |     ; Move line|
00002ec0  20 72 69 67 68 74 2e 0d  0f aa 25 20 20 20 20 20  | right....%     |
00002ed0  20 20 20 20 20 3b 20 53  6f 75 72 63 65 20 6e 6f  |     ; Source no|
00002ee0  77 20 61 6c 69 67 6e 65  64 2e 2e 2e 0d 0f b4 1f  |w aligned.......|
00002ef0  20 20 20 20 20 20 20 20  20 20 42 49 43 20 20 20  |          BIC   |
00002f00  20 52 33 2c 52 31 32 2c  23 33 31 0d 0f be 1f 20  | R3,R12,#31.... |
00002f10  20 20 20 20 20 20 20 20  20 52 53 42 53 20 20 20  |         RSBS   |
00002f20  52 33 2c 52 33 2c 23 33  32 30 0d 0f c8 23 20 20  |R3,R3,#320...#  |
00002f30  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 52  |        ADD    R|
00002f40  33 2c 52 33 2c 52 33 2c  4c 53 4c 23 33 0d 0f d2  |3,R3,R3,LSL#3...|
00002f50  31 20 20 20 20 20 20 20  20 20 20 41 44 44 47 45  |1          ADDGE|
00002f60  20 20 50 43 2c 50 43 2c  52 33 2c 4c 53 52 23 32  |  PC,PC,R3,LSR#2|
00002f70  20 20 20 20 3b 28 33 32  3e 3e 32 3d 38 29 0d 0f  |    ;(32>>2=8)..|
00002f80  dc 15 20 20 20 20 20 20  20 20 20 20 42 20 65 72  |..          B er|
00002f90  72 6f 72 0d 0f e6 1b 5d  3a e3 20 6c 25 3d 30 20  |ror....]:. l%=0 |
00002fa0  b8 20 39 3a 5b 4f 50 54  20 70 61 73 73 25 0d 0f  |. 9:[OPT pass%..|
00002fb0  f0 1f 20 20 20 20 20 20  20 20 20 20 4d 4f 56 20  |..          MOV |
00002fc0  52 31 30 2c 52 32 2c 4c  53 4c 23 32 34 0d 0f fa  |R10,R2,LSL#24...|
00002fd0  1f 20 20 20 20 20 20 20  20 20 20 4c 44 4d 44 42  |.          LDMDB|
00002fe0  20 52 30 21 2c 7b 52 32  2d 52 39 7d 0d 10 04 21  | R0!,{R2-R9}...!|
00002ff0  20 20 20 20 20 20 20 20  20 20 84 52 20 52 31 30  |          .R R10|
00003000  2c 52 31 30 2c 52 39 2c  4c 53 52 23 38 0d 10 0e  |,R10,R9,LSR#8...|
00003010  1e 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 52  |.          MOV R|
00003020  39 2c 52 39 2c 4c 53 4c  23 32 34 0d 10 18 1f 20  |9,R9,LSL#24.... |
00003030  20 20 20 20 20 20 20 20  20 84 52 20 52 39 2c 52  |         .R R9,R|
00003040  39 2c 52 38 2c 4c 53 52  23 38 0d 10 22 1e 20 20  |9,R8,LSR#8..".  |
00003050  20 20 20 20 20 20 20 20  4d 4f 56 20 52 38 2c 52  |        MOV R8,R|
00003060  38 2c 4c 53 4c 23 32 34  0d 10 2c 1f 20 20 20 20  |8,LSL#24..,.    |
00003070  20 20 20 20 20 20 84 52  20 52 38 2c 52 38 2c 52  |      .R R8,R8,R|
00003080  37 2c 4c 53 52 23 38 0d  10 36 1e 20 20 20 20 20  |7,LSR#8..6.     |
00003090  20 20 20 20 20 4d 4f 56  20 52 37 2c 52 37 2c 4c  |     MOV R7,R7,L|
000030a0  53 4c 23 32 34 0d 10 40  1f 20 20 20 20 20 20 20  |SL#24..@.       |
000030b0  20 20 20 84 52 20 52 37  2c 52 37 2c 52 36 2c 4c  |   .R R7,R7,R6,L|
000030c0  53 52 23 38 0d 10 4a 1e  20 20 20 20 20 20 20 20  |SR#8..J.        |
000030d0  20 20 4d 4f 56 20 52 36  2c 52 36 2c 4c 53 4c 23  |  MOV R6,R6,LSL#|
000030e0  32 34 0d 10 54 1f 20 20  20 20 20 20 20 20 20 20  |24..T.          |
000030f0  84 52 20 52 36 2c 52 36  2c 52 35 2c 4c 53 52 23  |.R R6,R6,R5,LSR#|
00003100  38 0d 10 5e 1e 20 20 20  20 20 20 20 20 20 20 4d  |8..^.          M|
00003110  4f 56 20 52 35 2c 52 35  2c 4c 53 4c 23 32 34 0d  |OV R5,R5,LSL#24.|
00003120  10 68 1f 20 20 20 20 20  20 20 20 20 20 84 52 20  |.h.          .R |
00003130  52 35 2c 52 35 2c 52 34  2c 4c 53 52 23 38 0d 10  |R5,R5,R4,LSR#8..|
00003140  72 1e 20 20 20 20 20 20  20 20 20 20 4d 4f 56 20  |r.          MOV |
00003150  52 34 2c 52 34 2c 4c 53  4c 23 32 34 0d 10 7c 1f  |R4,R4,LSL#24..|.|
00003160  20 20 20 20 20 20 20 20  20 20 84 52 20 52 34 2c  |          .R R4,|
00003170  52 34 2c 52 33 2c 4c 53  52 23 38 0d 10 86 1e 20  |R4,R3,LSR#8.... |
00003180  20 20 20 20 20 20 20 20  20 4d 4f 56 20 52 33 2c  |         MOV R3,|
00003190  52 33 2c 4c 53 4c 23 32  34 0d 10 90 1f 20 20 20  |R3,LSL#24....   |
000031a0  20 20 20 20 20 20 20 84  52 20 52 33 2c 52 33 2c  |       .R R3,R3,|
000031b0  52 32 2c 4c 53 52 23 38  0d 10 9a 20 20 20 20 20  |R2,LSR#8...     |
000031c0  20 20 20 20 20 20 53 54  4d 44 42 20 52 31 21 2c  |      STMDB R1!,|
000031d0  7b 52 33 2d 52 31 30 7d  0d 10 a4 12 5d 3a ed 3a  |{R3-R10}....]:.:|
000031e0  5b 4f 50 54 20 70 61 73  73 25 0d 10 ae 04 0d 10  |[OPT pass%......|
000031f0  b8 19 20 20 20 20 20 20  20 20 20 20 54 53 54 20  |..          TST |
00003200  52 31 32 2c 23 31 36 0d  10 c2 20 20 20 20 20 20  |R12,#16...      |
00003210  20 20 20 20 20 4d 4f 56  4e 45 20 52 36 2c 52 32  |     MOVNE R6,R2|
00003220  2c 4c 53 4c 23 32 34 0d  10 cc 21 20 20 20 20 20  |,LSL#24...!     |
00003230  20 20 20 20 20 4c 44 4d  4e 45 44 42 20 52 30 21  |     LDMNEDB R0!|
00003240  2c 7b 52 32 2d 52 35 7d  0d 10 d6 21 20 20 20 20  |,{R2-R5}...!    |
00003250  20 20 20 20 20 20 84 52  4e 45 20 52 36 2c 52 36  |      .RNE R6,R6|
00003260  2c 52 35 2c 4c 53 52 23  38 0d 10 e0 20 20 20 20  |,R5,LSR#8...    |
00003270  20 20 20 20 20 20 20 4d  4f 56 4e 45 20 52 35 2c  |       MOVNE R5,|
00003280  52 35 2c 4c 53 4c 23 32  34 0d 10 ea 21 20 20 20  |R5,LSL#24...!   |
00003290  20 20 20 20 20 20 20 84  52 4e 45 20 52 35 2c 52  |       .RNE R5,R|
000032a0  35 2c 52 34 2c 4c 53 52  23 38 0d 10 f4 20 20 20  |5,R4,LSR#8...   |
000032b0  20 20 20 20 20 20 20 20  4d 4f 56 4e 45 20 52 34  |        MOVNE R4|
000032c0  2c 52 34 2c 4c 53 4c 23  32 34 0d 10 fe 21 20 20  |,R4,LSL#24...!  |
000032d0  20 20 20 20 20 20 20 20  84 52 4e 45 20 52 34 2c  |        .RNE R4,|
000032e0  52 34 2c 52 33 2c 4c 53  52 23 38 0d 11 08 20 20  |R4,R3,LSR#8...  |
000032f0  20 20 20 20 20 20 20 20  20 4d 4f 56 4e 45 20 52  |         MOVNE R|
00003300  33 2c 52 33 2c 4c 53 4c  23 32 34 0d 11 12 21 20  |3,R3,LSL#24...! |
00003310  20 20 20 20 20 20 20 20  20 84 52 4e 45 20 52 33  |         .RNE R3|
00003320  2c 52 33 2c 52 32 2c 4c  53 52 23 38 0d 11 1c 21  |,R3,R2,LSR#8...!|
00003330  20 20 20 20 20 20 20 20  20 20 53 54 4d 4e 45 44  |          STMNED|
00003340  42 20 52 31 21 2c 7b 52  33 2d 52 36 7d 0d 11 26  |B R1!,{R3-R6}..&|
00003350  04 0d 11 30 18 20 20 20  20 20 20 20 20 20 20 54  |...0.          T|
00003360  53 54 20 52 31 32 2c 23  38 0d 11 3a 20 20 20 20  |ST R12,#8..:    |
00003370  20 20 20 20 20 20 20 4d  4f 56 4e 45 20 52 34 2c  |       MOVNE R4,|
00003380  52 32 2c 4c 53 4c 23 32  34 0d 11 44 21 20 20 20  |R2,LSL#24..D!   |
00003390  20 20 20 20 20 20 20 4c  44 4d 4e 45 44 42 20 52  |       LDMNEDB R|
000033a0  30 21 2c 7b 52 32 2d 52  33 7d 0d 11 4e 21 20 20  |0!,{R2-R3}..N!  |
000033b0  20 20 20 20 20 20 20 20  84 52 4e 45 20 52 34 2c  |        .RNE R4,|
000033c0  52 34 2c 52 33 2c 4c 53  52 23 38 0d 11 58 20 20  |R4,R3,LSR#8..X  |
000033d0  20 20 20 20 20 20 20 20  20 4d 4f 56 4e 45 20 52  |         MOVNE R|
000033e0  33 2c 52 33 2c 4c 53 4c  23 32 34 0d 11 62 21 20  |3,R3,LSL#24..b! |
000033f0  20 20 20 20 20 20 20 20  20 84 52 4e 45 20 52 33  |         .RNE R3|
00003400  2c 52 33 2c 52 32 2c 4c  53 52 23 38 0d 11 6c 21  |,R3,R2,LSR#8..l!|
00003410  20 20 20 20 20 20 20 20  20 20 53 54 4d 4e 45 44  |          STMNED|
00003420  42 20 52 31 21 2c 7b 52  33 2d 52 34 7d 0d 11 76  |B R1!,{R3-R4}..v|
00003430  04 0d 11 80 18 20 20 20  20 20 20 20 20 20 20 54  |.....          T|
00003440  53 54 20 52 31 32 2c 23  34 0d 11 8a 20 20 20 20  |ST R12,#4...    |
00003450  20 20 20 20 20 20 20 4d  4f 56 4e 45 20 52 33 2c  |       MOVNE R3,|
00003460  52 32 2c 4c 53 4c 23 32  34 0d 11 94 20 20 20 20  |R2,LSL#24...    |
00003470  20 20 20 20 20 20 20 4c  44 52 4e 45 20 52 32 2c  |       LDRNE R2,|
00003480  5b 52 30 2c 23 2d 34 5d  21 0d 11 9e 21 20 20 20  |[R0,#-4]!...!   |
00003490  20 20 20 20 20 20 20 84  52 4e 45 20 52 33 2c 52  |       .RNE R3,R|
000034a0  33 2c 52 32 2c 4c 53 52  23 38 0d 11 a8 20 20 20  |3,R2,LSR#8...   |
000034b0  20 20 20 20 20 20 20 20  53 54 52 4e 45 20 52 33  |        STRNE R3|
000034c0  2c 5b 52 31 2c 23 2d 34  5d 21 0d 11 b2 04 0d 11  |,[R1,#-4]!......|
000034d0  bc 18 20 20 20 20 20 20  20 20 20 20 54 53 54 20  |..          TST |
000034e0  52 31 32 2c 23 32 0d 11  c6 21 20 20 20 20 20 20  |R12,#2...!      |
000034f0  20 20 20 20 53 54 52 4e  45 42 20 52 32 2c 5b 52  |    STRNEB R2,[R|
00003500  31 2c 23 2d 31 5d 21 0d  11 d0 21 20 20 20 20 20  |1,#-1]!...!     |
00003510  20 20 20 20 20 4c 44 52  4e 45 42 20 52 32 2c 5b  |     LDRNEB R2,[|
00003520  52 30 2c 23 2d 31 5d 21  0d 11 da 21 20 20 20 20  |R0,#-1]!...!    |
00003530  20 20 20 20 20 20 53 54  52 4e 45 42 20 52 32 2c  |      STRNEB R2,|
00003540  5b 52 31 2c 23 2d 31 5d  21 0d 11 e4 0e 20 20 20  |[R1,#-1]!....   |
00003550  20 20 20 20 20 20 20 0d  11 ee 18 20 20 20 20 20  |       ....     |
00003560  20 20 20 20 20 54 53 54  20 52 31 32 2c 23 31 0d  |     TST R12,#1.|
00003570  11 f8 22 20 20 20 20 20  20 20 20 20 20 3b 4c 44  |.."          ;LD|
00003580  52 4e 45 42 20 52 32 2c  5b 52 30 2c 23 2d 31 5d  |RNEB R2,[R0,#-1]|
00003590  21 0d 12 02 21 20 20 20  20 20 20 20 20 20 20 53  |!...!          S|
000035a0  54 52 4e 45 42 20 52 32  2c 5b 52 31 2c 23 2d 31  |TRNEB R2,[R1,#-1|
000035b0  5d 21 0d 12 0c 19 20 20  20 20 20 20 20 20 20 20  |]!....          |
000035c0  4d 4f 56 53 20 50 43 2c  52 31 34 0d 12 16 04 0d  |MOVS PC,R14.....|
000035d0  12 20 14 2e 6c 72 6f 66  66 73 65 74 6d 6f 64 34  |. ..lroffsetmod4|
000035e0  69 73 32 0d 12 2a 1b 20  20 20 20 20 20 20 20 20  |is2..*.         |
000035f0  20 41 44 44 20 52 30 2c  52 30 2c 52 31 32 0d 12  | ADD R0,R0,R12..|
00003600  34 1b 20 20 20 20 20 20  20 20 20 20 41 44 44 20  |4.          ADD |
00003610  52 31 2c 52 31 2c 52 31  32 0d 12 3e 36 20 20 20  |R1,R1,R12..>6   |
00003620  20 20 20 20 20 20 20 3b  20 46 69 72 73 74 2c 20  |       ; First, |
00003630  61 6c 69 67 6e 20 73 6f  75 72 63 65 20 74 6f 20  |align source to |
00003640  32 20 62 65 66 6f 72 65  20 61 20 77 6f 72 64 0d  |2 before a word.|
00003650  12 48 18 20 20 20 20 20  20 20 20 20 20 80 20 52  |.H.          . R|
00003660  32 2c 52 30 2c 23 33 0d  12 52 38 20 20 20 20 20  |2,R0,#3..R8     |
00003670  20 20 20 20 20 43 4d 50  20 52 32 2c 23 32 20 20  |     CMP R2,#2  |
00003680  20 20 20 20 20 20 20 20  20 20 3b 69 66 20 6f 66  |          ;if of|
00003690  66 20 62 79 20 30 2c 20  6d 6f 76 65 20 32 2e 0d  |f by 0, move 2..|
000036a0  12 5c 38 20 20 20 20 20  20 20 20 20 20 4c 44 52  |.\8          LDR|
000036b0  4e 45 42 20 52 33 2c 5b  52 30 2c 23 2d 31 5d 21  |NEB R3,[R0,#-1]!|
000036c0  20 20 3b 69 66 20 6f 66  66 20 62 79 20 31 2c 20  |  ;if off by 1, |
000036d0  6d 6f 76 65 20 33 2e 0d  12 66 38 20 20 20 20 20  |move 3...f8     |
000036e0  20 20 20 20 20 53 54 52  4e 45 42 20 52 33 2c 5b  |     STRNEB R3,[|
000036f0  52 31 2c 23 2d 31 5d 21  20 20 3b 69 66 20 6f 66  |R1,#-1]!  ;if of|
00003700  66 20 62 79 20 32 2c 20  6d 6f 76 65 20 30 2e 0d  |f by 2, move 0..|
00003710  12 70 38 20 20 20 20 20  20 20 20 20 20 53 55 42  |.p8          SUB|
00003720  4e 45 20 52 31 32 2c 52  31 32 2c 23 31 20 20 20  |NE R12,R12,#1   |
00003730  20 20 3b 69 66 20 6f 66  66 20 62 79 20 33 2c 20  |  ;if off by 3, |
00003740  6d 6f 76 65 20 31 2e 0d  12 7a 21 20 20 20 20 20  |move 1...z!     |
00003750  20 20 20 20 20 4c 44 52  4c 54 42 20 52 33 2c 5b  |     LDRLTB R3,[|
00003760  52 30 2c 23 2d 31 5d 21  0d 12 84 21 20 20 20 20  |R0,#-1]!...!    |
00003770  20 20 20 20 20 20 53 54  52 4c 54 42 20 52 33 2c  |      STRLTB R3,|
00003780  5b 52 31 2c 23 2d 31 5d  21 0d 12 8e 1e 20 20 20  |[R1,#-1]!....   |
00003790  20 20 20 20 20 20 20 53  55 42 4c 54 20 52 31 32  |       SUBLT R12|
000037a0  2c 52 31 32 2c 23 31 0d  12 98 17 20 20 20 20 20  |,R12,#1....     |
000037b0  20 20 20 20 20 43 4d 50  20 52 32 2c 23 31 0d 12  |     CMP R2,#1..|
000037c0  a2 21 20 20 20 20 20 20  20 20 20 20 4c 44 52 45  |.!          LDRE|
000037d0  51 42 20 52 33 2c 5b 52  30 2c 23 2d 31 5d 21 0d  |QB R3,[R0,#-1]!.|
000037e0  12 ac 21 20 20 20 20 20  20 20 20 20 20 53 54 52  |..!          STR|
000037f0  45 51 42 20 52 33 2c 5b  52 31 2c 23 2d 31 5d 21  |EQB R3,[R1,#-1]!|
00003800  0d 12 b6 1e 20 20 20 20  20 20 20 20 20 20 53 55  |....          SU|
00003810  42 45 51 20 52 31 32 2c  52 31 32 2c 23 31 0d 12  |BEQ R12,R12,#1..|
00003820  c0 04 0d 12 ca 2c 20 20  20 20 20 20 20 20 20 20  |.....,          |
00003830  3b 20 4c 6f 61 64 20 32  20 74 6f 20 6d 61 6b 65  |; Load 2 to make|
00003840  20 75 73 20 61 6c 69 67  6e 65 64 2e 2e 2e 0d 12  | us aligned.....|
00003850  d4 20 20 20 20 20 20 20  20 20 20 20 4c 44 52 42  |.           LDRB|
00003860  20 52 31 30 2c 5b 52 30  2c 23 2d 31 5d 21 0d 12  | R10,[R0,#-1]!..|
00003870  de 1f 20 20 20 20 20 20  20 20 20 20 4c 44 52 42  |..          LDRB|
00003880  20 52 39 2c 5b 52 30 2c  23 2d 31 5d 21 0d 12 e8  | R9,[R0,#-1]!...|
00003890  20 20 20 20 20 20 20 20  20 20 20 84 52 20 52 32  |           .R R2|
000038a0  2c 52 39 2c 52 31 30 2c  41 53 4c 23 38 0d 12 f2  |,R9,R10,ASL#8...|
000038b0  0e 20 20 20 20 20 20 20  20 20 20 0d 12 fc 1f 20  |.          .... |
000038c0  20 20 20 20 20 20 20 20  20 3b 20 4d 6f 76 65 20  |         ; Move |
000038d0  6c 69 6e 65 20 6c 65 66  74 2e 0d 13 06 25 20 20  |line left....%  |
000038e0  20 20 20 20 20 20 20 20  3b 20 53 6f 75 72 63 65  |        ; Source|
000038f0  20 6e 6f 77 20 61 6c 69  67 6e 65 64 2e 2e 2e 0d  | now aligned....|
00003900  13 10 1f 20 20 20 20 20  20 20 20 20 20 42 49 43  |...          BIC|
00003910  20 20 20 20 52 33 2c 52  31 32 2c 23 33 31 0d 13  |    R3,R12,#31..|
00003920  1a 1f 20 20 20 20 20 20  20 20 20 20 52 53 42 53  |..          RSBS|
00003930  20 20 20 52 33 2c 52 33  2c 23 33 32 30 0d 13 24  |   R3,R3,#320..$|
00003940  23 20 20 20 20 20 20 20  20 20 20 41 44 44 20 20  |#          ADD  |
00003950  20 20 52 33 2c 52 33 2c  52 33 2c 4c 53 4c 23 33  |  R3,R3,R3,LSL#3|
00003960  0d 13 2e 31 20 20 20 20  20 20 20 20 20 20 41 44  |...1          AD|
00003970  44 47 45 20 20 50 43 2c  50 43 2c 52 33 2c 4c 53  |DGE  PC,PC,R3,LS|
00003980  52 23 32 20 20 20 20 3b  28 33 32 3e 3e 32 3d 38  |R#2    ;(32>>2=8|
00003990  29 0d 13 38 15 20 20 20  20 20 20 20 20 20 20 42  |)..8.          B|
000039a0  20 65 72 72 6f 72 0d 13  42 1b 5d 3a e3 20 6c 25  | error..B.]:. l%|
000039b0  3d 30 20 b8 20 39 3a 5b  4f 50 54 20 70 61 73 73  |=0 . 9:[OPT pass|
000039c0  25 0d 13 4c 1f 20 20 20  20 20 20 20 20 20 20 4d  |%..L.          M|
000039d0  4f 56 20 52 31 30 2c 52  32 2c 4c 53 4c 23 31 36  |OV R10,R2,LSL#16|
000039e0  0d 13 56 1f 20 20 20 20  20 20 20 20 20 20 4c 44  |..V.          LD|
000039f0  4d 44 42 20 52 30 21 2c  7b 52 32 2d 52 39 7d 0d  |MDB R0!,{R2-R9}.|
00003a00  13 60 22 20 20 20 20 20  20 20 20 20 20 84 52 20  |.`"          .R |
00003a10  52 31 30 2c 52 31 30 2c  52 39 2c 4c 53 52 23 31  |R10,R10,R9,LSR#1|
00003a20  36 0d 13 6a 1e 20 20 20  20 20 20 20 20 20 20 4d  |6..j.          M|
00003a30  4f 56 20 52 39 2c 52 39  2c 4c 53 4c 23 31 36 0d  |OV R9,R9,LSL#16.|
00003a40  13 74 20 20 20 20 20 20  20 20 20 20 20 84 52 20  |.t           .R |
00003a50  52 39 2c 52 39 2c 52 38  2c 4c 53 52 23 31 36 0d  |R9,R9,R8,LSR#16.|
00003a60  13 7e 1e 20 20 20 20 20  20 20 20 20 20 4d 4f 56  |.~.          MOV|
00003a70  20 52 38 2c 52 38 2c 4c  53 4c 23 31 36 0d 13 88  | R8,R8,LSL#16...|
00003a80  20 20 20 20 20 20 20 20  20 20 20 84 52 20 52 38  |           .R R8|
00003a90  2c 52 38 2c 52 37 2c 4c  53 52 23 31 36 0d 13 92  |,R8,R7,LSR#16...|
00003aa0  1e 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 52  |.          MOV R|
00003ab0  37 2c 52 37 2c 4c 53 4c  23 31 36 0d 13 9c 20 20  |7,R7,LSL#16...  |
00003ac0  20 20 20 20 20 20 20 20  20 84 52 20 52 37 2c 52  |         .R R7,R|
00003ad0  37 2c 52 36 2c 4c 53 52  23 31 36 0d 13 a6 1e 20  |7,R6,LSR#16.... |
00003ae0  20 20 20 20 20 20 20 20  20 4d 4f 56 20 52 36 2c  |         MOV R6,|
00003af0  52 36 2c 4c 53 4c 23 31  36 0d 13 b0 20 20 20 20  |R6,LSL#16...    |
00003b00  20 20 20 20 20 20 20 84  52 20 52 36 2c 52 36 2c  |       .R R6,R6,|
00003b10  52 35 2c 4c 53 52 23 31  36 0d 13 ba 1e 20 20 20  |R5,LSR#16....   |
00003b20  20 20 20 20 20 20 20 4d  4f 56 20 52 35 2c 52 35  |       MOV R5,R5|
00003b30  2c 4c 53 4c 23 31 36 0d  13 c4 20 20 20 20 20 20  |,LSL#16...      |
00003b40  20 20 20 20 20 84 52 20  52 35 2c 52 35 2c 52 34  |     .R R5,R5,R4|
00003b50  2c 4c 53 52 23 31 36 0d  13 ce 1e 20 20 20 20 20  |,LSR#16....     |
00003b60  20 20 20 20 20 4d 4f 56  20 52 34 2c 52 34 2c 4c  |     MOV R4,R4,L|
00003b70  53 4c 23 31 36 0d 13 d8  20 20 20 20 20 20 20 20  |SL#16...        |
00003b80  20 20 20 84 52 20 52 34  2c 52 34 2c 52 33 2c 4c  |   .R R4,R4,R3,L|
00003b90  53 52 23 31 36 0d 13 e2  1e 20 20 20 20 20 20 20  |SR#16....       |
00003ba0  20 20 20 4d 4f 56 20 52  33 2c 52 33 2c 4c 53 4c  |   MOV R3,R3,LSL|
00003bb0  23 31 36 0d 13 ec 20 20  20 20 20 20 20 20 20 20  |#16...          |
00003bc0  20 84 52 20 52 33 2c 52  33 2c 52 32 2c 4c 53 52  | .R R3,R3,R2,LSR|
00003bd0  23 31 36 0d 13 f6 20 20  20 20 20 20 20 20 20 20  |#16...          |
00003be0  20 53 54 4d 44 42 20 52  31 21 2c 7b 52 33 2d 52  | STMDB R1!,{R3-R|
00003bf0  31 30 7d 0d 14 00 12 5d  3a ed 3a 5b 4f 50 54 20  |10}....]:.:[OPT |
00003c00  70 61 73 73 25 0d 14 0a  04 0d 14 14 19 20 20 20  |pass%........   |
00003c10  20 20 20 20 20 20 20 54  53 54 20 52 31 32 2c 23  |       TST R12,#|
00003c20  31 36 0d 14 1e 20 20 20  20 20 20 20 20 20 20 20  |16...           |
00003c30  4d 4f 56 4e 45 20 52 36  2c 52 32 2c 4c 53 4c 23  |MOVNE R6,R2,LSL#|
00003c40  31 36 0d 14 28 21 20 20  20 20 20 20 20 20 20 20  |16..(!          |
00003c50  4c 44 4d 4e 45 44 42 20  52 30 21 2c 7b 52 32 2d  |LDMNEDB R0!,{R2-|
00003c60  52 35 7d 0d 14 32 22 20  20 20 20 20 20 20 20 20  |R5}..2"         |
00003c70  20 84 52 4e 45 20 52 36  2c 52 36 2c 52 35 2c 4c  | .RNE R6,R6,R5,L|
00003c80  53 52 23 31 36 0d 14 3c  20 20 20 20 20 20 20 20  |SR#16..<        |
00003c90  20 20 20 4d 4f 56 4e 45  20 52 35 2c 52 35 2c 4c  |   MOVNE R5,R5,L|
00003ca0  53 4c 23 31 36 0d 14 46  22 20 20 20 20 20 20 20  |SL#16..F"       |
00003cb0  20 20 20 84 52 4e 45 20  52 35 2c 52 35 2c 52 34  |   .RNE R5,R5,R4|
00003cc0  2c 4c 53 52 23 31 36 0d  14 50 20 20 20 20 20 20  |,LSR#16..P      |
00003cd0  20 20 20 20 20 4d 4f 56  4e 45 20 52 34 2c 52 34  |     MOVNE R4,R4|
00003ce0  2c 4c 53 4c 23 31 36 0d  14 5a 22 20 20 20 20 20  |,LSL#16..Z"     |
00003cf0  20 20 20 20 20 84 52 4e  45 20 52 34 2c 52 34 2c  |     .RNE R4,R4,|
00003d00  52 33 2c 4c 53 52 23 31  36 0d 14 64 20 20 20 20  |R3,LSR#16..d    |
00003d10  20 20 20 20 20 20 20 4d  4f 56 4e 45 20 52 33 2c  |       MOVNE R3,|
00003d20  52 33 2c 4c 53 4c 23 31  36 0d 14 6e 22 20 20 20  |R3,LSL#16..n"   |
00003d30  20 20 20 20 20 20 20 84  52 4e 45 20 52 33 2c 52  |       .RNE R3,R|
00003d40  33 2c 52 32 2c 4c 53 52  23 31 36 0d 14 78 21 20  |3,R2,LSR#16..x! |
00003d50  20 20 20 20 20 20 20 20  20 53 54 4d 4e 45 44 42  |         STMNEDB|
00003d60  20 52 31 21 2c 7b 52 33  2d 52 36 7d 0d 14 82 04  | R1!,{R3-R6}....|
00003d70  0d 14 8c 18 20 20 20 20  20 20 20 20 20 20 54 53  |....          TS|
00003d80  54 20 52 31 32 2c 23 38  0d 14 96 20 20 20 20 20  |T R12,#8...     |
00003d90  20 20 20 20 20 20 4d 4f  56 4e 45 20 52 34 2c 52  |      MOVNE R4,R|
00003da0  32 2c 41 53 4c 23 31 36  0d 14 a0 21 20 20 20 20  |2,ASL#16...!    |
00003db0  20 20 20 20 20 20 4c 44  4d 4e 45 44 42 20 52 30  |      LDMNEDB R0|
00003dc0  21 2c 7b 52 32 2d 52 33  7d 0d 14 aa 22 20 20 20  |!,{R2-R3}..."   |
00003dd0  20 20 20 20 20 20 20 84  52 4e 45 20 52 34 2c 52  |       .RNE R4,R|
00003de0  34 2c 52 33 2c 4c 53 52  23 31 36 0d 14 b4 20 20  |4,R3,LSR#16...  |
00003df0  20 20 20 20 20 20 20 20  20 4d 4f 56 4e 45 20 52  |         MOVNE R|
00003e00  33 2c 52 33 2c 41 53 4c  23 31 36 0d 14 be 22 20  |3,R3,ASL#16..." |
00003e10  20 20 20 20 20 20 20 20  20 84 52 4e 45 20 52 33  |         .RNE R3|
00003e20  2c 52 33 2c 52 32 2c 4c  53 52 23 31 36 0d 14 c8  |,R3,R2,LSR#16...|
00003e30  21 20 20 20 20 20 20 20  20 20 20 53 54 4d 4e 45  |!          STMNE|
00003e40  44 42 20 52 31 21 2c 7b  52 33 2d 52 34 7d 0d 14  |DB R1!,{R3-R4}..|
00003e50  d2 04 0d 14 dc 18 20 20  20 20 20 20 20 20 20 20  |......          |
00003e60  54 53 54 20 52 31 32 2c  23 34 0d 14 e6 20 20 20  |TST R12,#4...   |
00003e70  20 20 20 20 20 20 20 20  4d 4f 56 4e 45 20 52 33  |        MOVNE R3|
00003e80  2c 52 32 2c 41 53 4c 23  31 36 0d 14 f0 20 20 20  |,R2,ASL#16...   |
00003e90  20 20 20 20 20 20 20 20  4c 44 52 4e 45 20 52 32  |        LDRNE R2|
00003ea0  2c 5b 52 30 2c 23 2d 34  5d 21 0d 14 fa 22 20 20  |,[R0,#-4]!..."  |
00003eb0  20 20 20 20 20 20 20 20  84 52 4e 45 20 52 33 2c  |        .RNE R3,|
00003ec0  52 33 2c 52 32 2c 4c 53  52 23 31 36 0d 15 04 20  |R3,R2,LSR#16... |
00003ed0  20 20 20 20 20 20 20 20  20 20 53 54 52 4e 45 20  |          STRNE |
00003ee0  52 33 2c 5b 52 31 2c 23  2d 34 5d 21 0d 15 0e 04  |R3,[R1,#-4]!....|
00003ef0  0d 15 18 20 20 20 20 20  20 20 20 20 20 20 4d 4f  |...           MO|
00003f00  56 20 20 20 20 52 32 2c  52 32 2c 52 4f 52 23 38  |V    R2,R2,ROR#8|
00003f10  0d 15 22 18 20 20 20 20  20 20 20 20 20 20 54 53  |..".          TS|
00003f20  54 20 52 31 32 2c 23 32  0d 15 2c 21 20 20 20 20  |T R12,#2..,!    |
00003f30  20 20 20 20 20 20 53 54  52 4e 45 42 20 52 32 2c  |      STRNEB R2,|
00003f40  5b 52 31 2c 23 2d 31 5d  21 0d 15 36 21 20 20 20  |[R1,#-1]!..6!   |
00003f50  20 20 20 20 20 20 20 4d  4f 56 4e 45 20 20 52 32  |       MOVNE  R2|
00003f60  2c 52 32 2c 52 4f 52 23  32 34 0d 15 40 21 20 20  |,R2,ROR#24..@!  |
00003f70  20 20 20 20 20 20 20 20  53 54 52 4e 45 42 20 52  |        STRNEB R|
00003f80  32 2c 5b 52 31 2c 23 2d  31 5d 21 0d 15 4a 1a 20  |2,[R1,#-1]!..J. |
00003f90  20 20 20 20 20 20 20 20  20 54 53 54 4e 45 20 52  |         TSTNE R|
00003fa0  31 32 2c 23 31 0d 15 54  21 20 20 20 20 20 20 20  |12,#1..T!       |
00003fb0  20 20 20 4c 44 52 4e 45  42 20 52 32 2c 5b 52 30  |   LDRNEB R2,[R0|
00003fc0  2c 23 2d 31 5d 21 0d 15  5e 04 0d 15 68 18 20 20  |,#-1]!..^...h.  |
00003fd0  20 20 20 20 20 20 20 20  54 53 54 20 52 31 32 2c  |        TST R12,|
00003fe0  23 31 0d 15 72 21 20 20  20 20 20 20 20 20 20 20  |#1..r!          |
00003ff0  53 54 52 4e 45 42 20 52  32 2c 5b 52 31 2c 23 2d  |STRNEB R2,[R1,#-|
00004000  31 5d 21 0d 15 7c 19 20  20 20 20 20 20 20 20 20  |1]!..|.         |
00004010  20 4d 4f 56 53 20 50 43  2c 52 31 34 0d 15 86 04  | MOVS PC,R14....|
00004020  0d 15 90 14 2e 6c 72 6f  66 66 73 65 74 6d 6f 64  |.....lroffsetmod|
00004030  34 69 73 31 0d 15 9a 1b  20 20 20 20 20 20 20 20  |4is1....        |
00004040  20 20 41 44 44 20 52 30  2c 52 30 2c 52 31 32 0d  |  ADD R0,R0,R12.|
00004050  15 a4 1b 20 20 20 20 20  20 20 20 20 20 41 44 44  |...          ADD|
00004060  20 52 31 2c 52 31 2c 52  31 32 0d 15 ae 35 20 20  | R1,R1,R12...5  |
00004070  20 20 20 20 20 20 20 20  3b 20 46 69 72 73 74 2c  |        ; First,|
00004080  20 61 6c 69 67 6e 20 73  6f 75 72 63 65 20 74 6f  | align source to|
00004090  20 33 20 61 66 74 65 72  20 61 20 77 6f 72 64 0d  | 3 after a word.|
000040a0  15 b8 18 20 20 20 20 20  20 20 20 20 20 80 20 52  |...          . R|
000040b0  32 2c 52 30 2c 23 33 0d  15 c2 38 20 20 20 20 20  |2,R0,#3...8     |
000040c0  20 20 20 20 20 43 4d 50  20 52 32 2c 23 32 20 20  |     CMP R2,#2  |
000040d0  20 20 20 20 20 20 20 20  20 20 3b 69 66 20 6f 66  |          ;if of|
000040e0  66 20 62 79 20 30 2c 20  6d 6f 76 65 20 31 2e 0d  |f by 0, move 1..|
000040f0  15 cc 38 20 20 20 20 20  20 20 20 20 20 4c 44 52  |..8          LDR|
00004100  4c 45 42 20 52 33 2c 5b  52 30 2c 23 2d 31 5d 21  |LEB R3,[R0,#-1]!|
00004110  20 20 3b 69 66 20 6f 66  66 20 62 79 20 31 2c 20  |  ;if off by 1, |
00004120  6d 6f 76 65 20 32 2e 0d  15 d6 38 20 20 20 20 20  |move 2....8     |
00004130  20 20 20 20 20 53 54 52  4c 45 42 20 52 33 2c 5b  |     STRLEB R3,[|
00004140  52 31 2c 23 2d 31 5d 21  20 20 3b 69 66 20 6f 66  |R1,#-1]!  ;if of|
00004150  66 20 62 79 20 32 2c 20  6d 6f 76 65 20 33 2e 0d  |f by 2, move 3..|
00004160  15 e0 38 20 20 20 20 20  20 20 20 20 20 53 55 42  |..8          SUB|
00004170  4c 45 20 20 52 31 32 2c  52 31 32 2c 23 31 20 20  |LE  R12,R12,#1  |
00004180  20 20 3b 69 66 20 6f 66  66 20 62 79 20 33 2c 20  |  ;if off by 3, |
00004190  6d 6f 76 65 20 30 2e 0d  15 ea 21 20 20 20 20 20  |move 0....!     |
000041a0  20 20 20 20 20 4c 44 52  45 51 42 20 52 33 2c 5b  |     LDREQB R3,[|
000041b0  52 30 2c 23 2d 31 5d 21  0d 15 f4 21 20 20 20 20  |R0,#-1]!...!    |
000041c0  20 20 20 20 20 20 53 54  52 45 51 42 20 52 33 2c  |      STREQB R3,|
000041d0  5b 52 31 2c 23 2d 31 5d  21 0d 15 fe 1f 20 20 20  |[R1,#-1]!....   |
000041e0  20 20 20 20 20 20 20 53  55 42 45 51 20 20 52 31  |       SUBEQ  R1|
000041f0  32 2c 52 31 32 2c 23 31  0d 16 08 1a 20 20 20 20  |2,R12,#1....    |
00004200  20 20 20 20 20 20 43 4d  50 4e 45 20 20 52 32 2c  |      CMPNE  R2,|
00004210  23 31 0d 16 12 21 20 20  20 20 20 20 20 20 20 20  |#1...!          |
00004220  4c 44 52 45 51 42 20 52  33 2c 5b 52 30 2c 23 2d  |LDREQB R3,[R0,#-|
00004230  31 5d 21 0d 16 1c 21 20  20 20 20 20 20 20 20 20  |1]!...!         |
00004240  20 53 54 52 45 51 42 20  52 33 2c 5b 52 31 2c 23  | STREQB R3,[R1,#|
00004250  2d 31 5d 21 0d 16 26 1f  20 20 20 20 20 20 20 20  |-1]!..&.        |
00004260  20 20 53 55 42 45 51 20  20 52 31 32 2c 52 31 32  |  SUBEQ  R12,R12|
00004270  2c 23 31 0d 16 30 04 0d  16 3a 2c 20 20 20 20 20  |,#1..0...:,     |
00004280  20 20 20 20 20 3b 20 4c  6f 61 64 20 31 20 74 6f  |     ; Load 1 to|
00004290  20 6d 61 6b 65 20 75 73  20 61 6c 69 67 6e 65 64  | make us aligned|
000042a0  2e 2e 2e 0d 16 44 20 20  20 20 20 20 20 20 20 20  |.....D          |
000042b0  20 4c 44 52 42 20 52 31  30 2c 5b 52 30 2c 23 2d  | LDRB R10,[R0,#-|
000042c0  31 5d 21 0d 16 4e 1f 20  20 20 20 20 20 20 20 20  |1]!..N.         |
000042d0  20 4c 44 52 42 20 52 39  2c 5b 52 30 2c 23 2d 31  | LDRB R9,[R0,#-1|
000042e0  5d 21 0d 16 58 21 20 20  20 20 20 20 20 20 20 20  |]!..X!          |
000042f0  84 52 20 52 31 30 2c 52  39 2c 52 31 30 2c 41 53  |.R R10,R9,R10,AS|
00004300  4c 23 38 0d 16 62 1f 20  20 20 20 20 20 20 20 20  |L#8..b.         |
00004310  20 4c 44 52 42 20 52 39  2c 5b 52 30 2c 23 2d 31  | LDRB R9,[R0,#-1|
00004320  5d 21 0d 16 6c 20 20 20  20 20 20 20 20 20 20 20  |]!..l           |
00004330  84 52 20 52 32 2c 52 39  2c 52 31 30 2c 41 53 4c  |.R R2,R9,R10,ASL|
00004340  23 38 0d 16 76 0e 20 20  20 20 20 20 20 20 20 20  |#8..v.          |
00004350  0d 16 80 20 20 20 20 20  20 20 20 20 20 20 3b 20  |...           ; |
00004360  4d 6f 76 65 20 6c 69 6e  65 20 72 69 67 68 74 2e  |Move line right.|
00004370  0d 16 8a 25 20 20 20 20  20 20 20 20 20 20 3b 20  |...%          ; |
00004380  53 6f 75 72 63 65 20 6e  6f 77 20 61 6c 69 67 6e  |Source now align|
00004390  65 64 2e 2e 2e 0d 16 94  1f 20 20 20 20 20 20 20  |ed.......       |
000043a0  20 20 20 42 49 43 20 20  20 20 52 33 2c 52 31 32  |   BIC    R3,R12|
000043b0  2c 23 33 31 0d 16 9e 1f  20 20 20 20 20 20 20 20  |,#31....        |
000043c0  20 20 52 53 42 53 20 20  20 52 33 2c 52 33 2c 23  |  RSBS   R3,R3,#|
000043d0  33 32 30 0d 16 a8 23 20  20 20 20 20 20 20 20 20  |320...#         |
000043e0  20 41 44 44 20 20 20 20  52 33 2c 52 33 2c 52 33  | ADD    R3,R3,R3|
000043f0  2c 4c 53 4c 23 33 0d 16  b2 31 20 20 20 20 20 20  |,LSL#3...1      |
00004400  20 20 20 20 41 44 44 47  45 20 20 50 43 2c 50 43  |    ADDGE  PC,PC|
00004410  2c 52 33 2c 4c 53 52 23  32 20 20 20 20 3b 28 33  |,R3,LSR#2    ;(3|
00004420  32 3e 3e 32 3d 38 29 0d  16 bc 15 20 20 20 20 20  |2>>2=8)....     |
00004430  20 20 20 20 20 42 20 65  72 72 6f 72 0d 16 c6 1b  |     B error....|
00004440  5d 3a e3 20 6c 25 3d 30  20 b8 20 39 3a 5b 4f 50  |]:. l%=0 . 9:[OP|
00004450  54 20 70 61 73 73 25 0d  16 d0 1e 20 20 20 20 20  |T pass%....     |
00004460  20 20 20 20 20 4d 4f 56  20 52 31 30 2c 52 32 2c  |     MOV R10,R2,|
00004470  41 53 4c 23 38 0d 16 da  1f 20 20 20 20 20 20 20  |ASL#8....       |
00004480  20 20 20 4c 44 4d 44 42  20 52 30 21 2c 7b 52 32  |   LDMDB R0!,{R2|
00004490  2d 52 39 7d 0d 16 e4 22  20 20 20 20 20 20 20 20  |-R9}..."        |
000044a0  20 20 84 52 20 52 31 30  2c 52 31 30 2c 52 39 2c  |  .R R10,R10,R9,|
000044b0  4c 53 52 23 32 34 0d 16  ee 1d 20 20 20 20 20 20  |LSR#24....      |
000044c0  20 20 20 20 4d 4f 56 20  52 39 2c 52 39 2c 41 53  |    MOV R9,R9,AS|
000044d0  4c 23 38 0d 16 f8 20 20  20 20 20 20 20 20 20 20  |L#8...          |
000044e0  20 84 52 20 52 39 2c 52  39 2c 52 38 2c 4c 53 52  | .R R9,R9,R8,LSR|
000044f0  23 32 34 0d 17 02 1d 20  20 20 20 20 20 20 20 20  |#24....         |
00004500  20 4d 4f 56 20 52 38 2c  52 38 2c 41 53 4c 23 38  | MOV R8,R8,ASL#8|
00004510  0d 17 0c 20 20 20 20 20  20 20 20 20 20 20 84 52  |...           .R|
00004520  20 52 38 2c 52 38 2c 52  37 2c 4c 53 52 23 32 34  | R8,R8,R7,LSR#24|
00004530  0d 17 16 1d 20 20 20 20  20 20 20 20 20 20 4d 4f  |....          MO|
00004540  56 20 52 37 2c 52 37 2c  41 53 4c 23 38 0d 17 20  |V R7,R7,ASL#8.. |
00004550  20 20 20 20 20 20 20 20  20 20 20 84 52 20 52 37  |           .R R7|
00004560  2c 52 37 2c 52 36 2c 4c  53 52 23 32 34 0d 17 2a  |,R7,R6,LSR#24..*|
00004570  1d 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 52  |.          MOV R|
00004580  36 2c 52 36 2c 41 53 4c  23 38 0d 17 34 20 20 20  |6,R6,ASL#8..4   |
00004590  20 20 20 20 20 20 20 20  84 52 20 52 36 2c 52 36  |        .R R6,R6|
000045a0  2c 52 35 2c 4c 53 52 23  32 34 0d 17 3e 1d 20 20  |,R5,LSR#24..>.  |
000045b0  20 20 20 20 20 20 20 20  4d 4f 56 20 52 35 2c 52  |        MOV R5,R|
000045c0  35 2c 41 53 4c 23 38 0d  17 48 20 20 20 20 20 20  |5,ASL#8..H      |
000045d0  20 20 20 20 20 84 52 20  52 35 2c 52 35 2c 52 34  |     .R R5,R5,R4|
000045e0  2c 4c 53 52 23 32 34 0d  17 52 1d 20 20 20 20 20  |,LSR#24..R.     |
000045f0  20 20 20 20 20 4d 4f 56  20 52 34 2c 52 34 2c 41  |     MOV R4,R4,A|
00004600  53 4c 23 38 0d 17 5c 20  20 20 20 20 20 20 20 20  |SL#8..\         |
00004610  20 20 84 52 20 52 34 2c  52 34 2c 52 33 2c 4c 53  |  .R R4,R4,R3,LS|
00004620  52 23 32 34 0d 17 66 1d  20 20 20 20 20 20 20 20  |R#24..f.        |
00004630  20 20 4d 4f 56 20 52 33  2c 52 33 2c 41 53 4c 23  |  MOV R3,R3,ASL#|
00004640  38 0d 17 70 20 20 20 20  20 20 20 20 20 20 20 84  |8..p           .|
00004650  52 20 52 33 2c 52 33 2c  52 32 2c 4c 53 52 23 32  |R R3,R3,R2,LSR#2|
00004660  34 0d 17 7a 20 20 20 20  20 20 20 20 20 20 20 53  |4..z           S|
00004670  54 4d 44 42 20 52 31 21  2c 7b 52 33 2d 52 31 30  |TMDB R1!,{R3-R10|
00004680  7d 0d 17 84 12 5d 3a ed  3a 5b 4f 50 54 20 70 61  |}....]:.:[OPT pa|
00004690  73 73 25 0d 17 8e 04 0d  17 98 19 20 20 20 20 20  |ss%........     |
000046a0  20 20 20 20 20 54 53 54  20 52 31 32 2c 23 31 36  |     TST R12,#16|
000046b0  0d 17 a2 1f 20 20 20 20  20 20 20 20 20 20 4d 4f  |....          MO|
000046c0  56 4e 45 20 52 36 2c 52  32 2c 41 53 4c 23 38 0d  |VNE R6,R2,ASL#8.|
000046d0  17 ac 21 20 20 20 20 20  20 20 20 20 20 4c 44 4d  |..!          LDM|
000046e0  4e 45 44 42 20 52 30 21  2c 7b 52 32 2d 52 35 7d  |NEDB R0!,{R2-R5}|
000046f0  0d 17 b6 22 20 20 20 20  20 20 20 20 20 20 84 52  |..."          .R|
00004700  4e 45 20 52 36 2c 52 36  2c 52 35 2c 4c 53 52 23  |NE R6,R6,R5,LSR#|
00004710  32 34 0d 17 c0 1f 20 20  20 20 20 20 20 20 20 20  |24....          |
00004720  4d 4f 56 4e 45 20 52 35  2c 52 35 2c 41 53 4c 23  |MOVNE R5,R5,ASL#|
00004730  38 0d 17 ca 22 20 20 20  20 20 20 20 20 20 20 84  |8..."          .|
00004740  52 4e 45 20 52 35 2c 52  35 2c 52 34 2c 4c 53 52  |RNE R5,R5,R4,LSR|
00004750  23 32 34 0d 17 d4 1f 20  20 20 20 20 20 20 20 20  |#24....         |
00004760  20 4d 4f 56 4e 45 20 52  34 2c 52 34 2c 41 53 4c  | MOVNE R4,R4,ASL|
00004770  23 38 0d 17 de 22 20 20  20 20 20 20 20 20 20 20  |#8..."          |
00004780  84 52 4e 45 20 52 34 2c  52 34 2c 52 33 2c 4c 53  |.RNE R4,R4,R3,LS|
00004790  52 23 32 34 0d 17 e8 1f  20 20 20 20 20 20 20 20  |R#24....        |
000047a0  20 20 4d 4f 56 4e 45 20  52 33 2c 52 33 2c 41 53  |  MOVNE R3,R3,AS|
000047b0  4c 23 38 0d 17 f2 22 20  20 20 20 20 20 20 20 20  |L#8..."         |
000047c0  20 84 52 4e 45 20 52 33  2c 52 33 2c 52 32 2c 4c  | .RNE R3,R3,R2,L|
000047d0  53 52 23 32 34 0d 17 fc  21 20 20 20 20 20 20 20  |SR#24...!       |
000047e0  20 20 20 53 54 4d 4e 45  44 42 20 52 31 21 2c 7b  |   STMNEDB R1!,{|
000047f0  52 33 2d 52 36 7d 0d 18  06 04 0d 18 10 18 20 20  |R3-R6}........  |
00004800  20 20 20 20 20 20 20 20  54 53 54 20 52 31 32 2c  |        TST R12,|
00004810  23 38 0d 18 1a 1f 20 20  20 20 20 20 20 20 20 20  |#8....          |
00004820  4d 4f 56 4e 45 20 52 34  2c 52 32 2c 41 53 4c 23  |MOVNE R4,R2,ASL#|
00004830  38 0d 18 24 21 20 20 20  20 20 20 20 20 20 20 4c  |8..$!          L|
00004840  44 4d 4e 45 44 42 20 52  30 21 2c 7b 52 32 2d 52  |DMNEDB R0!,{R2-R|
00004850  33 7d 0d 18 2e 22 20 20  20 20 20 20 20 20 20 20  |3}..."          |
00004860  84 52 4e 45 20 52 34 2c  52 34 2c 52 33 2c 4c 53  |.RNE R4,R4,R3,LS|
00004870  52 23 32 34 0d 18 38 1f  20 20 20 20 20 20 20 20  |R#24..8.        |
00004880  20 20 4d 4f 56 4e 45 20  52 33 2c 52 33 2c 41 53  |  MOVNE R3,R3,AS|
00004890  4c 23 38 0d 18 42 22 20  20 20 20 20 20 20 20 20  |L#8..B"         |
000048a0  20 84 52 4e 45 20 52 33  2c 52 33 2c 52 32 2c 4c  | .RNE R3,R3,R2,L|
000048b0  53 52 23 32 34 0d 18 4c  21 20 20 20 20 20 20 20  |SR#24..L!       |
000048c0  20 20 20 53 54 4d 4e 45  44 42 20 52 31 21 2c 7b  |   STMNEDB R1!,{|
000048d0  52 33 2d 52 34 7d 0d 18  56 04 0d 18 60 18 20 20  |R3-R4}..V...`.  |
000048e0  20 20 20 20 20 20 20 20  54 53 54 20 52 31 32 2c  |        TST R12,|
000048f0  23 34 0d 18 6a 1f 20 20  20 20 20 20 20 20 20 20  |#4..j.          |
00004900  4d 4f 56 4e 45 20 52 33  2c 52 32 2c 41 53 4c 23  |MOVNE R3,R2,ASL#|
00004910  38 0d 18 74 20 20 20 20  20 20 20 20 20 20 20 4c  |8..t           L|
00004920  44 52 4e 45 20 52 32 2c  5b 52 30 2c 23 2d 34 5d  |DRNE R2,[R0,#-4]|
00004930  21 0d 18 7e 22 20 20 20  20 20 20 20 20 20 20 84  |!..~"          .|
00004940  52 4e 45 20 52 33 2c 52  33 2c 52 32 2c 4c 53 52  |RNE R3,R3,R2,LSR|
00004950  23 32 34 0d 18 88 20 20  20 20 20 20 20 20 20 20  |#24...          |
00004960  20 53 54 52 4e 45 20 52  33 2c 5b 52 31 2c 23 2d  | STRNE R3,[R1,#-|
00004970  34 5d 21 0d 18 92 04 0d  18 9c 1e 20 20 20 20 20  |4]!........     |
00004980  20 20 20 20 20 4d 4f 56  20 52 32 2c 52 32 2c 52  |     MOV R2,R2,R|
00004990  4f 52 23 31 36 0d 18 a6  04 0d 18 b0 18 20 20 20  |OR#16........   |
000049a0  20 20 20 20 20 20 20 54  53 54 20 52 31 32 2c 23  |       TST R12,#|
000049b0  32 0d 18 ba 21 20 20 20  20 20 20 20 20 20 20 53  |2...!          S|
000049c0  54 52 4e 45 42 20 52 32  2c 5b 52 31 2c 23 2d 31  |TRNEB R2,[R1,#-1|
000049d0  5d 21 0d 18 c4 20 20 20  20 20 20 20 20 20 20 20  |]!...           |
000049e0  4d 4f 56 4e 45 20 52 32  2c 52 32 2c 52 4f 52 23  |MOVNE R2,R2,ROR#|
000049f0  32 34 0d 18 ce 21 20 20  20 20 20 20 20 20 20 20  |24...!          |
00004a00  53 54 52 4e 45 42 20 52  32 2c 5b 52 31 2c 23 2d  |STRNEB R2,[R1,#-|
00004a10  31 5d 21 0d 18 d8 20 20  20 20 20 20 20 20 20 20  |1]!...          |
00004a20  20 4d 4f 56 4e 45 20 52  32 2c 52 32 2c 52 4f 52  | MOVNE R2,R2,ROR|
00004a30  23 32 34 0d 18 e2 04 0d  18 ec 18 20 20 20 20 20  |#24........     |
00004a40  20 20 20 20 20 54 53 54  20 52 31 32 2c 23 31 0d  |     TST R12,#1.|
00004a50  18 f6 21 20 20 20 20 20  20 20 20 20 20 53 54 52  |..!          STR|
00004a60  4e 45 42 20 52 32 2c 5b  52 31 2c 23 2d 31 5d 21  |NEB R2,[R1,#-1]!|
00004a70  0d 19 00 0a 2e 65 72 72  6f 72 0d 19 0a 19 20 20  |.....error....  |
00004a80  20 20 20 20 20 20 20 20  4d 4f 56 53 20 50 43 2c  |        MOVS PC,|
00004a90  52 31 34 0d 19 14 0f 2e  73 6d 61 6c 6c 5f 63 6f  |R14.....small_co|
00004aa0  70 79 0d 19 1e 19 20 20  20 20 20 20 20 20 20 20  |py....          |
00004ab0  4d 4f 56 53 20 50 43 2c  52 31 34 0d 19 28 0c 2e  |MOVS PC,R14..(..|
00004ac0  6d 6f 76 65 5f 6e 77 0d  19 32 41 20 20 20 20 20  |move_nw..2A     |
00004ad0  20 20 20 20 20 3b 20 4f  6e 20 65 6e 74 72 79 20  |     ; On entry |
00004ae0  52 30 3d 73 72 63 2c 20  52 31 3d 64 65 73 74 2c  |R0=src, R1=dest,|
00004af0  20 52 31 31 20 3d 20 68  65 69 67 68 74 2c 20 52  | R11 = height, R|
00004b00  31 32 3d 77 69 64 74 68  0d 19 3c 26 20 20 20 20  |12=width..<&    |
00004b10  20 20 20 20 20 20 3b 20  20 20 20 20 20 20 20 20  |      ;         |
00004b20  20 52 34 3d 6c 69 6e 65  6c 65 6e 67 74 68 0d 19  | R4=linelength..|
00004b30  46 25 20 20 20 20 20 20  20 20 20 20 53 54 4d 46  |F%          STMF|
00004b40  44 20 52 31 33 21 2c 7b  52 30 2d 52 31 32 2c 52  |D R13!,{R0-R12,R|
00004b50  31 34 7d 0d 19 50 2b 20  20 20 20 20 20 20 20 20  |14}..P+         |
00004b60  20 4c 44 52 20 52 32 2c  5b 6d 65 6d 2c 23 61 72  | LDR R2,[mem,#ar|
00004b70  63 5f 73 63 72 65 65 6e  73 74 61 72 74 5d 0d 19  |c_screenstart]..|
00004b80  5a 1a 20 20 20 20 20 20  20 20 20 20 41 44 44 20  |Z.          ADD |
00004b90  52 30 2c 52 30 2c 52 32  0d 19 64 1a 20 20 20 20  |R0,R0,R2..d.    |
00004ba0  20 20 20 20 20 20 41 44  44 20 52 31 2c 52 31 2c  |      ADD R1,R1,|
00004bb0  52 32 0d 19 6e 04 0d 19  78 17 20 20 20 20 20 20  |R2..n...x.      |
00004bc0  20 20 20 20 4d 4f 56 20  52 32 2c 52 34 0d 19 82  |    MOV R2,R4...|
00004bd0  1a 20 20 20 20 20 20 20  20 20 20 53 55 42 20 52  |.          SUB R|
00004be0  33 2c 52 31 2c 52 30 0d  19 8c 18 20 20 20 20 20  |3,R1,R0....     |
00004bf0  20 20 20 20 20 80 20 52  33 2c 52 33 2c 23 33 0d  |     . R3,R3,#3.|
00004c00  19 96 12 2e 6d 6f 76 65  5f 6e 77 5f 6c 6f 6f 70  |....move_nw_loop|
00004c10  31 0d 19 a0 24 20 20 20  20 20 20 20 20 20 20 53  |1...$          S|
00004c20  54 4d 46 44 20 52 31 33  21 2c 7b 52 30 2d 52 33  |TMFD R13!,{R0-R3|
00004c30  2c 52 31 32 7d 0d 19 aa  20 20 20 20 20 20 20 20  |,R12}...        |
00004c40  20 20 20 41 44 44 20 50  43 2c 50 43 2c 52 33 2c  |   ADD PC,PC,R3,|
00004c50  4c 53 4c 23 33 0d 19 b4  14 20 20 20 20 20 20 20  |LSL#3....       |
00004c60  20 20 20 45 51 55 44 20  30 0d 19 be 20 20 20 20  |   EQUD 0...    |
00004c70  20 20 20 20 20 20 20 42  4c 20 72 6c 6f 66 66 73  |       BL rloffs|
00004c80  65 74 6d 6f 64 34 69 73  30 0d 19 c8 1c 20 20 20  |etmod4is0....   |
00004c90  20 20 20 20 20 20 20 42  20 6d 6f 76 65 5f 6e 77  |       B move_nw|
00004ca0  5f 73 6b 69 70 0d 19 d2  20 20 20 20 20 20 20 20  |_skip...        |
00004cb0  20 20 20 42 4c 20 72 6c  6f 66 66 73 65 74 6d 6f  |   BL rloffsetmo|
00004cc0  64 34 69 73 31 0d 19 dc  1c 20 20 20 20 20 20 20  |d4is1....       |
00004cd0  20 20 20 42 20 6d 6f 76  65 5f 6e 77 5f 73 6b 69  |   B move_nw_ski|
00004ce0  70 0d 19 e6 20 20 20 20  20 20 20 20 20 20 20 42  |p...           B|
00004cf0  4c 20 72 6c 6f 66 66 73  65 74 6d 6f 64 34 69 73  |L rloffsetmod4is|
00004d00  32 0d 19 f0 1c 20 20 20  20 20 20 20 20 20 20 42  |2....          B|
00004d10  20 6d 6f 76 65 5f 6e 77  5f 73 6b 69 70 0d 19 fa  | move_nw_skip...|
00004d20  20 20 20 20 20 20 20 20  20 20 20 42 4c 20 72 6c  |           BL rl|
00004d30  6f 66 66 73 65 74 6d 6f  64 34 69 73 33 0d 1a 04  |offsetmod4is3...|
00004d40  11 2e 6d 6f 76 65 5f 6e  77 5f 73 6b 69 70 0d 1a  |..move_nw_skip..|
00004d50  0e 24 20 20 20 20 20 20  20 20 20 20 4c 44 4d 46  |.$          LDMF|
00004d60  44 20 52 31 33 21 2c 7b  52 30 2d 52 33 2c 52 31  |D R13!,{R0-R3,R1|
00004d70  32 7d 0d 1a 18 1a 20 20  20 20 20 20 20 20 20 20  |2}....          |
00004d80  41 44 44 20 52 30 2c 52  30 2c 52 32 0d 1a 22 1a  |ADD R0,R0,R2..".|
00004d90  20 20 20 20 20 20 20 20  20 20 41 44 44 20 52 31  |          ADD R1|
00004da0  2c 52 31 2c 52 32 0d 1a  2c 1d 20 20 20 20 20 20  |,R1,R2..,.      |
00004db0  20 20 20 20 53 55 42 53  20 52 31 31 2c 52 31 31  |    SUBS R11,R11|
00004dc0  2c 23 31 0d 1a 36 1f 20  20 20 20 20 20 20 20 20  |,#1..6.         |
00004dd0  20 42 47 54 20 6d 6f 76  65 5f 6e 77 5f 6c 6f 6f  | BGT move_nw_loo|
00004de0  70 31 0d 1a 40 25 20 20  20 20 20 20 20 20 20 20  |p1..@%          |
00004df0  4c 44 4d 46 44 20 52 31  33 21 2c 7b 52 30 2d 52  |LDMFD R13!,{R0-R|
00004e00  31 32 2c 50 43 7d 5e 0d  1a 4a 0c 2e 6d 6f 76 65  |12,PC}^..J..move|
00004e10  5f 6e 65 0d 1a 54 41 20  20 20 20 20 20 20 20 20  |_ne..TA         |
00004e20  20 3b 20 4f 6e 20 65 6e  74 72 79 20 52 30 3d 73  | ; On entry R0=s|
00004e30  72 63 2c 20 52 31 3d 64  65 73 74 2c 20 52 31 31  |rc, R1=dest, R11|
00004e40  20 3d 20 68 65 69 67 68  74 2c 20 52 31 32 3d 77  | = height, R12=w|
00004e50  69 64 74 68 0d 1a 5e 25  20 20 20 20 20 20 20 20  |idth..^%        |
00004e60  20 20 53 54 4d 46 44 20  52 31 33 21 2c 7b 52 30  |  STMFD R13!,{R0|
00004e70  2d 52 31 32 2c 52 31 34  7d 0d 1a 68 2b 20 20 20  |-R12,R14}..h+   |
00004e80  20 20 20 20 20 20 20 4c  44 52 20 52 32 2c 5b 6d  |       LDR R2,[m|
00004e90  65 6d 2c 23 61 72 63 5f  73 63 72 65 65 6e 73 74  |em,#arc_screenst|
00004ea0  61 72 74 5d 0d 1a 72 1a  20 20 20 20 20 20 20 20  |art]..r.        |
00004eb0  20 20 41 44 44 20 52 30  2c 52 30 2c 52 32 0d 1a  |  ADD R0,R0,R2..|
00004ec0  7c 1a 20 20 20 20 20 20  20 20 20 20 41 44 44 20  ||.          ADD |
00004ed0  52 31 2c 52 31 2c 52 32  0d 1a 86 04 0d 1a 90 17  |R1,R1,R2........|
00004ee0  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 52 32  |          MOV R2|
00004ef0  2c 52 34 0d 1a 9a 1b 20  20 20 20 20 20 20 20 20  |,R4....         |
00004f00  20 53 55 42 53 20 52 33  2c 52 31 2c 52 30 0d 1a  | SUBS R3,R1,R0..|
00004f10  a4 18 20 20 20 20 20 20  20 20 20 20 80 20 52 33  |..          . R3|
00004f20  2c 52 33 2c 23 33 0d 1a  ae 12 2e 6d 6f 76 65 5f  |,R3,#3.....move_|
00004f30  6e 65 5f 6c 6f 6f 70 31  0d 1a b8 24 20 20 20 20  |ne_loop1...$    |
00004f40  20 20 20 20 20 20 53 54  4d 46 44 20 52 31 33 21  |      STMFD R13!|
00004f50  2c 7b 52 30 2d 52 33 2c  52 31 32 7d 0d 1a c2 20  |,{R0-R3,R12}... |
00004f60  20 20 20 20 20 20 20 20  20 20 41 44 44 20 50 43  |          ADD PC|
00004f70  2c 50 43 2c 52 33 2c 4c  53 4c 23 33 0d 1a cc 14  |,PC,R3,LSL#3....|
00004f80  20 20 20 20 20 20 20 20  20 20 45 51 55 44 20 30  |          EQUD 0|
00004f90  0d 1a d6 20 20 20 20 20  20 20 20 20 20 20 42 4c  |...           BL|
00004fa0  20 6c 72 6f 66 66 73 65  74 6d 6f 64 34 69 73 30  | lroffsetmod4is0|
00004fb0  0d 1a e0 1c 20 20 20 20  20 20 20 20 20 20 42 20  |....          B |
00004fc0  6d 6f 76 65 5f 6e 65 5f  73 6b 69 70 0d 1a ea 20  |move_ne_skip... |
00004fd0  20 20 20 20 20 20 20 20  20 20 42 4c 20 6c 72 6f  |          BL lro|
00004fe0  66 66 73 65 74 6d 6f 64  34 69 73 31 0d 1a f4 1c  |ffsetmod4is1....|
00004ff0  20 20 20 20 20 20 20 20  20 20 42 20 6d 6f 76 65  |          B move|
00005000  5f 6e 65 5f 73 6b 69 70  0d 1a fe 20 20 20 20 20  |_ne_skip...     |
00005010  20 20 20 20 20 20 42 4c  20 6c 72 6f 66 66 73 65  |      BL lroffse|
00005020  74 6d 6f 64 34 69 73 32  0d 1b 08 1c 20 20 20 20  |tmod4is2....    |
00005030  20 20 20 20 20 20 42 20  6d 6f 76 65 5f 6e 65 5f  |      B move_ne_|
00005040  73 6b 69 70 0d 1b 12 20  20 20 20 20 20 20 20 20  |skip...         |
00005050  20 20 42 4c 20 6c 72 6f  66 66 73 65 74 6d 6f 64  |  BL lroffsetmod|
00005060  34 69 73 33 0d 1b 1c 11  2e 6d 6f 76 65 5f 6e 65  |4is3.....move_ne|
00005070  5f 73 6b 69 70 0d 1b 26  24 20 20 20 20 20 20 20  |_skip..&$       |
00005080  20 20 20 4c 44 4d 46 44  20 52 31 33 21 2c 7b 52  |   LDMFD R13!,{R|
00005090  30 2d 52 33 2c 52 31 32  7d 0d 1b 30 1a 20 20 20  |0-R3,R12}..0.   |
000050a0  20 20 20 20 20 20 20 41  44 44 20 52 30 2c 52 30  |       ADD R0,R0|
000050b0  2c 52 32 0d 1b 3a 1a 20  20 20 20 20 20 20 20 20  |,R2..:.         |
000050c0  20 41 44 44 20 52 31 2c  52 31 2c 52 32 0d 1b 44  | ADD R1,R1,R2..D|
000050d0  1d 20 20 20 20 20 20 20  20 20 20 53 55 42 53 20  |.          SUBS |
000050e0  52 31 31 2c 52 31 31 2c  23 31 0d 1b 4e 1f 20 20  |R11,R11,#1..N.  |
000050f0  20 20 20 20 20 20 20 20  42 47 54 20 6d 6f 76 65  |        BGT move|
00005100  5f 6e 65 5f 6c 6f 6f 70  31 0d 1b 58 10 2e 6d 6f  |_ne_loop1..X..mo|
00005110  76 65 5f 6e 65 5f 65 6e  64 0d 1b 62 25 20 20 20  |ve_ne_end..b%   |
00005120  20 20 20 20 20 20 20 4c  44 4d 46 44 20 52 31 33  |       LDMFD R13|
00005130  21 2c 7b 52 30 2d 52 31  32 2c 50 43 7d 5e 0d 1b  |!,{R0-R12,PC}^..|
00005140  6c 0c 2e 6d 6f 76 65 5f  73 77 0d 1b 76 41 20 20  |l..move_sw..vA  |
00005150  20 20 20 20 20 20 20 20  3b 20 4f 6e 20 65 6e 74  |        ; On ent|
00005160  72 79 20 52 30 3d 73 72  63 2c 20 52 31 3d 64 65  |ry R0=src, R1=de|
00005170  73 74 2c 20 52 31 31 20  3d 20 68 65 69 67 68 74  |st, R11 = height|
00005180  2c 20 52 31 32 3d 77 69  64 74 68 0d 1b 80 25 20  |, R12=width...% |
00005190  20 20 20 20 20 20 20 20  20 53 54 4d 46 44 20 52  |         STMFD R|
000051a0  31 33 21 2c 7b 52 30 2d  52 31 32 2c 52 31 34 7d  |13!,{R0-R12,R14}|
000051b0  0d 1b 8a 2b 20 20 20 20  20 20 20 20 20 20 4c 44  |...+          LD|
000051c0  52 20 52 33 2c 5b 6d 65  6d 2c 23 61 72 63 5f 73  |R R3,[mem,#arc_s|
000051d0  63 72 65 65 6e 73 74 61  72 74 5d 0d 1b 94 17 20  |creenstart].... |
000051e0  20 20 20 20 20 20 20 20  20 4d 4f 56 20 52 32 2c  |         MOV R2,|
000051f0  52 34 0d 1b 9e 0e 20 20  20 20 20 20 20 20 20 20  |R4....          |
00005200  0d 1b a8 38 20 20 20 20  20 20 20 20 20 20 4d 4c  |...8          ML|
00005210  41 20 52 33 2c 52 32 2c  52 31 31 2c 52 33 20 20  |A R3,R2,R11,R3  |
00005220  20 20 3b 20 4f 66 66 73  65 74 20 74 6f 20 74 68  |  ; Offset to th|
00005230  65 20 62 6f 74 74 6f 6d  0d 1b b2 1a 20 20 20 20  |e bottom....    |
00005240  20 20 20 20 20 20 53 55  42 20 52 33 2c 52 33 2c  |      SUB R3,R3,|
00005250  52 32 0d 1b bc 1a 20 20  20 20 20 20 20 20 20 20  |R2....          |
00005260  41 44 44 20 52 30 2c 52  30 2c 52 33 0d 1b c6 1a  |ADD R0,R0,R3....|
00005270  20 20 20 20 20 20 20 20  20 20 41 44 44 20 52 31  |          ADD R1|
00005280  2c 52 31 2c 52 33 0d 1b  d0 0e 20 20 20 20 20 20  |,R1,R3....      |
00005290  20 20 20 20 0d 1b da 1a  20 20 20 20 20 20 20 20  |    ....        |
000052a0  20 20 53 55 42 20 52 33  2c 52 31 2c 52 30 0d 1b  |  SUB R3,R1,R0..|
000052b0  e4 18 20 20 20 20 20 20  20 20 20 20 80 20 52 33  |..          . R3|
000052c0  2c 52 33 2c 23 33 0d 1b  ee 12 2e 6d 6f 76 65 5f  |,R3,#3.....move_|
000052d0  73 77 5f 6c 6f 6f 70 31  0d 1b f8 24 20 20 20 20  |sw_loop1...$    |
000052e0  20 20 20 20 20 20 53 54  4d 46 44 20 52 31 33 21  |      STMFD R13!|
000052f0  2c 7b 52 30 2d 52 33 2c  52 31 32 7d 0d 1c 02 20  |,{R0-R3,R12}... |
00005300  20 20 20 20 20 20 20 20  20 20 41 44 44 20 50 43  |          ADD PC|
00005310  2c 50 43 2c 52 33 2c 4c  53 4c 23 33 0d 1c 0c 14  |,PC,R3,LSL#3....|
00005320  20 20 20 20 20 20 20 20  20 20 45 51 55 44 20 30  |          EQUD 0|
00005330  0d 1c 16 20 20 20 20 20  20 20 20 20 20 20 42 4c  |...           BL|
00005340  20 72 6c 6f 66 66 73 65  74 6d 6f 64 34 69 73 30  | rloffsetmod4is0|
00005350  0d 1c 20 1c 20 20 20 20  20 20 20 20 20 20 42 20  |.. .          B |
00005360  6d 6f 76 65 5f 73 77 5f  73 6b 69 70 0d 1c 2a 20  |move_sw_skip..* |
00005370  20 20 20 20 20 20 20 20  20 20 42 4c 20 72 6c 6f  |          BL rlo|
00005380  66 66 73 65 74 6d 6f 64  34 69 73 31 0d 1c 34 1c  |ffsetmod4is1..4.|
00005390  20 20 20 20 20 20 20 20  20 20 42 20 6d 6f 76 65  |          B move|
000053a0  5f 73 77 5f 73 6b 69 70  0d 1c 3e 20 20 20 20 20  |_sw_skip..>     |
000053b0  20 20 20 20 20 20 42 4c  20 72 6c 6f 66 66 73 65  |      BL rloffse|
000053c0  74 6d 6f 64 34 69 73 32  0d 1c 48 1c 20 20 20 20  |tmod4is2..H.    |
000053d0  20 20 20 20 20 20 42 20  6d 6f 76 65 5f 73 77 5f  |      B move_sw_|
000053e0  73 6b 69 70 0d 1c 52 20  20 20 20 20 20 20 20 20  |skip..R         |
000053f0  20 20 42 4c 20 72 6c 6f  66 66 73 65 74 6d 6f 64  |  BL rloffsetmod|
00005400  34 69 73 33 0d 1c 5c 11  2e 6d 6f 76 65 5f 73 77  |4is3..\..move_sw|
00005410  5f 73 6b 69 70 0d 1c 66  24 20 20 20 20 20 20 20  |_skip..f$       |
00005420  20 20 20 4c 44 4d 46 44  20 52 31 33 21 2c 7b 52  |   LDMFD R13!,{R|
00005430  30 2d 52 33 2c 52 31 32  7d 0d 1c 70 1a 20 20 20  |0-R3,R12}..p.   |
00005440  20 20 20 20 20 20 20 53  55 42 20 52 30 2c 52 30  |       SUB R0,R0|
00005450  2c 52 32 0d 1c 7a 1a 20  20 20 20 20 20 20 20 20  |,R2..z.         |
00005460  20 53 55 42 20 52 31 2c  52 31 2c 52 32 0d 1c 84  | SUB R1,R1,R2...|
00005470  1d 20 20 20 20 20 20 20  20 20 20 53 55 42 53 20  |.          SUBS |
00005480  52 31 31 2c 52 31 31 2c  23 31 0d 1c 8e 1f 20 20  |R11,R11,#1....  |
00005490  20 20 20 20 20 20 20 20  42 47 54 20 6d 6f 76 65  |        BGT move|
000054a0  5f 73 77 5f 6c 6f 6f 70  31 0d 1c 98 25 20 20 20  |_sw_loop1...%   |
000054b0  20 20 20 20 20 20 20 4c  44 4d 46 44 20 52 31 33  |       LDMFD R13|
000054c0  21 2c 7b 52 30 2d 52 31  32 2c 50 43 7d 5e 0d 1c  |!,{R0-R12,PC}^..|
000054d0  a2 0c 2e 6d 6f 76 65 5f  73 65 0d 1c ac 41 20 20  |...move_se...A  |
000054e0  20 20 20 20 20 20 20 20  3b 20 4f 6e 20 65 6e 74  |        ; On ent|
000054f0  72 79 20 52 30 3d 73 72  63 2c 20 52 31 3d 64 65  |ry R0=src, R1=de|
00005500  73 74 2c 20 52 31 31 20  3d 20 68 65 69 67 68 74  |st, R11 = height|
00005510  2c 20 52 31 32 3d 77 69  64 74 68 0d 1c b6 25 20  |, R12=width...% |
00005520  20 20 20 20 20 20 20 20  20 53 54 4d 46 44 20 52  |         STMFD R|
00005530  31 33 21 2c 7b 52 30 2d  52 31 32 2c 52 31 34 7d  |13!,{R0-R12,R14}|
00005540  0d 1c c0 2b 20 20 20 20  20 20 20 20 20 20 4c 44  |...+          LD|
00005550  52 20 52 33 2c 5b 6d 65  6d 2c 23 61 72 63 5f 73  |R R3,[mem,#arc_s|
00005560  63 72 65 65 6e 73 74 61  72 74 5d 0d 1c ca 04 0d  |creenstart].....|
00005570  1c d4 17 20 20 20 20 20  20 20 20 20 20 4d 4f 56  |...          MOV|
00005580  20 52 32 2c 52 34 0d 1c  de 04 0d 1c e8 36 20 20  | R2,R4.......6  |
00005590  20 20 20 20 20 20 20 20  4d 4c 41 20 52 33 2c 52  |        MLA R3,R|
000055a0  32 2c 52 31 31 2c 52 33  20 20 3b 20 4f 66 66 73  |2,R11,R3  ; Offs|
000055b0  65 74 20 74 6f 20 74 68  65 20 62 6f 74 74 6f 6d  |et to the bottom|
000055c0  0d 1c f2 1a 20 20 20 20  20 20 20 20 20 20 53 55  |....          SU|
000055d0  42 20 52 33 2c 52 33 2c  52 32 0d 1c fc 1a 20 20  |B R3,R3,R2....  |
000055e0  20 20 20 20 20 20 20 20  41 44 44 20 52 30 2c 52  |        ADD R0,R|
000055f0  30 2c 52 33 0d 1d 06 1a  20 20 20 20 20 20 20 20  |0,R3....        |
00005600  20 20 41 44 44 20 52 31  2c 52 31 2c 52 33 0d 1d  |  ADD R1,R1,R3..|
00005610  10 04 0d 1d 1a 1a 20 20  20 20 20 20 20 20 20 20  |......          |
00005620  53 55 42 20 52 33 2c 52  31 2c 52 30 0d 1d 24 18  |SUB R3,R1,R0..$.|
00005630  20 20 20 20 20 20 20 20  20 20 80 20 52 33 2c 52  |          . R3,R|
00005640  33 2c 23 33 0d 1d 2e 12  2e 6d 6f 76 65 5f 73 65  |3,#3.....move_se|
00005650  5f 6c 6f 6f 70 31 0d 1d  38 24 20 20 20 20 20 20  |_loop1..8$      |
00005660  20 20 20 20 53 54 4d 46  44 20 52 31 33 21 2c 7b  |    STMFD R13!,{|
00005670  52 30 2d 52 33 2c 52 31  32 7d 0d 1d 42 20 20 20  |R0-R3,R12}..B   |
00005680  20 20 20 20 20 20 20 20  41 44 44 20 50 43 2c 50  |        ADD PC,P|
00005690  43 2c 52 33 2c 4c 53 4c  23 33 0d 1d 4c 14 20 20  |C,R3,LSL#3..L.  |
000056a0  20 20 20 20 20 20 20 20  45 51 55 44 20 30 0d 1d  |        EQUD 0..|
000056b0  56 20 20 20 20 20 20 20  20 20 20 20 42 4c 20 6c  |V           BL l|
000056c0  72 6f 66 66 73 65 74 6d  6f 64 34 69 73 30 0d 1d  |roffsetmod4is0..|
000056d0  60 1c 20 20 20 20 20 20  20 20 20 20 42 20 6d 6f  |`.          B mo|
000056e0  76 65 5f 73 65 5f 73 6b  69 70 0d 1d 6a 20 20 20  |ve_se_skip..j   |
000056f0  20 20 20 20 20 20 20 20  42 4c 20 6c 72 6f 66 66  |        BL lroff|
00005700  73 65 74 6d 6f 64 34 69  73 31 0d 1d 74 1c 20 20  |setmod4is1..t.  |
00005710  20 20 20 20 20 20 20 20  42 20 6d 6f 76 65 5f 73  |        B move_s|
00005720  65 5f 73 6b 69 70 0d 1d  7e 20 20 20 20 20 20 20  |e_skip..~       |
00005730  20 20 20 20 42 4c 20 6c  72 6f 66 66 73 65 74 6d  |    BL lroffsetm|
00005740  6f 64 34 69 73 32 0d 1d  88 1c 20 20 20 20 20 20  |od4is2....      |
00005750  20 20 20 20 42 20 6d 6f  76 65 5f 73 65 5f 73 6b  |    B move_se_sk|
00005760  69 70 0d 1d 92 20 20 20  20 20 20 20 20 20 20 20  |ip...           |
00005770  42 4c 20 6c 72 6f 66 66  73 65 74 6d 6f 64 34 69  |BL lroffsetmod4i|
00005780  73 33 0d 1d 9c 11 2e 6d  6f 76 65 5f 73 65 5f 73  |s3.....move_se_s|
00005790  6b 69 70 0d 1d a6 24 20  20 20 20 20 20 20 20 20  |kip...$         |
000057a0  20 4c 44 4d 46 44 20 52  31 33 21 2c 7b 52 30 2d  | LDMFD R13!,{R0-|
000057b0  52 33 2c 52 31 32 7d 0d  1d b0 1a 20 20 20 20 20  |R3,R12}....     |
000057c0  20 20 20 20 20 53 55 42  20 52 30 2c 52 30 2c 52  |     SUB R0,R0,R|
000057d0  32 0d 1d ba 1a 20 20 20  20 20 20 20 20 20 20 53  |2....          S|
000057e0  55 42 20 52 31 2c 52 31  2c 52 32 0d 1d c4 1d 20  |UB R1,R1,R2.... |
000057f0  20 20 20 20 20 20 20 20  20 53 55 42 53 20 52 31  |         SUBS R1|
00005800  31 2c 52 31 31 2c 23 31  0d 1d ce 1f 20 20 20 20  |1,R11,#1....    |
00005810  20 20 20 20 20 20 42 47  54 20 6d 6f 76 65 5f 73  |      BGT move_s|
00005820  65 5f 6c 6f 6f 70 31 0d  1d d8 25 20 20 20 20 20  |e_loop1...%     |
00005830  20 20 20 20 20 4c 44 4d  46 44 20 52 31 33 21 2c  |     LDMFD R13!,|
00005840  7b 52 30 2d 52 31 32 2c  50 43 7d 5e 0d 1d e2 05  |{R0-R12,PC}^....|
00005850  5d 0d 1d ec 0a 3d 70 61  73 73 25 0d 1d f6 05 3a  |]....=pass%....:|
00005860  0d 1e 00 16 dd a4 64 6f  68 61 72 64 77 61 72 65  |......dohardware|
00005870  73 63 72 6f 6c 6c 0d 1e  0a 0a 5b 4f 50 54 20 70  |scroll....[OPT p|
00005880  0d 1e 14 37 20 20 20 20  20 20 20 20 20 20 41 44  |...7          AD|
00005890  52 20 52 31 33 2c 68 61  72 64 77 61 72 65 5f 73  |R R13,hardware_s|
000058a0  63 72 6f 6c 6c 5f 73 74  61 63 6b 5f 73 70 61 63  |croll_stack_spac|
000058b0  65 5f 74 6f 70 2d 34 0d  1e 1e 25 20 20 20 20 20  |e_top-4...%     |
000058c0  20 20 20 20 20 53 54 4d  46 44 20 52 31 33 21 2c  |     STMFD R13!,|
000058d0  7b 52 30 2d 52 31 32 2c  52 31 34 7d 0d 1e 28 25  |{R0-R12,R14}..(%|
000058e0  20 20 20 20 20 20 20 20  20 20 3b 20 43 48 45 43  |          ; CHEC|
000058f0  4b 20 e7 20 eb 20 43 48  41 4e 47 45 44 3f 3f 3f  |K . . CHANGED???|
00005900  3f 0d 1e 32 26 20 20 20  20 20 20 20 20 20 20 3b  |?..2&          ;|
00005910  4c 44 52 42 20 52 30 2c  5b 6d 65 6d 2c 23 6c 61  |LDRB R0,[mem,#la|
00005920  73 74 6d 6f 64 65 5d 0d  1e 46 18 20 20 20 20 20  |stmode]..F.     |
00005930  20 20 20 20 20 3b 43 4d  50 20 52 30 2c 23 37 0d  |     ;CMP R0,#7.|
00005940  1e 50 1c 20 20 20 20 20  20 20 20 20 20 3b 3b 43  |.P.          ;;C|
00005950  4d 50 4e 45 20 52 30 2c  23 39 39 0d 1e 5a 1e 20  |MPNE R0,#99..Z. |
00005960  20 20 20 20 20 20 20 20  20 3b 53 57 49 45 51 20  |         ;SWIEQ |
00005970  26 31 30 30 2b 97 22 50  22 0d 1e 64 21 20 20 20  |&100+."P"..d!   |
00005980  20 20 20 20 20 20 20 3b  42 45 51 20 6e 6f 5f 73  |       ;BEQ no_s|
00005990  63 72 6f 6c 6c 5f 72 65  71 64 0d 1e 65 23 20 20  |croll_reqd..e#  |
000059a0  20 20 20 20 20 20 20 20  4c 44 52 42 20 52 30 2c  |        LDRB R0,|
000059b0  5b 6d 65 6d 2c 23 74 61  6d 70 65 72 5d 0d 1e 66  |[mem,#tamper]..f|
000059c0  17 20 20 20 20 20 20 20  20 20 20 43 4d 50 20 52  |.          CMP R|
000059d0  30 2c 23 30 0d 1e 67 20  20 20 20 20 20 20 20 20  |0,#0..g         |
000059e0  20 20 42 4e 45 20 6e 6f  5f 73 63 72 6f 6c 6c 5f  |  BNE no_scroll_|
000059f0  72 65 71 64 0d 1e 6e 0e  20 20 20 20 20 20 20 20  |reqd..n.        |
00005a00  20 20 0d 1e 78 30 20 20  20 20 20 20 20 20 20 20  |  ..x0          |
00005a10  3b 20 46 69 72 73 74 20  67 65 74 20 77 68 65 72  |; First get wher|
00005a20  65 20 74 68 65 20 73 63  72 65 65 6e 20 69 73 2e  |e the screen is.|
00005a30  2e 2e 0d 1e 82 28 20 20  20 20 20 20 20 20 20 20  |.....(          |
00005a40  4c 44 52 42 20 52 31 2c  5b 6d 65 6d 2c 23 63 72  |LDRB R1,[mem,#cr|
00005a50  74 5f 72 65 67 73 2b 31  33 5d 0d 1e 8c 28 20 20  |t_regs+13]...(  |
00005a60  20 20 20 20 20 20 20 20  4c 44 52 42 20 52 30 2c  |        LDRB R0,|
00005a70  5b 6d 65 6d 2c 23 63 72  74 5f 72 65 67 73 2b 31  |[mem,#crt_regs+1|
00005a80  32 5d 0d 1e 96 1c 20 20  20 20 20 20 20 20 20 20  |2]....          |
00005a90  80 20 52 30 2c 52 30 2c  23 25 31 31 31 31 0d 1e  |. R0,R0,#%1111..|
00005aa0  a0 20 20 20 20 20 20 20  20 20 20 20 41 44 44 20  |.           ADD |
00005ab0  52 31 2c 52 31 2c 52 30  2c 4c 53 4c 23 38 0d 1e  |R1,R1,R0,LSL#8..|
00005ac0  aa 04 0d 1e b4 26 20 20  20 20 20 20 20 20 20 20  |.....&          |
00005ad0  53 55 42 20 52 32 2c 6d  65 6d 2c 23 35 31 32 20  |SUB R2,mem,#512 |
00005ae0  3b 20 73 68 65 69 6c 61  0d 1e be 1f 20 20 20 20  |; sheila....    |
00005af0  20 20 20 20 20 20 4c 44  52 42 20 52 32 2c 5b 52  |      LDRB R2,[R|
00005b00  32 2c 23 26 32 30 5d 0d  1e c8 1e 20 20 20 20 20  |2,#&20]....     |
00005b10  20 20 20 20 20 4d 4f 56  53 20 52 32 2c 52 32 2c  |     MOVS R2,R2,|
00005b20  4c 53 52 23 32 0d 1e d2  04 0d 1e dc 18 20 20 20  |LSR#2........   |
00005b30  20 20 20 20 20 20 20 80  20 52 32 2c 52 32 2c 23  |       . R2,R2,#|
00005b40  37 0d 1e e6 1e 20 20 20  20 20 20 20 20 20 20 3b  |7....          ;|
00005b50  54 65 73 74 20 66 6f 72  20 4d 6f 64 65 20 34 0d  |Test for Mode 4.|
00005b60  1e f0 1c 20 20 20 20 20  20 20 20 20 20 43 4d 50  |...          CMP|
00005b70  20 20 20 52 32 2c 23 25  30 30 30 0d 1e fa 1c 20  |   R2,#%000.... |
00005b80  20 20 20 20 20 20 20 20  20 43 4d 50 4e 45 20 52  |         CMPNE R|
00005b90  32 2c 23 25 30 31 30 0d  1f 04 1d 20 20 20 20 20  |2,#%010....     |
00005ba0  20 20 20 20 20 ec 51 20  52 34 2c 23 31 36 30 20  |     .Q R4,#160 |
00005bb0  3b 20 34 30 0d 1f 0e 1a  20 20 20 20 20 20 20 20  |; 40....        |
00005bc0  20 20 ec 51 20 52 35 2c  23 34 20 3b 20 31 0d 1f  |  .Q R5,#4 ; 1..|
00005bd0  18 1e 20 20 20 20 20 20  20 20 20 20 3b 54 65 73  |..          ;Tes|
00005be0  74 20 66 6f 72 20 4d 6f  64 65 20 30 0d 1f 22 1c  |t for Mode 0..".|
00005bf0  20 20 20 20 20 20 20 20  20 20 43 4d 50 20 20 20  |          CMP   |
00005c00  52 32 2c 23 25 30 31 31  0d 1f 2c 1c 20 20 20 20  |R2,#%011..,.    |
00005c10  20 20 20 20 20 20 43 4d  50 4e 45 20 52 32 2c 23  |      CMPNE R2,#|
00005c20  25 31 31 31 0d 1f 36 17  20 20 20 20 20 20 20 20  |%111..6.        |
00005c30  20 20 ec 51 20 52 34 2c  23 38 30 0d 1f 40 16 20  |  .Q R4,#80..@. |
00005c40  20 20 20 20 20 20 20 20  20 ec 51 20 52 35 2c 23  |         .Q R5,#|
00005c50  31 0d 1f 4a 1e 20 20 20  20 20 20 20 20 20 20 3b  |1..J.          ;|
00005c60  54 65 73 74 20 66 6f 72  20 4d 6f 64 65 20 32 0d  |Test for Mode 2.|
00005c70  1f 54 1c 20 20 20 20 20  20 20 20 20 20 43 4d 50  |.T.          CMP|
00005c80  20 20 20 52 32 2c 23 25  31 30 31 0d 1f 5e 1e 20  |   R2,#%101..^. |
00005c90  20 20 20 20 20 20 20 20  20 ec 51 20 52 34 2c 23  |         .Q R4,#|
00005ca0  33 32 30 20 3b 20 33 32  30 0d 1f 68 1a 20 20 20  |320 ; 320..h.   |
00005cb0  20 20 20 20 20 20 20 ec  51 20 52 35 2c 23 32 20  |       .Q R5,#2 |
00005cc0  3b 20 34 0d 1f 72 1e 20  20 20 20 20 20 20 20 20  |; 4..r.         |
00005cd0  20 3b 54 65 73 74 20 66  6f 72 20 4d 6f 64 65 20  | ;Test for Mode |
00005ce0  31 0d 1f 7c 1c 20 20 20  20 20 20 20 20 20 20 43  |1..|.          C|
00005cf0  4d 50 20 20 20 52 32 2c  23 25 31 30 30 0d 1f 86  |MP   R2,#%100...|
00005d00  1c 20 20 20 20 20 20 20  20 20 20 43 4d 50 4e 45  |.          CMPNE|
00005d10  20 52 32 2c 23 25 31 31  30 0d 1f 90 17 20 20 20  | R2,#%110....   |
00005d20  20 20 20 20 20 20 20 ec  51 20 52 34 2c 23 38 30  |       .Q R4,#80|
00005d30  0d 1f 9a 16 20 20 20 20  20 20 20 20 20 20 ec 51  |....          .Q|
00005d40  20 52 35 2c 23 31 0d 1f  a4 1e 20 20 20 20 20 20  | R5,#1....      |
00005d50  20 20 20 20 3b 54 65 73  74 20 66 6f 72 20 4d 6f  |    ;Test for Mo|
00005d60  64 65 20 35 0d 1f ae 1c  20 20 20 20 20 20 20 20  |de 5....        |
00005d70  20 20 43 4d 50 20 20 20  52 32 2c 23 25 30 30 31  |  CMP   R2,#%001|
00005d80  0d 1f b8 18 20 20 20 20  20 20 20 20 20 20 ec 51  |....          .Q|
00005d90  20 52 34 2c 23 31 36 30  0d 1f c2 16 20 20 20 20  | R4,#160....    |
00005da0  20 20 20 20 20 20 ec 51  20 52 35 2c 23 34 0d 1f  |      .Q R5,#4..|
00005db0  cc 0e 20 20 20 20 20 20  20 20 20 20 0d 1f d6 2c  |..          ...,|
00005dc0  20 20 20 20 20 20 20 20  20 20 3b 20 41 6e 64 20  |          ; And |
00005dd0  74 68 65 6e 20 77 68 65  72 65 20 69 74 20 75 73  |then where it us|
00005de0  65 64 20 74 6f 20 62 65  0d 1f e0 30 20 20 20 20  |ed to be...0    |
00005df0  20 20 20 20 20 20 4c 44  52 20 52 30 2c 5b 6d 65  |      LDR R0,[me|
00005e00  6d 2c 23 73 63 72 65 65  6e 73 74 61 72 74 5f 70  |m,#screenstart_p|
00005e10  72 65 76 69 6f 75 73 5d  0d 1f ea 0e 20 20 20 20  |revious]....    |
00005e20  20 20 20 20 20 20 0d 1f  f4 35 20 20 20 20 20 20  |      ...5      |
00005e30  20 20 20 20 3b 20 49 66  20 69 74 20 68 61 73 6e  |    ; If it hasn|
00005e40  27 74 20 6d 6f 76 65 64  20 74 68 65 6e 20 64 6f  |'t moved then do|
00005e50  20 6e 6f 74 68 69 6e 67  2e 2e 2e 0d 1f fe 1b 20  | nothing....... |
00005e60  20 20 20 20 20 20 20 20  20 53 55 42 53 20 52 30  |         SUBS R0|
00005e70  2c 52 31 2c 52 30 0d 20  08 1d 20 20 20 20 20 20  |,R1,R0. ..      |
00005e80  20 20 20 20 53 57 49 45  51 20 26 31 30 30 2b 97  |    SWIEQ &100+.|
00005e90  22 4b 22 0d 20 12 20 20  20 20 20 20 20 20 20 20  |"K". .          |
00005ea0  20 42 45 51 20 6e 6f 5f  73 63 72 6f 6c 6c 5f 72  | BEQ no_scroll_r|
00005eb0  65 71 64 0d 20 1c 30 20  20 20 20 20 20 20 20 20  |eqd. .0         |
00005ec0  20 53 54 52 20 52 31 2c  5b 6d 65 6d 2c 23 73 63  | STR R1,[mem,#sc|
00005ed0  72 65 65 6e 73 74 61 72  74 5f 70 72 65 76 69 6f  |reenstart_previo|
00005ee0  75 73 5d 0d 20 26 0e 20  20 20 20 20 20 20 20 20  |us]. &.         |
00005ef0  20 0d 20 30 37 20 20 20  20 20 20 20 20 20 20 4c  | . 07          L|
00005f00  44 52 42 20 52 31 32 2c  5b 6d 65 6d 2c 23 63 72  |DRB R12,[mem,#cr|
00005f10  74 5f 72 65 67 73 2b 31  5d 20 3b 20 68 6f 72 69  |t_regs+1] ; hori|
00005f20  7a 2e 20 63 68 61 72 73  0d 20 3a 36 20 20 20 20  |z. chars. :6    |
00005f30  20 20 20 20 20 20 4c 44  52 42 20 52 31 31 2c 5b  |      LDRB R11,[|
00005f40  6d 65 6d 2c 23 63 72 74  5f 72 65 67 73 2b 36 5d  |mem,#crt_regs+6]|
00005f50  20 3b 20 76 65 72 74 2e  20 63 68 61 72 73 0d 20  | ; vert. chars. |
00005f60  44 1c 20 20 20 20 20 20  20 20 20 20 4d 55 4c 20  |D.          MUL |
00005f70  52 32 2c 52 31 32 2c 52  31 31 0d 20 4e 1c 20 20  |R2,R12,R11. N.  |
00005f80  20 20 20 20 20 20 20 20  41 44 44 4c 54 20 52 30  |        ADDLT R0|
00005f90  2c 52 32 2c 52 30 0d 20  58 0e 20 20 20 20 20 20  |,R2,R0. X.      |
00005fa0  20 20 20 20 0d 20 62 17  20 20 20 20 20 20 20 20  |    . b.        |
00005fb0  20 20 43 4d 50 20 52 30  2c 52 32 0d 20 6c 1d 20  |  CMP R0,R2. l. |
00005fc0  20 20 20 20 20 20 20 20  20 53 57 49 47 45 20 26  |         SWIGE &|
00005fd0  31 30 30 2b 97 22 4c 22  0d 20 76 20 20 20 20 20  |100+."L". v     |
00005fe0  20 20 20 20 20 20 42 47  45 20 6e 6f 5f 73 63 72  |      BGE no_scr|
00005ff0  6f 6c 6c 5f 72 65 71 64  0d 20 80 0e 20 20 20 20  |oll_reqd. ..    |
00006000  20 20 20 20 20 20 0d 20  8a 18 20 20 20 20 20 20  |      . ..      |
00006010  20 20 20 20 43 4d 50 20  52 31 32 2c 23 30 0d 20  |    CMP R12,#0. |
00006020  94 1a 20 20 20 20 20 20  20 20 20 20 43 4d 50 4e  |..          CMPN|
00006030  45 20 52 31 31 2c 23 30  0d 20 9e 1d 20 20 20 20  |E R11,#0. ..    |
00006040  20 20 20 20 20 20 53 57  49 45 51 20 26 31 30 30  |      SWIEQ &100|
00006050  2b 97 22 4d 22 0d 20 a8  20 20 20 20 20 20 20 20  |+."M". .        |
00006060  20 20 20 42 45 51 20 6e  6f 5f 73 63 72 6f 6c 6c  |   BEQ no_scroll|
00006070  5f 72 65 71 64 0d 20 b2  18 20 20 20 20 20 20 20  |_reqd. ..       |
00006080  20 20 20 20 20 20 20 20  20 20 20 20 20 0d 20 bc  |             . .|
00006090  32 20 20 20 20 20 20 20  20 20 20 3b 20 53 6f 20  |2          ; So |
000060a0  77 65 20 68 61 76 65 20  74 6f 20 64 6f 20 73 6f  |we have to do so|
000060b0  6d 65 20 73 63 72 6f 6c  6c 69 6e 67 2e 2e 2e 0d  |me scrolling....|
000060c0  20 c6 1a 20 20 20 20 20  20 20 20 20 20 3b 52 30  | ..          ;R0|
000060d0  3d 52 30 20 83 20 52 31  32 0d 20 d0 1a 20 20 20  |=R0 . R12. ..   |
000060e0  20 20 20 20 20 20 20 3b  52 32 3d 52 30 20 81 20  |       ;R2=R0 . |
000060f0  52 31 32 0d 20 da 1a 20  20 20 20 20 20 20 20 20  |R12. ..         |
00006100  20 3b 52 30 20 3c 20 52  31 32 2a 33 32 0d 20 e4  | ;R0 < R12*32. .|
00006110  17 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 52  |.          MOV R|
00006120  32 2c 23 30 0d 20 ee 1e  20 20 20 20 20 20 20 20  |2,#0. ..        |
00006130  20 20 43 4d 50 20 52 30  2c 52 31 32 2c 4c 53 4c  |  CMP R0,R12,LSL|
00006140  23 34 0d 20 f8 23 20 20  20 20 20 20 20 20 20 20  |#4. .#          |
00006150  53 55 42 47 45 20 52 30  2c 52 30 2c 52 31 32 2c  |SUBGE R0,R0,R12,|
00006160  4c 53 4c 23 34 0d 21 02  1f 20 20 20 20 20 20 20  |LSL#4.!..       |
00006170  20 20 20 41 44 44 47 45  20 52 32 2c 52 32 2c 23  |   ADDGE R2,R2,#|
00006180  31 3c 3c 34 0d 21 0c 1e  20 20 20 20 20 20 20 20  |1<<4.!..        |
00006190  20 20 43 4d 50 20 52 30  2c 52 31 32 2c 4c 53 4c  |  CMP R0,R12,LSL|
000061a0  23 33 0d 21 16 23 20 20  20 20 20 20 20 20 20 20  |#3.!.#          |
000061b0  53 55 42 47 45 20 52 30  2c 52 30 2c 52 31 32 2c  |SUBGE R0,R0,R12,|
000061c0  4c 53 4c 23 33 0d 21 20  1f 20 20 20 20 20 20 20  |LSL#3.! .       |
000061d0  20 20 20 41 44 44 47 45  20 52 32 2c 52 32 2c 23  |   ADDGE R2,R2,#|
000061e0  31 3c 3c 33 0d 21 2a 1e  20 20 20 20 20 20 20 20  |1<<3.!*.        |
000061f0  20 20 43 4d 50 20 52 30  2c 52 31 32 2c 4c 53 4c  |  CMP R0,R12,LSL|
00006200  23 32 0d 21 34 23 20 20  20 20 20 20 20 20 20 20  |#2.!4#          |
00006210  53 55 42 47 45 20 52 30  2c 52 30 2c 52 31 32 2c  |SUBGE R0,R0,R12,|
00006220  4c 53 4c 23 32 0d 21 3e  1f 20 20 20 20 20 20 20  |LSL#2.!>.       |
00006230  20 20 20 41 44 44 47 45  20 52 32 2c 52 32 2c 23  |   ADDGE R2,R2,#|
00006240  31 3c 3c 32 0d 21 48 1e  20 20 20 20 20 20 20 20  |1<<2.!H.        |
00006250  20 20 43 4d 50 20 52 30  2c 52 31 32 2c 4c 53 4c  |  CMP R0,R12,LSL|
00006260  23 31 0d 21 52 23 20 20  20 20 20 20 20 20 20 20  |#1.!R#          |
00006270  53 55 42 47 45 20 52 30  2c 52 30 2c 52 31 32 2c  |SUBGE R0,R0,R12,|
00006280  4c 53 4c 23 31 0d 21 5c  1f 20 20 20 20 20 20 20  |LSL#1.!\.       |
00006290  20 20 20 41 44 44 47 45  20 52 32 2c 52 32 2c 23  |   ADDGE R2,R2,#|
000062a0  31 3c 3c 31 0d 21 66 18  20 20 20 20 20 20 20 20  |1<<1.!f.        |
000062b0  20 20 43 4d 50 20 52 30  2c 52 31 32 0d 21 70 1d  |  CMP R0,R12.!p.|
000062c0  20 20 20 20 20 20 20 20  20 20 53 55 42 47 45 20  |          SUBGE |
000062d0  52 30 2c 52 30 2c 52 31  32 0d 21 7a 1c 20 20 20  |R0,R0,R12.!z.   |
000062e0  20 20 20 20 20 20 20 41  44 44 47 45 20 52 32 2c  |       ADDGE R2,|
000062f0  52 32 2c 23 31 0d 21 84  04 0d 21 8e 3a 20 20 20  |R2,#1.!...!.:   |
00006300  20 20 20 20 20 20 20 3b  20 53 6f 20 6e 6f 77 20  |       ; So now |
00006310  77 65 20 77 61 6e 74 20  74 6f 20 73 63 72 6f 6c  |we want to scrol|
00006320  6c 20 6c 65 66 74 2f 72  69 67 68 74 20 62 79 20  |l left/right by |
00006330  52 30 2c 0d 21 98 21 20  20 20 20 20 20 20 20 20  |R0,.!.!         |
00006340  20 3b 20 61 6e 64 20 75  70 2f 64 6f 77 6e 20 62  | ; and up/down b|
00006350  79 20 52 32 0d 21 a2 04  0d 21 ac 35 20 20 20 20  |y R2.!...!.5    |
00006360  20 20 20 20 20 20 43 4d  50 20 52 30 2c 52 31 32  |      CMP R0,R12|
00006370  2c 41 53 52 23 31 20 20  20 20 3b 20 48 41 4c 66  |,ASR#1    ; HALf|
00006380  20 6f 66 20 73 63 72 65  65 6e 66 75 6c 0d 21 b6  | of screenful.!.|
00006390  2d 20 20 20 20 20 20 20  20 20 20 41 44 44 47 45  |-          ADDGE|
000063a0  20 52 32 2c 52 32 2c 23  31 20 20 20 20 20 20 3b  | R2,R2,#1      ;|
000063b0  20 77 68 69 63 68 20 77  61 79 0d 21 c0 18 20 20  | which way.!..  |
000063c0  20 20 20 20 20 20 20 20  43 4d 50 20 52 32 2c 52  |        CMP R2,R|
000063d0  31 31 0d 21 ca 1d 20 20  20 20 20 20 20 20 20 20  |11.!..          |
000063e0  53 55 42 47 45 20 52 32  2c 52 32 2c 52 31 31 0d  |SUBGE R2,R2,R11.|
000063f0  21 d4 04 0d 21 de 29 20  20 20 20 20 20 20 20 20  |!...!.)         |
00006400  20 3b 20 42 79 20 76 65  72 69 66 69 63 61 74 69  | ; By verificati|
00006410  6f 6e 20 30 3c 3d 52 30  3c 52 31 32 0d 21 e8 18  |on 0<=R0<R12.!..|
00006420  20 20 20 20 20 20 20 20  20 20 3b 43 4d 50 20 52  |          ;CMP R|
00006430  30 2c 23 30 0d 21 f2 1e  20 20 20 20 20 20 20 20  |0,#0.!..        |
00006440  20 20 3b 53 57 49 4c 54  20 26 31 30 30 2b 97 22  |  ;SWILT &100+."|
00006450  21 22 0d 21 fc 19 20 20  20 20 20 20 20 20 20 20  |!".!..          |
00006460  3b 43 4d 50 20 52 30 2c  52 31 32 0d 22 06 1e 20  |;CMP R0,R12.".. |
00006470  20 20 20 20 20 20 20 20  20 3b 53 57 49 47 45 20  |         ;SWIGE |
00006480  26 31 30 30 2b 97 22 21  22 0d 22 10 29 20 20 20  |&100+."!".".)   |
00006490  20 20 20 20 20 20 20 3b  20 42 79 20 76 65 72 69  |       ; By veri|
000064a0  66 69 63 61 74 69 6f 6e  20 30 3c 3d 52 32 3c 52  |fication 0<=R2<R|
000064b0  31 31 0d 22 1a 18 20 20  20 20 20 20 20 20 20 20  |11."..          |
000064c0  3b 43 4d 50 20 52 32 2c  23 30 0d 22 24 1e 20 20  |;CMP R2,#0."$.  |
000064d0  20 20 20 20 20 20 20 20  3b 53 57 49 4c 54 20 26  |        ;SWILT &|
000064e0  31 30 30 2b 97 22 21 22  0d 22 2e 19 20 20 20 20  |100+."!"."..    |
000064f0  20 20 20 20 20 20 3b 43  4d 50 20 52 32 2c 52 31  |      ;CMP R2,R1|
00006500  31 0d 22 38 1e 20 20 20  20 20 20 20 20 20 20 3b  |1."8.          ;|
00006510  53 57 49 47 45 20 26 31  30 30 2b 97 22 21 22 0d  |SWIGE &100+."!".|
00006520  22 42 04 0d 22 4c 1e 20  20 20 20 20 20 20 20 20  |"B.."L.         |
00006530  20 43 4d 50 20 52 30 2c  52 31 32 2c 41 53 52 23  | CMP R0,R12,ASR#|
00006540  31 0d 22 56 1f 20 20 20  20 20 20 20 20 20 20 42  |1."V.          B|
00006550  47 45 20 6d 75 73 74 5f  73 63 72 6f 6c 6c 5f 77  |GE must_scroll_w|
00006560  0d 22 60 32 20 20 20 20  20 20 20 20 20 20 3b 20  |."`2          ; |
00006570  57 65 20 61 72 65 20 64  65 66 69 6e 61 74 65 6c  |We are definatel|
00006580  79 20 6d 6f 76 69 6e 67  20 65 61 73 74 77 61 72  |y moving eastwar|
00006590  64 73 0d 22 6a 1e 20 20  20 20 20 20 20 20 20 20  |ds."j.          |
000065a0  43 4d 50 20 52 32 2c 52  31 31 2c 41 53 52 23 31  |CMP R2,R11,ASR#1|
000065b0  0d 22 74 20 20 20 20 20  20 20 20 20 20 20 42 47  |."t           BG|
000065c0  54 20 6d 75 73 74 5f 73  63 72 6f 6c 6c 5f 6e 65  |T must_scroll_ne|
000065d0  0d 22 7e 13 2e 6d 75 73  74 5f 73 63 72 6f 6c 6c  |."~..must_scroll|
000065e0  5f 73 65 0d 22 88 3c 20  20 20 20 20 20 20 20 20  |_se.".<         |
000065f0  20 3b 20 57 65 20 61 72  65 20 64 65 66 69 6e 61  | ; We are defina|
00006600  74 65 6c 79 20 6d 6f 76  69 6e 67 20 53 45 2c 20  |tely moving SE, |
00006610  73 6f 20 63 61 6c 6c 20  6d 6f 76 65 5f 6e 77 0d  |so call move_nw.|
00006620  22 92 40 20 20 20 20 20  20 20 20 20 20 3b 20 57  |".@          ; W|
00006630  65 20 6e 65 65 64 20 52  30 3d 73 72 63 2c 20 52  |e need R0=src, R|
00006640  31 3d 64 65 73 74 2c 20  52 31 31 20 3d 20 68 65  |1=dest, R11 = he|
00006650  69 67 68 74 2c 20 52 31  32 3d 77 69 64 74 68 0d  |ight, R12=width.|
00006660  22 9c 1f 20 20 20 20 20  20 20 20 20 20 3b 20 52  |"..          ; R|
00006670  34 20 3d 20 6c 69 6e 65  6c 65 6e 67 74 68 0d 22  |4 = linelength."|
00006680  a6 1c 20 20 20 20 20 20  20 20 20 20 3b 53 57 49  |..          ;SWI|
00006690  20 26 31 30 30 2b 97 22  53 22 0d 22 b0 1c 20 20  | &100+."S"."..  |
000066a0  20 20 20 20 20 20 20 20  3b 53 57 49 20 26 31 30  |        ;SWI &10|
000066b0  30 2b 97 22 45 22 0d 22  ba 1c 20 20 20 20 20 20  |0+."E"."..      |
000066c0  20 20 20 20 3b 53 57 49  20 26 31 30 30 2b 97 22  |    ;SWI &100+."|
000066d0  20 22 0d 22 c4 1d 20 20  20 20 20 20 20 20 20 20  | "."..          |
000066e0  3b 52 31 31 3d 28 52 31  31 2d 52 32 29 2a 38 0d  |;R11=(R11-R2)*8.|
000066f0  22 ce 1c 20 20 20 20 20  20 20 20 20 20 53 55 42  |"..          SUB|
00006700  20 52 31 31 2c 52 31 31  2c 52 32 0d 22 d8 1f 20  | R11,R11,R2.".. |
00006710  20 20 20 20 20 20 20 20  20 4d 4f 56 20 52 31 31  |         MOV R11|
00006720  2c 52 31 31 2c 4c 53 4c  23 33 0d 22 e2 23 20 20  |,R11,LSL#3.".#  |
00006730  20 20 20 20 20 20 20 20  3b 52 31 32 3d 28 52 31  |        ;R12=(R1|
00006740  32 2d 52 30 29 2a 72 6f  77 6d 75 6c 74 0d 22 ec  |2-R0)*rowmult.".|
00006750  1c 20 20 20 20 20 20 20  20 20 20 53 55 42 20 52  |.          SUB R|
00006760  31 32 2c 52 31 32 2c 52  30 0d 22 f6 1c 20 20 20  |12,R12,R0."..   |
00006770  20 20 20 20 20 20 20 4d  55 4c 20 52 31 32 2c 52  |       MUL R12,R|
00006780  35 2c 52 31 32 0d 23 00  24 20 20 20 20 20 20 20  |5,R12.#.$       |
00006790  20 20 20 3b 52 30 3d 52  30 2a 52 35 2b 52 32 2a  |   ;R0=R0*R5+R2*|
000067a0  6c 69 6e 65 6c 65 6e 2a  38 0d 23 0a 1a 20 20 20  |linelen*8.#..   |
000067b0  20 20 20 20 20 20 20 4d  55 4c 20 52 32 2c 52 34  |       MUL R2,R4|
000067c0  2c 52 32 0d 23 14 1a 20  20 20 20 20 20 20 20 20  |,R2.#..         |
000067d0  20 4d 55 4c 20 52 30 2c  52 35 2c 52 30 0d 23 1e  | MUL R0,R5,R0.#.|
000067e0  20 20 20 20 20 20 20 20  20 20 20 41 44 44 20 52  |           ADD R|
000067f0  30 2c 52 30 2c 52 32 2c  4c 53 4c 23 33 0d 23 28  |0,R0,R2,LSL#3.#(|
00006800  17 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 52  |.          MOV R|
00006810  31 2c 23 30 0d 23 32 18  20 20 20 20 20 20 20 20  |1,#0.#2.        |
00006820  20 20 3b 4d 4f 56 20 52  30 2c 23 34 0d 23 3c 1b  |  ;MOV R0,#4.#<.|
00006830  20 20 20 20 20 20 20 20  20 20 3b 4d 4f 56 20 52  |          ;MOV R|
00006840  31 31 2c 23 32 35 36 0d  23 46 1d 20 20 20 20 20  |11,#256.#F.     |
00006850  20 20 20 20 20 3b 4d 4f  56 20 52 31 32 2c 23 33  |     ;MOV R12,#3|
00006860  32 30 2d 34 0d 23 50 1c  20 20 20 20 20 20 20 20  |20-4.#P.        |
00006870  20 20 3b 53 57 49 20 26  31 30 30 2b 97 22 21 22  |  ;SWI &100+."!"|
00006880  0d 23 5a 18 20 20 20 20  20 20 20 20 20 20 42 4c  |.#Z.          BL|
00006890  20 6d 6f 76 65 5f 6e 77  0d 23 64 1b 20 20 20 20  | move_nw.#d.    |
000068a0  20 20 20 20 20 20 42 20  73 63 72 6f 6c 6c 5f 64  |      B scroll_d|
000068b0  6f 6e 65 0d 23 6e 1e 20  20 20 20 20 20 20 20 20  |one.#n.         |
000068c0  20 42 20 6e 6f 5f 73 63  72 6f 6c 6c 5f 72 65 71  | B no_scroll_req|
000068d0  64 0d 23 78 13 2e 6d 75  73 74 5f 73 63 72 6f 6c  |d.#x..must_scrol|
000068e0  6c 5f 6e 65 0d 23 82 3c  20 20 20 20 20 20 20 20  |l_ne.#.<        |
000068f0  20 20 3b 20 57 65 20 61  72 65 20 64 65 66 69 6e  |  ; We are defin|
00006900  61 74 65 6c 79 20 6d 6f  76 69 6e 67 20 4e 45 2c  |ately moving NE,|
00006910  20 73 6f 20 63 61 6c 6c  20 6d 6f 76 65 5f 73 77  | so call move_sw|
00006920  0d 23 8c 40 20 20 20 20  20 20 20 20 20 20 3b 20  |.#.@          ; |
00006930  57 65 20 6e 65 65 64 20  52 30 3d 73 72 63 2c 20  |We need R0=src, |
00006940  52 31 3d 64 65 73 74 2c  20 52 31 31 20 3d 20 68  |R1=dest, R11 = h|
00006950  65 69 67 68 74 2c 20 52  31 32 3d 77 69 64 74 68  |eight, R12=width|
00006960  0d 23 96 1f 20 20 20 20  20 20 20 20 20 20 3b 20  |.#..          ; |
00006970  52 34 20 3d 20 6c 69 6e  65 6c 65 6e 67 74 68 0d  |R4 = linelength.|
00006980  23 a0 1c 20 20 20 20 20  20 20 20 20 20 3b 53 57  |#..          ;SW|
00006990  49 20 26 31 30 30 2b 97  22 4e 22 0d 23 aa 1c 20  |I &100+."N".#.. |
000069a0  20 20 20 20 20 20 20 20  20 3b 53 57 49 20 26 31  |         ;SWI &1|
000069b0  30 30 2b 97 22 45 22 0d  23 b4 1c 20 20 20 20 20  |00+."E".#..     |
000069c0  20 20 20 20 20 3b 53 57  49 20 26 31 30 30 2b 97  |     ;SWI &100+.|
000069d0  22 20 22 0d 23 be 24 20  20 20 20 20 20 20 20 20  |" ".#.$         |
000069e0  20 3b 52 31 3d 28 52 31  31 2d 52 32 29 2a 6c 69  | ;R1=(R11-R2)*li|
000069f0  6e 65 6c 65 6e 2a 38 0d  23 c8 1b 20 20 20 20 20  |nelen*8.#..     |
00006a00  20 20 20 20 20 53 55 42  20 52 31 2c 52 31 31 2c  |     SUB R1,R11,|
00006a10  52 32 0d 23 d2 1a 20 20  20 20 20 20 20 20 20 20  |R2.#..          |
00006a20  4d 55 4c 20 52 31 2c 52  34 2c 52 31 0d 23 dc 1d  |MUL R1,R4,R1.#..|
00006a30  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 52 31  |          MOV R1|
00006a40  2c 52 31 2c 4c 53 4c 23  33 0d 23 e6 17 20 20 20  |,R1,LSL#3.#..   |
00006a50  20 20 20 20 20 20 20 3b  52 31 31 3d 52 32 2a 38  |       ;R11=R2*8|
00006a60  0d 23 f0 1e 20 20 20 20  20 20 20 20 20 20 4d 4f  |.#..          MO|
00006a70  56 20 52 31 31 2c 52 32  2c 4c 53 4c 23 33 0d 23  |V R11,R2,LSL#3.#|
00006a80  fa 23 20 20 20 20 20 20  20 20 20 20 3b 52 31 32  |.#          ;R12|
00006a90  3d 28 52 31 32 2d 52 30  29 2a 72 6f 77 6d 75 6c  |=(R12-R0)*rowmul|
00006aa0  74 0d 24 04 1c 20 20 20  20 20 20 20 20 20 20 53  |t.$..          S|
00006ab0  55 42 20 52 31 32 2c 52  31 32 2c 52 30 0d 24 0e  |UB R12,R12,R0.$.|
00006ac0  1c 20 20 20 20 20 20 20  20 20 20 4d 55 4c 20 52  |.          MUL R|
00006ad0  31 32 2c 52 35 2c 52 31  32 0d 24 18 17 20 20 20  |12,R5,R12.$..   |
00006ae0  20 20 20 20 20 20 20 3b  52 30 3d 52 30 2a 52 35  |       ;R0=R0*R5|
00006af0  0d 24 22 1a 20 20 20 20  20 20 20 20 20 20 4d 55  |.$".          MU|
00006b00  4c 20 52 30 2c 52 35 2c  52 30 0d 24 2c 18 20 20  |L R0,R5,R0.$,.  |
00006b10  20 20 20 20 20 20 20 20  42 4c 20 6d 6f 76 65 5f  |        BL move_|
00006b20  73 77 0d 24 36 1b 20 20  20 20 20 20 20 20 20 20  |sw.$6.          |
00006b30  42 20 73 63 72 6f 6c 6c  5f 64 6f 6e 65 0d 24 40  |B scroll_done.$@|
00006b40  1e 20 20 20 20 20 20 20  20 20 20 42 20 6e 6f 5f  |.          B no_|
00006b50  73 63 72 6f 6c 6c 5f 72  65 71 64 0d 24 4a 12 2e  |scroll_reqd.$J..|
00006b60  6d 75 73 74 5f 73 63 72  6f 6c 6c 5f 77 0d 24 54  |must_scroll_w.$T|
00006b70  1e 20 20 20 20 20 20 20  20 20 20 43 4d 50 20 52  |.          CMP R|
00006b80  32 2c 52 31 31 2c 41 53  52 23 31 0d 24 5e 20 20  |2,R11,ASR#1.$^  |
00006b90  20 20 20 20 20 20 20 20  20 42 47 54 20 6d 75 73  |         BGT mus|
00006ba0  74 5f 73 63 72 6f 6c 6c  5f 6e 77 0d 24 68 13 2e  |t_scroll_nw.$h..|
00006bb0  6d 75 73 74 5f 73 63 72  6f 6c 6c 5f 73 77 0d 24  |must_scroll_sw.$|
00006bc0  72 3c 20 20 20 20 20 20  20 20 20 20 3b 20 57 65  |r<          ; We|
00006bd0  20 61 72 65 20 64 65 66  69 6e 61 74 65 6c 79 20  | are definately |
00006be0  6d 6f 76 69 6e 67 20 53  57 2c 20 73 6f 20 63 61  |moving SW, so ca|
00006bf0  6c 6c 20 6d 6f 76 65 5f  6e 65 0d 24 7c 40 20 20  |ll move_ne.$|@  |
00006c00  20 20 20 20 20 20 20 20  3b 20 57 65 20 6e 65 65  |        ; We nee|
00006c10  64 20 52 30 3d 73 72 63  2c 20 52 31 3d 64 65 73  |d R0=src, R1=des|
00006c20  74 2c 20 52 31 31 20 3d  20 68 65 69 67 68 74 2c  |t, R11 = height,|
00006c30  20 52 31 32 3d 77 69 64  74 68 0d 24 86 1f 20 20  | R12=width.$..  |
00006c40  20 20 20 20 20 20 20 20  3b 20 52 34 20 3d 20 6c  |        ; R4 = l|
00006c50  69 6e 65 6c 65 6e 67 74  68 0d 24 90 1c 20 20 20  |inelength.$..   |
00006c60  20 20 20 20 20 20 20 3b  53 57 49 20 26 31 30 30  |       ;SWI &100|
00006c70  2b 97 22 53 22 0d 24 9a  1c 20 20 20 20 20 20 20  |+."S".$..       |
00006c80  20 20 20 3b 53 57 49 20  26 31 30 30 2b 97 22 57  |   ;SWI &100+."W|
00006c90  22 0d 24 a4 1c 20 20 20  20 20 20 20 20 20 20 3b  |".$..          ;|
00006ca0  53 57 49 20 26 31 30 30  2b 97 22 20 22 0d 24 ae  |SWI &100+." ".$.|
00006cb0  22 20 20 20 20 20 20 20  20 20 20 3b 52 31 3d 28  |"          ;R1=(|
00006cc0  52 31 32 2d 52 30 29 2a  72 6f 77 6d 75 6c 74 0d  |R12-R0)*rowmult.|
00006cd0  24 b8 1b 20 20 20 20 20  20 20 20 20 20 53 55 42  |$..          SUB|
00006ce0  20 52 31 2c 52 31 32 2c  52 30 0d 24 c2 1a 20 20  | R1,R12,R0.$..  |
00006cf0  20 20 20 20 20 20 20 20  4d 55 4c 20 52 31 2c 52  |        MUL R1,R|
00006d00  35 2c 52 31 0d 24 cc 1d  20 20 20 20 20 20 20 20  |5,R1.$..        |
00006d10  20 20 3b 52 31 31 3d 28  52 31 31 2d 52 32 29 2a  |  ;R11=(R11-R2)*|
00006d20  38 0d 24 d6 1c 20 20 20  20 20 20 20 20 20 20 53  |8.$..          S|
00006d30  55 42 20 52 31 31 2c 52  31 31 2c 52 32 0d 24 e0  |UB R11,R11,R2.$.|
00006d40  1f 20 20 20 20 20 20 20  20 20 20 4d 4f 56 20 52  |.          MOV R|
00006d50  31 31 2c 52 31 31 2c 4c  53 4c 23 33 0d 24 ea 1d  |11,R11,LSL#3.$..|
00006d60  20 20 20 20 20 20 20 20  20 20 3b 52 31 32 3d 52  |          ;R12=R|
00006d70  30 2a 72 6f 77 6d 75 6c  74 0d 24 f4 1b 20 20 20  |0*rowmult.$..   |
00006d80  20 20 20 20 20 20 20 4d  55 4c 20 52 31 32 2c 52  |       MUL R12,R|
00006d90  30 2c 52 35 0d 24 fe 1e  20 20 20 20 20 20 20 20  |0,R5.$..        |
00006da0  20 20 3b 52 30 3d 52 32  2a 6c 69 6e 65 6c 65 6e  |  ;R0=R2*linelen|
00006db0  2a 38 0d 25 08 1a 20 20  20 20 20 20 20 20 20 20  |*8.%..          |
00006dc0  4d 55 4c 20 52 32 2c 52  34 2c 52 32 0d 25 12 1d  |MUL R2,R4,R2.%..|
00006dd0  20 20 20 20 20 20 20 20  20 20 4d 4f 56 20 52 30  |          MOV R0|
00006de0  2c 52 32 2c 4c 53 4c 23  33 0d 25 1c 18 20 20 20  |,R2,LSL#3.%..   |
00006df0  20 20 20 20 20 20 20 42  4c 20 6d 6f 76 65 5f 6e  |       BL move_n|
00006e00  65 0d 25 26 1b 20 20 20  20 20 20 20 20 20 20 42  |e.%&.          B|
00006e10  20 73 63 72 6f 6c 6c 5f  64 6f 6e 65 0d 25 30 1e  | scroll_done.%0.|
00006e20  20 20 20 20 20 20 20 20  20 20 42 20 6e 6f 5f 73  |          B no_s|
00006e30  63 72 6f 6c 6c 5f 72 65  71 64 0d 25 3a 13 2e 6d  |croll_reqd.%:..m|
00006e40  75 73 74 5f 73 63 72 6f  6c 6c 5f 6e 77 0d 25 44  |ust_scroll_nw.%D|
00006e50  3c 20 20 20 20 20 20 20  20 20 20 3b 20 57 65 20  |<          ; We |
00006e60  61 72 65 20 64 65 66 69  6e 61 74 65 6c 79 20 6d  |are definately m|
00006e70  6f 76 69 6e 67 20 4e 57  2c 20 73 6f 20 63 61 6c  |oving NW, so cal|
00006e80  6c 20 6d 6f 76 65 5f 73  65 0d 25 4e 40 20 20 20  |l move_se.%N@   |
00006e90  20 20 20 20 20 20 20 3b  20 57 65 20 6e 65 65 64  |       ; We need|
00006ea0  20 52 30 3d 73 72 63 2c  20 52 31 3d 64 65 73 74  | R0=src, R1=dest|
00006eb0  2c 20 52 31 31 20 3d 20  68 65 69 67 68 74 2c 20  |, R11 = height, |
00006ec0  52 31 32 3d 77 69 64 74  68 0d 25 58 1f 20 20 20  |R12=width.%X.   |
00006ed0  20 20 20 20 20 20 20 3b  20 52 34 20 3d 20 6c 69  |       ; R4 = li|
00006ee0  6e 65 6c 65 6e 67 74 68  0d 25 62 1c 20 20 20 20  |nelength.%b.    |
00006ef0  20 20 20 20 20 20 3b 53  57 49 20 26 31 30 30 2b  |      ;SWI &100+|
00006f00  97 22 4e 22 0d 25 6c 1c  20 20 20 20 20 20 20 20  |."N".%l.        |
00006f10  20 20 3b 53 57 49 20 26  31 30 30 2b 97 22 57 22  |  ;SWI &100+."W"|
00006f20  0d 25 76 1c 20 20 20 20  20 20 20 20 20 20 3b 53  |.%v.          ;S|
00006f30  57 49 20 26 31 30 30 2b  97 22 20 22 0d 25 80 1a  |WI &100+." ".%..|
00006f40  20 20 20 20 20 20 20 20  20 20 41 44 44 20 52 30  |          ADD R0|
00006f50  2c 52 30 2c 23 31 0d 25  8a 30 20 20 20 20 20 20  |,R0,#1.%.0      |
00006f60  20 20 20 20 3b 52 31 3d  28 52 31 31 2d 52 32 29  |    ;R1=(R11-R2)|
00006f70  2a 6c 69 6e 65 6c 65 6e  2a 38 2b 28 52 31 32 2d  |*linelen*8+(R12-|
00006f80  52 30 29 2a 52 35 0d 25  94 1b 20 20 20 20 20 20  |R0)*R5.%..      |
00006f90  20 20 20 20 53 55 42 20  52 31 2c 52 31 31 2c 52  |    SUB R1,R11,R|
00006fa0  32 0d 25 9e 1a 20 20 20  20 20 20 20 20 20 20 4d  |2.%..          M|
00006fb0  55 4c 20 52 31 2c 52 35  2c 52 31 0d 25 a8 1c 20  |UL R1,R5,R1.%.. |
00006fc0  20 20 20 20 20 20 20 20  20 53 55 42 20 52 31 32  |         SUB R12|
00006fd0  2c 52 31 32 2c 52 30 0d  25 b2 1c 20 20 20 20 20  |,R12,R0.%..     |
00006fe0  20 20 20 20 20 4d 55 4c  20 52 31 32 2c 52 35 2c  |     MUL R12,R5,|
00006ff0  52 31 32 0d 25 bc 21 20  20 20 20 20 20 20 20 20  |R12.%.!         |
00007000  20 41 44 44 20 52 31 2c  52 31 32 2c 52 31 2c 4c  | ADD R1,R12,R1,L|
00007010  53 4c 23 33 0d 25 c6 17  20 20 20 20 20 20 20 20  |SL#3.%..        |
00007020  20 20 3b 52 31 31 3d 52  32 2a 38 0d 25 d0 1e 20  |  ;R11=R2*8.%.. |
00007030  20 20 20 20 20 20 20 20  20 4d 4f 56 20 52 31 31  |         MOV R11|
00007040  2c 52 32 2c 4c 53 4c 23  33 0d 25 da 1d 20 20 20  |,R2,LSL#3.%..   |
00007050  20 20 20 20 20 20 20 3b  52 31 32 3d 52 30 2a 72  |       ;R12=R0*r|
00007060  6f 77 6d 75 6c 74 0d 25  e4 1b 20 20 20 20 20 20  |owmult.%..      |
00007070  20 20 20 20 4d 55 4c 20  52 31 32 2c 52 35 2c 52  |    MUL R12,R5,R|
00007080  30 0d 25 ee 13 20 20 20  20 20 20 20 20 20 20 3b  |0.%..          ;|
00007090  52 30 3d 30 0d 25 f8 17  20 20 20 20 20 20 20 20  |R0=0.%..        |
000070a0  20 20 4d 4f 56 20 52 30  2c 23 30 0d 26 02 18 20  |  MOV R0,#0.&.. |
000070b0  20 20 20 20 20 20 20 20  20 42 4c 20 6d 6f 76 65  |         BL move|
000070c0  5f 73 65 0d 26 0c 1b 20  20 20 20 20 20 20 20 20  |_se.&..         |
000070d0  20 42 20 73 63 72 6f 6c  6c 5f 64 6f 6e 65 0d 26  | B scroll_done.&|
000070e0  16 1e 20 20 20 20 20 20  20 20 20 20 42 20 6e 6f  |..          B no|
000070f0  5f 73 63 72 6f 6c 6c 5f  72 65 71 64 0d 26 20 0e  |_scroll_reqd.& .|
00007100  20 20 20 20 20 20 20 20  20 20 0d 26 2a 13 2e 6e  |          .&*..n|
00007110  6f 5f 73 63 72 6f 6c 6c  5f 72 65 71 64 0d 26 34  |o_scroll_reqd.&4|
00007120  1c 20 20 20 20 20 20 20  20 20 20 3b 53 57 49 20  |.          ;SWI |
00007130  26 31 30 30 2b 97 22 4f  22 0d 26 3e 25 20 20 20  |&100+."O".&>%   |
00007140  20 20 20 20 20 20 20 4c  44 4d 46 44 20 52 31 33  |       LDMFD R13|
00007150  21 2c 7b 52 30 2d 52 31  32 2c 50 43 7d 5e 0d 26  |!,{R0-R12,PC}^.&|
00007160  48 10 2e 73 63 72 6f 6c  6c 5f 64 6f 6e 65 0d 26  |H..scroll_done.&|
00007170  52 25 20 20 20 20 20 20  20 20 20 20 4c 44 4d 46  |R%          LDMF|
00007180  44 20 52 31 33 21 2c 7b  52 30 2d 52 31 32 2c 50  |D R13!,{R0-R12,P|
00007190  43 7d 5e 0d 26 5c 35 20  20 20 20 20 20 20 20 20  |C}^.&\5         |
000071a0  20 3b 4c 44 52 20 50 43  2c 74 68 69 73 5f 69 73  | ;LDR PC,this_is|
000071b0  5f 67 65 74 74 69 6e 67  5f 72 65 61 6c 6c 79 5f  |_getting_really_|
000071c0  68 6f 72 72 69 62 6c 65  0d 26 66 05 5d 0d 26 70  |horrible.&f.].&p|
000071d0  06 3d 70 0d ff                                    |.=p..|
000071d5