mirror of
https://github.com/iKarith/beneath-apple-dos.git
synced 2025-01-14 06:31:00 +00:00
221 lines
8.6 KiB
Plaintext
221 lines
8.6 KiB
Plaintext
.np
|
|
A2A3-A2A7 OPEN command handler.
|
|
Set file type as TEXT.
|
|
Go to A3D5 to open file.
|
|
.np
|
|
A2A8-A2E9 Command handler common file management code.
|
|
Set opcode to OPEN.
|
|
A2AA If no L value was given on the command, use 0001 and
|
|
store record length value in file manager parmlist.
|
|
A2C8 Close file if already open.
|
|
Is there an available file buffer?
|
|
If not, issue "NO FILE BUFFERS AVAILABLE" message.
|
|
Point $40,$41 at the free file buffer.
|
|
Copy filename to file buffer (allocates the buffer)
|
|
(A743).
|
|
Copy buffer pointers to file manager parmlist (A74E).
|
|
Finish filling in the file manager parmlist (A71A).
|
|
Set operation code in parmlist.
|
|
Exit through the file manager driver.
|
|
.np
|
|
A2EA-A2FB CLOSE command handler.
|
|
If no filename was given as part of command,
|
|
go to A316 to close all files.
|
|
Otherwise, find the open file buffer for filename
|
|
(A764).
|
|
If no such file open, exit to caller.
|
|
Otherwise, close file and free buffer (A2FC).
|
|
Go back through CLOSE command handler to make sure
|
|
there are not more open buffers for the same file.
|
|
.np
|
|
A2FC-A315 Close a file and free its file buffer.
|
|
Find out if this buffer is EXEC's (A7AF).
|
|
If so, turn EXEC flag off.
|
|
Release the buffer by storing a $00 on its filename
|
|
field.
|
|
Copy file buffer pointers to the file manager
|
|
parmlist.
|
|
Set file manager opcode to CLOSE.
|
|
Exit through the file manager driver routine.
|
|
.np
|
|
A316-A330 Close all open files.
|
|
Point to first file buffer (A792).
|
|
Go to A320.
|
|
A31B Point to next file buffer on chain (A79A).
|
|
If at end of chain, exit to caller.
|
|
A320 Is this file buffer EXEC's?
|
|
If so, skip it and go to A31B.
|
|
Is it not in use (open)?
|
|
If so, skip it and go to A31B.
|
|
Otherwise, close it and free it (A2FC).
|
|
Go to A316 to start all over.
|
|
.np
|
|
A331-A35C BSAVE command handler.
|
|
Insure that the A and L keywords were present on the
|
|
command.
|
|
If not, issue "SYNTAX ERROR" message.
|
|
Open and verify a B type file (A3D5).
|
|
Write the A keyword value as the first two bytes of
|
|
the file.
|
|
Write the L keyword value as the next two bytes of
|
|
the file.
|
|
Use the A value to exit by writing a range of bytes
|
|
from memory to the file.
|
|
.np
|
|
A35D-A38D BLOAD command handler.
|
|
Open the file, ignoring its type.
|
|
Insure the type is B.
|
|
If not, issue "FILE TYPE MISMATCH" message.
|
|
Otherwise, open B type file and test file type (A3D5)
|
|
Read the A value from the first two bytes of file.
|
|
If A keyword was not given, use the value just read.
|
|
Read L value as next two bytes in file.
|
|
Go to A471 to read range of bytes to memory from file
|
|
.np
|
|
A38E-A396 BRUN command handler.
|
|
Call BLOAD command handler to load file into memory.
|
|
Replace DOS intercepts.
|
|
Exit DOS by jumping to the A address value to begin
|
|
execution of the binary program.
|
|
.np
|
|
A397-A3D4 SAVE command handler.
|
|
Get the active BASIC type (AAB6).
|
|
If INTEGER, go to A3BC.
|
|
If APPLESOFT, test $D6 flag to see if program is
|
|
protected.
|
|
If so, issue "PROGRAM TOO LARGE" message.
|
|
Otherwise, open and test for A type file (A3D5).
|
|
Compute program length (PGMEND-LOMEM).
|
|
Write this two byte length to file.
|
|
Exit by writing program image from LOMEM as a range
|
|
of bytes (A3FF).
|
|
A3BC Open and test for I type file (A3D5).
|
|
Compute program length (HIMEM-PGMSTART).
|
|
Write this two byte length to file.
|
|
Exit by writing program image from PGMSTART as a
|
|
range of bytes (A3FF).
|
|
.np
|
|
A3D5-A3DF Open and test file type.
|
|
Set file type wanted in file manager parmlist.
|
|
Call A2A8 to open file.
|
|
Go to A7C4 to check file type.
|
|
.np
|
|
A3E0-A3FE Write a 2 byte value to the open file.
|
|
Store value to be written in file manager parmlist.
|
|
Set write one byte opcodes.
|
|
Call file manager driver.
|
|
Call it again to write second byte and exit to caller
|
|
.np
|
|
A3FF-A40F Read/write a range of bytes.
|
|
Set the address of the range in file manager parmlist
|
|
Set subcode to read or write a range of bytes.
|
|
Call the file manager driver.
|
|
Close the file.
|
|
Exit through the VERIFY command handler to insure
|
|
data was written ok.
|
|
.np
|
|
A410-A412 Issue "FILE TYPE MISMATCH" message.
|
|
.np
|
|
A413-A479 LOAD command handler.
|
|
Close all files (A316).
|
|
Open the file in question.
|
|
Is it an A or I type file?
|
|
If not, issue "FILE TYPE MISMATCH" message.
|
|
Which BASIC is active?
|
|
If INTEGER, go to A450.
|
|
Select APPLESOFT BASIC (A4B1). This call could result
|
|
in DOS losing control if the RAM version must be
|
|
run.
|
|
Read first two bytes of file as length of program.
|
|
Add length to LOMEM (program start) to compute
|
|
program end.
|
|
Is program end beyond HIMEM?
|
|
If so, close file and issue "PROGRAM TOO LARGE".
|
|
Set program end and start of variables pointers.
|
|
Read program as range of bytes to program start.
|
|
Replace DOS intercepts (A851).
|
|
Go to BASIC's relocation routine to convert a RAM
|
|
APPLESOFT program to ROM and vice versa as needed.
|
|
A450 Select INTEGER BASIC (A4B1).
|
|
Read length of program (first two bytes in file).
|
|
Compute program start (HIMEM-LENGTH).
|
|
If zero or less than LOMEM, issue "PROGRAM TOO LARGE"
|
|
message and close file.
|
|
Set program start pointers.
|
|
Read program into memory as a range of bytes.
|
|
Exit to caller.
|
|
.np
|
|
A47A-A4AA Read two bytes from file (Address or Length).
|
|
Set up parmlist to read two bytes to range length
|
|
field (AA60).
|
|
Call file manager driver.
|
|
Store value read as range length in file manager
|
|
parmlist just in case it was a length.
|
|
.np
|
|
A4AB-A4B0 Close file and issue "PROGRAM TOO LARGE" message.
|
|
.np
|
|
A4B1-A4D0 Select desired BASIC.
|
|
If desired BASIC is already active, exit to caller.
|
|
Save current command index in case we must RUN
|
|
APPLESOFT.
|
|
If INTEGER, go to A59E to select it.
|
|
Otherwise, copy primary file name to secondary
|
|
buffer to save it in case RAM APPLESOFT is needed.
|
|
Go to A57A to set APPLESOFT.
|
|
.np
|
|
A4D1-A4E4 RUN command handler.
|
|
If APPLESOFT is active, set RUN intercepted flag so
|
|
that RUN can complete after APPLESOFT is loaded.
|
|
Call LOAD command handler to load the program.
|
|
Skip a line on the screen.
|
|
Put DOS intercepts back.
|
|
Go to the RUN entry point in the current BASIC.
|
|
.np
|
|
A4E5-A4EF INTEGER BASIC RUN entry point intercept.
|
|
Delete all variables (CLR equivalent).
|
|
Go to the CHAIN entry point in INTEGER BASIC.
|
|
.np
|
|
A4F0-A4FB CHAIN command handler.
|
|
Call the LOAD command handler to load the program.
|
|
Skip a line.
|
|
Replace DOS intercepts.
|
|
Go to current BASIC's CHAIN entry point.
|
|
.np
|
|
A4FC-A505 APPLESOFT ROM RUN entry point intercept.
|
|
Call APPLESOFT to clear variables.
|
|
Reset ONERR.
|
|
Go to RUN entry point.
|
|
.np
|
|
A506-A50D APPLESOFT RAM RUN entry point intercept.
|
|
Call APPLESOFT to clear variables.
|
|
Reset ONERR.
|
|
Go to RUN entry point.
|
|
.np
|
|
A510-A51A WRITE command handler.
|
|
Call READ/WRITE common code (A526).
|
|
Set CSWL state to 5 (WRITE mode line start).
|
|
Exit DOS (9F83).
|
|
.np
|
|
A51B-A525 READ command handler.
|
|
Call READ/WRITE common code (A526).
|
|
Set READ mode flag in status flags (AA51).
|
|
Exit DOS (9F83).
|
|
.np
|
|
A526-A54E READ/WRITE common code.
|
|
Locate the open file buffer for this file (A764).
|
|
If not open, open it.
|
|
Copy file buffer addresses to file manager parmlist.
|
|
If R or B were given on command, copy to parmlist
|
|
and issue a POSITION call to file manager.
|
|
Exit to caller.
|
|
.np
|
|
A54F-A56D INIT command handler.
|
|
If V was given, use it. Otherwise, use 254.
|
|
Store first page number of DOS in file manager
|
|
parmlist.
|
|
Call file manager driver to INIT diskette.
|
|
Exit through SAVE to store greeting program on disk.
|
|
.np
|
|
A56E-A579 CATALOG command handler.
|
|
.nx ch8.3
|