********************************** * * * 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 . 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 KEY INPUT. RDCHAR = $FD35 ;PUT INPUT CHAR IN (A). NOTCR = $FD3D ;HNDL INPUT CHAR OTHER THAN . NOTCR1 = $FD5F ;HNDL INPUT CHAR OTHER THAN , ; OR . CANCEL = $FD62 ;CANCEL THE INPUT LINE. GETLNZ = $FD67 ;PRINT A , 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 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. -