Changes

Jump to: navigation, search

Locomotive BASIC

2,255 bytes added, 11:25, 8 January 2019
/* Functions */
: '''Table of Disc ERRor codes''':
: If AMSDOS has already reported an error, then bit 7 is set, hence the value of DERR is offset by 128.
<pre>
===============================================================================
===============================================================================
</pre>
: Other values returned by DERR originate from the disc controller and are bit significant, always with bit 6 set.
: The significance of each bit is as follows:
<pre>
===============================================================================
| BIT | Significance |
===============================================================================
| 0 | Address mark missing. |
| 1 | Not writable - disc is write protected. |
| 2 | No data - can't find the sector. |
| 3 | Drive not ready - no disc in the drive. |
| 4 | Overrun error. |
| 5 | Data error - CRC error. |
| 6 | Always set to 1 to indicate error from disc controller. |
| 7 | Set to 1 if error has already been reported by AMSDOS. |
===============================================================================
</pre>
==== <code>EOF</code> ====
: ''BASIC 1.1''
| | |WEND that does not match the current WHILE loop. |
| 31 |File not open |(see 'Disc ERRors above). |
| | |If access attempted when no file was open. |
| 32 |Broken in |(see 'Disc ERRors above). |
| | |If access attempted when no file was open. |
| | | |
| | |If value 31 or 32 are stated, DERR could be |
| | |interrogate to give more detailed information. |
| | |(see example below.) |
========================================================================================
</pre>
: Example for ERR 31 / 32:<pre>10 ON ERROR GOTO 100020 OPENOUT "myfile.asc"30 WRITE #9,"test-data"40 CLOSEOUT50 END1000 amsdoserr=(DERR AND &7F):REM mask off bit 71010 IF ERR<31 THEN END1020 IF ERR=31 THEN PRINT "are you sure you've typed line 20 correctly?":END1030 IF amsdoserr=20 THEN PRINT "disc is full, suggest you use a new data disc":END1040 IF amsdoserr=&X01001000 THEN PRINT "put a disc in the drive, then press a key":WHILE INKEY$="":WEND:RESUME1050 END</pre>
==== <code>EXP (i)</code> ====
205
edits