269 lines
8.6 KiB
Plaintext
269 lines
8.6 KiB
Plaintext
**********************************
|
||
* *
|
||
* ADDRS USED IN THE FORMATTED *
|
||
* DIS'MBLIES BUT NOT REFERENCED *
|
||
* IN THE LINEAR DIS'MBLIES. *
|
||
* (THESE ADRS ARE INCLUDED TO *
|
||
* MAKE THE SYMBOL TBLS APPLICABLE*
|
||
* TO BOTH DIS'MBLIES.) *
|
||
* *
|
||
**********************************
|
||
|
||
|
||
|
||
*--------------------------------*
|
||
* ZERO-PAGE LOCATIONS *
|
||
*--------------------------------*
|
||
|
||
LOC0 = $00 ;REFERENCE ADR USD BY MONITOR ROM
|
||
;ROUTINES THAT SIMULATE IN# & PR#
|
||
;STATEMENTS.
|
||
LOC1 = $01 ;AS ABOVE.
|
||
GOWARM = LOC0 ;A JMP INSTRUC (3 BYTES, $00-$02)
|
||
;TO BASIC'S WARMSTART (RESTART,
|
||
;$D43C) ROUTINE. HOWEVER, WHEN
|
||
;COLDSTARTING, IS TEMPORARILY SET
|
||
;TO JUMP INTO BASIC'S COLDSTART
|
||
;AT BSCOLDST ($F128).
|
||
GOSTROUT = $03 ;A JMP INSTRUC (3 BYTES, $03-$05)
|
||
;TO THE BASIC ROUTINE THAT PRINTS
|
||
;THE STRING IN MEMORY POINTED TO
|
||
;BY (A) & (Y) REGS (IN LOW/HI
|
||
;FORMAT). HOWEVER, WHEN COLD-
|
||
;STARTING, IS TEMPORARILY SET TO
|
||
;JMP IN2 BASIC'S COLSTART ROUTINE
|
||
;AT BSCOLDST ($F128).
|
||
USR = $0A ;JUMP INSTRUC (3 BYTES, $0A-$0C)
|
||
;TO USR ROUTINE. HOWEVER, WHEN
|
||
;COLDSTARTING, IS TEMPORARILY
|
||
;PTING AT ILLEGAL-QUANTITY ROUT'N
|
||
SUBFLG = $14 ;SUBSCRIPT FLAG:
|
||
;$00 = SUBSCRIPT ALLOWED.
|
||
;$80 = NO SUBSCRIPTS.
|
||
WNDWDTH = $21 ;WIDTH OF TEXT SCREEN WINDOW.
|
||
INVFLG = $32 ;INVERSE FLAG MASK: NORMAL = $FF,
|
||
;INVERSE = $3F & FLASHING = $7F.
|
||
;HACKER'S OFTEN ZAP THIS BYTE TO
|
||
;FILTER OUTPUT AS PART OF A
|
||
;PROTECTION SCHEME (INVIS = $80).
|
||
BT0SCRTH = $3C ;MAIN SCRATCH REG USED BY BOOT0.
|
||
A2L = $3E ;MULTIPURPOSE REG & PTR ($3E,$3F)
|
||
BOOTEMP = $40 ;TRK # READ OFF DSK WHEN BOOTING.
|
||
BOOTRK = $41 ;TRK # WANTED WHEN READING IN DOS
|
||
;DURING THE BOOT PROCESS.
|
||
TEMPPT = $52 ;PREVIOUS TEMP STRING DESCRIPTOR.
|
||
LASTPT = $53 ;PREVIOUS TEMP STRING POINTER.
|
||
TEMPST = $55 ;PREVIOUS STRING POINTER USED IN
|
||
;GARBAGE COLLECTION ROUTINES.
|
||
INDEX = $5E ;TEMP STK PTR FOR MOVING STRINGS.
|
||
ARYTAB = $6B ;PTR ($6B,$6C) TO START OF THE
|
||
;ARRAY VARIABLES.
|
||
STREND = $6D ;PTR ($6D,$6E) TO START OF FREE
|
||
;SPACE. (1 BYTE BEYOND THE END OF
|
||
;THE ARRAY VARIABLES.)
|
||
OLDTEXT = $79 ;PTR ($79,$7A) TO NEXT STATEMENT
|
||
;TO BE EXECUTED.
|
||
DATPTR = $7D ;PTR ($7D,$7E) TO NEXT BYTE TO BE
|
||
;USED FOR A DATA STATEMENT.
|
||
DSCLEN = $8F ;TEMP BYTE USD 4 GARBAGE COLLECT.
|
||
JMPADRS = $90 ;JMP INTRUC ($90-$92) TO VARIABLE
|
||
;ADDR.
|
||
TEMPRY = $A4 ;TEMP BYTE USED IN FLOATING POINT
|
||
;MATH ROUTINES.
|
||
CHRGET = $B1 ;GET BYTE OF TEXT FROM TXTPTR IN
|
||
;(A), INCREMENT TXTPTR AND EXIT
|
||
;WITH: (A) = ORIGINAL CHAR.
|
||
; (Z) = 0 IF (A) = ":" OR $00
|
||
; = 1 IF (A) = '0' TO '9'
|
||
CHRGOT = $B7 ;AS ABOVE - BUT DON'T INC TXTPTR.
|
||
TXTPTR = $B8 ;PTR ($B8,$B9) TO NEXT BYTE OF
|
||
;PRGM TEXT.
|
||
CHRGTRTN = $C8 ;"RTS" AT END OF CHRGET/CHRGOT.
|
||
SPEEDFLG = $F1 ;# USED TO CTRL DELAY ($00-$FF).
|
||
TRCFLG = $F2 ;TRACE FLAG.
|
||
FLSHMSK = $F3 ;MASK FOR FLASHING OUTPUT.
|
||
;($40 FOR FLASH, ELSE $00).
|
||
|
||
|
||
*--------------------------------*
|
||
* PAGES ONE TO EIGHT *
|
||
*--------------------------------*
|
||
|
||
STACK = $100 ;TOP OF THE STACK.
|
||
|
||
BUF300 = $300 ;PAGE 3 - USED BY BOOT AS BUF TO
|
||
;STORE 2- & 6-ENCODED NIBBLES.
|
||
BTNIBL = $36C ;BOOT NIBBLE TABLE - USED TO
|
||
;TRANSLATE DISK BYTES TO ENCODED
|
||
;MEMORY BYTES.
|
||
SEC2RD08 = $800 ;DEFINES # OF SECS TO BE READ IN
|
||
;BY BOOT0.
|
||
BT1EXC08 = $801 ;START OF BOOT1. BOOT0 JMPS TO
|
||
;THIS LOCATION.
|
||
SKPREL08 = $81F ;TARGET LABEL FOR BRANCH WHEN
|
||
;BOOT1 IS EXECUTING IN PAGE 8.
|
||
;- DETERMINE # OF SECS LFT 2 READ
|
||
; IN, PHYS SEC # & TARGET ADR.
|
||
PRP4B208 = $839 ;TARGET LABEL FOR BRANCH WHEN
|
||
;BOOT1 IS EXECUTING IN PAGE 8.
|
||
;- PREPARE FOR BOOT2.
|
||
|
||
|
||
*--------------------------------*
|
||
* DISK CONTROLLER CARD ADRS *
|
||
*--------------------------------*
|
||
* NOTE: THE DISK CONTROLLER ROMS
|
||
* ARE RELOCATABLE TO ANY PAGE
|
||
* BOUNDARY. THE ACTUAL ADRS USED
|
||
* ARE DEPENDENT UPON WHICH SLOT
|
||
* (1 TO 7) HOUSES THE CONTROLLER
|
||
* CARD. WHEREAS THESE SLOTS ARE
|
||
* REPRESENTED BY PAGES $C1 TO $C7,
|
||
* THE HI BYTE OF THE FOLLOWING
|
||
* ADRS CAN BE CHANGED TO $CS WHERE
|
||
* S=SLOT #. THE SAMPLE ADRS GIVEN
|
||
* BELOW REFER TO A CARD IN SLOT6
|
||
* (PAGE $C6). THE FUNCTIONS OF
|
||
* EACH OF THE FOLLOWING ROUTINES
|
||
* IS DESCRIBED IN THE FORMATTED
|
||
* DISASEMBLY TITLED "THE BOOT PROCESS".
|
||
|
||
BUILDTBL = $C606
|
||
TESTCARY = $C614
|
||
GETNEWX = $C61E
|
||
MAGNTOFF = $C63D
|
||
PRSRVFLG = $C65D
|
||
STARTSEQ = $C65E
|
||
BTRYD5 = $C663
|
||
BTRYAA = $C667
|
||
BTRY96 = $C671
|
||
BTRYAD = $C67D
|
||
RDVLTKSC = $C683
|
||
MOREBYTS = $C685
|
||
BTRDODD = $C687
|
||
BTRDEVEN = $C68F
|
||
BTRDATA = $C6A6
|
||
KEEPCNT1 = $C6A8
|
||
RDDSK1 = $C6AA
|
||
KEEPCNT2 = $C6BA
|
||
RDDSK2 = $C6BC
|
||
RDCK = $C6CB
|
||
TSTREAD = $C6D3
|
||
SETX56 = $C6D7
|
||
DOWNX = $C6D9
|
||
|
||
|
||
*--------------------------------*
|
||
* APPLESOFT ADDRESSES *
|
||
*--------------------------------*
|
||
* A BRIEF DESCRIPTION OF THE
|
||
* FUNCTIONS OF THESE ROUTINES ARE
|
||
* GIVEN BELOW. NOTE THAT SOME OF
|
||
* THESE ROUTINES MAY BE INTERCEPTED
|
||
* BY DOS. (SEE FORMATTED DIS'MBLIES
|
||
* FOR DETAILS.)
|
||
|
||
ESTPTRS = $D4F5 ;RECALC LINK PTRS IN APPLESOFT
|
||
;PRGM IN CASE PRGM WAS NOT LOADED
|
||
;INTO THE SPACE AT WHICH IT WAS
|
||
;ORIGINALLY WRITTEN.
|
||
LOCEOP = $D4FE ;FIND END OF APPLESOFT PRGM.
|
||
STARTNXT = $D50F ;PUT NEW LINK IN FP PRGM LINE.
|
||
LOCEOL = $D511 ;FIND END OF APPLESOFT PRGM LINE.
|
||
INLIN = $D52C ;INPUT LINE OF TEXT IN2 INPUT BUF
|
||
;(WITHOUT PROMPT).
|
||
INLINPL2 = $D52E ;AS ABOVE, BUT USE VAL IN (X) AS
|
||
;PROMPT.
|
||
TERMIN8 = $D539 ;PUT AN END-OF-LINE MARKER (EOL,
|
||
;$00) IN INPUT BUFFER.
|
||
CNVRTPOS = $D541 ;CONVERT INPUT LINE TO POS ASCII.
|
||
NEG8NPUT = $D54C ;PREPARE TO INITIALIZE THE TEXT
|
||
;PTR. (SET A=0, Y=01, X=FF.)
|
||
CLEAR = $D66A ;SIMULATE A CLEAR STATEMENT.
|
||
CLEARC = $D66C ;CLEAR VARIABLES & TEXT.
|
||
STKINI = $D683 ;REINTIALIZE STK POINTER WHILE
|
||
;PRESERVING RETURN ADDRESS.
|
||
CLRTS = $D696 ;"RTS" AT END OF STKINI ROUTINE.
|
||
SETXTPT = $D697 ;SET TEXT PTR TO BEGINNING OF THE
|
||
;APPLESOFT PRGM.
|
||
RESTORE = $D849 ;SIMULATE A RESTORE STATEMENT.
|
||
SETDA = $D853 ;RESET PTR 2 DATA STATEMENT BYTE.
|
||
CRDO = $DAFB ;PRINT A <CR>.
|
||
STRPRT = $DB3D ;PRT STRING WHICH HAS DESCRIPTOR
|
||
;POINTED TO BY $A0,$A1.
|
||
OUTQUES = $BD5A ;PRINT A "?".
|
||
OUTDO = $DB5C ;PRINT CONTENTS OF (A) AS CHAR.
|
||
GODOPUT = $BD64 ;PRINT (A) VIA COUT.
|
||
INPUT = $DBB2 ;PROCESS AN INPUT STATEMENT.
|
||
NOPTNSTR = $DBC4 ;PROCESS AN INPUT STATEMENT WITH
|
||
;NO OPTIONAL STRING PROMPT.
|
||
CKDIFRD = $DBC7 ;BYPASS PRINTING "?" WHEN USING
|
||
;ALTERNATE STRING PROMPT INSTEAD.
|
||
STRTXT = $DE81 ;PRINT THE STRING.
|
||
SYNCHR = $DEC0 ;CHK BYTE POINTED TO BY TXTPTR TO
|
||
;SEE IF IT MATCHES (A). IF NOT,
|
||
;EXIT WITH SYNTAX ERROR.
|
||
IQERR = $E199 ;ILLEGAL QUANTITY ERROR.
|
||
WASDEF = $E2AC ;"RTS" ENCOUNTERED IF USING
|
||
;DEFERRED MODE WHEN PROCESSING AN
|
||
;INPUT STATEMENT.
|
||
ERRDIR = $E306 ;CHK IF IN DEFERRED OR IMMEDIATE
|
||
;MODE WHEN PROCESSING AN INPUT
|
||
;STATEMENT.
|
||
BSCOLDST = $F128 ;BEGIN BASIC'S COLDSTART SEQUENCE
|
||
MV2ZPG = $F152 ;COPY IMAGE OF CHRGET ROUTINE AND
|
||
;RANDOM # SEED TO PAGE ZERO. (BUG
|
||
;IN ROUTINE BECAUSE IT DOESN'T
|
||
;TRANSFER ALL OF RANDOM # SEED,)
|
||
NORMAL = $F273 ;SET NORMAL MODE.
|
||
INVERSE = $F277 ;SET INVERSE MODE.
|
||
NORMINV = $F279 ;SET INVERSE OR NORMAL MODE.
|
||
SETINV = $F27B ;STORE MASK 4 INVERSE IN INVFLG.
|
||
|
||
|
||
*--------------------------------*
|
||
* MONITOR ROM ROUTINES *
|
||
*--------------------------------*
|
||
* A BRIEF DESCRIPTION OF THE
|
||
* FUNCTIONS OF THESE ROUTINES ARE
|
||
* GIVEN BELOW. NOTE THAT SOME OF
|
||
* THESE ROUTINES MAY BE INTECEPTED
|
||
* BY DOS. (SEE FORMATTED DIS'MBLIES
|
||
* FOR DETAILS.)
|
||
|
||
CLREOL = $FC9C ;CLR LINE FRM CURRENT CURSOR POSN
|
||
;(BASL),(CH) 2 RIGHT EDGE OF WNDW
|
||
CLEOLZ = $FC9E ;CLR LINE FRM CURRENT CURSOR POSN
|
||
;(BASL),Y 2 RIGHT EDGE OF WINDOW.
|
||
CLEOL2 = $FCA0 ;PUT CHAR IN (A) FROM (BASL),Y TO
|
||
;RIGHT EDGE OF WINDOW.
|
||
WAIT = $FCA8 ;MONITOR ROM'S MAIN DELAY ROUT'N.
|
||
;DEALY Z # OF CYCLES BASED ON THE
|
||
;FORMULA:Z=((5*A^2)+(27*A)+26))/2
|
||
;WHERE A = VALUE IN ACCUMULATOR.
|
||
WAIT2 = $FCA9 ;TARGET 4 BRANCH IN WAIT ROUTINE.
|
||
WAIT3 = $FCAA ;TARGET 4 BRANCH IN WAIT ROUTINE.
|
||
ESC = $FD2F ;HANDLE AN <ESC> KEY INPUT.
|
||
RDCHAR = $FD35 ;PUT INPUT CHAR IN (A).
|
||
NOTCR = $FD3D ;HNDL INPUT CHAR OTHER THAN <CR>.
|
||
NOTCR1 = $FD5F ;HNDL INPUT CHAR OTHER THAN <CR>,
|
||
;<BKSPC> OR <CANCEL>.
|
||
CANCEL = $FD62 ;CANCEL THE INPUT LINE.
|
||
GETLNZ = $FD67 ;PRINT A <CR>, PROMPT & THEN READ
|
||
;A LINE OF INPUT.
|
||
BCKSPC = $FD71 ;HANDLE A BACKSPACE ("<-").
|
||
NXTCHAR = $FD75 ;READ THE NEXT CHAR.
|
||
CAPTST = $FD7E ;MAKE CHR UPPERCASE IF NECESSARY.
|
||
ADDINP = $FD84 ;PUT (A) IN INPUT BUF.
|
||
CROUT = $FD8E ;PRINT <CR> THROUGH COUT.
|
||
INPRT = $FE8D ;SELECT INPUT PORT # (A).
|
||
OUTPRT = $FE97 ;SELECT OUTPOUT PORT # (A).
|
||
IOPRT = $FE9B ;TEST IF I/O PORT # IS ZERO.
|
||
IOPRT1 = $FEA7 ;SET ZERO-PAGE POINTER (X,X+1) TO
|
||
;POINT AT $FD--.
|
||
IOPRT2 = $FEA9 ;SET ZERO-PAGE POINTER (X,X+1) TO
|
||
;POINT AT $(A)(Y).
|
||
BELL = $FF3A ;RING WARNING BELL WHEN INPUT BUF
|
||
;IS JUST ABOUT FULL.
|
||
|