Sharp X68000 Disassemblies
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

sort.s 9.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680
  1. ;=============================================
  2. ; Filename sort.x
  3. ;
  4. ;
  5. ; Base address 000000
  6. ; Exec address 000000
  7. ; Text size 000760 byte(s)
  8. ; Data size 000000 byte(s)
  9. ; Bss size 0004a2 byte(s)
  10. ; 101 Labels
  11. ;
  12. ; Commandline dis -b2 -h -m68000 --sp -q1 -B -M -o120 -gsort.lab --overwrite sort.x sort.s
  13. ; DIS version 3.16
  14. ;=============================================
  15. .include inc/doscall.mac
  16. .include inc/iocscall.mac
  17. .include inc/fefunc.mac
  18. .cpu 68000
  19. .text
  20. L000000:
  21. lea.l (L000c02),sp
  22. move.l ($0008,a0),d0
  23. sub.l sp,d0
  24. move.l d0,(L000770)
  25. move.w #$0001,(L000776)
  26. clr.w (L000760)
  27. clr.w (L000762)
  28. clr.w (L000766)
  29. clr.w (L000768)
  30. clr.b (L000778)
  31. move.w #$0008,(L00076a)
  32. clr.w (L00076c)
  33. clr.w (L00076e)
  34. addq.l #1,a2
  35. L00004e:
  36. bsr.w L00062e
  37. move.b (a2),d0
  38. beq.w L00023a
  39. cmp.b #$2f,d0 ;'/'
  40. beq.s L000066
  41. cmp.b #$2d,d0 ;'-'
  42. bne.w L000204
  43. L000066:
  44. lea.l ($0001,a2),a2
  45. move.b (a2),d0
  46. beq.w L0005e8
  47. cmp.b #$20,d0 ;' '
  48. beq.w L0005e8
  49. cmp.b #$09,d0
  50. beq.w L0005e8
  51. L000080:
  52. move.b (a2),d0
  53. beq.w L00023a
  54. cmp.b #$2f,d0 ;'/'
  55. beq.s L00004e
  56. cmp.b #$2d,d0 ;'-'
  57. beq.s L00004e
  58. cmp.b #$20,d0 ;' '
  59. beq.s L00004e
  60. cmp.b #$09,d0
  61. beq.s L00004e
  62. cmp.b #$72,d0 ;'r'
  63. beq.w L0001c0
  64. cmp.b #$52,d0 ;'R'
  65. beq.w L0001c0
  66. cmp.b #$69,d0 ;'i'
  67. beq.w L0001e2
  68. cmp.b #$49,d0 ;'I'
  69. beq.w L0001e2
  70. cmp.b #$74,d0 ;'t'
  71. beq.w L000156
  72. cmp.b #$54,d0 ;'T'
  73. beq.w L000156
  74. cmp.b #$2b,d0 ;'+'
  75. beq.s L0000e2
  76. cmp.b #$4b,d0 ;'K'
  77. beq.s L0000e2
  78. cmp.b #$6b,d0 ;'k'
  79. bne.w L0005e8
  80. L0000e2:
  81. tst.w (L000762)
  82. bne.w L0005e8
  83. lea.l ($0001,a2),a2
  84. movea.l a2,a0
  85. clr.w d1
  86. L0000f4:
  87. move.b (a0)+,d0
  88. cmp.b #$30,d0 ;'0'
  89. bcs.s L000106
  90. cmp.b #$39,d0 ;'9'
  91. bhi.s L000106
  92. addq.w #1,d1
  93. bra.s L0000f4
  94. L000106:
  95. tst.w d1
  96. ble.w L0005e8
  97. cmp.w #$0005,d1
  98. bgt.w L0005e8
  99. subq.w #1,d1
  100. lea.l (L000756),a0
  101. clr.w d3
  102. L00011e:
  103. clr.w d0
  104. move.b (a2)+,d0
  105. sub.b #$30,d0 ;'0'
  106. move.w d1,d2
  107. lsl.w #1,d2
  108. mulu.w (a0,d2.w),d0
  109. add.w d0,d3
  110. dbra.w d1,L00011e
  111. tst.w d3
  112. ble.w L0005e8
  113. cmp.w #$0200,d3
  114. bgt.w L0005e8
  115. subq.w #1,d3
  116. move.w d3,(L000768)
  117. move.w #$ffff,(L000762)
  118. bra.w L000080
  119. L000156:
  120. tst.w (L000764)
  121. bne.w L0005e8
  122. lea.l ($0001,a2),a2
  123. movea.l a2,a0
  124. clr.w d1
  125. L000168:
  126. move.b (a0)+,d0
  127. cmp.b #$30,d0 ;'0'
  128. bcs.s L00017a
  129. cmp.b #$39,d0 ;'9'
  130. bhi.s L00017a
  131. addq.w #1,d1
  132. bra.s L000168
  133. L00017a:
  134. tst.w d1
  135. ble.w L0005e8
  136. cmp.w #$0002,d1
  137. bgt.w L0005e8
  138. subq.w #1,d1
  139. lea.l (L000756),a0
  140. clr.w d3
  141. L000192:
  142. clr.w d0
  143. move.b (a2)+,d0
  144. sub.b #$30,d0 ;'0'
  145. move.w d1,d2
  146. lsl.w #1,d2
  147. mulu.w (a0,d2.w),d0
  148. add.w d0,d3
  149. dbra.w d1,L000192
  150. tst.w d3
  151. ble.w L0005e8
  152. move.w d3,(L00076a)
  153. move.w #$ffff,(L000764)
  154. bra.w L000080
  155. L0001c0:
  156. tst.w (L000760)
  157. bne.w L0005e8
  158. move.w #$ffff,(L00076c)
  159. move.w #$ffff,(L000760)
  160. lea.l ($0001,a2),a2
  161. bra.w L000080
  162. L0001e2:
  163. tst.w (L000766)
  164. bne.w L0005e8
  165. move.w #$ffff,(L00076e)
  166. move.w #$ffff,(L000766)
  167. lea.l ($0001,a2),a2
  168. bra.w L000080
  169. L000204:
  170. lea.l (L000778),a0
  171. tst.b (a0)
  172. bne.w L0005e8
  173. L000210:
  174. move.b (a2),d0
  175. beq.s L000234
  176. cmp.b #$20,d0 ;' '
  177. beq.s L000234
  178. cmp.b #$09,d0
  179. beq.s L000234
  180. cmp.b #$2f,d0 ;'/'
  181. beq.s L000234
  182. cmp.b #$2d,d0 ;'-'
  183. beq.s L000234
  184. lea.l ($0001,a2),a2
  185. move.b d0,(a0)+
  186. bra.s L000210
  187. L000234:
  188. clr.b (a0)
  189. bra.w L00004e
  190. L00023a:
  191. lea.l (L000778),a0
  192. tst.b (a0)
  193. beq.s L00025a
  194. clr.w -(sp)
  195. move.l a0,-(sp)
  196. DOS _OPEN
  197. addq.l #6,sp
  198. tst.l d0
  199. bmi.w L0005f0
  200. move.w d0,(L000774)
  201. bra.s L000280
  202. L00025a:
  203. clr.w -(sp)
  204. DOS _DUP
  205. addq.l #2,sp
  206. tst.l d0
  207. bmi.w L0005f0
  208. move.w d0,(L000774)
  209. clr.w -(sp)
  210. DOS _CLOSE
  211. addq.l #2,sp
  212. move.w #$0002,-(sp)
  213. DOS _DUP
  214. addq.l #2,sp
  215. tst.l d0
  216. bmi.w L0005f0
  217. L000280:
  218. lea.l (L000c02),a0
  219. L000286:
  220. move.l (L000770),d0
  221. sub.l a0,d0
  222. move.l d0,-(sp)
  223. move.l a0,-(sp)
  224. move.w (L000774),-(sp)
  225. DOS _READ
  226. lea.l ($000a,sp),sp
  227. tst.l d0
  228. ble.s L0002b0
  229. lea.l (a0,d0.l),a0
  230. cmpi.b #$1a,(-$0001,a0)
  231. beq.s L0002b0
  232. bra.s L000286
  233. L0002b0:
  234. move.l a0,d0
  235. lea.l (L000c02),a0
  236. sub.l a0,d0
  237. move.l d0,(L0007fa)
  238. addq.l #1,d0
  239. and.b #$fe,d0
  240. cmp.l (L000770),d0
  241. bge.w L0005f8
  242. lea.l (a0,d0.l),a0
  243. move.l a0,(L0007fe)
  244. move.w (L000774),-(sp)
  245. DOS _CLOSE
  246. addq.l #2,sp
  247. lea.l (L000c02),a0
  248. move.l (L000770),d5
  249. add.l a0,d5
  250. sub.l (L0007fe),d5
  251. moveq.l #$0a,d1
  252. clr.l d2
  253. moveq.l #$1f,d3
  254. L0002fe:
  255. lsl.l #1,d5
  256. roxl.l #1,d2
  257. cmp.l d1,d2
  258. bcs.s L00030c
  259. bset.l #$00,d5
  260. sub.l d1,d2
  261. L00030c:
  262. dbra.w d3,L0002fe
  263. subq.l #1,d5
  264. move.l (L0007fa),d4
  265. lea.l (L000c02),a0
  266. movea.l (L0007fe),a1
  267. L000324:
  268. tst.l d4
  269. ble.w L0003ae
  270. subq.l #1,d5
  271. beq.w L0005f8
  272. move.l a0,(a1)+
  273. clr.w d1
  274. L000334:
  275. addq.w #1,d1
  276. move.b (a0)+,d0
  277. cmp.b #$1a,d0
  278. beq.s L000350
  279. cmp.b #$0d,d0
  280. beq.s L00035c
  281. subq.l #1,d4
  282. beq.s L000364
  283. cmp.w #$0200,d1
  284. bne.s L000334
  285. bra.s L000364
  286. L000350:
  287. clr.l d4
  288. subq.w #1,d1
  289. bne.s L000364
  290. lea.l (-$0004,a1),a1
  291. bra.s L0003ae
  292. L00035c:
  293. addq.w #1,d1
  294. lea.l ($0001,a0),a0
  295. subq.l #2,d4
  296. L000364:
  297. move.w d1,(a1)+
  298. movea.l (-$0006,a1),a2
  299. subq.w #1,d1
  300. clr.w d2
  301. L00036e:
  302. cmp.w (L000768),d2
  303. beq.s L0003a8
  304. move.b (a2),d0
  305. cmp.b #$09,d0
  306. bne.s L00039c
  307. move.w d2,d0
  308. ext.l d0
  309. divu.w (L00076a),d0
  310. swap.w d0
  311. move.w #$0008,d3
  312. sub.w d0,d3
  313. add.w d3,d2
  314. cmp.w (L000768),d2
  315. bgt.s L0003a8
  316. bra.s L00039e
  317. L00039c:
  318. addq.w #1,d2
  319. L00039e:
  320. lea.l ($0001,a2),a2
  321. dbra.w d1,L00036e
  322. suba.l a2,a2
  323. L0003a8:
  324. move.l a2,(a1)+
  325. bra.w L000324
  326. L0003ae:
  327. clr.l (a1)
  328. tst.w (L000760)
  329. bne.w L0004d2
  330. movea.l (L0007fe),a0
  331. L0003c0:
  332. tst.l (a0)
  333. beq.w L0005e6
  334. movea.l a0,a5
  335. lea.l ($000a,a0),a1
  336. tst.l ($0006,a5)
  337. beq.w L0004b4
  338. L0003d4:
  339. tst.l (a1)
  340. beq.w L000492
  341. move.l ($0006,a1),d0
  342. beq.w L000490
  343. movea.l d0,a3
  344. movea.l ($0006,a5),a2
  345. move.w ($0004,a1),d1
  346. move.w ($0004,a5),d2
  347. tst.w (L00076e)
  348. bne.s L00040e
  349. L0003f8:
  350. cmpm.b (a2)+,(a3)+
  351. bhi.w L000488
  352. bcs.w L000486
  353. subq.w #1,d1
  354. beq.w L000486
  355. subq.w #1,d2
  356. beq.s L000488
  357. bra.s L0003f8
  358. L00040e:
  359. clr.w d4
  360. clr.w d5
  361. L000412:
  362. move.b (a3)+,d6
  363. tst.w d4
  364. bne.s L000442
  365. cmp.b #$80,d6
  366. bcs.s L00042a
  367. cmp.b #$a0,d6
  368. bcs.s L00043c
  369. cmp.b #$e0,d6
  370. bcc.s L00043c
  371. L00042a:
  372. cmp.b #$41,d6 ;'A'
  373. bcs.s L000442
  374. cmp.b #$5a,d6 ;'Z'
  375. bhi.s L000442
  376. add.b #$20,d6 ;' '
  377. bra.s L000442
  378. L00043c:
  379. move.w #$ffff,d4
  380. bra.s L000444
  381. L000442:
  382. clr.w d4
  383. L000444:
  384. move.b (a2)+,d7
  385. tst.w d5
  386. bne.s L000474
  387. cmp.b #$80,d7
  388. bcs.s L00045c
  389. cmp.b #$a0,d7
  390. bcs.s L00046e
  391. cmp.b #$e0,d7
  392. bcc.s L00046e
  393. L00045c:
  394. cmp.b #$41,d7 ;'A'
  395. bcs.s L000474
  396. cmp.b #$5a,d7 ;'Z'
  397. bhi.s L000474
  398. add.b #$20,d7 ;' '
  399. bra.s L000474
  400. L00046e:
  401. move.w #$ffff,d5
  402. bra.s L000476
  403. L000474:
  404. clr.w d5
  405. L000476:
  406. cmp.b d7,d6
  407. bhi.s L000488
  408. bcs.s L000486
  409. subq.w #1,d1
  410. beq.s L000486
  411. subq.w #1,d2
  412. beq.s L000488
  413. bra.s L000412
  414. L000486:
  415. movea.l a1,a5
  416. L000488:
  417. lea.l ($000a,a1),a1
  418. bra.w L0003d4
  419. L000490:
  420. movea.l a1,a5
  421. L000492:
  422. move.l (a0),d5
  423. move.l ($0004,a0),d6
  424. move.w ($0008,a0),d7
  425. move.l (a5),(a0)
  426. move.l ($0004,a5),($0004,a0)
  427. move.w ($0008,a5),($0008,a0)
  428. move.l d5,(a5)
  429. move.l d6,($0004,a5)
  430. move.w d7,($0008,a5)
  431. L0004b4:
  432. move.w ($0004,a0),d0
  433. ext.l d0
  434. move.l d0,-(sp)
  435. move.l (a0),-(sp)
  436. move.w (L000776),-(sp)
  437. DOS _WRITE
  438. lea.l ($000a,sp),sp
  439. lea.l ($000a,a0),a0
  440. bra.w L0003c0
  441. L0004d2:
  442. movea.l (L0007fe),a0
  443. L0004d8:
  444. tst.l (a0)
  445. beq.w L0005e6
  446. movea.l a0,a5
  447. lea.l ($000a,a0),a1
  448. L0004e4:
  449. tst.l (a1)
  450. beq.w L0005a6
  451. move.l ($0006,a1),d0
  452. beq.w L00059e
  453. movea.l d0,a3
  454. move.l ($0006,a5),d0
  455. beq.w L00059c
  456. movea.l d0,a2
  457. move.w ($0004,a1),d1
  458. move.w ($0004,a5),d2
  459. tst.w (L00076e)
  460. bne.s L000524
  461. L00050e:
  462. cmpm.b (a2)+,(a3)+
  463. bhi.w L00059c
  464. bcs.w L00059e
  465. subq.w #1,d1
  466. beq.w L00059e
  467. subq.w #1,d2
  468. beq.s L00059c
  469. bra.s L00050e
  470. L000524:
  471. clr.w d4
  472. clr.w d5
  473. L000528:
  474. move.b (a3)+,d6
  475. tst.w d4
  476. bne.s L000558
  477. cmp.b #$80,d6
  478. bcs.s L000540
  479. cmp.b #$a0,d6
  480. bcs.s L000552
  481. cmp.b #$e0,d6
  482. bcc.s L000552
  483. L000540:
  484. cmp.b #$41,d6 ;'A'
  485. bcs.s L000558
  486. cmp.b #$5a,d6 ;'Z'
  487. bhi.s L000558
  488. add.b #$20,d6 ;' '
  489. bra.s L000558
  490. L000552:
  491. move.w #$ffff,d4
  492. bra.s L00055a
  493. L000558:
  494. clr.w d4
  495. L00055a:
  496. move.b (a2)+,d7
  497. tst.w d5
  498. bne.s L00058a
  499. cmp.b #$80,d7
  500. bcs.s L000572
  501. cmp.b #$a0,d7
  502. bcs.s L000584
  503. cmp.b #$e0,d7
  504. bcc.s L000584
  505. L000572:
  506. cmp.b #$41,d7 ;'A'
  507. bcs.s L00058a
  508. cmp.b #$5a,d7 ;'Z'
  509. bhi.s L00058a
  510. add.b #$20,d7 ;' '
  511. bra.s L00058a
  512. L000584:
  513. move.w #$ffff,d5
  514. bra.s L00058c
  515. L00058a:
  516. clr.w d5
  517. L00058c:
  518. cmp.b d7,d6
  519. bhi.s L00059c
  520. bcs.s L00059e
  521. subq.w #1,d1
  522. beq.s L00059e
  523. subq.w #1,d2
  524. beq.s L00059c
  525. bra.s L000528
  526. L00059c:
  527. movea.l a1,a5
  528. L00059e:
  529. lea.l ($000a,a1),a1
  530. bra.w L0004e4
  531. L0005a6:
  532. move.l (a0),d5
  533. move.l ($0004,a0),d6
  534. move.w ($0008,a0),d7
  535. move.l (a5),(a0)
  536. move.l ($0004,a5),($0004,a0)
  537. move.w ($0008,a5),($0008,a0)
  538. move.l d5,(a5)
  539. move.l d6,($0004,a5)
  540. move.w d7,($0008,a5)
  541. move.w ($0004,a0),d0
  542. ext.l d0
  543. move.l d0,-(sp)
  544. move.l (a0),-(sp)
  545. move.w (L000776),-(sp)
  546. DOS _WRITE
  547. lea.l ($000a,sp),sp
  548. lea.l ($000a,a0),a0
  549. bra.w L0004d8
  550. L0005e6:
  551. bra.s L000620
  552. L0005e8:
  553. pea.l (L000706)
  554. bra.s L0005fe
  555. L0005f0:
  556. pea.l (L00071d)
  557. bra.s L0005fe
  558. L0005f8:
  559. pea.l (L00073c)
  560. L0005fe:
  561. pea.l (L000644)
  562. DOS _PRINT
  563. addq.l #4,sp
  564. DOS _PRINT
  565. addq.l #4,sp
  566. pea.l (L000650)
  567. DOS _PRINT
  568. addq.l #4,sp
  569. move.w #$0001,(L0007f8)
  570. bra.s L000626
  571. L000620:
  572. clr.w (L0007f8)
  573. L000626:
  574. move.w (L0007f8),-(sp)
  575. DOS _EXIT2
  576. L00062e:
  577. move.b (a2),d0
  578. cmp.b #$20,d0 ;' '
  579. beq.s L00063c
  580. cmp.b #$09,d0
  581. bne.s L000642
  582. L00063c:
  583. lea.l ($0001,a2),a2
  584. bra.s L00062e
  585. L000642:
  586. rts
  587. L000644:
  588. .dc.b 'Sort v1.0',$0d,$0a,$00
  589. L000650:
  590. .dc.b '使用法: sort [スイッチ] [ファイル名]',$0d,$0a
  591. .dc.b ' /r 降順',$0d,$0a
  592. .dc.b ' /i 大文字小文字の区別なし',$0d,$0a
  593. .dc.b ' /kn キーの位置 n=1~512',$0d,$0a
  594. .dc.b ' /tn タブサイズ n=1~99',$0d,$0a,$00
  595. L000706:
  596. .dc.b 'パラメータが無効です',$0d,$0a,$00
  597. L00071d:
  598. .dc.b 'ファイルがオープンできません',$0d,$0a,$00
  599. L00073c:
  600. .dc.b 'ファイルが大きすぎます',$0d,$0a,$00,$00
  601. L000756:
  602. .dc.b $00,$01,$00,$0a,$00,$64,$03,$e8
  603. .dc.b $27,$10
  604. .bss
  605. L000760:
  606. .ds.w 1
  607. L000762:
  608. .ds.w 1
  609. L000764:
  610. .ds.w 1
  611. L000766:
  612. .ds.w 1
  613. L000768:
  614. .ds.w 1
  615. L00076a:
  616. .ds.w 1
  617. L00076c:
  618. .ds.w 1
  619. L00076e:
  620. .ds.w 1
  621. L000770:
  622. .ds.l 1
  623. L000774:
  624. .ds.w 1
  625. L000776:
  626. .ds.w 1
  627. L000778:
  628. .ds.b 128
  629. L0007f8:
  630. .ds.w 1
  631. L0007fa:
  632. .ds.l 1
  633. L0007fe:
  634. .ds.b 1028
  635. L000c02:
  636. .end L000000