menu.a65 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890
  1. #include "memmap.i65"
  2. #include "dma.i65"
  3. menu_init:
  4. sep #$20 : .as
  5. rep #$10 : .xl
  6. lda #^ROOT_DIR
  7. ldx #!ROOT_DIR
  8. sta dirptr_bank
  9. stx dirptr_addr
  10. sta dirstart_bank
  11. stx dirstart_addr
  12. stz menu_state
  13. stz dirend_onscreen
  14. lda #$02
  15. sta cursor_x
  16. lda #$09
  17. sta cursor_y
  18. lda #$01
  19. sta bar_xl
  20. lda #$3e
  21. sta bar_wl
  22. ldx #$0000
  23. stx dirptr_idx
  24. stx menu_sel
  25. stx direntry_xscroll
  26. stx direntry_xscroll_state
  27. lda #$01
  28. sta menu_dirty
  29. rep #$20 : .al
  30. lda #!dirlog
  31. sta dirlog_idx
  32. sep #$20 : .as
  33. lda #^dirlog
  34. sta dirlog_idx+2
  35. rts
  36. menuloop:
  37. menuloop_s1
  38. sep #$20 : .as
  39. rep #$10 : .xl
  40. lda isr_done
  41. lsr
  42. bcc menuloop_s1
  43. stz isr_done
  44. jsr printtime
  45. jsr menu_updates ;update stuff, check keys etc
  46. lda menu_dirty ;is there ANY reason to redraw the menu?
  47. cmp #$01
  48. beq menuloop_redraw ;then do
  49. jsr scroll_direntry
  50. bra menuloop_s1
  51. menuloop_redraw
  52. stz menu_dirty
  53. jsr menu_statusbar
  54. jsr menu_redraw
  55. jsr menu_cleanup ;update phase 2
  56. bra menuloop_s1
  57. rts
  58. menu_cleanup:
  59. sep #$20 : .as
  60. rep #$10 : .xl
  61. lda dirend_onscreen ;end of file list on screen?
  62. beq menu_cleanup_out ;
  63. lda dirend_idx
  64. lsr
  65. lsr
  66. pha
  67. menu_cleanup_loop ;pad rest of screen with empty lines
  68. cmp listdisp ;end of screen reached?
  69. beq + ;then leave
  70. pha
  71. clc
  72. adc #$09 ;first line in text area
  73. inc
  74. sta print_y
  75. stz print_x
  76. lda #^space64
  77. ldx #!space64
  78. sta print_bank
  79. stx print_src
  80. stz print_pal
  81. lda #64
  82. sta print_count
  83. jsr hiprint
  84. pla
  85. inc
  86. bra menu_cleanup_loop
  87. +
  88. pla
  89. cmp menu_sel
  90. beq menu_cleanup_out
  91. bpl menu_cleanup_out
  92. sta menu_sel
  93. menu_cleanup_out
  94. rts
  95. menu_updates:
  96. ;update selection, scroll etc
  97. lda menu_sel
  98. asl
  99. asl
  100. sta dirptr_idx
  101. lda menu_sel
  102. clc
  103. adc #$08
  104. sta bar_yl
  105. lda #$3e
  106. sta bar_wl
  107. lda #$01
  108. sta bar_xl
  109. ;get input
  110. jsr read_pad
  111. lda #$04
  112. and pad1trig+1
  113. bne key_down
  114. lda #$08
  115. and pad1trig+1
  116. bne key_up
  117. lda #$01
  118. and pad1trig+1
  119. bne key_right
  120. lda #$02
  121. and pad1trig+1
  122. bne key_left
  123. lda #$80
  124. and pad1trig+1
  125. bne key_b
  126. lda #$10
  127. and pad1trig+1
  128. bne key_start
  129. lda #$20
  130. and pad1trig+1
  131. bne key_select
  132. lda #$80
  133. and pad1trig
  134. bne key_a
  135. lda #$40
  136. and pad1trig
  137. bne key_x
  138. bra menuupd_out
  139. key_down
  140. jsr menu_key_down
  141. bra menuupd_out
  142. key_up
  143. jsr menu_key_up
  144. bra menuupd_out
  145. key_right
  146. jsr menu_key_right
  147. bra menuupd_out
  148. key_left
  149. jsr menu_key_left
  150. bra menuupd_out
  151. key_b
  152. jsr menu_key_b
  153. bra menuupd_out
  154. key_a
  155. jsr menu_key_a
  156. bra menuupd_out
  157. key_x
  158. jsr menu_key_x
  159. bra menuupd_out
  160. key_select
  161. jsr menu_key_select
  162. bra menuupd_out
  163. key_start
  164. jsr menu_key_start
  165. bra menuupd_out
  166. menuupd_out
  167. lda #$09
  168. sta cursor_y
  169. rts
  170. menu_redraw:
  171. lda menu_state
  172. beq redraw_filelist
  173. ; cmp 1
  174. ; beq redraw_main
  175. menu_redraw_out
  176. rts
  177. redraw_filelist
  178. ldy #$0000
  179. sty dirptr_idx
  180. sty direntry_fits_idx
  181. stz dirend_idx
  182. stz dirend_onscreen
  183. redraw_filelist_loop
  184. ldy dirptr_idx
  185. tya
  186. lsr
  187. lsr
  188. cmp listdisp
  189. beq redraw_filelist_last
  190. rep #$20 : .al
  191. lda [dirptr_addr], y
  192. sta @dirent_addr
  193. iny
  194. iny
  195. sep #$20 : .as
  196. lda [dirptr_addr], y ; load fileinfo bank
  197. clc
  198. adc #$c0 ; add $C0 for memory map
  199. sta @dirent_bank ; store as current bank
  200. cmp #$c0 ; if bank was 0 -> dirend entry in DB
  201. beq redraw_filelist_dirend ; handle dirend
  202. iny
  203. lda [dirptr_addr], y
  204. iny
  205. sta @dirent_type
  206. sty dirptr_idx
  207. jsr print_direntry
  208. inc direntry_fits_idx
  209. bra redraw_filelist_loop
  210. redraw_filelist_dirend
  211. dey ; recover last valid direntry number
  212. dey ; (we had 2x iny of the direntry pointer above,
  213. beq +
  214. dey ; so account for those too)
  215. dey
  216. dey
  217. dey
  218. + sty dirend_idx ; dirend_idx <- last valid directory entry.
  219. lda #$01 ; encountered during redraw, so must be on screen
  220. sta dirend_onscreen
  221. bra redraw_filelist_out
  222. redraw_filelist_last ;check if next offscreen item is end of dir
  223. iny
  224. iny
  225. lda [dirptr_addr], y
  226. beq redraw_filelist_dirend
  227. redraw_filelist_out
  228. ldx #$0000
  229. stx dirptr_idx
  230. brl menu_redraw_out
  231. print_direntry:
  232. lda cursor_y
  233. sta print_y
  234. inc
  235. sta cursor_y
  236. lda dirent_bank
  237. ldx dirent_addr
  238. phb
  239. pha
  240. plb
  241. lda @dirent_type
  242. and #$f0
  243. cmp #$80
  244. rep #$20 : .al
  245. bne dirent_is_file
  246. dirent_is_dir
  247. lda #$04 ;skip dir tgt
  248. sta @fd_fnoff
  249. lda #$01 ;different color for dirs
  250. bra dirent_type_cont
  251. dirent_is_file
  252. lda #$06 ;skip size string
  253. sta @fd_fnoff
  254. lda @dirent_type
  255. and #$00ff
  256. cmp #$0001 ;SMC -> palette 0 (white)
  257. bne +
  258. lda #$0000
  259. bra dirent_type_cont
  260. +
  261. cmp #$0003 ;SPC -> palette 2
  262. bne +
  263. lda #$0002
  264. bra dirent_type_cont
  265. cmp #$0004 ;IPS -> palette 2 (green)
  266. bne +
  267. lda #$0002
  268. bra dirent_type_cont
  269. +
  270. lda #$0000 ;default -> palette 0
  271. dirent_type_cont
  272. sta @print_pal
  273. rep #$20 : .al
  274. txa
  275. clc
  276. adc @fd_fnoff
  277. tax
  278. sep #$20 : .as
  279. lda !0, x ;load offset of leaf (file) name
  280. inc
  281. rep #$20 : .al
  282. and #$00ff ;kill hi byte
  283. sta @fd_fnoff
  284. txa
  285. clc
  286. adc @fd_fnoff
  287. clc
  288. adc @direntry_xscroll
  289. sta @fd_fnoff
  290. plb
  291. lda cursor_x
  292. sta print_x
  293. sep #$20 : .as
  294. ldx fd_fnoff
  295. lda #54
  296. sta print_count
  297. stx print_src
  298. lda dirent_bank
  299. sta print_bank
  300. jsr hiprint
  301. lda cursor_x
  302. clc
  303. adc print_done
  304. sta print_x
  305. lda print_over
  306. ldy direntry_fits_idx
  307. sta !direntry_fits, y
  308. lda #54
  309. sec
  310. sbc print_done
  311. sta print_count
  312. lda #^space64
  313. ldx #!space64
  314. sta print_bank
  315. stx print_src
  316. jsr hiprint
  317. sep #$20 : .as
  318. lda dirent_type
  319. and #$f0
  320. cmp #$80
  321. bne dirent_is_file_2
  322. lda #^text_dirmark
  323. ldx #!text_dirmark
  324. sta print_bank
  325. stx print_src
  326. bra dirent_type_cont_2
  327. dirent_is_file_2
  328. lda dirent_bank
  329. ldx dirent_addr
  330. sta print_bank
  331. stx print_src
  332. dirent_type_cont_2
  333. lda #56
  334. sta print_x
  335. lda #6
  336. sta print_count
  337. jsr hiprint
  338. rts
  339. menu_key_down:
  340. jsr scroll_direntry_clean
  341. lda listdisp
  342. dec
  343. cmp menu_sel
  344. bne down_noscroll
  345. lda #$01
  346. sta menu_dirty
  347. lda dirend_onscreen
  348. bne down_out
  349. rep #$20 : .al
  350. lda dirptr_addr
  351. clc
  352. adc #$04
  353. bcc +
  354. inc dirptr_bank
  355. + sta dirptr_addr
  356. sep #$20 : .as
  357. rts
  358. down_noscroll
  359. lda dirend_onscreen
  360. beq +
  361. lda dirend_idx
  362. lsr
  363. lsr
  364. cmp menu_sel
  365. beq menuupd_lastcursor
  366. bcc menuupd_lastcursor
  367. + lda menu_sel
  368. inc
  369. sta menu_sel
  370. down_out
  371. rts
  372. menu_key_up:
  373. jsr scroll_direntry_clean
  374. lda menu_sel
  375. bne up_noscroll
  376. lda #$01
  377. sta menu_dirty
  378. rep #$20 : .al
  379. lda dirptr_addr
  380. cmp dirstart_addr
  381. beq up_out
  382. sec
  383. sbc #$04
  384. bcs +
  385. dec dirptr_bank
  386. + sta dirptr_addr
  387. bra up_out
  388. up_noscroll
  389. dec
  390. sta menu_sel
  391. up_out
  392. sep #$20 : .as
  393. rts
  394. menuupd_lastcursor
  395. jsr scroll_direntry_clean
  396. lda dirend_idx
  397. lsr
  398. lsr
  399. sta menu_sel
  400. rts
  401. ; go back one page
  402. menu_key_left:
  403. stz direntry_xscroll
  404. stz direntry_xscroll_state
  405. lda #$01 ; must redraw afterwards
  406. sta menu_dirty
  407. rep #$20 : .al
  408. lda dirptr_addr ; get current direntry pointer
  409. beq + ; special case: if 0, we are at the first entry in memory
  410. lsr
  411. lsr ; make comparable to listdisp
  412. cmp listdisp ; if there's less or equal previous entries...
  413. beq + ; ...than display lines, reset to directory start
  414. bcc +
  415. sec
  416. sbc listdisp ; subtract one screen page's worth of entries
  417. asl
  418. asl ; make comparable to dirstart_addr again
  419. cmp dirstart_addr ; check whether calculated offset is before...
  420. bcc + ; ...start of directory
  421. - sta dirptr_addr ; store new selected entry
  422. sep #$20 : .as
  423. rts
  424. + lda dirstart_addr ; reset pointer to start of directory
  425. stz menu_sel ; reset the selection cursor too
  426. bra -
  427. ; go forth one page
  428. menu_key_right:
  429. stz direntry_xscroll
  430. stz direntry_xscroll_state
  431. sep #$20 : .as
  432. lda dirend_onscreen
  433. bne menuupd_lastcursor
  434. lda #$01
  435. sta menu_dirty
  436. rep #$20 : .al
  437. lda listdisp
  438. asl
  439. asl
  440. clc
  441. adc dirptr_addr
  442. sta dirptr_addr
  443. sep #$20 : .as
  444. rts
  445. menu_key_a:
  446. jsr select_item
  447. rts
  448. menu_key_select:
  449. rts
  450. menu_key_start:
  451. jsr select_last_file
  452. rts
  453. menu_key_b:
  454. stz direntry_xscroll
  455. stz direntry_xscroll_state
  456. rep #$20 : .al
  457. lda dirstart_addr
  458. beq skip_key_b
  459. sta dirptr_addr
  460. lda #$0000
  461. sta menu_sel
  462. bra select_item
  463. skip_key_b
  464. sep #$20 : .as
  465. rts
  466. select_item:
  467. rep #$20 : .al
  468. lda menu_sel
  469. and #$00ff
  470. asl
  471. asl
  472. tay
  473. sep #$20 : .as
  474. iny
  475. iny
  476. iny
  477. lda [dirptr_addr], y
  478. cmp #$01
  479. beq sel_is_file
  480. cmp #$03
  481. beq sel_is_spc
  482. cmp #$04
  483. beq sel_is_file
  484. cmp #$80
  485. beq sel_is_dir
  486. cmp #$81
  487. beq sel_is_parent
  488. select_item_cont
  489. rts
  490. sel_is_file
  491. jsr select_file
  492. bra select_item_cont
  493. sel_is_parent
  494. jsr select_parent
  495. bra select_item_cont
  496. sel_is_dir
  497. jsr select_dir
  498. bra select_item_cont
  499. sel_is_spc
  500. jsr select_spc
  501. bra select_item_cont
  502. select_file:
  503. ; have MCU load the rom
  504. dey
  505. rep #$20 : .al
  506. lda [dirptr_addr], y
  507. and #$00ff
  508. sta @MCU_PARAM+2
  509. dey
  510. dey
  511. lda [dirptr_addr], y
  512. sta @MCU_PARAM
  513. sep #$20 : .as
  514. lda #$00
  515. sta @$4200
  516. sei
  517. lda #$01
  518. sta @MCU_CMD
  519. select_file_fade:
  520. jsl @wram_fadeloop
  521. rts
  522. select_dir:
  523. tyx
  524. ; save old dir position
  525. rep #$20 : .al
  526. ldy #$0000
  527. lda @dirstart_addr
  528. sta [dirlog_idx], y
  529. iny
  530. iny
  531. lda @dirstart_bank
  532. sta [dirlog_idx], y
  533. iny
  534. lda @dirptr_addr
  535. sta [dirlog_idx], y
  536. iny
  537. iny
  538. lda @dirptr_bank
  539. sta [dirlog_idx], y
  540. iny
  541. lda @menu_sel
  542. sta [dirlog_idx], y
  543. lda @dirlog_idx
  544. clc
  545. adc #$0008
  546. sta @dirlog_idx
  547. sep #$20 : .as
  548. ;---
  549. ; y = direntry ptr
  550. txy
  551. dey
  552. lda [dirptr_addr], y
  553. clc
  554. adc #$c0
  555. sta @dirent_bank
  556. dey
  557. dey
  558. rep #$20 : .al
  559. lda [dirptr_addr], y
  560. sta @dirent_addr
  561. tax
  562. sep #$20 : .as
  563. lda @dirent_bank
  564. phb
  565. pha
  566. plb
  567. lda !2, x ; load linked dir start bank
  568. clc
  569. adc #$c0
  570. sta @dirptr_bank
  571. sta @dirstart_bank
  572. rep #$20 : .al
  573. lda !0, x ; load linked dir start address
  574. sta @dirptr_addr
  575. sta @dirstart_addr
  576. lda #$0000
  577. sta @menu_sel
  578. sta @direntry_xscroll
  579. sta @direntry_xscroll_state
  580. sep #$20 : .as
  581. lda #$01
  582. sta @menu_dirty
  583. plb
  584. rts
  585. select_parent:
  586. rep #$20 : .al
  587. lda @dirlog_idx
  588. sec
  589. sbc #$0008
  590. sta @dirlog_idx
  591. ldy #$0000
  592. lda [dirlog_idx], y ; load dirstart_addr
  593. sta @dirstart_addr
  594. iny
  595. iny
  596. sep #$20 : .as
  597. lda [dirlog_idx], y ; load dirstart_bank
  598. sta @dirstart_bank
  599. iny
  600. rep #$20 : .al
  601. lda [dirlog_idx], y ; load dirptr_addr
  602. sta @dirptr_addr
  603. iny
  604. iny
  605. sep #$20 : .as
  606. lda [dirlog_idx], y ; load dirptr_bank
  607. sta @dirptr_bank
  608. iny
  609. rep #$20 : .al
  610. lda [dirlog_idx], y ; load menu_sel
  611. sta @menu_sel
  612. sep #$20 : .as
  613. lda #$01
  614. sta @menu_dirty
  615. rts
  616. select_spc:
  617. dey
  618. rep #$20 : .al
  619. lda [dirptr_addr], y
  620. and #$00ff
  621. sta @MCU_PARAM+2
  622. dey
  623. dey
  624. lda [dirptr_addr], y
  625. sta @MCU_PARAM
  626. sep #$20 : .as
  627. lda #CMD_LOADSPC
  628. sta @MCU_CMD
  629. wait_spc:
  630. lda @MCU_CMD
  631. cmp #$00
  632. bne wait_spc
  633. jsr spcplayer
  634. jsr restore_screen
  635. rts
  636. menu_key_x:
  637. jsr mainmenu
  638. rts
  639. setup_224:
  640. php
  641. rep #$30 : .xl : .al
  642. lda #18
  643. sta listdisp
  644. dec
  645. cmp menu_sel
  646. bmi setup_224_adjsel
  647. bra +
  648. setup_224_adjsel
  649. sta menu_sel
  650. +
  651. lda #18*64
  652. sta textdmasize
  653. lda #$000b
  654. sta hdma_scroll+8
  655. sep #$20 : .as
  656. lda #$0b
  657. sta $2110
  658. lda #$00
  659. sta $2110
  660. lda #$00
  661. sta barstep
  662. ora #$08
  663. sta $2133
  664. lda #$08
  665. sta hdma_math_selection
  666. stz vidmode
  667. lda #$01
  668. sta menu_dirty
  669. lda #^space64
  670. ldx #!space64
  671. sta print_bank
  672. stx print_src
  673. stz print_pal
  674. lda #64
  675. sta print_count
  676. lda #27
  677. sta print_y
  678. stz print_x
  679. jsr hiprint
  680. lda #28
  681. sta print_y
  682. jsr hiprint
  683. jsr hiprint
  684. plp
  685. rts
  686. menu_statusbar
  687. pha
  688. phx
  689. php
  690. sep #$20 : .as
  691. rep #$10 : .xl
  692. lda #^text_statusbar_keys
  693. sta @print_bank
  694. rep #$20 : .al
  695. lda #!text_statusbar_keys
  696. sta @print_src
  697. sep #$20 : .as
  698. lda #$00
  699. sta @print_pal
  700. lda #$02
  701. sta @print_x
  702. lda #$40
  703. sta @print_count
  704. lda listdisp
  705. clc
  706. adc #$0a
  707. clc
  708. adc vidmode
  709. sta @print_y
  710. jsr hiprint
  711. plp
  712. plx
  713. pla
  714. rts
  715. select_last_file:
  716. php
  717. sep #$20 : .as
  718. rep #$10 : .xl
  719. lda @LAST_STATUS
  720. bne +
  721. plp
  722. rts
  723. + jsr backup_screen
  724. lda #^text_last
  725. sta window_tbank
  726. ldx #!text_last
  727. stx window_taddr
  728. lda @last_win_x
  729. sta window_x
  730. inc
  731. inc
  732. sta bar_xl
  733. pha
  734. lda @last_win_y
  735. sta window_y
  736. inc
  737. sta bar_yl
  738. inc
  739. pha
  740. lda @last_win_w
  741. sta window_w
  742. lda @last_win_h
  743. sta window_h
  744. jsr draw_window
  745. stz print_pal
  746. lda #^LAST_GAME
  747. ldx #!LAST_GAME
  748. sta print_bank
  749. stx print_src
  750. stz print_pal
  751. pla
  752. sta print_y
  753. pla
  754. sta print_x
  755. lda #56
  756. sta bar_wl
  757. sta print_count
  758. jsr hiprint
  759. - lda isr_done
  760. lsr
  761. bcc -
  762. jsr printtime
  763. jsr read_pad
  764. lda #$80
  765. and pad1trig+1
  766. bne +
  767. lda #$10
  768. and pad1trig+1
  769. beq -
  770. lda #$04
  771. sta @MCU_CMD
  772. jmp select_file_fade
  773. + jsr restore_screen
  774. plp
  775. rts
  776. scroll_direntry_clean:
  777. lda #$01
  778. sta direntry_xscroll_state
  779. stz direntry_xscroll
  780. stz direntry_xscroll_wait
  781. jsr scroll_direntry
  782. stz direntry_xscroll_state
  783. stz direntry_xscroll
  784. rts
  785. scroll_direntry:
  786. ldy menu_sel
  787. lda direntry_xscroll_state
  788. bne +
  789. lda direntry_fits, y
  790. bne scroll_direntry_enter
  791. ; stz direntry_xscroll_state
  792. rts
  793. scroll_direntry_enter
  794. lda #$01
  795. sta direntry_xscroll_state
  796. stz direntry_xscroll_wait
  797. + lda direntry_xscroll_wait
  798. beq +
  799. dec direntry_xscroll_wait
  800. rts
  801. + lda direntry_xscroll
  802. bne scroll_direntry_scrollfast
  803. lda #$28
  804. bra +
  805. scroll_direntry_scrollfast
  806. lda #$10
  807. + sta direntry_xscroll_wait
  808. tya
  809. clc
  810. adc #$09
  811. sta cursor_y
  812. lda #$02
  813. sta cursor_x
  814. rep #$20 : .al
  815. lda menu_sel
  816. asl
  817. asl
  818. tay
  819. lda [dirptr_addr], y
  820. sta @dirent_addr
  821. iny
  822. iny
  823. sep #$20 : .as
  824. lda [dirptr_addr], y ; load fileinfo bank
  825. clc
  826. adc #$c0 ; add $C0 for memory map
  827. sta @dirent_bank ; store as current bank
  828. iny
  829. lda [dirptr_addr], y
  830. iny
  831. sta @dirent_type
  832. ldy menu_sel
  833. sty direntry_fits_idx
  834. phy
  835. jsr print_direntry
  836. ply
  837. lda direntry_fits, y
  838. bne +
  839. lda #$ff
  840. sta direntry_xscroll_state
  841. lda #$28
  842. sta direntry_xscroll_wait
  843. + lda direntry_xscroll_state
  844. clc
  845. adc direntry_xscroll
  846. sta direntry_xscroll
  847. bne +
  848. lda #$01
  849. sta direntry_xscroll_state
  850. + rts