home *** CD-ROM | disk | FTP | other *** search
/ Loadstar Extras 3 / Ex3side1.d64 / rle.s < prev    next >
Text File  |  2022-08-28  |  6KB  |  528 lines

  1.  
  2. open =$ffc0
  3. readst =$ffb7
  4. setlfs =$ffba
  5. setnam =$ffbd
  6. load =$ffd5
  7. getin =$ffe4
  8. clrchn =$ffcc
  9. close =$ffc3   ;a
  10. chrin =$ffcf
  11. chkout =$ffc9  ;x
  12. chkin =$ffc6   ;x
  13. plot =$fff0
  14. chrout =$ffd2
  15. color'pointer =243
  16. screen'line'pointer =209
  17. print'number =$bdcd ;x,a
  18. clear'line =59903
  19. background =53281
  20. border =53280
  21. unlisten =$ffae
  22. clall =$ffe7
  23.  
  24. buffer =251
  25. output'buffer =253
  26. start'of'literal =$14
  27.  
  28. .org $c000
  29. .mem
  30.  
  31. .obj "@0:rle c000"
  32.  
  33. jmp rleload       ;sysadr,file$,dev,location (0 to respect load address)
  34. jmp encode        ;sysadr,file$,dev,buffer,out$,dev,load address
  35. jmp pack'mem      ;sysad,begin,end,dest
  36. jmp unpack'mem    ;sysadr,location,dest
  37. jmp range'decode  ;253 source, 174 dest
  38. jmp range'pack    ;251 source,174 end,253 dest
  39.  
  40.  
  41. rleload lda #0
  42. sta mode
  43. jsr get'string
  44. jsr setnam
  45. jsr get'number
  46. sty device
  47. tya
  48. tax
  49. lda #2
  50. ldy #2
  51. jsr setlfs
  52. jsr open
  53. jsr clrchn
  54. ldx #2
  55. jsr chkin
  56.  
  57. jsr get'number
  58.  
  59. get'load'address jsr getin
  60. sta 174
  61. jsr getin
  62. sta 175
  63.  
  64. lda $15
  65. beq decode
  66.  
  67. sta 175
  68. lda $14
  69. sta 174
  70.  
  71. decode ldy #0
  72. jsr getin
  73. beq done'decoding
  74. sta 251
  75. cmp #129
  76. bcs dispatch'literal
  77.  
  78. dispatch'packed cmp #128
  79. bne +
  80. dec 251
  81. + jsr getin
  82. - sta (174),y
  83. inc 174
  84. bne +
  85. inc 175
  86. + dec 251
  87. bne -
  88. jsr readst
  89. and #66
  90. bne done'decoding
  91. jmp decode
  92.  
  93. dispatch'literal and #127
  94. sta 251
  95. - jsr getin
  96. sta (174),y
  97. inc 174
  98. bne +
  99. inc 175
  100. + dec 251
  101. bne -
  102. jsr readst
  103. and #66
  104. bne done'decoding
  105. jmp decode
  106.  
  107. done'decoding jsr clrchn
  108. lda #2
  109. jmp close
  110.  
  111.  
  112. unpack'mem jsr get'number
  113. sty 253
  114. sta 254
  115. jsr get'number
  116. sty 174
  117. sta 175
  118. sei
  119.  
  120. range'decode ldy #0
  121. ldx #$74
  122. stx 1
  123. lda (253),y
  124. pha
  125. lda #1
  126. clc
  127. adc 253
  128. sta 253
  129. lda #0
  130. adc 254
  131. sta 254
  132. ldx #$77
  133. stx 1
  134. pla
  135. beq rdone'decoding
  136. sta 251
  137. cmp #129
  138. bcs rdispatch'literal
  139.  
  140. rdispatch'packed cmp #128
  141. bne +
  142. dec 251
  143. + ldx #$74
  144. stx 1
  145. lda (253),y
  146. pha
  147. lda #1
  148. clc
  149. adc 253
  150. sta 253
  151. lda #0
  152. adc 254
  153. sta 254
  154. ldx #$77
  155. stx 1
  156. pla
  157.  
  158. - sta (174),y
  159. inc 174
  160. bne +
  161. inc 175
  162. + dec 251
  163. bne -
  164. jmp range'decode
  165.  
  166. rdispatch'literal and #127
  167. sta 251
  168. - ldx #$74
  169. stx 1
  170. lda (253),y
  171. pha
  172. lda #1
  173. clc
  174. adc 253
  175. sta 253
  176. lda #0
  177. adc 254
  178. sta 254
  179. ldx #$77
  180. stx 1
  181. pla
  182. sta (174),y
  183. inc 174
  184. bne +
  185. inc 175
  186. + dec 251
  187. bne -
  188. jmp range'decode
  189.  
  190. rdone'decoding rts
  191.  
  192. encode lda #0
  193. sta mode
  194. jsr get'string
  195. jsr setnam
  196. jsr get'number
  197. sty device
  198. tya
  199. tax
  200. lda #1
  201. ldy #0
  202. jsr setlfs
  203. jsr get'number
  204. sty buffer
  205. sta buffer+1
  206.  
  207. ldx $14
  208. ldy $15
  209. lda #0
  210. jsr load
  211. stx eof
  212. sty eof+1
  213.  
  214. encode'setup lda #0
  215.  
  216. sta e'variable
  217. sta d'variable
  218.  
  219.  
  220. lda <$d000
  221. sta output'buffer
  222. lda >$d000
  223. sta output'buffer+1
  224. sei
  225. lda #$74
  226. sta 1
  227.  
  228. encode'loop ldy #0
  229. lda (buffer),y
  230. sta n'variable
  231. iny
  232. lda (buffer),y
  233. sta q'variable
  234. dey
  235.  
  236. cmp n'variable
  237. bne +
  238. jsr the'same
  239. jmp next
  240. + jsr not'same
  241.  
  242. next inc buffer
  243. bne +
  244. inc buffer+1
  245.  
  246. + lda buffer+1
  247. cmp eof+1
  248. bcc encode'loop
  249. lda buffer
  250. cmp eof
  251. bcc encode'loop
  252.  
  253. lda d'variable
  254. beq +
  255. jsr wrap'up'd
  256. jmp wrap'up
  257. + lda e'variable
  258. beq wrap'up
  259. jsr wrap'up'e
  260.  
  261. wrap'up lda #0
  262. tay
  263. sta (output'buffer),y
  264.  
  265. jmp write'output
  266.  
  267. the'same lda e'variable
  268. beq +
  269. jsr wrap'up'e
  270. + inc d'variable
  271. lda d'variable
  272. cmp #127
  273. bne +
  274. jmp write'rle
  275. + rts
  276.  
  277. write'rle ldy #0
  278. inc d'variable
  279. lda d'variable
  280. sta (output'buffer),y
  281. jsr bump'output'buffer
  282. lda n'variable
  283. sta (output'buffer),y
  284. jsr bump'output'buffer
  285. lda #0
  286. sta d'variable
  287. rts
  288.  
  289. not'same lda d'variable
  290. beq +
  291. jmp wrap'up'd
  292. + inc e'variable
  293. lda e'variable
  294. cmp #1
  295. bne +
  296. ldx buffer
  297. stx $14
  298. ldx buffer+1
  299. stx $15
  300. + cmp #127
  301. bne +
  302. jmp write'literal
  303. + rts
  304.  
  305. write'literal ldy #0
  306. lda e'variable
  307. ora #128
  308. sta (output'buffer),y
  309. jsr bump'output'buffer
  310.  
  311. literal'loop ldy #0
  312. - lda (start'of'literal),y
  313. sta (output'buffer),y
  314. jsr bump'output'buffer
  315. inc start'of'literal
  316. bne +
  317. inc start'of'literal+1
  318. + lda start'of'literal+1
  319. cmp buffer+1
  320. bcc -
  321. lda start'of'literal
  322. cmp buffer
  323. bcc -
  324. beq -
  325.  
  326. lda #0
  327. sta e'variable
  328. sta d'variable
  329. rts
  330.  
  331. wrap'up'd inc d'variable
  332. ldy #0
  333. lda d'variable
  334. sta (output'buffer),y
  335. jsr bump'output'buffer
  336. lda n'variable
  337. sta (output'buffer),y
  338. jsr bump'output'buffer
  339. lda #0
  340. sta d'variable
  341. rts
  342.  
  343.  
  344. wrap'up'e ldy #0
  345. lda e'variable
  346. ora #128
  347. sta (output'buffer),y
  348. jsr bump'output'buffer
  349.  
  350. literal'loop2 ldy #0
  351. - lda (start'of'literal),y
  352. sta (output'buffer),y
  353. jsr bump'output'buffer
  354. inc start'of'literal
  355. bne +
  356. inc start'of'literal+1
  357. + lda start'of'literal+1
  358. cmp buffer+1
  359. bcc -
  360. lda start'of'literal
  361. cmp buffer
  362. bcc -
  363.  
  364. lda #0
  365. sta e'variable
  366. sta d'variable
  367. rts
  368.  
  369. bump'output'buffer inc output'buffer
  370. bne +
  371. inc output'buffer+1
  372. + rts
  373.  
  374. write'output lda #$77
  375. sta 1
  376. cli
  377. lda mode
  378. beq open'output'file
  379. rts; end of pack at 253,254
  380.  
  381. open'output'file jsr get'string
  382. jsr setnam
  383. jsr get'number
  384. sty device
  385. tya
  386. tax
  387. lda #1
  388. ldy #1
  389. jsr setlfs
  390. jsr open
  391. jsr get'number
  392. sty start'address
  393. sta start'address+1
  394. jsr clrchn
  395. ldx #1
  396. jsr chkout
  397. lda start'address
  398. jsr chrout
  399. lda start'address+1
  400. jsr chrout
  401.  
  402. lda <$d000
  403. sta $14
  404. lda >$d000
  405. sta $15
  406.  
  407. output'loop ldy #0
  408. - ldx #$74
  409. sei
  410. stx 1
  411. lda ($14),y
  412. ldx #$77
  413. stx 1
  414. cli
  415. jsr chrout
  416. inc $14
  417. bne +
  418. inc $15
  419.  
  420. + lda $15
  421. cmp output'buffer+1
  422. bcc -
  423. lda $14
  424. cmp output'buffer
  425. bcc -
  426. beq -
  427.  
  428. jsr clrchn
  429. lda #1
  430. jmp close
  431.  
  432. range'pack lda #1
  433. sta mode
  434. lda 174
  435. sta eof
  436. lda 175
  437. sta eof+1
  438. lda #0
  439. sta e'variable
  440. sta d'variable
  441. jmp set
  442.  
  443. pack'mem lda #1
  444. sta mode
  445. jsr get'number
  446. sty buffer
  447. sta buffer+1
  448.  
  449. jsr get'number
  450. sty eof
  451. sty 174
  452. sta eof+1
  453. sta 175
  454.  
  455. lda #0
  456.  
  457. sta e'variable
  458. sta d'variable
  459.  
  460. jsr get'number
  461.  
  462. sty output'buffer
  463. sta output'buffer+1
  464. set sei
  465. lda #$74
  466. sta 1
  467. jsr encode'loop
  468. jmp make'variable
  469.  
  470.  
  471. ;***** get string from BASIC ****
  472.  
  473. get'string jsr $aefd
  474. jsr $ad9e
  475. jsr $b6a3
  476.  
  477. ldx $22
  478. ldy $23
  479. rts
  480.  
  481. ;**** get number from BASIC ****
  482.  
  483. get'number jsr $aefd
  484. jsr $ad8a
  485. jmp $b7f7
  486.  
  487. ;store lsb in 253
  488. ;store msb in 254
  489. ;makes varible, f%
  490.  
  491. make'variable lda "f"
  492. sta 251
  493. lda "%"
  494. sta 252
  495.  
  496. lda $7a
  497. pha
  498. lda $7b
  499. pha
  500.  
  501. lda <251
  502. sta $7a
  503. lda >251
  504. sta $7b
  505. jsr $b08b
  506. ldy #0
  507. lda 254 ;high byte
  508. sta ($47),y
  509. iny
  510. lda 253 ;low byte
  511. sta ($47),y
  512. pla
  513. sta $7b
  514. pla
  515. sta $7a
  516. rts
  517.  
  518.  
  519. device .byt 0
  520.  
  521. start'address .word 0
  522. d'variable .byt 0
  523. e'variable .byt 0
  524. n'variable .byt 0
  525. q'variable .byt 0
  526. eof .word 0
  527. mode .byt 0
  528.