Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

2275 lines
39KB

  1. ;
  2. ; kernal_os.asm
  3. ; sample C64 OS skeleton that keeps the KERNAL ROM visible
  4. ;
  5. ; build:
  6. ; ca65 kernal_os.asm -o kernal_os.o
  7. ; ld65 -C kernal_os.cfg kernal_os.o -o kernal_os.prg
  8. ;
  9. ; run:
  10. ; LOAD "KERNAL_OS.PRG",8
  11. ; RUN
  12. ;
  13. .setcpu "6502"
  14. ; ------------------------------------------------------------
  15. ; KERNAL routines
  16. ; ------------------------------------------------------------
  17. CINT = $FF81
  18. IOINIT = $FF84
  19. RESTOR = $FF8A
  20. CHROUT = $FFD2
  21. GETIN = $FFE4
  22. STOPKEY = $FFE1
  23. SCREEN = $FFED
  24. READST = $FFB7
  25. SETLFS = $FFBA
  26. SETNAM = $FFBD
  27. OPEN = $FFC0
  28. CLOSE = $FFC3
  29. CHKIN = $FFC6
  30. CHKOUT = $FFC9
  31. CLRCH = $FFCC
  32. BASIN = $FFCF
  33. CLALL = $FFE7
  34. ; ------------------------------------------------------------
  35. ; system locations
  36. ; ------------------------------------------------------------
  37. CPU_PORT = $0001
  38. PTR1_LO = $FB
  39. PTR1_HI = $FC
  40. ; ------------------------------------------------------------
  41. ; memory layout for this sample OS
  42. ; ------------------------------------------------------------
  43. OS_LOAD = $0801
  44. WORKSPACE = $A000
  45. FILE_BUFFER = $A100
  46. FILE_BUFFER_MAX = 224
  47. INPUT_MAX = 64
  48. DISK_DEV = 8
  49. LFN_DIR = 2
  50. LFN_CMD = 15
  51. SYS_ENTRY = 2061
  52. ; ------------------------------------------------------------
  53. ; PETSCII constants
  54. ; ------------------------------------------------------------
  55. CR = $0D
  56. CLR_HOME = $93
  57. .segment "LOADADDR"
  58. .word OS_LOAD
  59. .segment "BASIC"
  60. .word basic_end
  61. .word 10
  62. .byte $9E
  63. .byte "2061"
  64. .byte 0
  65. basic_end:
  66. .word 0
  67. .segment "CODE"
  68. start:
  69. jsr IOINIT
  70. jsr RESTOR
  71. jsr CINT
  72. jsr reset_file_state
  73. jsr set_os_memory
  74. jsr init_workspace
  75. jsr print_banner
  76. jmp main_loop
  77. main_loop:
  78. jsr print_prompt
  79. jsr read_line
  80. lda exit_requested
  81. beq parse_shell_command
  82. jmp exit_to_basic
  83. parse_shell_command:
  84. jsr parse_command
  85. lda exit_requested
  86. beq continue_shell
  87. jmp exit_to_basic
  88. continue_shell:
  89. jmp main_loop
  90. do_mem:
  91. lda #<msg_mode
  92. ldy #>msg_mode
  93. jsr print_string
  94. lda CPU_PORT
  95. jsr print_hex_byte
  96. lda #<msg_workspace
  97. ldy #>msg_workspace
  98. jsr print_string
  99. lda WORKSPACE
  100. jsr print_hex_byte
  101. lda #<msg_layout
  102. ldy #>msg_layout
  103. jsr print_string
  104. rts
  105. do_inc:
  106. inc workspace_counter
  107. lda workspace_counter
  108. sta WORKSPACE
  109. lda #<msg_written
  110. ldy #>msg_written
  111. jsr print_string
  112. lda WORKSPACE
  113. jsr print_hex_byte
  114. lda #CR
  115. jsr CHROUT
  116. rts
  117. do_dump:
  118. lda #<msg_dump
  119. ldy #>msg_dump
  120. jsr print_string
  121. ldx #0
  122. dump_loop:
  123. lda WORKSPACE,x
  124. jsr print_hex_byte
  125. lda #' '
  126. jsr CHROUT
  127. inx
  128. cpx #16
  129. bne dump_loop
  130. lda #CR
  131. jsr CHROUT
  132. rts
  133. do_zero:
  134. ldx #0
  135. zero_loop:
  136. lda #0
  137. sta WORKSPACE,x
  138. inx
  139. cpx #16
  140. bne zero_loop
  141. lda #0
  142. sta workspace_counter
  143. lda #<msg_zeroed
  144. ldy #>msg_zeroed
  145. jsr print_string
  146. rts
  147. do_sign:
  148. jsr write_signature
  149. lda #<msg_signed
  150. ldy #>msg_signed
  151. jsr print_string
  152. rts
  153. do_cls:
  154. lda #CLR_HOME
  155. jsr CHROUT
  156. rts
  157. do_help:
  158. lda #<msg_help
  159. ldy #>msg_help
  160. jsr print_string
  161. rts
  162. do_about:
  163. lda #<msg_about
  164. ldy #>msg_about
  165. jsr print_string
  166. rts
  167. do_screen:
  168. lda #<msg_screen
  169. ldy #>msg_screen
  170. jsr print_string
  171. jsr SCREEN
  172. txa
  173. jsr print_decimal_byte
  174. lda #'X'
  175. jsr CHROUT
  176. tya
  177. jsr print_decimal_byte
  178. lda #CR
  179. jsr CHROUT
  180. rts
  181. do_dir:
  182. lda #0
  183. sta dir_line_count
  184. jsr build_dir_spec
  185. jsr reset_file_state
  186. lda #LFN_DIR
  187. sta active_lfn
  188. ldx current_device
  189. ldy #0
  190. jsr SETLFS
  191. lda filename_len
  192. ldx #<filename_spec
  193. ldy #>filename_spec
  194. jsr SETNAM
  195. jsr OPEN
  196. bcc dir_channel_input
  197. jmp disk_open_error
  198. dir_channel_input:
  199. ldx #LFN_DIR
  200. jsr CHKIN
  201. bcc dir_next_line
  202. jmp disk_input_error
  203. dir_next_line:
  204. lda #0
  205. sta line_had_name
  206. sta quote_state
  207. jsr BASIN
  208. sta dir_link_lo
  209. jsr BASIN
  210. sta dir_link_hi
  211. lda dir_link_lo
  212. ora dir_link_hi
  213. beq dir_done
  214. jsr BASIN
  215. jsr BASIN
  216. lda dir_line_count
  217. beq dir_skip_line
  218. dir_line_loop:
  219. jsr BASIN
  220. beq dir_line_end
  221. sta temp_char
  222. cmp #'"'
  223. beq dir_toggle_quote
  224. lda quote_state
  225. beq dir_line_loop
  226. lda line_had_name
  227. bne dir_print_char
  228. lda #1
  229. sta line_had_name
  230. dir_print_char:
  231. lda temp_char
  232. jsr CHROUT
  233. jmp dir_line_loop
  234. dir_toggle_quote:
  235. lda quote_state
  236. eor #1
  237. sta quote_state
  238. jmp dir_line_loop
  239. dir_skip_line:
  240. jsr BASIN
  241. beq dir_line_end
  242. jmp dir_skip_line
  243. dir_line_end:
  244. inc dir_line_count
  245. lda line_had_name
  246. beq dir_next_line
  247. lda #CR
  248. jsr CHROUT
  249. jmp dir_next_line
  250. dir_done:
  251. jsr close_active_file
  252. rts
  253. do_status:
  254. lda #<msg_status
  255. ldy #>msg_status
  256. jsr print_string
  257. jsr print_current_target
  258. lda #CR
  259. jsr CHROUT
  260. jsr reset_file_state
  261. lda #LFN_CMD
  262. sta active_lfn
  263. ldx current_device
  264. ldy #15
  265. jsr SETLFS
  266. lda #0
  267. ldx #0
  268. ldy #0
  269. jsr SETNAM
  270. jsr OPEN
  271. bcc status_channel_input
  272. jmp disk_open_error
  273. status_channel_input:
  274. ldx #LFN_CMD
  275. jsr CHKIN
  276. bcc status_loop
  277. jmp disk_input_error
  278. status_loop:
  279. jsr BASIN
  280. jsr CHROUT
  281. jsr READST
  282. and #$40
  283. beq status_loop
  284. lda #CR
  285. jsr CHROUT
  286. jsr close_active_file
  287. rts
  288. do_init:
  289. lda #<msg_init
  290. ldy #>msg_init
  291. jsr print_string
  292. jsr print_current_target
  293. lda #CR
  294. jsr CHROUT
  295. jsr reset_file_state
  296. lda #LFN_CMD
  297. sta active_lfn
  298. ldx current_device
  299. ldy #15
  300. jsr SETLFS
  301. lda #1
  302. ldx #<fname_init
  303. ldy #>fname_init
  304. jsr SETNAM
  305. jsr OPEN
  306. bcc init_done
  307. jmp disk_open_error
  308. init_done:
  309. jsr close_active_file
  310. jmp do_status
  311. do_delete:
  312. jsr find_argument_start
  313. bcs delete_missing_name
  314. jsr build_scratch_command
  315. bcs delete_missing_name
  316. lda #<msg_delete
  317. ldy #>msg_delete
  318. jsr print_string
  319. jsr print_current_target
  320. lda #CR
  321. jsr CHROUT
  322. jsr reset_file_state
  323. lda #LFN_CMD
  324. sta active_lfn
  325. ldx current_device
  326. ldy #15
  327. jsr SETLFS
  328. lda scratch_len
  329. ldx #<scratch_command
  330. ldy #>scratch_command
  331. jsr SETNAM
  332. jsr OPEN
  333. bcc delete_done
  334. jmp disk_open_error
  335. delete_done:
  336. jsr close_active_file
  337. jmp do_status
  338. delete_missing_name:
  339. lda #<msg_delete_usage
  340. ldy #>msg_delete_usage
  341. jsr print_string
  342. rts
  343. do_touch:
  344. jsr find_argument_start
  345. bcs touch_missing_name
  346. jsr build_write_filename
  347. bcs touch_missing_name
  348. lda #<msg_touch
  349. ldy #>msg_touch
  350. jsr print_string
  351. jsr print_current_target
  352. lda #CR
  353. jsr CHROUT
  354. jsr reset_file_state
  355. lda #LFN_DIR
  356. sta active_lfn
  357. ldx current_device
  358. ldy #2
  359. jsr SETLFS
  360. lda filename_len
  361. ldx #<filename_spec
  362. ldy #>filename_spec
  363. jsr SETNAM
  364. jsr OPEN
  365. bcc touch_done
  366. jmp disk_open_error
  367. touch_done:
  368. jsr close_active_file
  369. jmp do_status
  370. touch_missing_name:
  371. lda #<msg_touch_usage
  372. ldy #>msg_touch_usage
  373. jsr print_string
  374. rts
  375. do_echo:
  376. jsr find_argument_start
  377. bcs echo_missing_text
  378. jsr copy_echo_to_buffer
  379. bcs echo_missing_text
  380. lda file_buffer_len
  381. beq echo_missing_text
  382. ldy #0
  383. echo_print_loop:
  384. cpy file_buffer_len
  385. beq echo_print_done
  386. lda FILE_BUFFER,y
  387. jsr CHROUT
  388. iny
  389. bne echo_print_loop
  390. echo_print_done:
  391. lda #CR
  392. jsr CHROUT
  393. lda pipe_found
  394. beq echo_done
  395. jsr rewrite_input_after_pipe
  396. lda input_buffer
  397. beq echo_done
  398. jmp parse_command
  399. echo_done:
  400. rts
  401. echo_missing_text:
  402. lda #<msg_echo_usage
  403. ldy #>msg_echo_usage
  404. jsr print_string
  405. rts
  406. do_type:
  407. jsr find_argument_start
  408. bcs type_missing_name
  409. jsr build_read_filename
  410. bcs type_missing_name
  411. jsr reset_file_state
  412. lda #LFN_DIR
  413. sta active_lfn
  414. ldx current_device
  415. ldy #2
  416. jsr SETLFS
  417. lda filename_len
  418. ldx #<filename_spec
  419. ldy #>filename_spec
  420. jsr SETNAM
  421. jsr OPEN
  422. bcc type_channel_input
  423. jmp disk_open_error
  424. type_channel_input:
  425. ldx #LFN_DIR
  426. jsr CHKIN
  427. bcc type_loop
  428. jmp disk_input_error
  429. type_loop:
  430. jsr BASIN
  431. jsr CHROUT
  432. jsr READST
  433. and #$40
  434. beq type_loop
  435. lda #CR
  436. jsr CHROUT
  437. jsr close_active_file
  438. rts
  439. type_missing_name:
  440. lda #<msg_type_usage
  441. ldy #>msg_type_usage
  442. jsr print_string
  443. rts
  444. do_load_file:
  445. jsr find_argument_start
  446. bcc load_have_arg
  447. jmp load_missing_name
  448. load_have_arg:
  449. jsr build_read_filename
  450. bcc load_name_ready
  451. jmp load_missing_name
  452. load_name_ready:
  453. jsr reset_file_state
  454. lda #LFN_DIR
  455. sta active_lfn
  456. ldx current_device
  457. ldy #2
  458. jsr SETLFS
  459. lda filename_len
  460. ldx #<filename_spec
  461. ldy #>filename_spec
  462. jsr SETNAM
  463. jsr OPEN
  464. bcc load_channel_input
  465. jmp disk_open_error
  466. load_channel_input:
  467. ldx #LFN_DIR
  468. jsr CHKIN
  469. bcc load_prepare
  470. jmp disk_input_error
  471. load_prepare:
  472. lda #0
  473. sta file_buffer_len
  474. sta file_truncated
  475. ldx #0
  476. load_loop:
  477. jsr BASIN
  478. sta temp_char
  479. ldy file_buffer_len
  480. cpy #FILE_BUFFER_MAX
  481. bcs load_set_truncated
  482. lda temp_char
  483. sta FILE_BUFFER,y
  484. inc file_buffer_len
  485. jmp load_check_eof
  486. load_set_truncated:
  487. lda #1
  488. sta file_truncated
  489. load_check_eof:
  490. jsr READST
  491. and #$40
  492. beq load_loop
  493. lda file_buffer_len
  494. tay
  495. cpy #FILE_BUFFER_MAX
  496. bcs load_report
  497. lda #0
  498. sta FILE_BUFFER,y
  499. load_report:
  500. jsr close_active_file
  501. lda #<msg_loaded
  502. ldy #>msg_loaded
  503. jsr print_string
  504. lda file_buffer_len
  505. jsr print_decimal_byte
  506. lda #<msg_bytes
  507. ldy #>msg_bytes
  508. jsr print_string
  509. lda file_truncated
  510. beq load_done
  511. lda #<msg_truncated
  512. ldy #>msg_truncated
  513. jsr print_string
  514. load_done:
  515. rts
  516. load_missing_name:
  517. lda #<msg_load_usage
  518. ldy #>msg_load_usage
  519. jsr print_string
  520. rts
  521. do_save_file:
  522. jsr find_argument_start
  523. bcs save_missing_name
  524. lda file_buffer_len
  525. bne save_have_data
  526. lda #<msg_buffer_empty
  527. ldy #>msg_buffer_empty
  528. jsr print_string
  529. rts
  530. save_have_data:
  531. jsr build_write_filename
  532. bcs save_missing_name
  533. jsr reset_file_state
  534. lda #LFN_DIR
  535. sta active_lfn
  536. ldx current_device
  537. ldy #2
  538. jsr SETLFS
  539. lda filename_len
  540. ldx #<filename_spec
  541. ldy #>filename_spec
  542. jsr SETNAM
  543. jsr OPEN
  544. bcc save_channel_output
  545. jmp disk_open_error
  546. save_channel_output:
  547. ldx #LFN_DIR
  548. jsr CHKOUT
  549. bcc save_loop_prepare
  550. jmp disk_input_error
  551. save_loop_prepare:
  552. ldy #0
  553. save_loop:
  554. cpy file_buffer_len
  555. beq save_done
  556. lda FILE_BUFFER,y
  557. jsr CHROUT
  558. iny
  559. bne save_loop
  560. save_done:
  561. jsr close_active_file
  562. lda #<msg_saved
  563. ldy #>msg_saved
  564. jsr print_string
  565. lda file_buffer_len
  566. jsr print_decimal_byte
  567. lda #<msg_bytes
  568. ldy #>msg_bytes
  569. jsr print_string
  570. rts
  571. save_missing_name:
  572. lda #<msg_save_usage
  573. ldy #>msg_save_usage
  574. jsr print_string
  575. rts
  576. do_device:
  577. jsr find_argument_start
  578. bcc device_parse_arg
  579. jmp show_current_target
  580. device_parse_arg:
  581. jsr parse_decimal_argument
  582. bcs device_usage
  583. lda parsed_number
  584. cmp #8
  585. bcc device_usage
  586. cmp #16
  587. bcs device_usage
  588. sta current_device
  589. lda #<msg_device_set
  590. ldy #>msg_device_set
  591. jsr print_string
  592. jsr print_current_target
  593. lda #CR
  594. jsr CHROUT
  595. rts
  596. device_usage:
  597. lda #<msg_device_usage
  598. ldy #>msg_device_usage
  599. jsr print_string
  600. rts
  601. do_drive:
  602. jsr find_argument_start
  603. bcc drive_parse_arg
  604. jmp show_current_target
  605. drive_parse_arg:
  606. jsr parse_decimal_argument
  607. bcs drive_usage
  608. lda parsed_number
  609. cmp #2
  610. bcs drive_usage
  611. sta current_drive
  612. lda #<msg_drive_set
  613. ldy #>msg_drive_set
  614. jsr print_string
  615. jsr print_current_target
  616. lda #CR
  617. jsr CHROUT
  618. rts
  619. drive_usage:
  620. lda #<msg_drive_usage
  621. ldy #>msg_drive_usage
  622. jsr print_string
  623. rts
  624. do_hex:
  625. lda file_buffer_len
  626. bne hex_have_data
  627. lda #<msg_buffer_empty
  628. ldy #>msg_buffer_empty
  629. jsr print_string
  630. rts
  631. hex_have_data:
  632. lda #<msg_hex
  633. ldy #>msg_hex
  634. jsr print_string
  635. ldy #0
  636. ldx #0
  637. hex_loop:
  638. cpy file_buffer_len
  639. beq hex_done
  640. lda FILE_BUFFER,y
  641. jsr print_hex_byte
  642. lda #' '
  643. jsr CHROUT
  644. iny
  645. inx
  646. cpx #8
  647. bne hex_loop
  648. lda #CR
  649. jsr CHROUT
  650. ldx #0
  651. jmp hex_loop
  652. hex_done:
  653. lda #CR
  654. jsr CHROUT
  655. rts
  656. do_run:
  657. lda file_buffer_len
  658. bne run_have_code
  659. lda #<msg_buffer_empty
  660. ldy #>msg_buffer_empty
  661. jsr print_string
  662. rts
  663. run_have_code:
  664. lda #<msg_run
  665. ldy #>msg_run
  666. jsr print_string
  667. jsr FILE_BUFFER
  668. rts
  669. do_rename:
  670. jsr find_argument_start
  671. bcs rename_missing_args
  672. jsr find_second_argument
  673. bcs rename_missing_args
  674. jsr build_rename_command
  675. bcs rename_missing_args
  676. lda #<msg_rename
  677. ldy #>msg_rename
  678. jsr print_string
  679. jsr print_current_target
  680. lda #CR
  681. jsr CHROUT
  682. jsr reset_file_state
  683. lda #LFN_CMD
  684. sta active_lfn
  685. ldx current_device
  686. ldy #15
  687. jsr SETLFS
  688. lda scratch_len
  689. ldx #<scratch_command
  690. ldy #>scratch_command
  691. jsr SETNAM
  692. jsr OPEN
  693. bcc rename_file_done
  694. jmp disk_open_error
  695. rename_file_done:
  696. jsr close_active_file
  697. jmp do_status
  698. rename_missing_args:
  699. lda #<msg_rename_usage
  700. ldy #>msg_rename_usage
  701. jsr print_string
  702. rts
  703. do_copy:
  704. jsr find_argument_start
  705. bcs copy_missing_args
  706. jsr find_second_argument
  707. bcs copy_missing_args
  708. jsr build_copy_command
  709. bcs copy_missing_args
  710. lda #<msg_copy
  711. ldy #>msg_copy
  712. jsr print_string
  713. jsr print_current_target
  714. lda #CR
  715. jsr CHROUT
  716. jsr reset_file_state
  717. lda #LFN_CMD
  718. sta active_lfn
  719. ldx current_device
  720. ldy #15
  721. jsr SETLFS
  722. lda scratch_len
  723. ldx #<scratch_command
  724. ldy #>scratch_command
  725. jsr SETNAM
  726. jsr OPEN
  727. bcc copy_file_done
  728. jmp disk_open_error
  729. copy_file_done:
  730. jsr close_active_file
  731. jmp do_status
  732. copy_missing_args:
  733. lda #<msg_copy_usage
  734. ldy #>msg_copy_usage
  735. jsr print_string
  736. rts
  737. exit_to_basic:
  738. jsr restore_normal_memory
  739. rts
  740. request_exit:
  741. lda #1
  742. sta exit_requested
  743. rts
  744. close_active_file:
  745. jsr CLRCH
  746. lda active_lfn
  747. jsr CLOSE
  748. lda #0
  749. sta active_lfn
  750. rts
  751. reset_file_state:
  752. jsr CLRCH
  753. jsr CLALL
  754. lda #0
  755. sta active_lfn
  756. rts
  757. disk_open_error:
  758. sta last_error
  759. jsr reset_file_state
  760. lda #<msg_disk_open_error
  761. ldy #>msg_disk_open_error
  762. jsr print_string
  763. lda last_error
  764. jsr print_hex_byte
  765. lda #CR
  766. jsr CHROUT
  767. rts
  768. disk_input_error:
  769. sta last_error
  770. jsr reset_file_state
  771. lda #<msg_disk_input_error
  772. ldy #>msg_disk_input_error
  773. jsr print_string
  774. lda last_error
  775. jsr print_hex_byte
  776. lda #CR
  777. jsr CHROUT
  778. rts
  779. parse_command:
  780. lda input_buffer
  781. bne check_help
  782. jmp command_empty
  783. check_help:
  784. lda #<cmd_help
  785. ldy #>cmd_help
  786. jsr str_equals_input
  787. bcc check_mem
  788. jmp do_help
  789. check_mem:
  790. lda #<cmd_mem
  791. ldy #>cmd_mem
  792. jsr str_equals_input
  793. bcc check_inc
  794. jmp do_mem
  795. check_inc:
  796. lda #<cmd_inc
  797. ldy #>cmd_inc
  798. jsr str_equals_input
  799. bcc check_dump
  800. jmp do_inc
  801. check_dump:
  802. lda #<cmd_dump
  803. ldy #>cmd_dump
  804. jsr str_equals_input
  805. bcc check_zero
  806. jmp do_dump
  807. check_zero:
  808. lda #<cmd_zero
  809. ldy #>cmd_zero
  810. jsr str_equals_input
  811. bcc check_sign
  812. jmp do_zero
  813. check_sign:
  814. lda #<cmd_sign
  815. ldy #>cmd_sign
  816. jsr str_equals_input
  817. bcc check_cls
  818. jmp do_sign
  819. check_cls:
  820. lda #<cmd_cls
  821. ldy #>cmd_cls
  822. jsr str_equals_input
  823. bcc check_screen
  824. jmp do_cls
  825. check_screen:
  826. lda #<cmd_screen
  827. ldy #>cmd_screen
  828. jsr str_equals_input
  829. bcc check_about
  830. jmp do_screen
  831. check_about:
  832. lda #<cmd_about
  833. ldy #>cmd_about
  834. jsr str_equals_input
  835. bcc check_dir
  836. jmp do_about
  837. check_dir:
  838. lda #<cmd_dir
  839. ldy #>cmd_dir
  840. jsr str_matches_command
  841. bcc check_status
  842. jmp do_dir
  843. check_status:
  844. lda #<cmd_status
  845. ldy #>cmd_status
  846. jsr str_equals_input
  847. bcc check_init
  848. jmp do_status
  849. check_init:
  850. lda #<cmd_init
  851. ldy #>cmd_init
  852. jsr str_equals_input
  853. bcc check_echo
  854. jmp do_init
  855. check_echo:
  856. lda #<cmd_echo
  857. ldy #>cmd_echo
  858. jsr str_matches_command
  859. bcc check_touch
  860. jmp do_echo
  861. check_touch:
  862. lda #<cmd_touch
  863. ldy #>cmd_touch
  864. jsr str_matches_command
  865. bcc check_type
  866. jmp do_touch
  867. check_type:
  868. lda #<cmd_type
  869. ldy #>cmd_type
  870. jsr str_matches_command
  871. bcc check_load
  872. jmp do_type
  873. check_load:
  874. lda #<cmd_load
  875. ldy #>cmd_load
  876. jsr str_matches_command
  877. bcc check_save
  878. jmp do_load_file
  879. check_save:
  880. lda #<cmd_save
  881. ldy #>cmd_save
  882. jsr str_matches_command
  883. bcc check_device
  884. jmp do_save_file
  885. check_device:
  886. lda #<cmd_device
  887. ldy #>cmd_device
  888. jsr str_matches_command
  889. bcc check_dev
  890. jmp do_device
  891. check_dev:
  892. lda #<cmd_dev
  893. ldy #>cmd_dev
  894. jsr str_matches_command
  895. bcc check_drive
  896. jmp do_device
  897. check_drive:
  898. lda #<cmd_drive
  899. ldy #>cmd_drive
  900. jsr str_matches_command
  901. bcc check_del
  902. jmp do_drive
  903. check_del:
  904. lda #<cmd_del
  905. ldy #>cmd_del
  906. jsr str_matches_command
  907. bcc check_erase
  908. jmp do_delete
  909. check_erase:
  910. lda #<cmd_erase
  911. ldy #>cmd_erase
  912. jsr str_matches_command
  913. bcc check_hex
  914. jmp do_delete
  915. check_hex:
  916. lda #<cmd_hex
  917. ldy #>cmd_hex
  918. jsr str_equals_input
  919. bcc check_run
  920. jmp do_hex
  921. check_run:
  922. lda #<cmd_run
  923. ldy #>cmd_run
  924. jsr str_equals_input
  925. bcc check_rename
  926. jmp do_run
  927. check_rename:
  928. lda #<cmd_rename
  929. ldy #>cmd_rename
  930. jsr str_matches_command
  931. bcc check_copy
  932. jmp do_rename
  933. check_copy:
  934. lda #<cmd_copy
  935. ldy #>cmd_copy
  936. jsr str_matches_command
  937. bcc check_exit
  938. jmp do_copy
  939. check_exit:
  940. lda #<cmd_exit
  941. ldy #>cmd_exit
  942. jsr str_matches_command
  943. bcc command_unknown
  944. jmp request_exit
  945. command_unknown:
  946. lda #<msg_unknown
  947. ldy #>msg_unknown
  948. jsr print_string
  949. rts
  950. command_empty:
  951. rts
  952. ; ------------------------------------------------------------
  953. ; memory mode helpers
  954. ; ------------------------------------------------------------
  955. set_os_memory:
  956. lda CPU_PORT
  957. and #$F8
  958. ora #$06
  959. sta CPU_PORT
  960. rts
  961. restore_normal_memory:
  962. lda CPU_PORT
  963. and #$F8
  964. ora #$07
  965. sta CPU_PORT
  966. rts
  967. ; ------------------------------------------------------------
  968. ; write an initial signature into RAM hidden under BASIC ROM
  969. ; ------------------------------------------------------------
  970. init_workspace:
  971. lda #0
  972. sta WORKSPACE
  973. sta workspace_counter
  974. sta exit_requested
  975. sta dir_line_count
  976. sta quote_state
  977. sta line_had_name
  978. sta argument_index
  979. sta scratch_len
  980. sta filename_len
  981. sta parsed_number
  982. sta temp_digit
  983. sta temp_value
  984. sta current_drive
  985. sta file_buffer_len
  986. sta file_truncated
  987. sta pipe_found
  988. sta pipe_index
  989. sta argument2_index
  990. lda #DISK_DEV
  991. sta current_device
  992. jsr write_signature
  993. rts
  994. write_signature:
  995. ldx #0
  996. copy_signature:
  997. lda msg_signature,x
  998. sta WORKSPACE + 1,x
  999. beq workspace_done
  1000. inx
  1001. bne copy_signature
  1002. workspace_done:
  1003. rts
  1004. find_argument_start:
  1005. ldx #0
  1006. arg_seek_end:
  1007. lda input_buffer,x
  1008. beq arg_missing
  1009. cmp #' '
  1010. beq arg_skip_spaces
  1011. inx
  1012. bne arg_seek_end
  1013. arg_skip_spaces:
  1014. lda input_buffer,x
  1015. beq arg_missing
  1016. cmp #' '
  1017. bne arg_found
  1018. inx
  1019. bne arg_skip_spaces
  1020. arg_found:
  1021. stx argument_index
  1022. clc
  1023. rts
  1024. arg_missing:
  1025. sec
  1026. rts
  1027. find_second_argument:
  1028. ldy argument_index
  1029. sec_skip_first:
  1030. lda input_buffer,y
  1031. beq sec_arg_missing
  1032. cmp #' '
  1033. beq sec_find_start
  1034. iny
  1035. bne sec_skip_first
  1036. sec_find_start:
  1037. lda input_buffer,y
  1038. beq sec_arg_missing
  1039. cmp #' '
  1040. bne sec_arg_found
  1041. iny
  1042. bne sec_find_start
  1043. sec_arg_found:
  1044. sty argument2_index
  1045. clc
  1046. rts
  1047. sec_arg_missing:
  1048. sec
  1049. rts
  1050. build_scratch_command:
  1051. ldx #0
  1052. lda #'S'
  1053. sta scratch_command,x
  1054. inx
  1055. lda current_drive
  1056. clc
  1057. adc #'0'
  1058. sta scratch_command,x
  1059. inx
  1060. lda #':'
  1061. sta scratch_command,x
  1062. inx
  1063. ldy argument_index
  1064. copy_delete_name:
  1065. lda input_buffer,y
  1066. beq scratch_done
  1067. sta scratch_command,x
  1068. inx
  1069. iny
  1070. cpx #31
  1071. bcc copy_delete_name
  1072. sec
  1073. rts
  1074. scratch_done:
  1075. stx scratch_len
  1076. lda #0
  1077. sta scratch_command,x
  1078. clc
  1079. rts
  1080. build_dir_spec:
  1081. lda #'$'
  1082. sta filename_spec
  1083. lda current_drive
  1084. clc
  1085. adc #'0'
  1086. sta filename_spec + 1
  1087. lda #2
  1088. sta filename_len
  1089. lda #0
  1090. sta filename_spec + 2
  1091. rts
  1092. build_read_filename:
  1093. jsr build_drive_filename_prefix
  1094. bcs filename_build_error
  1095. lda #','
  1096. jsr append_filename_char
  1097. lda #'S'
  1098. jsr append_filename_char
  1099. lda #','
  1100. jsr append_filename_char
  1101. lda #'R'
  1102. jsr append_filename_char
  1103. bcs filename_build_error
  1104. jmp finish_filename_spec
  1105. build_write_filename:
  1106. jsr build_drive_filename_prefix
  1107. bcs filename_build_error
  1108. lda #','
  1109. jsr append_filename_char
  1110. lda #'S'
  1111. jsr append_filename_char
  1112. lda #','
  1113. jsr append_filename_char
  1114. lda #'W'
  1115. jsr append_filename_char
  1116. bcs filename_build_error
  1117. jmp finish_filename_spec
  1118. build_drive_filename_prefix:
  1119. ldx #0
  1120. lda current_drive
  1121. clc
  1122. adc #'0'
  1123. sta filename_spec,x
  1124. inx
  1125. lda #':'
  1126. sta filename_spec,x
  1127. inx
  1128. ldy argument_index
  1129. copy_filename_arg:
  1130. lda input_buffer,y
  1131. beq prefix_done
  1132. sta filename_spec,x
  1133. inx
  1134. iny
  1135. cpx #35
  1136. bcc copy_filename_arg
  1137. sec
  1138. rts
  1139. prefix_done:
  1140. stx filename_len
  1141. clc
  1142. rts
  1143. append_filename_char:
  1144. ldx filename_len
  1145. cpx #39
  1146. bcs filename_build_error
  1147. sta filename_spec,x
  1148. inx
  1149. stx filename_len
  1150. clc
  1151. rts
  1152. finish_filename_spec:
  1153. ldx filename_len
  1154. lda #0
  1155. sta filename_spec,x
  1156. clc
  1157. rts
  1158. filename_build_error:
  1159. sec
  1160. rts
  1161. ; builds R{d}:{newname}={oldname} in scratch_command
  1162. ; arg1=old (argument_index), arg2=new (argument2_index)
  1163. build_rename_command:
  1164. ldx #0
  1165. lda #'R'
  1166. sta scratch_command,x
  1167. inx
  1168. lda current_drive
  1169. clc
  1170. adc #'0'
  1171. sta scratch_command,x
  1172. inx
  1173. lda #':'
  1174. sta scratch_command,x
  1175. inx
  1176. ldy argument2_index
  1177. rename_copy_new_name:
  1178. lda input_buffer,y
  1179. beq rename_new_name_done
  1180. cmp #' '
  1181. beq rename_new_name_done
  1182. sta scratch_command,x
  1183. inx
  1184. iny
  1185. cpx #20
  1186. bcc rename_copy_new_name
  1187. sec
  1188. rts
  1189. rename_new_name_done:
  1190. lda #'='
  1191. sta scratch_command,x
  1192. inx
  1193. ldy argument_index
  1194. rename_copy_old_name:
  1195. lda input_buffer,y
  1196. beq rename_cmd_done
  1197. cmp #' '
  1198. beq rename_cmd_done
  1199. sta scratch_command,x
  1200. inx
  1201. iny
  1202. cpx #31
  1203. bcc rename_copy_old_name
  1204. sec
  1205. rts
  1206. rename_cmd_done:
  1207. stx scratch_len
  1208. lda #0
  1209. sta scratch_command,x
  1210. clc
  1211. rts
  1212. ; builds C{d}:{dstname}={d}:{srcname} in scratch_command
  1213. ; arg1=src (argument_index), arg2=dst (argument2_index)
  1214. build_copy_command:
  1215. ldx #0
  1216. lda #'C'
  1217. sta scratch_command,x
  1218. inx
  1219. lda current_drive
  1220. clc
  1221. adc #'0'
  1222. sta scratch_command,x
  1223. inx
  1224. lda #':'
  1225. sta scratch_command,x
  1226. inx
  1227. ldy argument2_index
  1228. copy_dst_name:
  1229. lda input_buffer,y
  1230. beq copy_dst_done
  1231. cmp #' '
  1232. beq copy_dst_done
  1233. sta scratch_command,x
  1234. inx
  1235. iny
  1236. cpx #16
  1237. bcc copy_dst_name
  1238. sec
  1239. rts
  1240. copy_dst_done:
  1241. lda #'='
  1242. sta scratch_command,x
  1243. inx
  1244. lda current_drive
  1245. clc
  1246. adc #'0'
  1247. sta scratch_command,x
  1248. inx
  1249. lda #':'
  1250. sta scratch_command,x
  1251. inx
  1252. ldy argument_index
  1253. copy_src_name:
  1254. lda input_buffer,y
  1255. beq copy_cmd_done
  1256. cmp #' '
  1257. beq copy_cmd_done
  1258. sta scratch_command,x
  1259. inx
  1260. iny
  1261. cpx #31
  1262. bcc copy_src_name
  1263. sec
  1264. rts
  1265. copy_cmd_done:
  1266. stx scratch_len
  1267. lda #0
  1268. sta scratch_command,x
  1269. clc
  1270. rts
  1271. parse_decimal_argument:
  1272. ldy argument_index
  1273. lda #0
  1274. sta parsed_number
  1275. parse_digit_loop:
  1276. lda input_buffer,y
  1277. beq parse_number_done
  1278. cmp #'0'
  1279. bcc parse_number_error
  1280. cmp #'9' + 1
  1281. bcs parse_number_error
  1282. sec
  1283. sbc #'0'
  1284. sta temp_digit
  1285. lda parsed_number
  1286. asl
  1287. sta temp_value
  1288. asl
  1289. asl
  1290. clc
  1291. adc temp_value
  1292. clc
  1293. adc temp_digit
  1294. sta parsed_number
  1295. iny
  1296. bne parse_digit_loop
  1297. parse_number_done:
  1298. clc
  1299. rts
  1300. parse_number_error:
  1301. sec
  1302. rts
  1303. copy_echo_to_buffer:
  1304. lda #0
  1305. sta pipe_found
  1306. sta file_buffer_len
  1307. ldy argument_index
  1308. ldx #0
  1309. echo_copy_loop:
  1310. lda input_buffer,y
  1311. beq echo_copy_done
  1312. cmp #'>'
  1313. beq echo_pipe_here
  1314. cpx #FILE_BUFFER_MAX
  1315. bcs echo_copy_done
  1316. sta FILE_BUFFER,x
  1317. inx
  1318. iny
  1319. bne echo_copy_loop
  1320. echo_pipe_here:
  1321. lda #1
  1322. sta pipe_found
  1323. sty pipe_index
  1324. echo_copy_done:
  1325. stx file_buffer_len
  1326. trim_echo_spaces:
  1327. cpx #0
  1328. beq echo_copy_finish
  1329. dex
  1330. lda FILE_BUFFER,x
  1331. cmp #' '
  1332. bne restore_echo_len
  1333. stx file_buffer_len
  1334. jmp trim_echo_spaces
  1335. restore_echo_len:
  1336. inx
  1337. stx file_buffer_len
  1338. echo_copy_finish:
  1339. ldy file_buffer_len
  1340. lda #0
  1341. sta FILE_BUFFER,y
  1342. clc
  1343. rts
  1344. rewrite_input_after_pipe:
  1345. ldy pipe_index
  1346. lda input_buffer,y
  1347. cmp #'>'
  1348. beq pipe_skip_marker
  1349. rts
  1350. pipe_skip_marker:
  1351. iny
  1352. pipe_skip_spaces:
  1353. lda input_buffer,y
  1354. beq clear_input_after_pipe
  1355. cmp #' '
  1356. bne pipe_copy_command
  1357. iny
  1358. bne pipe_skip_spaces
  1359. pipe_copy_command:
  1360. ldx #0
  1361. pipe_copy_loop:
  1362. lda input_buffer,y
  1363. beq pipe_rewrite_done
  1364. sta input_buffer,x
  1365. inx
  1366. iny
  1367. cpx #INPUT_MAX
  1368. bcc pipe_copy_loop
  1369. pipe_rewrite_done:
  1370. lda #0
  1371. sta input_buffer,x
  1372. rts
  1373. clear_input_after_pipe:
  1374. lda #0
  1375. sta input_buffer
  1376. rts
  1377. ; ------------------------------------------------------------
  1378. ; utility routines
  1379. ; ------------------------------------------------------------
  1380. print_prompt:
  1381. lda #<msg_prompt
  1382. ldy #>msg_prompt
  1383. jmp print_string
  1384. show_current_target:
  1385. lda #<msg_current_target
  1386. ldy #>msg_current_target
  1387. jsr print_string
  1388. jsr print_current_target
  1389. lda #CR
  1390. jsr CHROUT
  1391. rts
  1392. print_current_target:
  1393. lda current_device
  1394. jsr print_decimal_byte
  1395. lda #'/'
  1396. jsr CHROUT
  1397. lda current_drive
  1398. clc
  1399. adc #'0'
  1400. jsr CHROUT
  1401. rts
  1402. print_banner:
  1403. lda #CLR_HOME
  1404. jsr CHROUT
  1405. lda #<msg_banner
  1406. ldy #>msg_banner
  1407. jmp print_string
  1408. print_string:
  1409. sta PTR1_LO
  1410. sty PTR1_HI
  1411. print_loop:
  1412. ldy #0
  1413. lda (PTR1_LO),y
  1414. beq print_done
  1415. jsr CHROUT
  1416. inc PTR1_LO
  1417. bne print_loop
  1418. inc PTR1_HI
  1419. jmp print_loop
  1420. print_done:
  1421. rts
  1422. read_line:
  1423. lda #0
  1424. sta input_len
  1425. read_loop:
  1426. jsr STOPKEY
  1427. bne read_getin
  1428. jmp request_exit
  1429. read_getin:
  1430. jsr GETIN
  1431. beq read_loop
  1432. cmp #CR
  1433. beq read_done
  1434. cmp #$14
  1435. beq read_delete
  1436. ldx input_len
  1437. cpx #INPUT_MAX
  1438. bcs read_loop
  1439. jsr normalize_petscii_letter
  1440. sta input_buffer,x
  1441. inc input_len
  1442. jsr CHROUT
  1443. jmp read_loop
  1444. read_delete:
  1445. lda input_len
  1446. beq read_loop
  1447. dec input_len
  1448. lda #$14
  1449. jsr CHROUT
  1450. jmp read_loop
  1451. read_done:
  1452. ldx input_len
  1453. lda #0
  1454. sta input_buffer,x
  1455. lda #CR
  1456. jsr CHROUT
  1457. rts
  1458. str_equals_input:
  1459. sta PTR1_LO
  1460. sty PTR1_HI
  1461. lda #0
  1462. sta compare_index
  1463. compare_loop:
  1464. ldx compare_index
  1465. lda input_buffer,x
  1466. sta temp_char
  1467. ldy #0
  1468. lda (PTR1_LO),y
  1469. beq compare_end
  1470. cmp temp_char
  1471. bne compare_no
  1472. inc PTR1_LO
  1473. bne compare_next
  1474. inc PTR1_HI
  1475. compare_next:
  1476. inc compare_index
  1477. jmp compare_loop
  1478. compare_end:
  1479. ldx compare_index
  1480. lda input_buffer,x
  1481. beq compare_yes
  1482. compare_no:
  1483. clc
  1484. rts
  1485. compare_yes:
  1486. sec
  1487. rts
  1488. str_matches_command:
  1489. sta PTR1_LO
  1490. sty PTR1_HI
  1491. lda #0
  1492. sta compare_index
  1493. match_loop:
  1494. ldx compare_index
  1495. lda input_buffer,x
  1496. sta temp_char
  1497. ldy #0
  1498. lda (PTR1_LO),y
  1499. beq match_end
  1500. cmp temp_char
  1501. bne match_no
  1502. inc PTR1_LO
  1503. bne match_next
  1504. inc PTR1_HI
  1505. match_next:
  1506. inc compare_index
  1507. jmp match_loop
  1508. match_end:
  1509. ldx compare_index
  1510. lda input_buffer,x
  1511. beq match_yes
  1512. cmp #' '
  1513. beq match_yes
  1514. match_no:
  1515. clc
  1516. rts
  1517. match_yes:
  1518. sec
  1519. rts
  1520. print_hex_byte:
  1521. pha
  1522. lsr
  1523. lsr
  1524. lsr
  1525. lsr
  1526. jsr print_hex_nibble
  1527. pla
  1528. and #$0F
  1529. jsr print_hex_nibble
  1530. rts
  1531. print_hex_nibble:
  1532. cmp #10
  1533. bcc print_hex_digit
  1534. clc
  1535. adc #'A' - 10
  1536. jsr CHROUT
  1537. rts
  1538. print_hex_digit:
  1539. clc
  1540. adc #'0'
  1541. jsr CHROUT
  1542. rts
  1543. print_decimal_byte:
  1544. ldx #'0'
  1545. hundreds_loop:
  1546. cmp #100
  1547. bcc tens_setup
  1548. sec
  1549. sbc #100
  1550. inx
  1551. bne hundreds_loop
  1552. tens_setup:
  1553. stx dec_hundreds
  1554. ldx #'0'
  1555. tens_loop:
  1556. cmp #10
  1557. bcc decimal_ready
  1558. sec
  1559. sbc #10
  1560. inx
  1561. bne tens_loop
  1562. decimal_ready:
  1563. stx dec_tens
  1564. clc
  1565. adc #'0'
  1566. sta dec_ones
  1567. lda dec_hundreds
  1568. cmp #'0'
  1569. beq maybe_skip_hundreds
  1570. jsr CHROUT
  1571. lda dec_tens
  1572. jsr CHROUT
  1573. lda dec_ones
  1574. jsr CHROUT
  1575. rts
  1576. maybe_skip_hundreds:
  1577. lda dec_tens
  1578. cmp #'0'
  1579. beq print_last_digit
  1580. jsr CHROUT
  1581. lda dec_ones
  1582. jsr CHROUT
  1583. rts
  1584. print_last_digit:
  1585. lda dec_ones
  1586. jsr CHROUT
  1587. rts
  1588. normalize_petscii_letter:
  1589. cmp #'a'
  1590. bcc maybe_shifted_letter
  1591. cmp #'z' + 1
  1592. bcs maybe_shifted_letter
  1593. sec
  1594. sbc #$20
  1595. rts
  1596. maybe_shifted_letter:
  1597. cmp #$C1
  1598. bcc normalize_done
  1599. cmp #$DB
  1600. bcs normalize_done
  1601. and #$7F
  1602. normalize_done:
  1603. rts
  1604. .segment "RODATA"
  1605. msg_banner:
  1606. .byte "KERNAL OS SHELL", CR
  1607. .byte "BASIC OFF KERNAL ON I/O ON", CR
  1608. .byte "BOOT $0801 WORK $A000", CR
  1609. .byte "HELP FOR CMDS", CR, CR
  1610. .byte 0
  1611. msg_prompt:
  1612. .byte "OS> ", 0
  1613. msg_unknown:
  1614. .byte "UNKNOWN. HELP", CR, 0
  1615. msg_help:
  1616. .byte CR
  1617. .byte "HELP MEM INC DUMP ZERO SIGN", CR
  1618. .byte "SCREEN DIR STATUS INIT CLS", CR
  1619. .byte "ECHO TOUCH TYPE LOAD SAVE", CR
  1620. .byte "HEX RUN RENAME COPY", CR
  1621. .byte "DEVICE DEV DRIVE DEL ERASE", CR
  1622. .byte "ABOUT EXIT", CR
  1623. .byte CR
  1624. .byte 0
  1625. msg_mode:
  1626. .byte "CPU PORT $0001 = $", 0
  1627. msg_workspace:
  1628. .byte CR, "WORK BYTE $A000 = $", 0
  1629. msg_layout:
  1630. .byte CR
  1631. .byte "$0001 LOW BITS %110", CR
  1632. .byte "$080D START $A000-$BFFF RAM", CR
  1633. .byte CR
  1634. .byte 0
  1635. msg_written:
  1636. .byte "WROTE $", 0
  1637. msg_dump:
  1638. .byte "A000:", ' ', 0
  1639. msg_zeroed:
  1640. .byte "ZEROED $A000-$A00F", CR, 0
  1641. msg_signed:
  1642. .byte "REWROTE SIGNATURE AT $A001", CR, 0
  1643. msg_about:
  1644. .byte CR
  1645. .byte "BASIC LINE 10 SYS 2061 BOOTS THIS.", CR
  1646. .byte "KERNAL STAYS MAPPED IN.", CR
  1647. .byte "SHELL CODE STARTS AT $080D.", CR
  1648. .byte "USE $A000-$BFFF AS WORK RAM.", CR
  1649. .byte CR
  1650. .byte 0
  1651. msg_screen:
  1652. .byte "SCREEN SIZE: ", 0
  1653. msg_status:
  1654. .byte CR, "STATUS OF TARGET ", 0
  1655. msg_init:
  1656. .byte CR, "INITIALIZING TARGET ", 0
  1657. msg_delete:
  1658. .byte CR, "SCRATCHING FILE ON TARGET ", 0
  1659. msg_delete_usage:
  1660. .byte "USAGE: DEL filename OR ERASE filename", CR, 0
  1661. msg_touch:
  1662. .byte CR, "CREATING EMPTY FILE ON TARGET ", 0
  1663. msg_touch_usage:
  1664. .byte "USAGE: TOUCH filename", CR, 0
  1665. msg_echo_usage:
  1666. .byte "USAGE: ECHO text OR ECHO text > SAVE file", CR, 0
  1667. msg_type_usage:
  1668. .byte "USAGE: TYPE filename", CR, 0
  1669. msg_load_usage:
  1670. .byte "USAGE: LOAD filename", CR, 0
  1671. msg_save_usage:
  1672. .byte "USAGE: SAVE filename", CR, 0
  1673. msg_loaded:
  1674. .byte "LOADED ", 0
  1675. msg_saved:
  1676. .byte "SAVED ", 0
  1677. msg_bytes:
  1678. .byte " BYTES", CR, 0
  1679. msg_truncated:
  1680. .byte " (TRUNCATED TO BUFFER SIZE)", CR, 0
  1681. msg_buffer_empty:
  1682. .byte "BUFFER EMPTY. USE LOAD FIRST.", CR, 0
  1683. msg_current_target:
  1684. msg_device_set:
  1685. .byte "TARGET ", 0
  1686. msg_device_usage:
  1687. .byte "USAGE: DEVICE 8-15 OR DEV 8-15", CR, 0
  1688. msg_drive_set:
  1689. .byte "TARGET ", 0
  1690. msg_drive_usage:
  1691. .byte "USAGE: DRIVE 0 OR DRIVE 1", CR, 0
  1692. msg_disk_open_error:
  1693. .byte "DISK OPEN ERROR $", 0
  1694. msg_disk_input_error:
  1695. .byte "DISK INPUT ERROR $", 0
  1696. msg_signature:
  1697. .byte "OSWORK", 0
  1698. fname_init:
  1699. .byte "I0:"
  1700. cmd_help:
  1701. .byte "HELP", 0
  1702. cmd_mem:
  1703. .byte "MEM", 0
  1704. cmd_inc:
  1705. .byte "INC", 0
  1706. cmd_dump:
  1707. .byte "DUMP", 0
  1708. cmd_zero:
  1709. .byte "ZERO", 0
  1710. cmd_sign:
  1711. .byte "SIGN", 0
  1712. cmd_cls:
  1713. .byte "CLS", 0
  1714. cmd_screen:
  1715. .byte "SCREEN", 0
  1716. cmd_about:
  1717. .byte "ABOUT", 0
  1718. cmd_dir:
  1719. .byte "DIR", 0
  1720. cmd_status:
  1721. .byte "STATUS", 0
  1722. cmd_init:
  1723. .byte "INIT", 0
  1724. cmd_echo:
  1725. .byte "ECHO", 0
  1726. cmd_touch:
  1727. .byte "TOUCH", 0
  1728. cmd_type:
  1729. .byte "TYPE", 0
  1730. cmd_load:
  1731. .byte "LOAD", 0
  1732. cmd_save:
  1733. .byte "SAVE", 0
  1734. cmd_device:
  1735. .byte "DEVICE", 0
  1736. cmd_dev:
  1737. .byte "DEV", 0
  1738. cmd_drive:
  1739. .byte "DRIVE", 0
  1740. cmd_del:
  1741. .byte "DEL", 0
  1742. cmd_erase:
  1743. .byte "ERASE", 0
  1744. cmd_exit:
  1745. .byte "EXIT", 0
  1746. cmd_hex:
  1747. .byte "HEX", 0
  1748. cmd_run:
  1749. .byte "RUN", 0
  1750. cmd_rename:
  1751. .byte "RENAME", 0
  1752. cmd_copy:
  1753. .byte "COPY", 0
  1754. msg_hex:
  1755. .byte "BUF HEX:", CR, 0
  1756. msg_run:
  1757. .byte "RUNNING $A100", CR, 0
  1758. msg_rename:
  1759. .byte CR, "RENAMING FILE ON TARGET ", 0
  1760. msg_rename_usage:
  1761. .byte "USAGE: RENAME oldname newname", CR, 0
  1762. msg_copy:
  1763. .byte CR, "COPYING FILE ON TARGET ", 0
  1764. msg_copy_usage:
  1765. .byte "USAGE: COPY srcname dstname", CR, 0
  1766. .segment "BSS"
  1767. workspace_counter:
  1768. .res 1
  1769. exit_requested:
  1770. .res 1
  1771. active_lfn:
  1772. .res 1
  1773. last_error:
  1774. .res 1
  1775. dir_link_lo:
  1776. .res 1
  1777. dir_link_hi:
  1778. .res 1
  1779. dir_line_count:
  1780. .res 1
  1781. quote_state:
  1782. .res 1
  1783. line_had_name:
  1784. .res 1
  1785. argument_index:
  1786. .res 1
  1787. argument2_index:
  1788. .res 1
  1789. scratch_len:
  1790. .res 1
  1791. scratch_command:
  1792. .res 32
  1793. filename_len:
  1794. .res 1
  1795. filename_spec:
  1796. .res 40
  1797. parsed_number:
  1798. .res 1
  1799. temp_digit:
  1800. .res 1
  1801. temp_value:
  1802. .res 1
  1803. current_device:
  1804. .res 1
  1805. current_drive:
  1806. .res 1
  1807. file_buffer_len:
  1808. .res 1
  1809. file_truncated:
  1810. .res 1
  1811. pipe_found:
  1812. .res 1
  1813. pipe_index:
  1814. .res 1
  1815. input_buffer:
  1816. .res INPUT_MAX + 1
  1817. input_len:
  1818. .res 1
  1819. compare_index:
  1820. .res 1
  1821. temp_char:
  1822. .res 1
  1823. dec_hundreds:
  1824. .res 1
  1825. dec_tens:
  1826. .res 1
  1827. dec_ones:
  1828. .res 1

Powered by TurnKey Linux.