25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
2.7KB

  1. 1 REM =====================================================
  2. 2 REM DISK-ACCESS.BAS — C64 1541 Disk I/O Examples
  3. 3 REM Demonstrates: sequential files, relative files,
  4. 4 REM error channel, directory reading
  5. 5 REM =====================================================
  6. 100 REM =====================
  7. 101 REM SECTION 1: ERROR CHANNEL SUBROUTINE
  8. 102 REM =====================
  9. 103 REM Call GOSUB 9000 after any disk operation
  10. 104 REM Sets EN=error number, EM$=message, ET=track, ES=sector
  11. 105 GOTO 200
  12. 9000 REM --- READ ERROR CHANNEL ---
  13. 9010 OPEN 15,8,15
  14. 9020 INPUT#15, EN, EM$, ET, ES
  15. 9030 CLOSE 15
  16. 9040 IF EN > 1 THEN PRINT "DISK ERROR" EN EM$ "T"ET "S"ES
  17. 9050 RETURN
  18. 200 REM =====================
  19. 201 REM SECTION 2: WRITE SEQUENTIAL FILE
  20. 202 REM =====================
  21. 210 PRINT "WRITING SEQUENTIAL FILE..."
  22. 220 OPEN 1, 8, 2, "MYDATA,S,W"
  23. 230 GOSUB 9000 : IF EN > 1 THEN GOTO 299
  24. 240 PRINT#1, "RECORD 1"
  25. 250 PRINT#1, "RECORD 2"
  26. 260 PRINT#1, 12345
  27. 270 PRINT#1, "LAST RECORD"
  28. 280 CLOSE 1
  29. 290 GOSUB 9000
  30. 299 PRINT "WRITE DONE."
  31. 300 REM =====================
  32. 301 REM SECTION 3: READ SEQUENTIAL FILE
  33. 302 REM =====================
  34. 310 PRINT "READING SEQUENTIAL FILE..."
  35. 320 OPEN 1, 8, 2, "MYDATA,S,R"
  36. 330 GOSUB 9000 : IF EN > 1 THEN GOTO 399
  37. 340 IF ST <> 0 THEN GOTO 380 : REM check status
  38. 350 INPUT#1, LINE$
  39. 360 PRINT "READ: "; LINE$
  40. 370 GOTO 340
  41. 380 CLOSE 1
  42. 390 GOSUB 9000
  43. 399 PRINT "READ DONE."
  44. 400 REM =====================
  45. 401 REM SECTION 4: READ DIRECTORY
  46. 402 REM =====================
  47. 410 PRINT "DIRECTORY:"
  48. 420 LOAD "$",8
  49. 430 REM (After LOAD, program is gone! Use OPEN method instead:)
  50. 440 REM Alternative: open $ and read it
  51. 450 OPEN 1, 8, 0, "$"
  52. 460 GET#1, A$, B$ : REM skip first two bytes (load address)
  53. 470 LOOP$=""
  54. 480 GET#1, A$ : IF ST<>0 THEN GOTO 520
  55. 490 IF A$ = CHR$(0) THEN GOTO 480 : REM skip nulls
  56. 500 IF ASC(A$+CHR$(0)) = 13 THEN PRINT LOOP$ : LOOP$="" : GOTO 480
  57. 510 LOOP$ = LOOP$ + A$ : GOTO 480
  58. 520 IF LOOP$ <> "" THEN PRINT LOOP$
  59. 530 CLOSE 1
  60. 600 REM =====================
  61. 601 REM SECTION 5: SEND DOS COMMANDS
  62. 602 REM =====================
  63. 610 REM Scratch a file
  64. 620 PRINT "SCRATCHING OLD BACKUP..."
  65. 630 OPEN 15,8,15,"S0:BACKUP"
  66. 640 CLOSE 15
  67. 650 GOSUB 9000
  68. 660 REM Rename a file
  69. 670 PRINT "RENAMING FILE..."
  70. 680 OPEN 15,8,15,"R0:NEWNAME=MYDATA"
  71. 690 CLOSE 15
  72. 700 GOSUB 9000
  73. 710 REM Validate disk
  74. 720 PRINT "VALIDATING DISK..."
  75. 730 OPEN 15,8,15,"V0:"
  76. 740 CLOSE 15
  77. 750 GOSUB 9000
  78. 800 REM =====================
  79. 801 REM SECTION 6: LOAD ML PROGRAM
  80. 802 REM =====================
  81. 810 REM Load ML at its original address (SA=1)
  82. 820 LOAD "MLPROG",8,1
  83. 830 REM (after LOAD, program continues or use SYS)
  84. 840 END
  85. 900 REM =====================
  86. 901 REM SUBROUTINE: WAIT FOR KEY
  87. 902 REM =====================
  88. 910 PRINT "PRESS ANY KEY..."
  89. 920 GET K$ : IF K$="" THEN GOTO 920
  90. 930 RETURN

Powered by TurnKey Linux.