910 lines
27 KiB
Plaintext
910 lines
27 KiB
Plaintext
**********************************
|
|
* *
|
|
* ADDRESSES REFERRED TO BY DOS *
|
|
* *
|
|
**********************************
|
|
|
|
|
|
|
|
*--------------------------------*
|
|
* ZERO-PAGE ADDRESSES *
|
|
*--------------------------------*
|
|
|
|
CH = $24 ;OFFSET FROM LEFT EDGE OF WINDOW
|
|
;TO NEXT CHR POS'N ON SCRN LINE.
|
|
;(RANGE: $00-$23.)
|
|
PT2BTBUF = $26 ;PTR ($26,$27) TO TARGET BUF USED
|
|
;WHEN READING IN DOS DURING BOOT.
|
|
HOLDNIBL = $26 ;TEMP REG USED FOR HOLDING TWO-
|
|
;ENCODED NIBBLES WHEN WRITING
|
|
;A SECTOR DURING RWTS'S FORMAT OR
|
|
;WRITE OPERATIONS.
|
|
PROSCRTH = $26 ;TEMP REG USED FOR:
|
|
;- DECODING ODD/EVEN ADDR FIELD
|
|
; BYTES.
|
|
;- CNTR AND INDEX TO RWTS BUFFERS
|
|
; (1 & 2) WHEN POSTNIBBLING.
|
|
;- CNTR FOR # OF CHANCES TO FIND
|
|
; THE CORRECT ADDR PROLOGUE.
|
|
STPSDONE = $26 ;- CNTR FOR # OF HALFTRKS MOVED.
|
|
;- CURRENT DISTANCE (EXPRESSED IN
|
|
; HALFTRACKS) FROM THE START OR
|
|
; DESTINATION HALFTRACK POS'NS.
|
|
FRMTSLOT = $27 ;SLOT * 16 USED TO INDEX DRIVE
|
|
;BASE ADDRESSES.
|
|
HOLDPRES = $27 ;HOLDS CURRENT HALFTRACK POSITION
|
|
;WHEN SEEKING.
|
|
CKSUMCAL = $27 ;RUNNING CHKSUM CALCULATION USED
|
|
;WHEN READING ODD-EVEN ENCODED
|
|
;ADDRESS FIELD BYTES.
|
|
BASL = $28 ;PTR ($28,$29) TO THE LEFT END OF
|
|
;THE SCREEN LINE.
|
|
DESTRK = $2A ;DESTINATION HALFTRACK POS'N WHEN
|
|
;SEEKING.
|
|
SLT16ZPG = $2B ;SLOT*16 USED TO INDEX DRIVE
|
|
;FUNCTIONS.
|
|
CKSUMDSK = $2C ;DECODED CHECKUSM VAL READ FROM
|
|
;ADDR FIELD (RWTS).
|
|
SECDSK = $2D ;PHYS SEC # FOUND IN ADDR FIELD.
|
|
TRKDSK = $2E ;TRK # FOUND IN ADDR FIELD.
|
|
VOLDSK = $2F ;VOL # FOUND IN ADDR FIELD.
|
|
PROMPT = $33 ;PROMPT CHAR USED TO SIGNAL INPUT
|
|
;IS REQUIRED. ALSO USED AS A FLG
|
|
;IN THE CMD PARSING & PROCESSING
|
|
;ROUTINES.
|
|
DRVZPG = $35 ;DENOTES DRIVE SELECTED:
|
|
; NEG = DRIVE 1, POS = DRIVE 2.
|
|
CSW = $36 ;MAIN OUTPUT HOOK (ALSO KNOWN AS
|
|
;THE CHARACTER OUTPUT SWITCH).
|
|
;PTR ($36,$37) TO DEVICE/ROUTINE
|
|
;WHICH HANDLES OUTPUT CHARACTERS.
|
|
KSW = $38 ;MAIN INPUT HOOK (ALSO KNOWN AS
|
|
;THE KEYBOARD SWITCH).
|
|
;PTR ($38,$39) TO DEVICE/ROUTINE
|
|
;THAT HANDLES INPUT CHARACTERS.
|
|
PTR2DCT = $3C ;PTR ($3C,$3D) TO RWTS'S DEVICE
|
|
;CHARACTERISTIC TABLE.
|
|
BOOTSEC = $3D ;PHYS SEC # WANTED WHEN BOOTING.
|
|
PTR2RDSC = $3E ;PTR ($3E,$3F) TO BOOT0'S READ-
|
|
;SECTOR SUBROUT'N (BTRDSEC, $CS5C
|
|
;WHERE S=SLOT #, NORMALLY=$C65C.)
|
|
PTR2BUF = $3E ;PTR ($3E,$EF) TO RWTS'S CURRENT
|
|
;DATA BUFFER.
|
|
HOLDAA = $3E ;- HOLDS A CONSTANT ($AA) FOR
|
|
; PROLOGUE AND EPILOGUE BYTES
|
|
; USED WHEN FORMATTING.
|
|
;- ALSO USED AS A TEMP REG WHEN
|
|
; CREATING ODD-EVEN ENCODED BYTS
|
|
; ASSOC WITH THE ADDR FIELD.
|
|
FRMTSEC = $3F ;HOLDS # OF SEC TO BE FORMATTED &
|
|
;ALSO ACTS AS CNTR FOR # OF SECS
|
|
;VERIFIED WHEN CHECKING TRK JUST
|
|
;FORMATTED.
|
|
A3L = $40 ;MULTIPURPOSE REG & PTR ($40,$41)
|
|
FRMTVOL = $41 ;VOL # TO WRITE WHEN FORMATTING.
|
|
A4L = $42 ;MULTIPURPOSE REG & PTR ($42,$43)
|
|
A5L = $44 ;MULTIPURPOSE REG & PTR ($44,$45)
|
|
FRMTKCTR = $44 ;TRK# TO WRITE/READ WHEN FORMAT-
|
|
;TING/VERIFYING. ALSO ACTS AS A
|
|
;CNTR OF THE # OF TRKS FORMATTED/
|
|
;VERIFIED.
|
|
SYNCNTR = $45 ;# OF SYNC BYTES 2 WRT BTWN SECS
|
|
;& DELAY CNTR TO LET SOME SYNCS
|
|
;PASS BY READ HEAD WHEN VERIFYING
|
|
;A TRK JUST FORMATTED.
|
|
MTRTIME = $46 ;MOTOR-ON-TIME COUNT ($46,$47).
|
|
;CNTR USED TO DETERMINE IF THE
|
|
;DRIVE MOTOR HAS BEEN ON LONG
|
|
;ENOUGH TO DO RELIABLE READING.
|
|
;THE MOTOR IS CONSIDERED TO BE UP
|
|
;TO SPEED AFTER APPROX. 1 SECOND
|
|
;(AT WHICH TIME, MTRTIME = 0000).
|
|
PTR2IOB = $48 ;PTR ($48,49) TO RWTS'S INPUT/
|
|
;OUTPUT BLOCK (IOB).
|
|
STATUS = $48 ;STATUS REGISTER SAVE AREA.
|
|
LOMEM = $4A ;PTR ($4A,$4B) 2 START OF INTEGER
|
|
;BASIC'S VARIABLE TABLE.
|
|
HIMEM = $4C ;PTR ($4C,$4D) TO END OF INTEGER
|
|
;BASIC PRGM.
|
|
TXTTAB = $67 ;PTR ($67,$68) TO START OF THE
|
|
;APPLESOFT PRGM TEXT. DEFAULTS TO
|
|
;$801 ON A COLDSTART (ONCE EXECU-
|
|
;TION FLOWS INTO APPLESOFT).
|
|
;PTR'S CONTENTS CAN BE CHANGED TO
|
|
;ACCOMMODATE THE LOADING OF AN
|
|
;APPLESOFT PRGM IN A NON-STANDARD
|
|
;POSITION.
|
|
VARTAB = $69 ;PTR ($69,$6A) TO START OF SIMPLE
|
|
;VARIABLE TABLE.
|
|
FRETOP = $6F ;PTR ($6F,$70) TO START OF FREE
|
|
;SPACE (LOCATED BTWN THE END OF
|
|
;THE VARIABLE TBL & THE START OF
|
|
;THE STRING VALUES).
|
|
MEMSIZ = $73 ;PTR ($73,$74) TO HIGHEST MEMORY
|
|
;LOCATION (PLUS 1) THAT IS AVAIL-
|
|
;ABLE TO AN APPLESOFT PRGM. (NOT
|
|
;TO BE CONFUSED WITH THE END OF
|
|
;THE APPLESOFT PRGM). CAN ALSO BE
|
|
;EXPRESSED AS A PTR TO THE FIRST
|
|
;BYTE OF THE DOS BUFFER REGION.
|
|
CURLIN = $75 ;CURRENT APPLESOFT PROGRAM LINE
|
|
;NUMBER ( $75,$76). USED BY DOS
|
|
;2 DETERMINE IF BASIC IS RUNNING.
|
|
;(CURLIN+1 CONTAINS AN $FF WHEN
|
|
;COMPUTER IS IN THE IMMED MODE.)
|
|
PRGEND = $AF ;PTR ($AF,$B0) 2 END OF APPLESOFT
|
|
;PRGM (PLUS 1) IF FP CMD WAS USED
|
|
;OR TO END OF PRGM (PLUS 2) IF A
|
|
;NEW CMD WAS USED.
|
|
INTPGMST = $CA ;PTR ($CA,$CB) TO START OF THE
|
|
;INTEGER PRGM.
|
|
INTVRLND = $CC ;INTEGER BASIC'S CURRENT END-OF-
|
|
;VARIABLE PTR ($CC,$CD).
|
|
PROTFLG = $D6 ;PRGM PROTECTION FLAG.
|
|
;IF PROTECTION FLAG IS ON (NEG),
|
|
;ALL APPLESOFT CMDS CAUSE A RUN &
|
|
;DOS'S SAVE CMD CAUSE A PHONY
|
|
;PROGRAM-TOO-LARGE ERROR MSG 2 BE
|
|
;GENERATED.
|
|
ERRFLG = $D8 ;ON-ERROR FLAG. EQUALS $80 IF
|
|
;ON-ERR IS ACTIVE.
|
|
RUNMODE = $D9 ;INTEGER BASIC'S MODE FLAG.
|
|
;CONTAINS A NEG VALUE IF INTEGER
|
|
;IS IN THE DEFERRED MODE.
|
|
|
|
|
|
*--------------------------------*
|
|
* PAGES TWO TO EIGHT *
|
|
*--------------------------------*
|
|
|
|
BUF200 = $200 ;THE INPUT BUFFER ($200-$2FF).
|
|
;(ALSO KNOWN AS KEYBOARD BUFFER.)
|
|
|
|
PG3DOSVT = $3D0 ;START OF PAGE-3 DOS VECTOR TBL.
|
|
RESETVEC = $3F2 ;RESET VECTOR. CONTAINS ADDR OF
|
|
;ROUT'N WHERE EXECUT'N DIVERTS TO
|
|
;WHEN THE RESET KEY IS PRESSED.
|
|
VLDBYTE = $3F4 ;RESET VALIDATION BYTE.
|
|
;IF $3F3 EOR #$A5 IS NOT EQUAL TO
|
|
;$3F4, THEN DISK REBOOTS AND A
|
|
;COLDSTART IS DONE. OTHERWISE,
|
|
;EXECUTION GOES TO THE ADDR IN
|
|
;$3F2/$3F3.
|
|
|
|
TRK4DRV1 = $478 ;BASE ADR USED TO REFERENCE THE
|
|
;LOCATION THAT CONTAINS THE LAST
|
|
;HALFTRACK ON WHICH DRIVE 1 WAS
|
|
;ALIGNED.
|
|
PRESTRK = $478 ;- CURRENT HALFTRACK NUMBER.
|
|
;- SAVE REG FOR WHOLE TRK# WANTED
|
|
; WHEN HAVE TO GO RECALIBRATE.
|
|
TRK4DRV2 = $4F8 ;BASE ADR USED TO REFERENCE THE
|
|
;LOCATION THAT CONTAINS THE LAST
|
|
;HALFTRACK ON WHICH DRIVE 2 WAS
|
|
;ALIGNED.
|
|
RSEEKCNT = $4F8 ;CNTR FOR # OF RE-SEEKS ALLOWED
|
|
;BETWEEN RECALIBRATIONS (4 --> 1,
|
|
;DO RECALIBRATION WHEN CNTR = 0.)
|
|
|
|
READCNTR = $578 ;CNTR FOR # OF ATTEMPTS ALLOWED 2
|
|
;GET A GOOD ADDR OR DATA READ.
|
|
SLOTPG5 = $5F8 ;SLOT*16 USED WHEN DOS WAS BOOTED
|
|
|
|
SLOTPG6 = $678 ;SLOT*16 USED WHEN FORMATTING &
|
|
;WRITING.
|
|
RECLBCNT = $6F8 ;CNTR FOR # OF RECALIBRATIONS
|
|
;ALLOWED BEFORE RWTS GIVES UP.
|
|
|
|
BT1LDADR = $8FD ;BOOT1 LOAD ADDRESS ($8FD,$8FE).
|
|
;VARIES FROM $B600 TO $BF00.
|
|
;EVENTUALLY POINTS 2 THE START OF
|
|
;BOOT2 ($B700).
|
|
BT1PG2RD = $8FF ;INITIALLY CONTAINS # OF SECS TO
|
|
;READ IN WHEN EXECUTING BOOT1.
|
|
;ALSO DOUBLES AS LOGICAL SEC #.
|
|
;(VARIES FROM $09 --> $00 -->$FF)
|
|
;(SEE DISCUSSION IN FORMATTED
|
|
;DIS'MBLY "THE BOOT PROCESS".)
|
|
|
|
|
|
*--------------------------------*
|
|
* RAM-BASED APPLESOFT ADDRESSES *
|
|
* A(RAM) *
|
|
*--------------------------------*
|
|
CLRFPRAM = $E65 ;ENTRY POINT TO CLEAR VARIABLES
|
|
;FROM A RAM-BASED APPLESOFT PRGM.
|
|
RUNFPRAM = $FD4 ;ENTRY POINT 2 EXECUTE RAM-BASED
|
|
;APPLESOFT PRGM.
|
|
|
|
|
|
*--------------------------------*
|
|
* DOS BUFFER START *
|
|
*--------------------------------*
|
|
|
|
DOSNMBF1 = $9CD3 ;ADDR OF FIRST DOS NAME BUFFER.
|
|
|
|
|
|
*--------------------------------*
|
|
* DRIVE FUNCTION BASE ADDRS *
|
|
*--------------------------------*
|
|
* NOTE: THE ACTUAL ADDRESSES *
|
|
* USED ARE DEPENDENT UPON WHICH *
|
|
* SLOT HOUSES THE DSK CONTROLLER *
|
|
* CARD. (SEE COMMENTS IN ANY ONE *
|
|
* OF THE FORMATTED DISASSEMBLIES *
|
|
* OF RWTS FOR MORE DETAILS.) *
|
|
|
|
MAG0FF = $C080 ;BASE ADDR TO TURN STEPPER MOTOR
|
|
;MAGNET ON OR OFF.
|
|
MTROFF = $C088 ;BASE ADDR TO TURN DRV MOTOR OFF.
|
|
MTRON = $C089 ;BASE ADR TO TURN DRV MOTOR ON.
|
|
SELDRV1 = $C08A ;BASE ADR TO SELECT DRIVE 1.
|
|
SELDRV2 = $C08B ;BASE ADR TO SELECT DRIVE 2.
|
|
Q6L = $C08C ;SHIFT BYTE IN OR OUT OF LATCH.
|
|
Q6H = $C08D ;LOAD LATCH FROM DATA BUS.
|
|
Q7L = $C08E ;PREPARE TO READ.
|
|
Q7H = $C08F ;PREPARE TO WRITE.
|
|
|
|
BTRDSEC = $C65C ;BOOT0'S READ SECTOR SUBROUTINE.
|
|
;(ACTUALLY=$CS5C, WHERE S=SLOT#.)
|
|
|
|
|
|
*--------------------------------*
|
|
* APPLESOFT ADDRESSES *
|
|
*--------------------------------*
|
|
RESTART = $D43C ;APLSFT BASIC'S WRMSTART ROUTINE.
|
|
SETLINKS = $D4F2 ;ROUT'N THAT CLEARS ALL VAR'BLES,
|
|
;RESETS THE STK PTR & RECALCS THE
|
|
;LINKS IN @ APPLESOFT PRGM LINE.
|
|
;(THIS ROUTINE IS WHAT ENABLES
|
|
;APLSFT PRGMS TO BE RELOCATABLE.)
|
|
SETZPTRS = $D665 ;APPLESOFT ROUTINE THAT SIMULATES
|
|
;CLEAR & RESTORE STATEMENTS.
|
|
NEWSTT = $D7D2 ;ROUTINE TO COLLECT & EXECUTE THE
|
|
;APPLESOFT PRGM STATEMENT.
|
|
BSCERHLR = $D865 ;BASIC'S ERROR-HANDLING ROUTINE.
|
|
BASICCLD = $E000 ;BASIC'S COLDSTART ROUTINE.
|
|
|
|
|
|
*--------------------------------*
|
|
* MONITOR ROM ROUTINES *
|
|
*--------------------------------*
|
|
OLDBRK = $FA59 ;DEFAULT BREAK INTERRUPT HANDLER.
|
|
INIT = $FB2F ;SCREEN INITIALIZATION ROUTINE.
|
|
;(SET FULL SCREEN TEXT.)
|
|
HOME = $FC58 ;BLANK OUT CURRENT SCROLL WINDOW
|
|
;& PUT THE CURSOR IN THE TOP LEFT
|
|
;CORNER OF THE WINDOW. (DOES NOT
|
|
;RESET THE WINDOW SIZE.)
|
|
RDKEY = $FD0C ;REQUEST INPUT VIA INPUT HOOK.
|
|
KEYIN = $FD1B ;WAIT FOR INPUT FROM KEYBOARD.
|
|
PRBYTE = $FDDA ;PRINT CONTENTS OF (A) AS HX VAL.
|
|
COUT = $FDED ;ROUTE OUTPUT VIA THE OUTPUT HK.
|
|
COUT1 = $FDF0 ;MONITOR ROM (TRUE) OUTPUT HNDLR.
|
|
SETKBD = $FE89 ;SELECT KEYBOARD AS INPUT DEVICE.
|
|
INPORT = $FE8B ;ENTRY POINT TO SELECT INPUT
|
|
;DEVICE OTHER THAN KEYBOARD.
|
|
SETVID = $FE93 ;SELECT SCREEN AS OUTPUT DEVICE.
|
|
OUTPORT = $FE95 ;ENTRY POINT TO SELECT OUTPUT
|
|
;DEVICE OTHER THAN SCREEN.
|
|
MONRTS = $FF58 ;AN RTS INSTRUC LOC'D IN MONITOR
|
|
;ROM. MANY RELOCATABLE PGMS "JSR"
|
|
;TO HERE IN ORDER TO LOAD UP THE
|
|
;STACK WITH THE ADDR OF THE "JSR"
|
|
;SO THEY CAN FIND OUT THE PRGM'S
|
|
;PRESENT LOCATION.
|
|
MON = $FF65 ;NORM ENTRY ROUTE 2 MONITOR ROM.
|
|
;("CALL -151" GOES HERE.)
|
|
|
|
|
|
* ====================================
|
|
* RELOCATABLE ADDRESS CONSTANTS TABLE.
|
|
* ($9D00 - $9D0F)
|
|
* (ADRS CAN BE CHANGED TO POINT TO
|
|
* CUSTOMIZED ROUTINES, TABLES, ETC.)
|
|
* ====================================
|
|
|
|
ADOSFNB1 DA DOSNMBF1 ;PTS TO FIRST DOS BUFFER AT ITS
|
|
;FILE NAME FIELD.
|
|
ADINPTCP DA INPTINCP ;PTS TO DOS'S INPUT INTERCEPT
|
|
;ROUTINE.
|
|
ADOPUTCP DA OPUTINCP ;PTS TO DOS'S OUTPUT INTERCEPT
|
|
;ROUTINE.
|
|
ADRPFNBF DA PRIMFNBF ;PTS TO PRIMARY FILENAME BUFFER.
|
|
ADRSFNBF DA SCNDFNBF ;PTS TO SECONDARY FILENAME BUFFER.
|
|
ADLENADR DA LENADRBF ;PTS TO 2-BYTE BUF THAT RECEIVES
|
|
;BLOAD ADR & LENGTH READ FROM DSK
|
|
ADOSTART DA ADOSFNB1 ;PTS TO 1RST BYTE OF DOS.
|
|
ADFMPARM DA OPCODEFM ;PTS TO FM PARAMETER LIST.
|
|
|
|
|
|
*=====================================
|
|
* TABLE OF OUTPUT HANDLER ENTRY POINTS
|
|
* ($9D10 - $9D1D)
|
|
* (ADR-1 OF ROUT'NS WHICH HANDLE PRINT
|
|
* STATEMENTS CONTAINING DOS CMDS.)
|
|
*=====================================
|
|
|
|
OUTHNDTB DA OPUTHDL0-1 ;EVALUATE START OF INPUT LINE.
|
|
DA OPUTHDL1-1 ;COLLECT THE DOS COMMAND.
|
|
DA OPUTHDL2-1 ;PRINT A <CR> AND RETURN.
|
|
DA OPUTHDL3-1 ;PROCESS THE INPUT INFORMATION.
|
|
DA OPUTHDL4-1 ;WRITE DATA TO DISK.
|
|
DA OPUTHDL5-1 ;ANALYZE 1RST CHR OF DATA FRM DSK
|
|
DA OPUTHDL6-1 ;IGNORE INPUT PROMPT ("?").
|
|
|
|
|
|
*=======================================
|
|
* COMMAND HANDLER ENTRY POINT TABLE
|
|
* ($9D1E - $9D55)
|
|
* ALL ADRS ARE ONE LESS THAN THE ACTUAL
|
|
* ENTRY POINTS BECAUSE THESE ROUT'NS ARE
|
|
* ENTERED VIA A "STACK JUMP". IF YOU
|
|
* CREATE A NEW DOS CMD, PLACE THE ADR-1
|
|
* OF THE NEW CMD IN THE FOLLOWING TABLE.
|
|
* (ALSO MAKE SURE THAT THE FIRST CMD IN
|
|
* THE TABLE CAN CREATE A NEW FILE.)
|
|
* SOME AUTHORS DISABLE SPECIFIC DOS
|
|
* CMDS BY POINTING THE CMD'S TABLE ADR
|
|
* AT DOS'S COLDSTART ROUTINE OR BY
|
|
* PLACING AN "RTS" OPCODE AT THE CMD'S
|
|
* ENTRY POINT.
|
|
*=======================================
|
|
|
|
CMDTBL DA CMDINIT-1 ; $A54F-1
|
|
DA CMDLOAD-1 ; $A413-1
|
|
DA CMDSAVE-1 ; $A397-1
|
|
DA CMDRUN-1 ; $A4D1-1
|
|
DA CMDCHAIN-1 ; $A4F0-1
|
|
DA CMDELETE-1 ; $A263-1
|
|
DA CMDLOCK-1 ; $A271-1
|
|
DA CMDUNLOK-1 ; $A275-1
|
|
DA CMDCLOSE-1 ; $A2EA-1
|
|
DA CMDREAD-1 ; $A51B-1
|
|
DA CMDEXEC-1 ; $A5C6-1
|
|
DA CMDWRITE-1 ; $A510-1
|
|
DA CMDPOSN-1 ; $A5DD-1
|
|
DA CMDOPEN-1 ; $A2A3-1
|
|
DA CMDAPPND-1 ; $A298-1
|
|
DA CMDRENAM-1 ; $A281-1
|
|
DA CMDCATLG-1 ; $A56E-1
|
|
DA CMDMON-1 ; $A233-1
|
|
DA CMDNOMON-1 ; $A23D-1
|
|
DA CMDPR-1 ; $A229-1
|
|
DA CMDIN-1 ; $A22E-1
|
|
DA CMDMXFIL-1 ; $A251-1
|
|
DA CMDFP-1 ; $A57A-1
|
|
DA CMDINT-1 ; $A59E-1
|
|
DA CMDBSAVE-1 ; $A331-1
|
|
DA CMDBLOAD-1 ; $A35D-1
|
|
DA CMDBRUN-1 ; $A38E-1
|
|
DA CMDVERFY-1 ; $A27D-1
|
|
|
|
|
|
*===========================================
|
|
* ACTIVE BASIC ENTRY POINT VECTOR TABLE
|
|
* ($9D56 - $9D61)
|
|
* (NOTE: TBL CUTOMIZED BY DOS ACCORDING TO
|
|
* THE CURRENT VERSION OF BASIC THAT IS BEING
|
|
* USED. ADRS SHOWN AS OPERANDS BELOW,
|
|
* ASSUME THAT APPLESOFT BASIC IS ACTIVE.)
|
|
*===========================================
|
|
|
|
CHAINTRY DA RUNFPROM ;ADR OF CHAIN ENTRY PT TO BASIC.
|
|
RUNTRY DA RUNFPROM ;ADR OF BASIC'S RUN CMD.
|
|
ADBSCERR DA BSCERHLR ;ADR OF BASIC'S ERROR HANDLER.
|
|
TOCLDVEC DA BASICCLD ;ADR OF BASIC'S COLD START ROUT'N
|
|
TOWRMVEC DA RESTART ;ADR OF BASIC'S WARM START ROUT'N
|
|
RLOCNTRY DA SETLINKS ;ADR OF ROUT'N THAT ENABLES BASIC
|
|
;PRGMS TO BE RELOCATABLE.
|
|
|
|
|
|
*====================================
|
|
* IMAGE OF INTEGER BASIC'S ENTRY
|
|
* POINT VECTOR TABLE ($9D62 - $9D6B).
|
|
*====================================
|
|
|
|
IMGINTV DA $E836
|
|
DA $A4E5
|
|
DA $E3E3
|
|
DA $E000
|
|
DA $E003
|
|
|
|
|
|
*=======================================
|
|
* IMAGE OF ROM APPLESOFT BASIC'S ENTRY
|
|
* POINT VECTOR TABLE ($9D6C - $9D77).
|
|
*=======================================
|
|
|
|
IMGFPV DA RUNFPROM
|
|
DA RUNFPROM
|
|
DA BSCERHLR
|
|
DA BASICCLD
|
|
DA RESTART
|
|
DA SETLINKS
|
|
|
|
|
|
*========================================
|
|
* IMAGE OF RAM APPLESOFT BASIC'S ENTRY
|
|
* POINT VECTOR TABLE ($9D78 - $9D83).
|
|
* (NOTE: A(RAM) REFERS TO A DISK-BASED
|
|
* VERSION OF APPLESOFT BASIC THAT IS
|
|
* HOUSED ON THE "SYSTEMS MASTER" DISK.)
|
|
*========================================
|
|
|
|
IMGARAMV DA FPRAMRUN
|
|
DA FPRAMRUN
|
|
DA $1067
|
|
DA $9D84
|
|
DA $C3C
|
|
DA $CF2
|
|
|
|
|
|
*=================================
|
|
* DOS'S COLD START ROUTINE.
|
|
* (PS. DON'T CONFUSE WITH BASIC'S
|
|
* COLD START ROUTINE - BASICCLD.)
|
|
*=================================
|
|
|
|
* GET SLOT & DRV #'S & STORE THEM AS
|
|
* DEFAULT VALS IN CASE NO SUCH PARMS
|
|
* WERE ISSUED WITH THE COMMAND.
|
|
|
|
DOSCOLD LDA IBSLOT ;SLOT# * 16 FROM RWTS'S IOB TBL.
|
|
LSR ;DIVIDE BY 16.
|
|
LSR
|
|
LSR
|
|
LSR
|
|
STA SLOTPRSD ;PUT SLOT IN PARSED TABLE.
|
|
LDA IBDRVN ;DRV # FROM RWTS'S IOB.
|
|
STA DRVPRSD ;PUT DRIVE # IN PARSED TABLE.
|
|
|
|
* CHK WHICH BASIC IS IN ROM.
|
|
|
|
LDA BASICCLD ;SET IDENTIFYING BYTE WITH
|
|
EOR #$20 ;$20 = INTEGER OR $40 = A(ROM).
|
|
BNE ISFPROM ;BRANCH IF APPLESOFT IS IN ROM.
|
|
|
|
* INTEGER BASIC IS ACTIVE.
|
|
|
|
ISINT STA ACTBSFLG ;SET ACTIVE BASIC FLAG
|
|
;TO DENOTE INTEGER (#$00).
|
|
|
|
* COPY IMAGE OF INTEGER BASIC'S
|
|
* ENTRY POINT VECTOR TABLE TO THE
|
|
* ACTIVE BASIC ENTRY VECTOR TABLE.
|
|
|
|
LDX #10
|
|
INT2BSIC LDA IMGINTV-1,X
|
|
STA CHAINTRY-1,X
|
|
DEX
|
|
BNE INT2BSIC ;10 BYTES TO COPY (10 --> 1).
|
|
JMP BYPASWRM
|
|
|
|
* COPY IMAGE OF APPLESOFT'S ENTRY
|
|
* POINT VECTOR TABLE TO THE ACTIVE
|
|
* BASIC ENTRY POINT VECTOR TABLE.
|
|
|
|
ISFPROM LDA #$40 ;SET ACTIVE BASIC FLAG TO #$40
|
|
STA ACTBSFLG ;SO SIGNAL APPLESOFT ROM.
|
|
LDX #12
|
|
AROM2BSC LDA IMGFPV-1,X
|
|
STA CHAINTRY-1,X
|
|
DEX
|
|
BNE AROM2BSC
|
|
BYPASWRM SEC ;(C) = 1, SIGNAL FOR COLDSTART.
|
|
;(C) = 0, SIGNAL FOR WARMSTART.
|
|
BCS CMWRMCLD ;FORCE BRANCH TO BYPASS PART OF
|
|
;THE WARMSTART ROUTINE.
|
|
|
|
|
|
*=================================
|
|
* DOS'S WARMSTART ROUTINE.
|
|
* (PS. DON'T CONFUSE WITH BASIC'S
|
|
* WARMSTART ROUTINE - RESTART.)
|
|
*=================================
|
|
|
|
DOSWARM LDA ACTBSFLG ;SEE WHICH LANGUAGE IS UP.
|
|
BNE CKBASIC ;IF A(ROM), #$40 OR A(RAM), #$80.
|
|
|
|
* INTEGER WAS UP.
|
|
|
|
LDA #$20 ;(A) = OPCODE FOR "JSR" INSTRUC.
|
|
BNE DTRMNBSC ;ALWAYS.
|
|
|
|
|
|
* ACTIVE BASIC FLAG DENOTED THAT A
|
|
* VERSION OF APPLESOFT WAS ACTIVE,
|
|
* SO NOW CHECK IF DEALING WITH
|
|
* A(RAM) OR A(ROM).
|
|
|
|
CKBASIC ASL ;MULTIPLY CODE TIMES 2.
|
|
BPL FORWARM ;BRANCH IF A(RAM).
|
|
;(IE. A(RAM) YEILDS $40 * 2 = $80
|
|
;& A(ROM) YEILDS $80 * 2 = $00.)
|
|
|
|
* USING A(ROM).
|
|
|
|
LDA #$4C ;(A) = OPCODE FOR "JMP" INSTRUC.
|
|
DTRMNBSC JSR SETROM ;GO TEST CARD OR MOTHERBOARD TO
|
|
;INSURE THAT DEVICE CONTAINING
|
|
;ROM VERSION WE WANT IS SELECTED.
|
|
FORWARM CLC ;(C) = 0, SIGNAL FOR WARMSTART.
|
|
CMWRMCLD PHP ;SAVE (C) DENOTING WARM OR COLD.
|
|
JSR INITIOHK ;INITIALIZE THE I/O HOOKS SO THAT
|
|
;DOS INTERCEPTS ALL IN/OUTPUT.
|
|
LDA #0
|
|
STA CIOCUMUL ;SIMULATE A "NOMON" COMMAND.
|
|
;NOTE: CAN "NOP" OUT THIS INSTRUC
|
|
;TO DEFEAT "NOMONCIO" WHEN COLD-
|
|
;OR WARMSTARTING.
|
|
STA OPUTCOND ;SET CONDITION 0.
|
|
PLP ;GET SAVED STATUS BACK OFF STK &
|
|
ROR ;ROTATE (C) INTO HI BIT OF (A) TO
|
|
STA CONDNFLG ;SET CONDNFLG = $00 FOR WARMSTART
|
|
;OR CONDNFLG = $80 FOR COLDSTART.
|
|
BMI LANGCOLD ;BRANCH IF DOING COLDSTART.
|
|
|
|
LANGWARM JMP (TOWRMVEC) ;JMPS TO BASIC'S WARMSTART ROUT'N
|
|
;(RESTART) AT $D43C.
|
|
|
|
LANGCOLD JMP (TOCLDVEC) ;JMPS TO BASIC'S COLDSTART ROUT'N
|
|
;(BASICCLD) AT $E000.
|
|
|
|
|
|
*=================================
|
|
* INITIAL PROCESSING WHEN FIRST
|
|
* KEYBOARD INPUT REQUEST IS MADE
|
|
* BY BASIC AFTER A COLDSTART.
|
|
*=================================
|
|
|
|
* TEST IF USING A(RAM) OR NOT.
|
|
* ON ENTRY, (A) = CONTENTS OF CONDNFLG.
|
|
* = $00 = WARM START.
|
|
* = $01 = READING.
|
|
* = $80 = COLD START.
|
|
* = $C0 = USING A(RAM).
|
|
|
|
KEYCOLD ASL ;(A) * 2 TO DROP OUT HI BIT.
|
|
BPL SKPDARAM ;BRANCH IF NOT USING A(RAM).
|
|
STA ACTBSFLG ;USING A(RAM) - WAS LOADED BY
|
|
; INTEGER BASIC ROM
|
|
; - ACTV BSC FLG=$80
|
|
|
|
* COPY IMAGE OF A(RAM)'S ENTRY
|
|
* POINT VECTOR TABLE TO THE
|
|
* ACTIVE BASIC ENTRY POINT VECTOR
|
|
* TABLE.
|
|
|
|
LDX #12
|
|
ARAM2BSC LDA IMGARAMV-1,X
|
|
STA CHAINTRY-1,X
|
|
DEX
|
|
BNE ARAM2BSC
|
|
|
|
* BLANK OUT THE PRIMARY FILENAME
|
|
* BUFFER TO MAKE SURE A "HELLO"
|
|
* FILE WON'T BE RUN.
|
|
|
|
LDX #29 ;30 BYTES TO BLANK (29 --> 00).
|
|
BLNKPRIM LDA SCNDFNBF,X ;COPY BLANK SECONDARY TO PRIMARY.
|
|
STA PRIMFNBF,X
|
|
DEX
|
|
BPL BLNKPRIM
|
|
|
|
* BUILD DOS BUFS & SET CONDITION.
|
|
|
|
SKPDARAM LDA MAXDFLT ;SET MXFILVAL TO DEFAULT VAL OF 3
|
|
STA MXFILVAL ;NOTE: DEFAULT VAL CAN BE CHANGED
|
|
;BY SETTING MAXDFLT BTW'N 1 - 16
|
|
;AND THEN INITING A DISK.
|
|
JSR BILDBUFS ;GO BUILD THE DOS BUFFERS.
|
|
LDA EXECFLAG ;CHK IF AN EXEC FILE IS RUNNING.
|
|
BEQ SKPDEXEC ;BRANCH IF NOT EXECING.
|
|
|
|
PHA ;YES - WE ARE EXECING.
|
|
JSR PT2EXEC ;GET ADR OF BUF WE'RE EXECING IN.
|
|
PLA ;RETRIEVE EXEC FLG FROM STK.
|
|
LDY #0 ;RESERVE DOS BUFFER FOR EXECING
|
|
STA (A3L),Y ;IN CASE WE WANT TO MODIFY DOS TO
|
|
;EXEC ON THE BOOT?
|
|
|
|
SKPDEXEC JSR RESTAT0 ;SET CONDNFLG=0 SO SIGNAL FILE
|
|
;NOT BEING READ.
|
|
;RESET OPUTCOND=0 (TO SIGNAL WANT
|
|
;TO EVALU8 START OF LINE ON RTN).
|
|
|
|
* CHECK IF DISK WAS JUST BOOTED.
|
|
* (IF JUST BOOTED DISK, NDX2CMD
|
|
* CONTAINS A $00 WHICH WAS ETCHED
|
|
* ON THE DISK WHEN THE DISK WAS
|
|
* ORIGINALLY INITED.)
|
|
|
|
LDA NDX2CMD ;WAS LAST CMD AN "INIT"?
|
|
BNE OLDBOOT ;NO - TAKE BRANCH.
|
|
|
|
* DISK WAS JUST BOOTED SO COPY IMAGE
|
|
* OF DOS'S ENTRY POINT VECTOR TABLE
|
|
* TO PAGE 3.
|
|
|
|
LDX #47 ;48 BYTES TO COPY (47 --> 0).
|
|
STOR3DOS LDA IMGDOSVT,X ;COPY IMAGE TO PAGE 3.
|
|
STA PG3DOSVT,X
|
|
DEX
|
|
BPL STOR3DOS
|
|
|
|
* PROGRAM THE RESET KEY TO POINT AT
|
|
* DOS'S WARMSTART ROUTINE.
|
|
*
|
|
* NOTE THAT THE RESET KEY CAN BE
|
|
* PROGRAMMED TO PT AT ANY LOCATION
|
|
* SIMPLY BY PUTTING THE ADR OF THE
|
|
* TARGET ROUTINE (IN LOW/HI FORMAT)
|
|
* IN $3F2/$3F3. NEXT, EOR THE
|
|
* CONTENTS OF $3F3 WITH THE NUMBER
|
|
* #$A5 AND PUT THE RESULT IN $3F4.
|
|
* (IF $3F3 EOR #$A5 < > $3F4, THEN
|
|
* DISK REBOOTS & A COLDSTART IS DONE.)
|
|
|
|
LDA IMGDOSVT+2 ;WRITE OVER OLD (OUT-DATED) IMAGE
|
|
STA RESETVEC+1 ;WHICH CONTAINED A "JSR MON"
|
|
EOR #$A5 ;INSTRUC APPLIC TO NON-AUTOSTART.
|
|
STA VLDBYTE ;SET VALIDATION (POWER UP) BYTE.
|
|
LDA IMGDOSVT+1
|
|
STA RESETVEC
|
|
|
|
* SET THE COMMAND INDEX TO RUN
|
|
* THE "HELLO" FILE.
|
|
|
|
LDA #6 ;CMD INDEX FOR "RUN".
|
|
;(CAN BE CHANGED TO "BRUN", ETC.)
|
|
BNE DOPENDNG ;ALWAYS.
|
|
|
|
* CHECK IF A COMMAND IS PENDING.
|
|
|
|
OLDBOOT LDA NEXTCMD
|
|
BEQ NOPEND ;NO CMD PENDING.
|
|
|
|
* GO DO THE PENDING COMMAND. IF THE
|
|
* DISK WAS JUST BOOTED, THEN RUN THE
|
|
* "HELLO" FILE. NOTE THAT THE ACTUAL
|
|
* NAME OF THE HELLO FILE RESIDES IN
|
|
* THE PRIMARY FILENAME BUFFER. IT
|
|
* WAS WRITTEN TO THE DISK AS PART OF
|
|
* THE DOS IMAGE WHEN THE DISK WAS INITED.
|
|
* THERE4, IF YOU WANT TO CHANGE THE
|
|
* NAME OF THE HELLO FILE, YOU MUST:
|
|
* (1) CHNG NAME IN FILENAME FIELD
|
|
* OF DIRECTORY SEC. (EASIEST JUST
|
|
* TO USE THE RENAME CMD.)
|
|
* (2) ZAP PRIMARY NAME BUF ON DISK
|
|
* (TRK$01/SEC$09/OFFSETS$75-$92).
|
|
|
|
DOPENDNG STA NDX2CMD ;SET CMD INDEX & GO DO CMD.
|
|
JMP DODOSCMD
|
|
NOPEND RTS
|
|
|
|
|
|
*=================================
|
|
* IMAGE OF DOS VECTOR TABLE.
|
|
* (COPIED TO PAGE 3, $3D0 - $3FF.)
|
|
*=================================
|
|
|
|
; PAGE-3 ADDR & FUNCTION
|
|
|
|
IMGDOSVT JMP DOSWARM ;$3D0 - GO TO DOS'S WARM START
|
|
;ROUTINE. LEAVE PGRM INTACT.
|
|
JMP DOSCOLD ;$3D3 - GO TO DOS'S COLD START
|
|
;ROUT'N. RESET HIMEM, REBUILD DOS
|
|
;BUFS & WIPE OUT PRGM.
|
|
JMP FMXTNTRY ;$3D6 - ALLOW USER TO ACCESS FM
|
|
;VIA HIS OWN ASSEMBLY LANG PRGMS.
|
|
JMP ENTERWTS ;$3D9 - ALLOW USER TO ACCESS RWTS
|
|
;VIA HIS OWN ASSEMBLY LANG PRGMS.
|
|
LDA ADFMPARM+1 ;$3DC - LOCATE FM PARAMETER LIST.
|
|
LDY ADFMPARM
|
|
RTS
|
|
|
|
LDA ADRIOB+1 ;$3E3 - LOCATE RWTS'S I/O BLOCK.
|
|
LDY ADRIOB
|
|
RTS
|
|
|
|
JMP INITIOHK ;$3EA - PT I/O HOOKS AT DOS'S
|
|
;INTERCEPT HANDLERS.
|
|
NOP
|
|
NOP
|
|
JMP OLDBRK ;$3EF - GOES TO MONITOR'S ROUTINE
|
|
;WHICH HANDLES "BRK" INSTRUC'S.
|
|
JMP MON ;AFTER THIS INSTRUCTION IS COPIED
|
|
;TO PAGE 3 (AT $3F2 - $3F4), THE
|
|
;ROUTINE AT $9E30 OVERWRITES THE
|
|
;PAGE-3 IMAGE 2 PROGRAM THE RESET
|
|
;KEY. THIS OVERWRITTING IS DONE 2
|
|
;ACCOMMODATE NEWER "AUTOSTART"
|
|
;ROM USED IN THE APPLE II+, IIE &
|
|
;IIC MACHINES. THE PAGE-3 LOC'S
|
|
;ARE DESCRIBED BELOW:
|
|
;$3F2/$3F3 - ADR OF RESET HNDLING
|
|
;ROUT'N (IN LOW/HI FORMAT).
|
|
;NORMALLY=ADR OF DOSWARM ($9DBF).
|
|
;$3F4 - IMG OF VALIDATION BYTE.
|
|
;NORMALLY CONTAINS #$38 CAUSE:
|
|
; #$9D EOR #$A5 = #$38.
|
|
|
|
JMP MONRTS ;$3F5 - DISABLE &-VECTOR.
|
|
JMP MON ;$3F8 - LET CTL-Y ENTER MONITOR.
|
|
JMP MON ;$3FB - HNDL NON-MASK INTERUPTS.
|
|
DA MON ;ROUT'N 2 HNDL MASKABLE INTERUPTS
|
|
|
|
|
|
*==================================
|
|
* DOS'S INPUT INTERCEPT ROUTINE.
|
|
* (INTERCEPTS ALL INPUT FROM
|
|
* KEYBOARD OR DISK.)
|
|
*==================================
|
|
|
|
INPTINCP JSR PREP4DOS ;SAVE THE REGS & RESTORE I/O HKS
|
|
;TO PT TO THE TRUE I/O HANDLERS.
|
|
;ADJUST STK PTR & SAVE IT SO WE
|
|
;CAN LATER RTN 2 THE ROUTINE THAT
|
|
;CALLED ROUTINE THAT CONTAINED
|
|
;THE "JSR PREP4DOS" INSTRUCTION.
|
|
LDA CONDNFLG ;TEST IF DOING WARMSTART.
|
|
BEQ INPUTWRM ;YES - BRANCH IF WARM.
|
|
|
|
* READING FILE OR COLDSTARTING.
|
|
|
|
PHA ;SAVE THE CONDITION FLAG.
|
|
LDA ASAVED ;GET THE SUBSTITUTE CURSOR & PUT
|
|
STA (BASL),Y ;IT BACK ON THE SCREEN.
|
|
PLA ;GET CONDITION FLAG BACK IN (A).
|
|
BMI INPUTCLD ;BRANCH FOR COLD.
|
|
JMP READTEXT ;READ FILE BYTE.
|
|
|
|
* DOING A COLDSTART.
|
|
|
|
INPUTCLD JSR KEYCOLD ;SET IMPORTANT PAGE 3 VECTORS.
|
|
;SET MXFILVAL=3 & BUILD DOS BUFS.
|
|
;SET WARMSTART FLAG.
|
|
;EXECUTE PENDING COMMAND.
|
|
LDY CH ;GET HORZ CURSOR POS'N.
|
|
LDA #$60 ;GET CURSOR.
|
|
STA (BASL),Y ;REINSTATE CURSOR ON SCREEN.
|
|
|
|
* USING WARMSTART STATUS.
|
|
* AT THIS POINT IN TIME, BOTH
|
|
* CONDNFLG & OPUTCOND = 0 FOR
|
|
* WARM- & COLDSTARTS.
|
|
|
|
INPUTWRM LDA EXECFLAG ;ARE WE EXECING?
|
|
BEQ INPTNOXC ;NO.
|
|
JSR READEXEC ;YES - GO READ AN EXEC FILE BYTE.
|
|
INPTNOXC LDA #3 ;SET OUTPUT CONDITION = 3 CAUSE
|
|
STA OPUTCOND ;WANT TO PROCESS INPUT INFO.
|
|
JSR RESTOREG ;RESTORE (A), (Y) & (X) REGS.
|
|
JSR TOTRUIN ;GET CHAR & PUT IT ON SCREEN VIA
|
|
;THE TRUE OUTPUT HANDLER (COUT1).
|
|
STA ASAVED ;SAVE CHAR & (X).
|
|
STX XSAVED
|
|
JMP DOSEXIT ;EXIT DOS.
|
|
|
|
TOTRUIN JMP (KSW) ;JUMP TO THE TRUE INPUT HANDLER.
|
|
|
|
|
|
*=================================
|
|
* DOS'S OUTPUT INTERCEPT ROUTINE.
|
|
* (INTERCEPTS ALL OUPUT TO SCREEN
|
|
* OR OTHER PERIPHERALS.)
|
|
*=================================
|
|
|
|
OPUTINCP JSR PREP4DOS ;SAVE REGS & RESTORE I/O HKS 2 PT
|
|
;2 TRUE I/O HANDLERS. ADJUST STK
|
|
;PTR & SAVE IT SO CAN LATER RTN
|
|
;TO THE ROUTINE THAT CALLED THE
|
|
;ROUTINE THAT CONTAINED THE
|
|
;"JSR PREP4DOS" INSTRUCTION.
|
|
|
|
* USE CURRENT OPUTCOND TO INDEX
|
|
* TABLE CONTAINING ADDRS (MINUS 1)
|
|
* OF THE OUTPUT CONDITION HANDLERS.
|
|
* DO A "STACK JUMP" TO THE APPROPRIATE
|
|
* HANDLER.
|
|
|
|
LDA OPUTCOND
|
|
ASL ;TIMES 2 CAUSE 2 BYTES / ADDRESS.
|
|
TAX ;SET (X) TO INDEX TABLE OF ADRS.
|
|
LDA OUTHNDTB+1,X ;PUT ADR OF OUTPUT HNDLR ON STK
|
|
PHA ;(HI BYTE FIRST) & THEN DO A
|
|
LDA OUTHNDTB,X ;"STACK JUMP" TO THE APPROPRIATE
|
|
PHA ;HANDLER.
|
|
LDA ASAVED ;GET CHAR TO BE PRINTED.
|
|
RTS ;EXECUTE THE STACK JUMP.
|
|
|
|
|
|
*================================
|
|
* PREPARE FOR PROCESSING BY DOS.
|
|
* SAVE THE REGS & RESET THE I/O
|
|
* HOOKS TO POINT TO THE TRUE I/O
|
|
* HANDLERS.
|
|
*================================
|
|
|
|
PREP4DOS STA ASAVED ;SAVE (A), (Y) & (X) REGS.
|
|
STX XSAVED
|
|
STY YSAVED
|
|
TSX ;ADJUST STK PTR & SAVE IT SO WHEN
|
|
INX ;WE LATER RESTORE IT & HIT AN
|
|
INX ;RTS, WE CAN RTN 2 ROUTINE THAT
|
|
STX STKSAVED ;CALLED ROUTINE THAT CONTAINED
|
|
;THE "JSR PREP4DOS" INSTRUCTION.
|
|
|
|
* DISCONNECT DOS - THIS ENTRY POINT
|
|
* IS FREQUENTLY USED BY ASSEMBLY
|
|
* LANGUAGE PROGRAMMERS TO DISCONNECT
|
|
* DOS COMPLETELY.
|
|
|
|
UNCONDOS LDX #3 ;RESTORE THE I/O HKS TO PT TO THE
|
|
;TRUE I/O HANDLERS, EX:
|
|
SETRUHKS LDA CSWTRUE,X ; KSWTRUE: KEYIN --> KSW: KEYIN
|
|
STA CSW,X ; CSWTRUE: COUT1 --> CSW: COUT1
|
|
DEX
|
|
BPL SETRUHKS ;4 BYTES (0 TO 3) TO MOVE.
|
|
RTS
|
|
|
|
|
|
*=================================
|
|
* OUTPUT HANDLER 0.
|
|
* (EVALUATE START OF LINE.)
|
|
*=================================
|
|
|
|
OPUTHDL0 LDX RUNTRUPT ;CONTAINS A NONZERO VALUE IF RUN
|
|
BEQ NONTRUPT ;CMD WAS INTERRUPTED TO DO A LOAD
|
|
JMP FINSHRUN ;FINISH OFF THE RUN COMMAND.
|
|
|
|
* FILE NOT BEING READ.
|
|
|
|
NONTRUPT LDX CONDNFLG ;GET CONDITION FLAG. CHECK IF WE
|
|
;ARE DOING A WARMSTART ($00),
|
|
;COLDSTART ($80), USING A(RAM)
|
|
;($C0) OR DOING A READ ($01).
|
|
BEQ SETIGNOR ;BRANCH IF WARMSTARTING.
|
|
|
|
* DOING COLDSTART, READING FILE OR USING A(RAM).
|
|
* CHECK (A) TO SEE IF USING "?" ASSOCIATED
|
|
* WITH READING AN INPUT STATEMENT.
|
|
|
|
CMP #"?" ;IF READING, USING "?" AS PROMPT.
|
|
BEQ OPUTHDL6 ;GO DSPLY INPUT CONDITIONALLY IF
|
|
;GETTING READY 2 READ A TEXT FILE
|
|
;BYTE.
|
|
CMP PROMPT ;ARE WE PRINTING A PROMPT?
|
|
BEQ SET2EVAL ;BRANCH IF ABOUT TO PRINT PROMPT.
|
|
SETIGNOR LDX #2 ;SET CONDITION 2 FOR DEFAULT TO
|
|
STX OPUTCOND ;SIGNAL SHOULD IGNORE NON-DOS
|
|
;COMMANDS.
|
|
|
|
CMP DCTRLCHR ;IS CHAR = DOS'S CTRL CHAR?
|
|
BNE OPUTHDL2 ;NO.
|
|
DEX ;LINE STARTED WITH DOS'S CTRL CHR
|
|
STX OPUTCOND ;SO SET CONDITION 1.
|
|
DEX ;(X) = 1 --> 0.
|
|
STX NDX2INBF ;INDEX TO 1RST POS'N IN INPUT BUF
|
|
|
|
|
|
*=================================
|
|
* OUTPUT HANDLER 1.
|
|
* - COLLECT THE DOS COMMAND.
|
|
* (IE. - STICK CHAR IN THE INPUT
|
|
* BUF & THEN GO DISPLAY CHAR OR
|
|
* ELSE GO PARSE CMD.)
|
|
*=================================
|
|
|
|
OPUTHDL1 LDX NDX2INBF ;GET INDEX TO INPUT BUFFER.
|
|
PUTINBUF STA BUF200,X ;PUT CHAR IN INPUT BUFFER.
|
|
INX ;KICK UP INDEX 4 NEXT BUF POS'N.
|
|
STX NDX2INBF
|
|
CMP #$8D ;WAS CHAR A <CR>?
|
|
BNE DSPLYCMD ;NO.
|
|
JMP PARSECMD ;YES - GOT END OF INPUT, SO NOW
|
|
; SEE IF IT IS A DOS CMD.
|
|
|