|
- 1 REM =====================================================
- 2 REM DISK-ACCESS.BAS — C64 1541 Disk I/O Examples
- 3 REM Demonstrates: sequential files, relative files,
- 4 REM error channel, directory reading
- 5 REM =====================================================
-
- 100 REM =====================
- 101 REM SECTION 1: ERROR CHANNEL SUBROUTINE
- 102 REM =====================
- 103 REM Call GOSUB 9000 after any disk operation
- 104 REM Sets EN=error number, EM$=message, ET=track, ES=sector
- 105 GOTO 200
-
- 9000 REM --- READ ERROR CHANNEL ---
- 9010 OPEN 15,8,15
- 9020 INPUT#15, EN, EM$, ET, ES
- 9030 CLOSE 15
- 9040 IF EN > 1 THEN PRINT "DISK ERROR" EN EM$ "T"ET "S"ES
- 9050 RETURN
-
- 200 REM =====================
- 201 REM SECTION 2: WRITE SEQUENTIAL FILE
- 202 REM =====================
- 210 PRINT "WRITING SEQUENTIAL FILE..."
- 220 OPEN 1, 8, 2, "MYDATA,S,W"
- 230 GOSUB 9000 : IF EN > 1 THEN GOTO 299
-
- 240 PRINT#1, "RECORD 1"
- 250 PRINT#1, "RECORD 2"
- 260 PRINT#1, 12345
- 270 PRINT#1, "LAST RECORD"
- 280 CLOSE 1
- 290 GOSUB 9000
- 299 PRINT "WRITE DONE."
-
- 300 REM =====================
- 301 REM SECTION 3: READ SEQUENTIAL FILE
- 302 REM =====================
- 310 PRINT "READING SEQUENTIAL FILE..."
- 320 OPEN 1, 8, 2, "MYDATA,S,R"
- 330 GOSUB 9000 : IF EN > 1 THEN GOTO 399
-
- 340 IF ST <> 0 THEN GOTO 380 : REM check status
- 350 INPUT#1, LINE$
- 360 PRINT "READ: "; LINE$
- 370 GOTO 340
- 380 CLOSE 1
- 390 GOSUB 9000
- 399 PRINT "READ DONE."
-
- 400 REM =====================
- 401 REM SECTION 4: READ DIRECTORY
- 402 REM =====================
- 410 PRINT "DIRECTORY:"
- 420 LOAD "$",8
- 430 REM (After LOAD, program is gone! Use OPEN method instead:)
- 440 REM Alternative: open $ and read it
- 450 OPEN 1, 8, 0, "$"
- 460 GET#1, A$, B$ : REM skip first two bytes (load address)
- 470 LOOP$=""
- 480 GET#1, A$ : IF ST<>0 THEN GOTO 520
- 490 IF A$ = CHR$(0) THEN GOTO 480 : REM skip nulls
- 500 IF ASC(A$+CHR$(0)) = 13 THEN PRINT LOOP$ : LOOP$="" : GOTO 480
- 510 LOOP$ = LOOP$ + A$ : GOTO 480
- 520 IF LOOP$ <> "" THEN PRINT LOOP$
- 530 CLOSE 1
-
- 600 REM =====================
- 601 REM SECTION 5: SEND DOS COMMANDS
- 602 REM =====================
- 610 REM Scratch a file
- 620 PRINT "SCRATCHING OLD BACKUP..."
- 630 OPEN 15,8,15,"S0:BACKUP"
- 640 CLOSE 15
- 650 GOSUB 9000
-
- 660 REM Rename a file
- 670 PRINT "RENAMING FILE..."
- 680 OPEN 15,8,15,"R0:NEWNAME=MYDATA"
- 690 CLOSE 15
- 700 GOSUB 9000
-
- 710 REM Validate disk
- 720 PRINT "VALIDATING DISK..."
- 730 OPEN 15,8,15,"V0:"
- 740 CLOSE 15
- 750 GOSUB 9000
-
- 800 REM =====================
- 801 REM SECTION 6: LOAD ML PROGRAM
- 802 REM =====================
- 810 REM Load ML at its original address (SA=1)
- 820 LOAD "MLPROG",8,1
- 830 REM (after LOAD, program continues or use SYS)
- 840 END
-
- 900 REM =====================
- 901 REM SUBROUTINE: WAIT FOR KEY
- 902 REM =====================
- 910 PRINT "PRESS ANY KEY..."
- 920 GET K$ : IF K$="" THEN GOTO 920
- 930 RETURN
|