From 351667424c0056e9434cce99c21b143b96677735 Mon Sep 17 00:00:00 2001 From: retrogear Date: Mon, 21 Dec 2020 19:58:06 -0600 Subject: [PATCH] Add files via upload --- A128XGA.1023.txt | 1 + A128XGA.1024.txt | 1 + A128XGB.1023.txt | 1 + A128XGB.1024.txt | 1 + 4 files changed, 4 insertions(+) create mode 100644 A128XGA.1023.txt create mode 100644 A128XGA.1024.txt create mode 100644 A128XGB.1023.txt create mode 100644 A128XGB.1024.txt diff --git a/A128XGA.1023.txt b/A128XGA.1023.txt new file mode 100644 index 0000000..638df95 --- /dev/null +++ b/A128XGA.1023.txt @@ -0,0 +1 @@ +* LST OFF SBTL X6502 MSB ON ORG $7000 SKP 1 ********************************* * * * -< THE ANALYST >- * * * * 128K VERSION XG * * * * BUILD 1023 01/19/19 * * * * (UPDATE BUILD# IN TITLE) * * * ********************************* SKP 1 *** COMMANDS *** SKP 1 ; CTRL-F FIND HEX SEQUENCE DEFINED BY F(H) ; G GO EXECUTE IN IMMEDIATE MODE ; H LOAD BYTES FOR HSF F(CTRL-F) BY USING H: ; I DISPLAY/SET PC/INTERNAL A,X,Y,P,S REGISTERS ; J JUMP. EXECUTE JSR INSTRUCTION IN STEP MODE ; CTRL-L CLEAR PRESENT SCREEN AND HOME CURSOR ; L LIST DISASSEMBLY OR LOOP IN TRACE MODE. ; M MOVE BLOCK OF MEMORY ; P SEND OUTPUT TO PRINTER ; R RELOCATE ANALYST TO NEW ADDRESS PAGE ; S ENTER STEP MODE. STEP INSTRUCTION ; T TRACE PROGRAM ; V PRINT ANALYST VERSION# AND ORIGIN ADDRESS. ; CTRL-X MOVE ANALYST TO AUX. DISABLED AFTER USE. ; X SKIP INSTRUCTION DURING STEP. TOGGLE MAIN/AUX ; " DUMP MEMORY IN ASCII ; / SET OR PRINT SUBROUTINE TO JSR IMMED MODE ; & EXIT TO OR FROM DOS / PRODOS ; ? PRINT LAST 16 PC'S EXEC'D DURING TRACE ; @ SET TEXT 40/80 COL SCREEN ; < RANGE DELIMITER ; . RANGE DELIMITER ; : STORE VALUE IN MEMORY SKP 1 *** ROM ZERO PAGE EQUATES *** SKP 1 MCSWL EQU $36 MCSWH EQU $37 MA1 EQU $3C MA2 EQU $3E MA4 EQU $42 CURLIN EQU $75 #1021 APPLESOFT CURRENT LINE NUMBER SKP 1 *** ANALYST EQUATES *** SKP 1 PCL EQU $EF LABEL MARKS PAGE 0 PCH EQU $F0 BASL EQU $F1 BASH EQU $F2 LABEL USED AS IDENTIFIER ZFLG EQU $F3 1 BYTE ID = $AA A1L EQU $F4 A1L-A5H MUST BE IN ORDER A1H EQU $F5 FOR MINI-ASSEMBLER A2L EQU $F6 A2H EQU $F7 A3L EQU $F8 A3H EQU $F9 A4L EQU $FA A4H EQU $FB A5L EQU $FC A5H EQU $FD BAS2L EQU $FE BAS2H EQU $FF LABEL MARKS END OF PAGE 0 IN EQU $0132 #1019 WARMV EQU $0162 WARM REENTRY #1019 MOVED UP $30 XQTS EQU WARMV+6 EXEC AREA FOR STEP, TRACE YPOKE EQU XQTS+21 PEEK EQU XQTS+29 YPEEK EQU XQTS+31 XQT EQU XQTS+50 18 BYTES PCBUF EQU XQT+18 32 BYTE PC SAVE AREA. *IN EQU PCBUF+32 KEYIN BUFFER. 38 BYTES. MLI EQU $BF00 PRODOS INTERFACE SKP 1 *** ROM EQUATES *** SKP 1 ENAPAGE2 EQU $C000 ENABLES AUX FOR GRAPHICS PAGE 2 KBD EQU $C000 INHPAGE2 EQU $C001 AUX $400-7FF SHOWS TEXT MAINRD EQU $C002 MAINWR EQU $C004 CLR80VID EQU $C00C SET80VID EQU $C00D KBDSTRB EQU $C010 RDAUXZP EQU $C016 BMI IF AUXZP RDPAGE2 EQU $C018 BMI IF INHPAGE2 ON RDTEXT EQU $C01A BMI IF TEXT MODE RDSCR EQU $C01C BMI IF DPAGE2 ON RD80VID EQU $C01F BMI IF 80 COL MODE SPKR EQU $C030 TXTCLR EQU $C050 TXTSET EQU $C051 MIXCLR EQU $C052 LOWSCR EQU $C054 HISCR EQU $C055 HIRES EQU $C057 PB0 EQU $C061 OPEN APPLE KEY PB1 EQU $C062 CLOSED APPLE KEY SWITCH2 EQU $C082 PR1 EQU $C100 #1019 INIT PRINTER IN SLOT 1 AUXMOVE EQU $C311 NEWSTT EQU $D7D2 #1022 APPLESOFT NEXT STATEMENT MWAIT EQU $FCA8 #1023 ROM WAIT ALWAYS HANDLED IMMEDIATE MVIDOUT EQU $FDF0 OUTPORT EQU $FE95 USED TO SET PRINTER IDROM EQU $E000 = $4C IF ROM PRESENT SKP 3 START SED TEST FOR 65C02 IN DECIMAL MODE LDA #$99 CLC ADC #$01 ROLLING ACC FROM 99 TO 100 IN DECIMAL CLD AFFECTS N FLAG DIFFERENTLY BPL X65C02 BETWEEN A 6502 VS A 65C02 LDX #$F3 6502 SETS N FLAG AND GETS HERE REQU LDA NOT65C-$F3,X #1013 INCREASED X INDEX BY 5 JSR MVIDOUT USE THIS TO AVOID DOS HOOKS INX BNE REQU RTS X65C02 JMP RESET COLD START INSDS1 LDX PCL LDY PCH JSR CROUT JSR PRYX2 JSR OUTSP INSDST LDA PCH CMP #WARMV BCS INSDSP LDY #>WARMV-1 IT IS SO COPY REGION FROM PSEUDO-STACK COPYSTK LDA STACK,Y STA $100,Y DEY BPL COPYSTK INSDSP JSR PEEK LDY #$FF DETERMINE LENGTH OF STY LMNEM INSTRUCTION. OPCODE IN TAY ACC. STORED IN LENGTH. LSR A INVALID = 0 BCC IEVEN 1 BYTE = 0 ROR A 2 BYTE = 1 BCS ERR 3 BYTE = 2 AND #$87 IEVEN LSR A TAX LDA FMT1,X BCC RTMSKZ LSR A LSR A LSR A LSR A RTMSKZ AND #$0F CMP #$0F BNE GETFMT ERR LDY #$FF BAD OPCODE STY ERRFLG INY STY LMNEM STY RMNEM STY FORMAT STY LENGTH RTS1 RTS GETFMT TAX LDA FMT2,X STA FORMAT AND #$03 STA LENGTH LDA TFLG BYPASS PRINT FORMATTING BNE RTS1 IN TRACE TYA AND #$8F PHA TEMP STORAGE TYA LDX #31 GETFMT2 DEX BMI MNNDX CMP OPC65C,X MAKE SUBSTITUTION IF BNE GETFMT2 65C02 OPCODE. LDA REPL65C,X MNNDX PLX LDY #$03 CPX #$8A BEQ MNNDX3 MNNDX1 LSR A BCC MNNDX3 LSR A MNNDX2 LSR A ORA #$20 DEY BNE MNNDX2 INY MNNDX3 DEY BNE MNNDX1 RTS INSTDSP JSR INSDS1 PHA PRNTOP JSR YPEEK JSR PRBYTE LDX #$01 PRNTBL JSR PRBLNK CPY LENGTH INY BCC PRNTOP LDX #$03 CPY #$03 BCC PRNTBL PLA TAY LDA LMNEM BEQ PRMN1 LDA MNEML,Y STA LMNEM LDA MNEMR,Y STA RMNEM PRMN1 LDA #$00 LDY #$05 PRMN2 ASL RMNEM ROL LMNEM ROL A DEY BNE PRMN2 ADC #$BF JSR COUT DEX BNE PRMN1 JSR OUTSP LDY LENGTH LDX #$05 PRADR1 CPX #$02 BEQ PRADR5 PRADR2 ASL FORMAT BCC PRADR3 CHAR1LOC LDA CHAR1,X #1020 JSR COUT LDA CHAR2,X BEQ PRADR3 JSR COUT PRADR3 DEX BPL PRADR1 RTS PRADR4 DEY BMI PRADR2 JSR PRBYTE PRADR5 LDA FORMAT CMP #$E8 JSR YPEEK BCC PRADR4 JSR PCADJA TAX INX BNE PRNTYX INY PRNTYX TYA PRNTAX JSR PRBYTE TXA JMP PRBYTE PRBLNK3 LDX #3 PRBLNK JSR OUTSP PRINT X SPACES DEX BNE PRBLNK RTS PCADJ SEC UPDATE PC BY LENGTH+1 PCADJLP LDA LENGTH UPDATE PC BY LENGTH PCADJAP JSR PCADJA UPDATE PC BY ACC STA PCL STY PCH RTS PCADJL LDA LENGTH SET Y,A = PC+LENGTH PCADJA LDY PCH SET Y,A = PC+ACC TAX BPL PCADJ2 DEY PCADJ2 ADC PCL BCC RTS2 INY RTS2 RTS STEP DEC YSAV F(S) STEPL TXA BEQ STEPZ JSR SETBREAK FIRST TIME LDX #1 BNE SSTEP ALWAYS TAKEN STEPZ JSR KYWAIT BNE STEP1 INC YSAV CTRL-C = EXIT TO NEXTITM JMP ZSWAPE VIA ZSWAPE RTS STEP1 CPY #$CA BNE STEP2 LDA JFLG J = SINGLE STEP BEQ SSTEP IF NO JSR, ELSE JMP TRCPCS EXECUTE SUBROUTINE STEP2 CPY #$CC L = LOOP. SET BREAK BNE STEP2A POINT AFTER INSTRUCTION JSR PCADJL TO BE EXECUTED NEXT STA BRKADDR AND ENTER TRACE. STY BRKADDR+1 BRA STEPT STEP2A LDA JFLG SPC = SINGLE STEP IF BNE STEP3 NOT JSR, ELSE IGNORE CPY #$A0 BEQ SSTEP STEP3 CPY #$D3 S OR OPEN APPLE = BEQ SSTEP SINGLE STEP ALWAYS TYA BEQ SSTEPW = 0 FOR OPEN APPLE. CPY #$D4 T = ENTER TRACE MODE BNE STEP4 LDY #$FF STEPT STY TFLG SET TRACE MODE FLAG STY PCFLG ENABLE PC PRINTING JMP STRACE AND ENTER TRACE. STEP4 CPY #$D8 X = SKIP NEXT INSTRUCTION BNE STEP5 STZ JFLG ENABLE SPC IF SKP WHILE STZ ERRFLG JSR DISPLAYED ACTIVE. JSR PCADJ CLR IN CASE SKIP ERROR. JMP JRTSX STEP5 CPY #$C0 @ = TEXT MODE BNE STEPL LOOP BACK FOR INPUT JSR TEXT SSTEPW JSR FWAIT PAUSE TO RELEASE O/A KEY SSTEP JSR A1PC SSTEPT JSR CLEARDSP TRACE RE-ENTRY TO STEP JSR INSTDSP JSR PRBLNK3 JSR PEEK AND #$0F CMP #$01 SEE IF ZERO PAGE IND BNE SSTEPZ LDA #$A8 '(' JSR COUT PRINT ABSOLUTE VALUE JSR PEEK IN PARENTHESIS AND #$10 BNE INDY TAKEN FOR (NN),Y. LDX XREG FOR (NN,X). INDY TXA X=0 FOR (NN),Y STA TEMP1 LDY #1 JSR YPEEK CLC ADC TEMP1 * PHA #1021 PROGRAM PAGE 0 ALREADY PRESENT * JSR ZSWAP GET PROGRAM PAGE 0 AND * PLA SAVE POINTER ADDRESS ON STACK TAX LDA $01,X PHA LDA $00,X * PHA #1021 PROGRAM PAGE 0 ALREADY PRESENT * JSR ZSWAP RESTORE ANALYST PAGE 0 * PLA AND RECOVER POINTER ADDR. TAX PLA JSR PRNTAX LDA #$A9 ')' JSR COUT SSTEPZ JMP TSTEP PRNTPC LDA #$FF PRINT PC AT TOP OF SCREEN STA CV BY FORCING CROUT TO INC JSR CROUT CV TO 0 (NEED FOR 80 COL) LDA ASFLAG #1022 SEE IF NEWSTT EXECUTED BEQ NOASFT LDX CURLIN #1022 PRINT APPLESOFT LINE# UPPER LEFT LDA CURLIN+1 JSR PRNTAX NOASFT LDA #29 STA CH LDA PROMPT JSR COUT LDA PCH LDX PCL JMP PRNTAX TRACEPC LDA PCH #1022 CHECK IF PC=NEWSTT CMP #NEWSTT BNE TRCPCA LDA #1 STA ASFLAG CURRENTLY RUNNING APPLESOFT TRCPCA LDX PCPNT SAVE PC TO BE EXEC'D LDA PCH IN LIST BUFFER. STA PCBUF,X INX LDA PCL STA PCBUF,X INX CPX #32 BCC PNTINC LDX #0 PNTINC STX PCPNT LDA PB0 BPL TRCPC1 LDA PCFLG O/A TOGGLES PRINT PC EOR #$FF ON/OFF STA PCFLG JSR FWAIT PAUSE TO RELEASE O/A KEY TRCPC1 LDA PCFLG BEQ TRCPC2 BYPASS PRINTING PC. * INC COUNTER PRINT PC * BNE TRCPC2 EVERY 256 INSTRUCTIONS LDA PROMPT FLASHING '$' FOR TRACE EOR #$04 ACTIVITY. $A4->$A0->$A4 STA PROMPT JSR PRNTPC TRCPC2 LDA JFLG BEQ TRACE5 LDA PCH CMP #$C0 BCC TRCPCD CMP #MWAIT BEQ TRCPCI HANDLE $FCA8 IMMEDIATE TYA RESTORE PCH NWAIT LDY ROMFLG BNE TRCPCD CMP #$D0 BCC TRCPCI LDY IDROM JSR ROM $C000-FFFF IN CPY #$4C IMMEDIATE MODE UNLESS BEQ TRCPCI ROM FLAG SET <> 0. TRCPCD CMP DOSCALL+1 TRACE THRU JSR UNLESS = BNE TRACE5 DOS SUBROUTINE SPECIFIED LDA PCL BY F(/). CMP DOSCALL BNE TRACE5 TRCPCI LDA PCFLG EXEC JSR IMMEDIATE. DON'T BEQ TRCPCS PRINT IF O/A TURNED OFF. JSR SPROMPT '#' DENOTES JSR IMMED. JSR PRNTPC PRINT EXEC SUBROUTINE JSR DPROMPT '$' PROMPT LDA #$FF FORCE PC PRINTING STA COUNTER AFTER JSR IMMED. TRCPCS LDA PCL SEE IF PC = $BF00 BNE TRCPCG LDA PCH CMP # TRACE ENTRY POINT STZ DSPTOP FOR STEP -> TRACE JSR DPROMPT '$' PROMPT JSR CLEARDSP TRACE5 LDX #1 IF PC = A4 THEN ENTER STEP TRACE6 LDA PCL,X CMP BRKADDR,X BEQ TRACEL JMP TRACE7 TRACEL DEX BPL TRACE6 JSR SETBREAK CLEAR OLD BREAKPOINT TRACES STA KBDSTRB STZ TFLG CLEAR TRACE FLAG STZ DSPTOP RESET DISPLAY TO TOP JSR STPRMPT PROMPT BACK TO OLD '#' DEC YSAV LDY YSAV LDA #$D3 PUT 'S' INTO INPUT BUFFER STA IN,Y JMP SSTEPT RE-ENTER STEP MODE NBRNCH JSR SAVE ALL OTHER OPCODES BRA UPDPC BRANCH JSR SAVE BRANCH WITH COND. MET CLC LDY #$01 JSR YPEEK JSR PCADJAP UPDPC SEC PCINC JSR PCADJLP NEWPC LDA TFLG BNE TRACEBY BYPASSES NEXTITM NXTPC JSR CROUT JMP REGDSP TRACEBY JMP TRACEPC XJMPATX INX BNE XJMPAT XJSR STA JFLG OK FOR F(J) INC DSPTOP CLC JSR PCADJL SET Y,A = RTS ADDR PHA LDX SPNT TYA STA STACK,X DEX PLA STA STACK,X DEX STX SPNT LDY #$02 XJMP CLC XJMPAT JSR YPEEK PHA DEY JSR YPEEK STA PCL PLA STA PCH BCC NEWPC DEX BNE XJMP LDA XREG CLC JSR PCADJAP LDY #1 BRA XJMP TRACE7 LDA PB1 BACK TO STEP MODE IF BMI TRACES CLOSED APPLE PRESSED JSR INSDST TSTEP LDA ERRFLG IF BAD OPCODE THEN BRK BNE XBRK STZ JFLG DISALLOW F(J) IF NO JSR JSR PEEK GET OPCODE LDY LENGTH CPY #2 CHECK ALL 3-BYTE INST BEQ TSTEP3 JMP TSTEP4 TSTEP3 CMP #$20 BEQ XJSR CMP #$7C BEQ XJMPATX CMP #$4C BEQ XJMP CMP #$6C BEQ XJMPAT * * #1015 HANDLE $00FF AND $01FF INDEXED SPECIAL BECAUSE OF APPLESOFT ROM * PHA SAVE OPCODE. JSR YPEEK GET OPERAND ADDRESS HIGH CMP #$02 BCS TSTEP3X TAKEN IF PC >= $200 TAX SAVE OPERAND ADDRESS HIGH PLA OPCODE PHA CHK FOR INDEXED OPERAND ADDR PAGE 0 OR 1 CMP #$99 STA NNNN,Y BEQ INDX CMP #$9D STA NNNN,X BEQ INDX CMP #$B9 LDA NNNN,Y BEQ INDX CMP #$BD LDA NNNN,X BEQ INDX TXA OPERAND ADDRESS HIGH BEQ TSTEP3RS TAKEN FOR ABSOLUTE $00NN JSR YPEEK1 #1016 NOW ABSOLUTE $01NN. GET OPERAND LOW CMP #$FE CHECK $1FE-1FF AND HANDLE ABSOLUTE BCS TSTEP3RS REAL STACK FOR APPLESOFT ROM LINE# NIDXS PLA ADJ STACK. NOW < $01FE ABSOLUTE LDA STACKLOC+2 SUBSTITUTE PSUEDO-STACK BRA XQSTK INDX JSR YPEEK1 NOW 00NN OR 01NN INDEXED. GET OPERAND LOW CMP #$FB = 00FN OR 01FN INDEXED ? BCS IDXFN TXA BNE NIDXS HANDLE $01NN INDEXED (NOT FN) PSEUDO STACK BEQ TSTEP3RS FOR $00NN INDEXED (NOT FN) IDXFN TXA OPERAND ADDR HIGH BNE TSTEP3RS $01FN INDEXED WILL BE IN $200 KEYIN BUFFER PLA ADJ STACK. HANDLE $00FN INDEXED LDX STACKLOC+2 SUBSTITUTE PSEUDO-STACK -1 DEX FOR 00FN INDEXED INTO STACK TXA BRA XQSTK XQST1 JSR YPEEK XQSTK STA XQTS+3,Y DEY BPL XQST1 XQRST JSR RESTORE #1018 JMP XQTS+3 EXEC IN ANALYST R/W MODE XBRK STZ DSPTOP STZ TFLG JSR CLEARDSP JSR INSTDSP JSR CROUT JSR RGDSP1 JSR BELL JMP ZSWAPE EXIT VIA NEXTITM TSTEP3RS JSR YPEEK RESTORE OPERAND ADDR HI BYTE TSTEP3X CMP #$C0 $C002-C005, $C008-C009 BNE TSTEP5N AUX R/W SWITCHES HANDLE SPECIAL JSR YPEEK1 GET OPERAND ADDR LOW CMP #$02 BCC TSTEP5C CMP #$04 BCC TSTEPRD CMP #$06 BCC TSTEPWR CMP #$08 TSTEP5C BCC TSTEP5 CMP #$0A BCS TSTEP5 STA TEMP3 ROR A ROR A EOR RDAUXZP BPL STOUT2 NO CHANGE IN ZP STATE. JSR ZSWAP RESTORE PROGRAM ZP. LDA TEMP3 NEW ZP STATE LSR A ODD/EVEN 9/8 BCS ODDNEW LDA #9 NEW = 8 DFB $2C ODDNEW LDA #8 NEW = 9 STA TEMP2 OLD STATE LDX #0 COPY XQTS ACROSS STKLOOP LDY TEMP2 STA $C000,Y OLD ZP LDA $0100,X LDY TEMP3 STA $C000,Y NEW ZP STA $0100,X INX BEQ STKOUT CPX #>IN+12 BNE STKLOOP TSX COPY ANALYST STACK ACROSS BRA STKLOOP TSTEPRD STA XQTS+44 SET PROGRAM READ STATE. BRA STOUT2 TSTEPWR STA XQTS+47 SET PROGRAM WRITE STATE. BRA STOUT2 STKOUT JSR ZSWAP PUT ANALYST ZP BACK. STOUT2 PLA PULL OPC TO ADJ STACK UPDPCGO JMP UPDPC TSTEP4 CPY #1 BNE LEN0 TAKEN FOR 1 BYTE INSTRUCTION PHA SAVE OPCODE OF 2 BYTE INSTRUCTION CMP #$B1 #1018 TEST IF (ZP),Y IS IN STACK PAGE BEQ TSTEP4I IF LDA (ZP),Y CMP #$91 STA (ZP),Y ? BNE TSTEP5N TSTEP4I JSR YPEEK GET ZP OPERAND FOR LDA/STA (ZP),Y TAX NOW X = OFFSET IN PAGE 0 TO INDEXED ADDR LDA $01,X GET ADDR HIGH WHERE OPERAND POINTS CMP #$01 IS (ZP) POINTING TO STACK PAGE? TSTEP5N BNE TSTEP5 LDA STACKLOC+2 SUBSTITUTE PSEUDO-STACK STA XQTS+5 CHANGE LDA/STA (ZP),Y TO LDA/STA $01NN,Y LDA $00,X PCL STA XQTS+4 PLA OPCODE ORA #$08 CHANGE TO ABS INDEXED,Y STA XQTS+3 NEW OPCODE JMP XQRST EXECUTE (ZP),Y AS $01NN,Y ABSOLUTE TSTEP5 LDA #$EA STA XQTS+4 STA XQTS+5 PLA OPCODE CMP #$80 BNE NBRA ORA #$10 NBRA AND #$1F EOR #$14 CMP #$04 = BRANCH OFFSET BEQ XQ2 TAKEN IF BRANCH OPCODE XQ1 JSR YPEEK Y = LENGTH XQ2 STA XQTS+3,Y XQT BCS BRNCH (B0 04) DEY NOP BPL XQ1 JMP NBRNCH (CCLR) JSR RESTORE BRNCH JMP BRANCH (CSET) JMP XQTS XTSX LDX SPNT STX XREG XTXS LDX XREG STX SREF UPDSPNT STX SPNT UPDATE SPNT BRA UPDPCGO LEN0 CMP #$60 BEQ XRTS CMP #$BA BEQ XTSX CMP #$9A BEQ XTXS CMP #$40 BEQ XRTIGO HANDLE RTI INSTRUCTION #1019 CMP #$00 BNE PHCHECK JMP XBRK XRTIGO JMP XRTI PHCHECK PHA SAVE OPCODE CMP #$5A BCC TSTEP6 TAX AND #$1F CMP #$1A BEQ STKOPC PHX,PLX,PHY,PLY TXA TSTEP6 AND #$9F CMP #$08 PHA,PLA,PHP,PLP BNE TSTEP5 STKOPC LDX SPNT STACK OPCODES PLA OPCODE TAY AND #$10 BEQ APCODE TYA ASL A BCS OPCX ASL A ASL A BCS XPLY LDA YREG XPHY BRA PUSH XPLY JSR PULL STA YREG UPDSTACK BRA UPDSPNT OPCX ASL A ASL A BCS XPLX LDA XREG XPHX BRA PUSH XPLX JSR PULL STA XREG BRA UPDSTACK APCODE TYA ASL A ASL A BMI PULLAP BCC XPHP LDA ACC XPHA BRA PUSH XPHP LDA STATUS PUSH STA STACK,X DEX BNE UPDSTACK PULLAP BCC XPLP JSR PULL XPLA ACCLOC STA ACC BRA UPDSTACK XPLP JSR PULL STA STATUS BRA UPDSTACK XRTS LDX SPNT INX STACKLOC LDA STACK,X STA PCL INX LDA STACK,X STA PCH STX SPNT DEC DSPTOP JMP PCINC XRTI LDX SPNT HANDLE RTI #1019 INX LDA STACK,X STA STATUS INX LDA STACK,X STA PCL INX LDA STACK,X STA PCH STX SPNT JMP NEWPC PULL INX LDY STATUS PULL FROM STACK AFFECTS PHY N & Z FLAGS PLP LDA STACK,X PHP UPDATE N & Z PLY STY STATUS RTS YPOKEPC PHA EXECUTE STA (PCL),Y LDA PCL STA A3L LDA PCH STA A3H PLA JMP YPOKE * * XQTS IMAGE AT $122-159. INSTRUCTIONS WITH '@' ARE * CHANGEABLE IN XQTS AREA TO SET MAIN/AUX R/W STATE. * INITBL JSR XQTS+36 WARMV. REAL-TIME REENTRY JMP REENTER BY JSR $102. JSR XQTS+43 XQTS NOP NOP NOP JMP XQTS+15 JSR XQTS+36 JMP BRANCH JSR XQTS+36 XQTS+15 JMP NBRNCH JSR XQTS+43 YPOKE STA (A3L),Y JMP XQTS+36 LDY #0 PEEK JSR XQTS+43 YPEEK LDA (PCL),Y STA MAINRD @ XQTS+36. SET ANALYST STA MAINWR @ STATE RTS STA MAINRD @ XQTS+43. SET PROGRAM STA MAINWR @ STATE RTS * YPEEK1 DEY GET YPEEK-1 #1017 JSR YPEEK INY RTS SETBREAK LDX #1 SET BREAKPOINT TO A4 LDA BRKADDR+1 IF GIVEN, ELSE $FFFF. BEQ SETBRK2 BREAKPOINT GIVEN LDA #$FF SETBRK1 STA BRKADDR,X CLEAR OLD BREAKPOINT DEX BPL SETBRK1 RTS SETBRK2 LDA A4L,X SET BREAKPOINT STA BRKADDR,X DEX BPL SETBRK2 RTS LOAD LDA XQLOC1+1 F(H) LDY XQLOC1+2 SETUP A3 = XQT+1 FOR HSF BRA A3SET BUFFER (XQT=BYTE COUNT) SETRG1 JSR A1PC JSR SAVEPC SETRG2 LDA ACCLOC+1 SETUP REGS FOR F(:) LDY ACCLOC+2 A3SET STA A3L STY A3H RTS SETREG TXA F(I) SET OR DISPLAY REGS. BNE SETRG1 TAKEN IF PC GIVEN. LDY YSAV LDA IN,Y CMP #$8D BNE SETRG2 LDA PCREG I DISPLAYS REGS. STA PCL LDA PCREG+1 STA PCH REGDSP JSR RGDSP1 JMP INSTDSP WILL RTS TO NEXTITM RGDSP1 LDX #0 RDSP1 LDA RTBL,X JSR COUT LDA #$BD JSR COUT LDA ACC,X JSR PRBYTE JSR OUTSP INX CPX #3 BCC RDSP1 LDX #7 PRFLG LDA CHAR3,X PRINT 'NV-BDIZC' JSR COUT DEX BPL PRFLG JSR CROUT LDA #$C1 PRINT ACC IN BINARY JSR COUT JSR OUTEQ LDA ACC JSR BNDSP JSR PRBLNK3 LDA #$D0 PRINT STATUS IN BINARY JSR COUT JSR OUTEQ LDA STATUS JSR BNDSP JSR CROUT LDA #$D3 JSR COUT JSR OUTEQ LDA SPNT JSR PRBYTE LDA #$BA JSR COUT LDA #$D8 JSR COUT JSR COUT LDY #8 LDX SPNT PRNTSTK JSR OUTSP PRINT STACK BYTES FROM CPX SREF SPNT TO SREF UP TO 6 BEQ SAVEPC MAX. INX LDA STACK,X JSR PRBYTE DEY BNE PRNTSTK SAVEPC LDA PCL STA PCREG LDA PCH STA PCREG+1 RTS BNDSP LDX #$08 INDEX FOR 8 BITS NEXTBIT ASL A PHA BCS BIT1 LDA #$B0 '0' DFB $2C SKIP NEXT INSTRUCTION BIT1 LDA #$B1 '1' JSR COUT PLA DEX BNE NEXTBIT RTS BELL LDY #$38 DURATION BELL2 LDA #$2B FREQUENCY JSR WAIT LDA SPKR DEY BNE BELL2 RTS COUTZ JMP (CSWL) VIDOUT BIT #$60 BEQ CTRLCHAR TAY CMP #$60 BCS VID1 CMP #$40 BCC VID1 AND #$BF VID1 LDY CH BIT RD80VID BPL VID3 PHA TYA LSR A BCS VID2 STA HISCR VID2 TAY PLA VID3 STA (BASL),Y STA LOWSCR LDY CH INY CPY WNDWDTH BCS CR STY CH VIDRTS RTS BACKSPC DEC CH BPL VIDRTS LDY WNDWDTH DEY STY CH LDA CV DEC A CMP #0 BMI VIDRTS VTABVGO JMP VTABV CTRLCHAR ORA #$80 CMP #$88 BEQ BACKSPC CMP #$8D BNE VIDRTS CR LDA #$00 STA CH INC CV LDA CV CMP #24 BCC VTABVGO DEC CV LDX #0 SCROLL TXA JSR VTABZ BRA SCRL5 SCRL1 LDY BASH STY BAS2H LDY BASL STY BAS2L TXA JSR VTABZ PHX LDX WNDWDTH LDY #0 SCRL2 BIT RD80VID BPL SCRL3 STA HISCR LDA (BASL),Y STA (BAS2L),Y DEX BEQ SCRL4 STA LOWSCR SCRL3 LDA (BASL),Y STA (BAS2L),Y INY DEX BNE SCRL2 SCRL4 STA LOWSCR PLX SCRL5 INX CPX #24 BCC SCRL1 LDA #$00 JSR CLEOLZ JMP VTAB HOME LDA #0 STA CH STA CV BIT RDTEXT BMI CLS1 RTS DO NOT CLEAR TEXT PAGE IF IN GRAPHICS MODE CLS1 PHA JSR VTABZ LDA #0 JSR CLEOLZ PLA INC A CMP #24 BCC CLS1 VTAB LDA CV VTABV STA CV VTABZ PHA LSR A AND #$03 ORA #$04 STA BASH PLA AND #$18 BCC BSCLC2 ADC #$7F BSCLC2 STA BASL ASL A ASL A ORA BASL STA BASL RTS CLREOL LDA CH CLEOLZ BIT RD80VID BPL CLEOL4 PHA CLREOL 80 COL SEC SBC WNDWDTH TAX PLA LSR A TAY PHP LDA #$A0 PLP BCS CLEOL8B CLEOL8A STA HISCR STA (BASL),Y INX BEQ CLEOL8C CLEOL8B STA LOWSCR STA (BASL),Y INY INX BNE CLEOL8A CLEOL8C STA LOWSCR RTS CLEOL4 TAY SEC SBC WNDWDTH TAX LDA #$A0 CLEOL4A STA (BASL),Y INY INX BNE CLEOL4A RTS CLEARDSP LDX #6 CLEAR DISPLAY WINDOW CLRDSP1 LDA DSPTOP BPL CLRDSP2 HOLD TOP OF DISPLAY LDA #0 0 <= TOP <= 18. CLRDSP2 CMP #18 BCC CLRDSP3 LDA #18 CLRDSP3 STA DSPTOP STA CV CLEAR 6 LINE DISPLAY DEC CV FROM DSPTOP DOWN AND TXA SET CV SO INSTDSP WILL BEQ RTS4A PRINT AT DSPTOP UPON CLRDSP4 JSR CROUT EXIT. PHX BIT RDTEXT IF IN TEXT MODE, DO NORMAL CLREOL BMI CLRDSPT BECAUSE WRITES TO TEXT SCREEN LDX #34 JSR PRBLNK BRA CLRDSPG CLRDSPT JSR CLREOL CLRDSPG PLX DEX BNE CLRDSP4 BEQ CLRDSP1 RTS4A RTS FWAIT LDA #$FF WAIT SEC WAIT2 PHA WAIT3 SBC #$01 BNE WAIT3 PLA SBC #$01 BNE WAIT2 RTS NXTA4 INC A4L INCREMENT A4 BNE NXTA1 INC A4H NXTA1 LDA A1L CMP A2L LDA A1H SBC A2H INC A1L BNE RTS4B INC A1H RTS4B RTS CARRY SET IF A1 >= A2 CTRLC LDY KBD CHECK FOR CTRL-C BPL CTLCRTS STY KBDSTRB CPY #$93 CTRL-S = PAUSE BNE CTLC KYWAIT LDY PB0 F(S) ENTRY POINT BMI KYWT2 LDY KBD BPL KYWAIT STY KBDSTRB DFB $2C KYWT2 LDY #0 0 = OPEN APPLE PRESSED CTLC CPY #$83 CTLCRTS RTS Z SET FOR CTRL-C. RDKEY STY YSAV1 LDY RDSCR PHP LDY RDPAGE2 PHP BPL KEY1 AVOID FLICKER IF HGR2 STA LOWSCR KEY1 PHX LDA CH BIT RD80VID BPL KEY2 LSR A BCS KEY2 STA HISCR KEY2 TAY LDA (BASL),Y PHA EOR #$80 BIT #$20 BNE KEY3 EOR #$40 KEY3 STA (BASL),Y KEY4 LDX KBD BPL KEY4 STA KBDSTRB PLA STA (BASL),Y STA LOWSCR TXA JMP ENDHOOK NOTCR LDA IN,X JSR COUT CMP #$88 BEQ BCKSPC CPX #34 BEEP ON LAST 4 CHAR. BCC NOTCR1 JSR BELL NOTCR1 INX CPX #38 38 CHARACTERS ALLOWED BCC NXTCHAR LDA #$DC JSR COUT GETLNZ JSR CROUT LDA PROMPT JSR COUT LDX #$01 BCKSPC TXA BEQ GETLNZ DEX NXTCHAR JSR RDKEY CMP #$95 BEQ NXTCHAR IGNORE '->' CMP #$FF BNE NOTDEL LDA #$88 DELETE KEY = BACKSPACE NOTDEL CMP #$88 BNE CAPTST PHA JSR COUT BACKSPACE JSR OUTSP DELETE CHARACTER PLA BACKSPACE CAPTST CMP #$E0 BCC ADDINP AND #$DF ADDINP STA IN,X CMP #$8D BNE NOTCR CROUT LDA #$8D BNE COUTGO OUTSP LDA #$A0 BNE COUTGO PRA1 JSR CROUT LDY A1H LDX A1L PRYX2 JSR PRNTYX LDY #$00 LDA #$AD COUTGO JSR COUT PRA1RTS RTS ASC SEC F(") XAM ROR A CARRY INTO BIT 7 STA A3H BRA XAM1 MOD8CHK LDA A1L AND #$07 BNE DATAOUT XAM1 JSR CTRLC F(.) A1.A2 HEX OR ASC BEQ PRA1RTS JSR PRA1 DATAOUT JSR OUTSP LDA A1H SEE IF ZERO PAGE BEQ XAMZ DEC A SEE IF $01NN BNE XAM2 LDA A1L GET $01NN FROM STACK,NN TAX LDA STACK,X BRA XAM3 XAMZ LDA A1L SEC SBC #PCL BCC XAM2 TAKEN IF A1L < PCL TAX ELSE GET FROM ZBUF LDA ZBUF,X BRA XAM3 XAM2 JSR A1PCX JSR PEEK XAM3 LDX A3H BPL XAM4 ORA #$80 XAM IN ASC CMP #$A0 BCS PRASC TAKEN IF NORM. OR LCASE LDA #$A0 SPACE FOR CTRL OR INV PRASC JSR COUT BRA XAM5 XAM4 JSR PRBYTE XAM IN HEX XAM5 JSR NXTA1 BCC MOD8CHK CARRY CLEAR IF A1 ZFLG:AA STA ZFLG RST2 JSR INITXQTS STZ TFLG STZ JFLG PRHOME JSR HOME JSR PRTITLE MONZ STZ ERRFLG STZ ASFLAG #1022 DEC BRKADDR+1 INSURE BRKPOINT CLEARED JSR CHKVID MATCH HOOKS W/DISPLAY MODE JSR STPRMPT JSR GETLNZ PARSE JSR ZMODE STZ DSPTOP DISPLAY AT TOP NXTITM JSR GETNUM HANDLE HEX DIGS TO 1ST STY YSAV NON-HEX CHAR+1 (Y=INDX) LDY #SUBTBL-CHRTBL CHRSRCH DEY ACC = F(ACC) BMI SYNERR CMP CHRTBL,Y BNE CHRSRCH PHY JSR TOSUB PLY BEQ MONZ 0 = OFFSET FOR F(CR) NEXTITM LDY YSAV BRA NXTITM SYNERR JSR BELL BRA MONZ DIG LDX #$03 HEX DIGIT NOW IN ACC LO ASL A NIBBLE. KEYS 0-9=00-09 ASL A KEYS A-F=FA-FF. MOVE ASL A LO NIBBLE TO HI NIBBLE ASL A NXTBIT ASL A 4 BIT HEX DIG. INTO A2L ROL A2L A2L TO A2H ROL A2H DEX BPL NXTBIT NXTBAS LDA MODE BNE NXTBS2 IF MODE=0 COPY LDA A2H,X A2 TO A1 & A3 STA A1H,X STA A3H,X NXTBS2 INX BEQ NXTBAS BNE NXTCHR GETNUM LDX #0 STX A2L STX A2H NXTCHR LDA IN,Y F(ACC) = ACC EOR $B0 INY ADC $88 (CARRY SET) EOR #$B0 KEYS 0-9=$00-09 CMP #$0A BCC DIG TAKEN IF KEYS 0-9 ADC #$88 KEYS A-F=$FA-FF CMP #$FA BCS DIG TAKEN IF KEYS A-F RTS TOSUB TYA # OF FUNCTION (START=0) ASL A MULT BY 2 TAY LDA SUBTBL+1,Y PHA LDA SUBTBL,Y PHA LDA MODE OLD MODE FOR F(CR)&F( ) ZMODE LDY #$00 STY MODE RTS RTS TO SUBROUTINE EXECJSR LDA JFLG F(J) BNE GOJSR 'J' WITH NO JSR? ERRJ JMP BELL RTS TO NEXTITM VIA BELL. GOJSR LDY YSAV GET # OF PARM BYTES JSR GETNUM DEY STY YSAV LDA A2H BNE ERRJ LDA A2L CMP #10 BCS ERRJ ONLY 9 PARM BYTES MAX TAY SAVE BYTE COUNT GOPC LDX #17 XQINIT2 LDA INITBL2,X FILL DUMMY BLOCK STA XQT,X DEX BPL XQINIT2 LDA PCL MOVE JSR ADDR TO XQT XQLOC1 STA XQT+1 LDA PCH STA XQT+2 LDX SPNT SET PC = PARM LIST - 1 INX LDA STACK,X STA PCL INX LDA STACK,X STA PCH STX SPNT TYA GET PARM BYTES TAX BEQ MVPRM1 NO PARM BYTES TO MOVE MOVPARM JSR YPEEK MOVE PARM LIST TO DUMMY STA XQT+2,Y DEY BNE MOVPARM MVPRM1 INX TXA ADJ PC TO POINT TO INST CLC FOLLOWING PARM LIST JSR PCADJAP JMP XQJ EXECUTE JSR IMMED. MODE INITBL2 JSR $0000 DUMMY BLOCK FOR F(J) NOP 9 NOP'S FOR PARM BYTES NOP NOP NOP NOP NOP NOP NOP NOP JSR XQTS+36 RESTORE ANALYST R/W JMP JRTS JRTS JSR SAVE JSR CHKVID LDA JFLG BEQ JRTS3 DURING 'G0' W/O BREAK STZ JFLG LDA TFLG BEQ JRTS2 DURING 'STEP' JMP TRACE5 DURING TRACE IMMEDIATE JRTS2 DEC DSPTOP UPDATE REGDSP AFTER JSR. JRTSX JSR CLEARDSP 'SKIP' ENTERS HERE JMP NXTPC JRTS3 RTS RTS TO NEXTITM. FIND LDA #$FF F(CTRL-F) A4 80 SETVID LDY YSAV F(@) LDA IN,Y INC YSAV CMP #$B8 '8' BEQ SET80 CMP #$B4 '4' BEQ SET40 CMP #$B1 '1' BNE CKGR2 LDY #$20 HGR BRA SETGR CKGR2 CMP #$B2 '2' BNE ATSIGN STA ENAPAGE2 ENABLE GRAPHICS PAGE 2 LDY #$40 HGR2 SETGR JSR INITGR SET COUT TO GRAPHICS JMP VTAB CHK80 BCC SET40 80 -> 40 RTS7 RTS TEXTNG LDA RDTEXT DO TEXT IF NOT IN GRAPHICS MODE BMI TEXT LDY GBASE BRA SETGR ATSIGN DEC YSAV @ ALONE TEXT STA LOWSCR #1007 SO TEXT RECOVERS FROM HGR2 STA TXTSET STA INHPAGE2 #1009 SO TEXT RECOVERS FROM @2 IN AUX LDA OUTVECT STA CSWL LDA OUTVECT+1 STA CSWH LDA RD80VID SET 40 OR 80 COL BPL SET40 TEXT BASED ON RD80VID SET80 LDA #$FF STA FLG8 LDA #80 STA WNDWDTH BIT RD80VID BMI SET8D STA SET80VID LDA #$00 SET8A PHA JSR VTABZ LDY #$00 SET8B LDA (BASL),Y TAX PHY TYA LSR A TAY BCS SET8C STA HISCR SET8C TXA STA (BASL),Y PLY STA LOWSCR INY CPY #$28 BCC SET8B TYA JSR CLEOLZ PLA INC A CMP #$18 BCC SET8A SET8D BRA SETDONE SET40 STZ FLG8 BIT RD80VID BPL SET4D STA CLR80VID LDA #$00 SET4A PHA JSR VTABZ LDY #$27 SET4B TYA LSR A PHY TAY BCS SET4C STA HISCR SET4C LDA (BASL),Y PLY STA LOWSCR STA (BASL),Y DEY BPL SET4B PLA INC A CMP #$18 BCC SET4A SET4D LDA #40 STA WNDWDTH SETDONE JMP VTAB HELP LDY #0 F(?) LIST LAST 16 PC HLP2 LDA PCBUF,Y ADDRESSES EXECUTED INY DURING TRACE. LDX PCBUF,Y INY JSR PRNTAX CPY PCPNT BNE HLP3 LDA #$BC JSR COUT HLP3 JSR CROUT CPY #32 BCC HLP2 RTS PRTITLE LDX #$00 F(V). PRINT TITLE PRTITL1 LDA TITLE,X BEQ PRADDR JSR COUT INX BRA PRTITL1 PRADDR LDA STARTLOC+1 PRINT ORIGIN ADDRESS JSR PRBYTE LDA #0 JSR PRBYTE JMP CROUT CHN A128XGB.1023 \ No newline at end of file diff --git a/A128XGA.1024.txt b/A128XGA.1024.txt new file mode 100644 index 0000000..fbcae1e --- /dev/null +++ b/A128XGA.1024.txt @@ -0,0 +1 @@ +* LST OFF SBTL X6502 MSB ON ORG $8000 SKP 1 ********************************* * * * -< THE ANALYST >- * * * * 128K VERSION XG * * * * BUILD 1024 01/27/19 * * * * (UPDATE BUILD# IN TITLE) * * * ********************************* SKP 1 *** COMMANDS *** SKP 1 ; CTRL-F FIND HEX SEQUENCE DEFINED BY F(H) ; G GO EXECUTE IN IMMEDIATE MODE ; H LOAD BYTES FOR HSF F(CTRL-F) BY USING H: ; I DISPLAY/SET PC/INTERNAL A,X,Y,P,S REGISTERS ; J JUMP. EXECUTE JSR INSTRUCTION IN STEP MODE ; CTRL-L CLEAR PRESENT SCREEN AND HOME CURSOR ; L LIST DISASSEMBLY OR LOOP IN TRACE MODE. ; M MOVE BLOCK OF MEMORY ; R RELOCATE ANALYST TO NEW ADDRESS PAGE ; S ENTER STEP MODE. STEP INSTRUCTION ; T TRACE PROGRAM ; V PRINT ANALYST VERSION# AND ORIGIN ADDRESS. ; CTRL-X MOVE ANALYST TO AUX. DISABLED AFTER USE. ; X SKIP INSTRUCTION DURING STEP. TOGGLE MAIN/AUX ; " DUMP MEMORY IN ASCII ; / SET OR PRINT SUBROUTINE TO JSR IMMED MODE ; & EXIT TO OR FROM DOS / PRODOS ; ? PRINT LAST 16 PC'S EXEC'D DURING TRACE ; @ SET TEXT 40/80 COL SCREEN ; < RANGE DELIMITER ; . RANGE DELIMITER ; : STORE VALUE IN MEMORY SKP 1 *** ROM ZERO PAGE EQUATES *** SKP 1 MCSWL EQU $36 MCSWH EQU $37 MA1 EQU $3C MA2 EQU $3E MA4 EQU $42 CURLIN EQU $75 #1021 APPLESOFT CURRENT LINE NUMBER SKP 1 *** ANALYST EQUATES *** SKP 1 PCL EQU $EF LABEL MARKS PAGE 0 PCH EQU $F0 BASL EQU $F1 BASH EQU $F2 LABEL USED AS IDENTIFIER ZFLG EQU $F3 1 BYTE ID = $AA A1L EQU $F4 A1L-A5H MUST BE IN ORDER A1H EQU $F5 FOR MINI-ASSEMBLER A2L EQU $F6 A2H EQU $F7 A3L EQU $F8 A3H EQU $F9 A4L EQU $FA A4H EQU $FB A5L EQU $FC A5H EQU $FD BAS2L EQU $FE BAS2H EQU $FF LABEL MARKS END OF PAGE 0 DECWORD EQU BAS2L #1024 decimal word to print Applsoft line# IN EQU $0132 #1019 WARMV EQU $0162 WARM REENTRY #1019 MOVED UP $30 XQTS EQU WARMV+6 EXEC AREA FOR STEP, TRACE YPOKE EQU XQTS+21 PEEK EQU XQTS+29 YPEEK EQU XQTS+31 XQT EQU XQTS+50 18 BYTES PCBUF EQU XQT+18 32 BYTE PC SAVE AREA. *IN EQU PCBUF+32 KEYIN BUFFER. 38 BYTES. MLI EQU $BF00 PRODOS INTERFACE SKP 1 *** ROM EQUATES *** SKP 1 ENAPAGE2 EQU $C000 ENABLES AUX FOR GRAPHICS PAGE 2 KBD EQU $C000 INHPAGE2 EQU $C001 AUX $400-7FF SHOWS TEXT MAINRD EQU $C002 MAINWR EQU $C004 CLR80VID EQU $C00C SET80VID EQU $C00D KBDSTRB EQU $C010 RDAUXZP EQU $C016 BMI IF AUXZP RDPAGE2 EQU $C018 BMI IF INHPAGE2 ON RDTEXT EQU $C01A BMI IF TEXT MODE RDSCR EQU $C01C BMI IF DPAGE2 ON RD80VID EQU $C01F BMI IF 80 COL MODE SPKR EQU $C030 TXTCLR EQU $C050 TXTSET EQU $C051 MIXCLR EQU $C052 LOWSCR EQU $C054 HISCR EQU $C055 HIRES EQU $C057 PB0 EQU $C061 OPEN APPLE KEY PB1 EQU $C062 CLOSED APPLE KEY SWITCH2 EQU $C082 PR1 EQU $C100 #1019 INIT PRINTER IN SLOT 1 AUXMOVE EQU $C311 NEWSTT EQU $D7D2 #1022 APPLESOFT NEXT STATEMENT MWAIT EQU $FCA8 #1023 ROM WAIT ALWAYS HANDLED IMMEDIATE MVIDOUT EQU $FDF0 OUTPORT EQU $FE95 USED TO SET PRINTER IDROM EQU $E000 = $4C IF ROM PRESENT SKP 3 START SED TEST FOR 65C02 IN DECIMAL MODE LDA #$99 CLC ADC #$01 ROLLING ACC FROM 99 TO 100 IN DECIMAL CLD AFFECTS N FLAG DIFFERENTLY BPL X65C02 BETWEEN A 6502 VS A 65C02 LDX #$F3 6502 SETS N FLAG AND GETS HERE REQU LDA NOT65C-$F3,X #1013 INCREASED X INDEX BY 5 JSR MVIDOUT USE THIS TO AVOID DOS HOOKS INX BNE REQU RTS X65C02 JMP RESET COLD START INSDS1 LDX PCL LDY PCH JSR CROUT JSR PRYX2 JSR OUTSP INSDST LDA PCH CMP #WARMV BCS INSDSP LDY #>WARMV-1 IT IS SO COPY REGION FROM PSEUDO-STACK COPYSTK LDA STACK,Y STA $100,Y DEY BPL COPYSTK INSDSP JSR PEEK LDY #$FF DETERMINE LENGTH OF STY LMNEM INSTRUCTION. OPCODE IN TAY ACC. STORED IN LENGTH. LSR A INVALID = 0 BCC IEVEN 1 BYTE = 0 ROR A 2 BYTE = 1 BCS ERR 3 BYTE = 2 AND #$87 IEVEN LSR A TAX LDA FMT1,X BCC RTMSKZ LSR A LSR A LSR A LSR A RTMSKZ AND #$0F CMP #$0F BNE GETFMT ERR LDY #$FF BAD OPCODE STY ERRFLG INY STY LMNEM STY RMNEM STY FORMAT STY LENGTH RTS1 RTS GETFMT TAX LDA FMT2,X STA FORMAT AND #$03 STA LENGTH LDA TFLG BYPASS PRINT FORMATTING BNE RTS1 IN TRACE TYA AND #$8F PHA TEMP STORAGE TYA LDX #31 GETFMT2 DEX BMI MNNDX CMP OPC65C,X MAKE SUBSTITUTION IF BNE GETFMT2 65C02 OPCODE. LDA REPL65C,X MNNDX PLX LDY #$03 CPX #$8A BEQ MNNDX3 MNNDX1 LSR A BCC MNNDX3 LSR A MNNDX2 LSR A ORA #$20 DEY BNE MNNDX2 INY MNNDX3 DEY BNE MNNDX1 RTS INSTDSP JSR INSDS1 PHA PRNTOP JSR YPEEK JSR PRBYTE LDX #$01 PRNTBL JSR PRBLNK CPY LENGTH INY BCC PRNTOP LDX #$03 CPY #$03 BCC PRNTBL PLA TAY LDA LMNEM BEQ PRMN1 LDA MNEML,Y STA LMNEM LDA MNEMR,Y STA RMNEM PRMN1 LDA #$00 LDY #$05 PRMN2 ASL RMNEM ROL LMNEM ROL A DEY BNE PRMN2 ADC #$BF JSR COUT DEX BNE PRMN1 JSR OUTSP LDY LENGTH LDX #$05 PRADR1 CPX #$02 BEQ PRADR5 PRADR2 ASL FORMAT BCC PRADR3 CHAR1LOC LDA CHAR1,X #1020 JSR COUT LDA CHAR2,X BEQ PRADR3 JSR COUT PRADR3 DEX BPL PRADR1 RTS PRADR4 DEY BMI PRADR2 JSR PRBYTE PRADR5 LDA FORMAT CMP #$E8 JSR YPEEK BCC PRADR4 JSR PCADJA TAX INX BNE PRNTYX INY PRNTYX TYA PRNTAX JSR PRBYTE TXA JMP PRBYTE PRBLNK3 LDX #3 PRBLNK JSR OUTSP PRINT X SPACES PRBLN1 DEX #1024 PRINT X-1 SPACES BNE PRBLNK RTS PCADJ SEC UPDATE PC BY LENGTH+1 PCADJLP LDA LENGTH UPDATE PC BY LENGTH PCADJAP JSR PCADJA UPDATE PC BY ACC STA PCL STY PCH RTS PCADJL LDA LENGTH SET Y,A = PC+LENGTH PCADJA LDY PCH SET Y,A = PC+ACC TAX BPL PCADJ2 DEY PCADJ2 ADC PCL BCC RTS2 INY RTS2 RTS STEP DEC YSAV F(S) STEPL TXA BEQ STEPZ JSR SETBREAK FIRST TIME LDX #1 BNE SSTEP ALWAYS TAKEN STEPZ JSR KYWAIT BNE STEP1 INC YSAV CTRL-C = EXIT TO NEXTITM JMP ZSWAPE VIA ZSWAPE RTS STEP1 CPY #$CA BNE STEP2 LDA JFLG J = SINGLE STEP BEQ SSTEP IF NO JSR, ELSE JMP TRCPCS EXECUTE SUBROUTINE STEP2 CPY #$CC L = LOOP. SET BREAK BNE STEP2A POINT AFTER INSTRUCTION JSR PCADJL TO BE EXECUTED NEXT STA BRKADDR AND ENTER TRACE. STY BRKADDR+1 BRA STEPT STEP2A LDA JFLG SPC = SINGLE STEP IF BNE STEP3 NOT JSR, ELSE IGNORE CPY #$A0 BEQ SSTEP STEP3 CPY #$D3 S OR OPEN APPLE = BEQ SSTEP SINGLE STEP ALWAYS TYA BEQ SSTEPW = 0 FOR OPEN APPLE. CPY #$D4 T = ENTER TRACE MODE BNE STEP4 LDY #$FF STEPT STY TFLG SET TRACE MODE FLAG STY PCFLG ENABLE PC PRINTING JMP STRACE AND ENTER TRACE. STEP4 CPY #$D8 X = SKIP NEXT INSTRUCTION BNE STEP5 STZ JFLG ENABLE SPC IF SKP WHILE STZ ERRFLG JSR DISPLAYED ACTIVE. JSR PCADJ CLR IN CASE SKIP ERROR. JMP JRTSX STEP5 CPY #$C0 @ = TEXT MODE BNE STEPL LOOP BACK FOR INPUT JSR TEXT SSTEPW JSR FWAIT PAUSE TO RELEASE O/A KEY SSTEP JSR A1PC SSTEPT JSR CLEARDSP TRACE RE-ENTRY TO STEP JSR INSTDSP JSR PRBLNK3 JSR PEEK AND #$0F CMP #$01 SEE IF ZERO PAGE IND BNE SSTEPZ LDA #$A8 '(' JSR COUT PRINT ABSOLUTE VALUE JSR PEEK IN PARENTHESIS AND #$10 BNE INDY TAKEN FOR (NN),Y. LDX XREG FOR (NN,X). INDY TXA X=0 FOR (NN),Y STA TEMP1 LDY #1 JSR YPEEK CLC ADC TEMP1 * PHA #1021 PROGRAM PAGE 0 ALREADY PRESENT * JSR ZSWAP GET PROGRAM PAGE 0 AND * PLA SAVE POINTER ADDRESS ON STACK TAX LDA $01,X PHA LDA $00,X * PHA #1021 PROGRAM PAGE 0 ALREADY PRESENT * JSR ZSWAP RESTORE ANALYST PAGE 0 * PLA AND RECOVER POINTER ADDR. TAX PLA JSR PRNTAX LDA #$A9 ')' JSR COUT SSTEPZ JMP TSTEP PRNTPC LDA #$FF PRINT PC AT TOP OF SCREEN STA CV BY FORCING CROUT TO INC JSR CROUT CV TO 0 (NEED FOR 80 COL) LDA ASFLAG #1022 SEE IF NEWSTT EXECUTED BEQ NOASFT LDX CURLIN #1022 PRINT APPLESOFT LINE# UPPER LEFT LDA CURLIN+1 * * #1024 Print A,X in decimal ascii * STX DECWORD DECWORD same as BASH2L STA DECWORD+1 since no scrolling will occur LDA #$FF flag end of digits DODIGIT PHA save low order digit LDA #0 remainder=0 TAY divdone=true LDX #16 16 bit divide DLOOP CMP #5 calc decword/10 BCC MUL2 SBC #5 remove high digit & shift 1 into decword INY divdone=false MUL2 ROL DECWORD shift /10 result into decword ROL DECWORD+1 ROL A shift bits of input into acc (mod 10) DEX BNE DLOOP continue 16 bit divide DEY BPL DODIGIT if result of /10 was not 0, do next digit LDX #6 count for space fill at end +1 PRDIG JSR PRHEXZ print highest digit DEX PLA pull next highest ascii digit BPL PRDIG if not end of digits $FF, print more JSR PRBLN1 print x-1 spaces NOASFT LDA #29 STA CH LDA PROMPT JSR COUT LDA PCH LDX PCL JMP PRNTAX TRACEPC LDA PCH #1022 CHECK IF PC=NEWSTT CMP #NEWSTT BNE TRCPCA LDA #1 STA ASFLAG CURRENTLY RUNNING APPLESOFT TRCPCA LDX PCPNT SAVE PC TO BE EXEC'D LDA PCH IN LIST BUFFER. STA PCBUF,X INX LDA PCL STA PCBUF,X INX CPX #32 BCC PNTINC LDX #0 PNTINC STX PCPNT LDA PB0 BPL TRCPC1 LDA PCFLG O/A TOGGLES PRINT PC EOR #$FF ON/OFF STA PCFLG JSR FWAIT PAUSE TO RELEASE O/A KEY TRCPC1 LDA PCFLG BEQ TRCPC2 BYPASS PRINTING PC. * INC COUNTER PRINT PC * BNE TRCPC2 EVERY 256 INSTRUCTIONS LDA PROMPT FLASHING '$' FOR TRACE EOR #$04 ACTIVITY. $A4->$A0->$A4 STA PROMPT JSR PRNTPC TRCPC2 LDA JFLG BEQ TRACE5 LDA PCH CMP #$C0 BCC TRCPCD CMP #MWAIT BEQ TRCPCI HANDLE $FCA8 IMMEDIATE TYA RESTORE PCH NWAIT LDY ROMFLG BNE TRCPCD CMP #$D0 BCC TRCPCI LDY IDROM JSR ROM $C000-FFFF IN CPY #$4C IMMEDIATE MODE UNLESS BEQ TRCPCI ROM FLAG SET <> 0. TRCPCD CMP DOSCALL+1 TRACE THRU JSR UNLESS = BNE TRACE5 DOS SUBROUTINE SPECIFIED LDA PCL BY F(/). CMP DOSCALL BNE TRACE5 TRCPCI LDA PCFLG EXEC JSR IMMEDIATE. DON'T BEQ TRCPCS PRINT IF O/A TURNED OFF. JSR SPROMPT '#' DENOTES JSR IMMED. JSR PRNTPC PRINT EXEC SUBROUTINE JSR DPROMPT '$' PROMPT LDA #$FF FORCE PC PRINTING STA COUNTER AFTER JSR IMMED. TRCPCS LDA PCL SEE IF PC = $BF00 BNE TRCPCG LDA PCH CMP # TRACE ENTRY POINT STZ DSPTOP FOR STEP -> TRACE JSR DPROMPT '$' PROMPT JSR CLEARDSP TRACE5 LDX #1 IF PC = A4 THEN ENTER STEP TRACE6 LDA PCL,X CMP BRKADDR,X BEQ TRACEL JMP TRACE7 TRACEL DEX BPL TRACE6 JSR SETBREAK CLEAR OLD BREAKPOINT TRACES STA KBDSTRB STZ TFLG CLEAR TRACE FLAG STZ DSPTOP RESET DISPLAY TO TOP JSR STPRMPT PROMPT BACK TO OLD '#' DEC YSAV LDY YSAV LDA #$D3 PUT 'S' INTO INPUT BUFFER STA IN,Y JMP SSTEPT RE-ENTER STEP MODE NBRNCH JSR SAVE ALL OTHER OPCODES BRA UPDPC BRANCH JSR SAVE BRANCH WITH COND. MET CLC LDY #$01 JSR YPEEK JSR PCADJAP UPDPC SEC PCINC JSR PCADJLP NEWPC LDA TFLG BNE TRACEBY BYPASSES NEXTITM NXTPC JSR CROUT JMP REGDSP TRACEBY JMP TRACEPC XJMPATX INX BNE XJMPAT XJSR STA JFLG OK FOR F(J) INC DSPTOP CLC JSR PCADJL SET Y,A = RTS ADDR PHA LDX SPNT TYA STA STACK,X DEX PLA STA STACK,X DEX STX SPNT LDY #$02 XJMP CLC XJMPAT JSR YPEEK PHA DEY JSR YPEEK STA PCL PLA STA PCH BCC NEWPC DEX BNE XJMP LDA XREG CLC JSR PCADJAP LDY #1 BRA XJMP TRACE7 LDA PB1 BACK TO STEP MODE IF BMI TRACES CLOSED APPLE PRESSED JSR INSDST TSTEP LDA ERRFLG IF BAD OPCODE THEN BRK BNE XBRK STZ JFLG DISALLOW F(J) IF NO JSR JSR PEEK GET OPCODE LDY LENGTH CPY #2 CHECK ALL 3-BYTE INST BEQ TSTEP3 JMP TSTEP4 TSTEP3 CMP #$20 BEQ XJSR CMP #$7C BEQ XJMPATX CMP #$4C BEQ XJMP CMP #$6C BEQ XJMPAT * * #1015 HANDLE $00FF AND $01FF INDEXED SPECIAL BECAUSE OF APPLESOFT ROM * PHA SAVE OPCODE. JSR YPEEK GET OPERAND ADDRESS HIGH CMP #$02 BCS TSTEP3X TAKEN IF PC >= $200 TAX SAVE OPERAND ADDRESS HIGH PLA OPCODE PHA CHK FOR INDEXED OPERAND ADDR PAGE 0 OR 1 CMP #$99 STA NNNN,Y BEQ INDX CMP #$9D STA NNNN,X BEQ INDX CMP #$B9 LDA NNNN,Y BEQ INDX CMP #$BD LDA NNNN,X BEQ INDX TXA OPERAND ADDRESS HIGH BEQ TSTEP3RS TAKEN FOR ABSOLUTE $00NN JSR YPEEK1 #1016 NOW ABSOLUTE $01NN. GET OPERAND LOW CMP #$FE CHECK $1FE-1FF AND HANDLE ABSOLUTE BCS TSTEP3RS REAL STACK FOR APPLESOFT ROM LINE# NIDXS PLA ADJ STACK. NOW < $01FE ABSOLUTE LDA STACKLOC+2 SUBSTITUTE PSUEDO-STACK BRA XQSTK INDX JSR YPEEK1 NOW 00NN OR 01NN INDEXED. GET OPERAND LOW CMP #$FB = 00FN OR 01FN INDEXED ? BCS IDXFN TXA BNE NIDXS HANDLE $01NN INDEXED (NOT FN) PSEUDO STACK BEQ TSTEP3RS FOR $00NN INDEXED (NOT FN) IDXFN TXA OPERAND ADDR HIGH BNE TSTEP3RS $01FN INDEXED WILL BE IN $200 KEYIN BUFFER PLA ADJ STACK. HANDLE $00FN INDEXED LDX STACKLOC+2 SUBSTITUTE PSEUDO-STACK -1 DEX FOR 00FN INDEXED INTO STACK TXA BRA XQSTK XQST1 JSR YPEEK XQSTK STA XQTS+3,Y DEY BPL XQST1 XQRST JSR RESTORE #1018 JMP XQTS+3 EXEC IN ANALYST R/W MODE XBRK STZ DSPTOP STZ TFLG JSR CLEARDSP JSR INSTDSP JSR CROUT JSR RGDSP1 JSR BELL JMP ZSWAPE EXIT VIA NEXTITM TSTEP3RS JSR YPEEK RESTORE OPERAND ADDR HI BYTE TSTEP3X CMP #$C0 $C002-C005, $C008-C009 BNE TSTEP5N AUX R/W SWITCHES HANDLE SPECIAL JSR YPEEK1 GET OPERAND ADDR LOW CMP #$02 BCC TSTEP5C CMP #$04 BCC TSTEPRD CMP #$06 BCC TSTEPWR CMP #$08 TSTEP5C BCC TSTEP5 CMP #$0A BCS TSTEP5 STA TEMP3 ROR A ROR A EOR RDAUXZP BPL STOUT2 NO CHANGE IN ZP STATE. JSR ZSWAP RESTORE PROGRAM ZP. LDA TEMP3 NEW ZP STATE LSR A ODD/EVEN 9/8 BCS ODDNEW LDA #9 NEW = 8 DFB $2C ODDNEW LDA #8 NEW = 9 STA TEMP2 OLD STATE LDX #0 COPY XQTS ACROSS STKLOOP LDY TEMP2 STA $C000,Y OLD ZP LDA $0100,X LDY TEMP3 STA $C000,Y NEW ZP STA $0100,X INX BEQ STKOUT CPX #>IN+12 BNE STKLOOP TSX COPY ANALYST STACK ACROSS BRA STKLOOP TSTEPRD STA XQTS+44 SET PROGRAM READ STATE. BRA STOUT2 TSTEPWR STA XQTS+47 SET PROGRAM WRITE STATE. BRA STOUT2 STKOUT JSR ZSWAP PUT ANALYST ZP BACK. STOUT2 PLA PULL OPC TO ADJ STACK UPDPCGO JMP UPDPC TSTEP4 CPY #1 BNE LEN0 TAKEN FOR 1 BYTE INSTRUCTION PHA SAVE OPCODE OF 2 BYTE INSTRUCTION CMP #$B1 #1018 TEST IF (ZP),Y IS IN STACK PAGE BEQ TSTEP4I IF LDA (ZP),Y CMP #$91 STA (ZP),Y ? BNE TSTEP5N TSTEP4I JSR YPEEK GET ZP OPERAND FOR LDA/STA (ZP),Y TAX NOW X = OFFSET IN PAGE 0 TO INDEXED ADDR LDA $01,X GET ADDR HIGH WHERE OPERAND POINTS CMP #$01 IS (ZP) POINTING TO STACK PAGE? TSTEP5N BNE TSTEP5 LDA STACKLOC+2 SUBSTITUTE PSEUDO-STACK STA XQTS+5 CHANGE LDA/STA (ZP),Y TO LDA/STA $01NN,Y LDA $00,X PCL STA XQTS+4 PLA OPCODE ORA #$08 CHANGE TO ABS INDEXED,Y STA XQTS+3 NEW OPCODE JMP XQRST EXECUTE (ZP),Y AS $01NN,Y ABSOLUTE TSTEP5 LDA #$EA STA XQTS+4 STA XQTS+5 PLA OPCODE CMP #$80 BNE NBRA ORA #$10 NBRA AND #$1F EOR #$14 CMP #$04 = BRANCH OFFSET BEQ XQ2 TAKEN IF BRANCH OPCODE XQ1 JSR YPEEK Y = LENGTH XQ2 STA XQTS+3,Y XQT BCS BRNCH (B0 04) DEY NOP BPL XQ1 JMP NBRNCH (CCLR) JSR RESTORE BRNCH JMP BRANCH (CSET) JMP XQTS XTSX LDX SPNT STX XREG XTXS LDX XREG STX SREF UPDSPNT STX SPNT UPDATE SPNT BRA UPDPCGO LEN0 CMP #$60 BEQ XRTS CMP #$BA BEQ XTSX CMP #$9A BEQ XTXS CMP #$40 BEQ XRTIGO HANDLE RTI INSTRUCTION #1019 CMP #$00 BNE PHCHECK JMP XBRK XRTIGO JMP XRTI PHCHECK PHA SAVE OPCODE CMP #$5A BCC TSTEP6 TAX AND #$1F CMP #$1A BEQ STKOPC PHX,PLX,PHY,PLY TXA TSTEP6 AND #$9F CMP #$08 PHA,PLA,PHP,PLP BNE TSTEP5 STKOPC LDX SPNT STACK OPCODES PLA OPCODE TAY AND #$10 BEQ APCODE TYA ASL A BCS OPCX ASL A ASL A BCS XPLY LDA YREG XPHY BRA PUSH XPLY JSR PULL STA YREG UPDSTACK BRA UPDSPNT OPCX ASL A ASL A BCS XPLX LDA XREG XPHX BRA PUSH XPLX JSR PULL STA XREG BRA UPDSTACK APCODE TYA ASL A ASL A BMI PULLAP BCC XPHP LDA ACC XPHA BRA PUSH XPHP LDA STATUS PUSH STA STACK,X DEX BNE UPDSTACK PULLAP BCC XPLP JSR PULL XPLA ACCLOC STA ACC BRA UPDSTACK XPLP JSR PULL STA STATUS BRA UPDSTACK XRTS LDX SPNT INX STACKLOC LDA STACK,X STA PCL INX LDA STACK,X STA PCH STX SPNT DEC DSPTOP JMP PCINC XRTI LDX SPNT HANDLE RTI #1019 INX LDA STACK,X STA STATUS INX LDA STACK,X STA PCL INX LDA STACK,X STA PCH STX SPNT JMP NEWPC PULL INX LDY STATUS PULL FROM STACK AFFECTS PHY N & Z FLAGS PLP LDA STACK,X PHP UPDATE N & Z PLY STY STATUS RTS YPOKEPC PHA EXECUTE STA (PCL),Y LDA PCL STA A3L LDA PCH STA A3H PLA JMP YPOKE * * XQTS IMAGE AT $122-159. INSTRUCTIONS WITH '@' ARE * CHANGEABLE IN XQTS AREA TO SET MAIN/AUX R/W STATE. * INITBL JSR XQTS+36 WARMV. REAL-TIME REENTRY JMP REENTER BY JSR $102. JSR XQTS+43 XQTS NOP NOP NOP JMP XQTS+15 JSR XQTS+36 JMP BRANCH JSR XQTS+36 XQTS+15 JMP NBRNCH JSR XQTS+43 YPOKE STA (A3L),Y JMP XQTS+36 LDY #0 PEEK JSR XQTS+43 YPEEK LDA (PCL),Y STA MAINRD @ XQTS+36. SET ANALYST STA MAINWR @ STATE RTS STA MAINRD @ XQTS+43. SET PROGRAM STA MAINWR @ STATE RTS * YPEEK1 DEY GET YPEEK-1 #1017 JSR YPEEK INY RTS SETBREAK LDX #1 SET BREAKPOINT TO A4 LDA BRKADDR+1 IF GIVEN, ELSE $FFFF. BEQ SETBRK2 BREAKPOINT GIVEN LDA #$FF SETBRK1 STA BRKADDR,X CLEAR OLD BREAKPOINT DEX BPL SETBRK1 RTS SETBRK2 LDA A4L,X SET BREAKPOINT STA BRKADDR,X DEX BPL SETBRK2 RTS LOAD LDA XQLOC1+1 F(H) LDY XQLOC1+2 SETUP A3 = XQT+1 FOR HSF BRA A3SET BUFFER (XQT=BYTE COUNT) SETRG1 JSR A1PC JSR SAVEPC SETRG2 LDA ACCLOC+1 SETUP REGS FOR F(:) LDY ACCLOC+2 A3SET STA A3L STY A3H RTS SETREG TXA F(I) SET OR DISPLAY REGS. BNE SETRG1 TAKEN IF PC GIVEN. LDY YSAV LDA IN,Y CMP #$8D BNE SETRG2 LDA PCREG I DISPLAYS REGS. STA PCL LDA PCREG+1 STA PCH REGDSP JSR RGDSP1 JMP INSTDSP WILL RTS TO NEXTITM RGDSP1 LDX #0 RDSP1 LDA RTBL,X JSR COUT LDA #$BD JSR COUT LDA ACC,X JSR PRBYTE JSR OUTSP INX CPX #3 BCC RDSP1 LDX #7 PRFLG LDA CHAR3,X PRINT 'NV-BDIZC' JSR COUT DEX BPL PRFLG JSR CROUT LDA #$C1 PRINT ACC IN BINARY JSR COUT JSR OUTEQ LDA ACC JSR BNDSP JSR PRBLNK3 LDA #$D0 PRINT STATUS IN BINARY JSR COUT JSR OUTEQ LDA STATUS JSR BNDSP JSR CROUT LDA #$D3 JSR COUT JSR OUTEQ LDA SPNT JSR PRBYTE LDA #$BA JSR COUT LDA #$D8 JSR COUT JSR COUT LDY #8 LDX SPNT PRNTSTK JSR OUTSP PRINT STACK BYTES FROM CPX SREF SPNT TO SREF UP TO 6 BEQ SAVEPC MAX. INX LDA STACK,X JSR PRBYTE DEY BNE PRNTSTK SAVEPC LDA PCL STA PCREG LDA PCH STA PCREG+1 RTS BNDSP LDX #$08 INDEX FOR 8 BITS NEXTBIT ASL A PHA BCS BIT1 LDA #$B0 '0' DFB $2C SKIP NEXT INSTRUCTION BIT1 LDA #$B1 '1' JSR COUT PLA DEX BNE NEXTBIT RTS BELL LDY #$38 DURATION BELL2 LDA #$2B FREQUENCY JSR WAIT LDA SPKR DEY BNE BELL2 RTS COUTZ JMP (CSWL) VIDOUT BIT #$60 BEQ CTRLCHAR TAY CMP #$60 BCS VID1 CMP #$40 BCC VID1 AND #$BF VID1 LDY CH BIT RD80VID BPL VID3 PHA TYA LSR A BCS VID2 STA HISCR VID2 TAY PLA VID3 STA (BASL),Y STA LOWSCR LDY CH INY CPY WNDWDTH BCS CR STY CH VIDRTS RTS BACKSPC DEC CH BPL VIDRTS LDY WNDWDTH DEY STY CH LDA CV DEC A CMP #0 BMI VIDRTS VTABVGO JMP VTABV CTRLCHAR ORA #$80 CMP #$88 BEQ BACKSPC CMP #$8D BNE VIDRTS CR LDA #$00 STA CH INC CV LDA CV CMP #24 BCC VTABVGO DEC CV LDX #0 SCROLL TXA JSR VTABZ BRA SCRL5 SCRL1 LDY BASH STY BAS2H LDY BASL STY BAS2L TXA JSR VTABZ PHX LDX WNDWDTH LDY #0 SCRL2 BIT RD80VID BPL SCRL3 STA HISCR LDA (BASL),Y STA (BAS2L),Y DEX BEQ SCRL4 STA LOWSCR SCRL3 LDA (BASL),Y STA (BAS2L),Y INY DEX BNE SCRL2 SCRL4 STA LOWSCR PLX SCRL5 INX CPX #24 BCC SCRL1 LDA #$00 JSR CLEOLZ JMP VTAB HOME LDA #0 STA CH STA CV BIT RDTEXT BMI CLS1 RTS DO NOT CLEAR TEXT PAGE IF IN GRAPHICS MODE CLS1 PHA JSR VTABZ LDA #0 JSR CLEOLZ PLA INC A CMP #24 BCC CLS1 VTAB LDA CV VTABV STA CV VTABZ PHA LSR A AND #$03 ORA #$04 STA BASH PLA AND #$18 BCC BSCLC2 ADC #$7F BSCLC2 STA BASL ASL A ASL A ORA BASL STA BASL RTS CLREOL LDA CH CLEOLZ BIT RD80VID BPL CLEOL4 PHA CLREOL 80 COL SEC SBC WNDWDTH TAX PLA LSR A TAY PHP LDA #$A0 PLP BCS CLEOL8B CLEOL8A STA HISCR STA (BASL),Y INX BEQ CLEOL8C CLEOL8B STA LOWSCR STA (BASL),Y INY INX BNE CLEOL8A CLEOL8C STA LOWSCR RTS CLEOL4 TAY SEC SBC WNDWDTH TAX LDA #$A0 CLEOL4A STA (BASL),Y INY INX BNE CLEOL4A RTS CLEARDSP LDX #6 CLEAR DISPLAY WINDOW CLRDSP1 LDA DSPTOP BPL CLRDSP2 HOLD TOP OF DISPLAY LDA #0 0 <= TOP <= 18. CLRDSP2 CMP #18 BCC CLRDSP3 LDA #18 CLRDSP3 STA DSPTOP STA CV CLEAR 6 LINE DISPLAY DEC CV FROM DSPTOP DOWN AND TXA SET CV SO INSTDSP WILL BEQ RTS4A PRINT AT DSPTOP UPON CLRDSP4 JSR CROUT EXIT. PHX BIT RDTEXT IF IN TEXT MODE, DO NORMAL CLREOL BMI CLRDSPT BECAUSE WRITES TO TEXT SCREEN LDX #34 JSR PRBLNK BRA CLRDSPG CLRDSPT JSR CLREOL CLRDSPG PLX DEX BNE CLRDSP4 BEQ CLRDSP1 RTS4A RTS FWAIT LDA #$FF WAIT SEC WAIT2 PHA WAIT3 SBC #$01 BNE WAIT3 PLA SBC #$01 BNE WAIT2 RTS NXTA4 INC A4L INCREMENT A4 BNE NXTA1 INC A4H NXTA1 LDA A1L CMP A2L LDA A1H SBC A2H INC A1L BNE RTS4B INC A1H RTS4B RTS CARRY SET IF A1 >= A2 CTRLC LDY KBD CHECK FOR CTRL-C BPL CTLCRTS STY KBDSTRB CPY #$93 CTRL-S = PAUSE BNE CTLC KYWAIT LDY PB0 F(S) ENTRY POINT BMI KYWT2 LDY KBD BPL KYWAIT STY KBDSTRB DFB $2C KYWT2 LDY #0 0 = OPEN APPLE PRESSED CTLC CPY #$83 CTLCRTS RTS Z SET FOR CTRL-C. RDKEY STY YSAV1 LDY RDSCR PHP LDY RDPAGE2 PHP BPL KEY1 AVOID FLICKER IF HGR2 STA LOWSCR KEY1 PHX LDA CH BIT RD80VID BPL KEY2 LSR A BCS KEY2 STA HISCR KEY2 TAY LDA (BASL),Y PHA EOR #$80 BIT #$20 BNE KEY3 EOR #$40 KEY3 STA (BASL),Y KEY4 LDX KBD BPL KEY4 STA KBDSTRB PLA STA (BASL),Y STA LOWSCR TXA JMP ENDHOOK NOTCR LDA IN,X JSR COUT CMP #$88 BEQ BCKSPC CPX #34 BEEP ON LAST 4 CHAR. BCC NOTCR1 JSR BELL NOTCR1 INX CPX #38 38 CHARACTERS ALLOWED BCC NXTCHAR LDA #$DC JSR COUT GETLNZ JSR CROUT LDA PROMPT JSR COUT LDX #$01 BCKSPC TXA BEQ GETLNZ DEX NXTCHAR JSR RDKEY CMP #$95 BEQ NXTCHAR IGNORE '->' CMP #$FF BNE NOTDEL LDA #$88 DELETE KEY = BACKSPACE NOTDEL CMP #$88 BNE CAPTST PHA JSR COUT BACKSPACE JSR OUTSP DELETE CHARACTER PLA BACKSPACE CAPTST CMP #$E0 BCC ADDINP AND #$DF ADDINP STA IN,X CMP #$8D BNE NOTCR CROUT LDA #$8D BNE COUTGO OUTSP LDA #$A0 BNE COUTGO PRA1 JSR CROUT LDY A1H LDX A1L PRYX2 JSR PRNTYX LDY #$00 LDA #$AD COUTGO JSR COUT PRA1RTS RTS ASC SEC F(") XAM ROR A CARRY INTO BIT 7 STA A3H BRA XAM1 MOD8CHK LDA A1L AND #$07 BNE DATAOUT XAM1 JSR CTRLC F(.) A1.A2 HEX OR ASC BEQ PRA1RTS JSR PRA1 DATAOUT JSR OUTSP LDA A1H SEE IF ZERO PAGE BEQ XAMZ DEC A SEE IF $01NN BNE XAM2 LDA A1L GET $01NN FROM STACK,NN TAX LDA STACK,X BRA XAM3 XAMZ LDA A1L SEC SBC #PCL BCC XAM2 TAKEN IF A1L < PCL TAX ELSE GET FROM ZBUF LDA ZBUF,X BRA XAM3 XAM2 JSR A1PCX JSR PEEK XAM3 LDX A3H BPL XAM4 ORA #$80 XAM IN ASC CMP #$A0 BCS PRASC TAKEN IF NORM. OR LCASE LDA #$A0 SPACE FOR CTRL OR INV PRASC JSR COUT BRA XAM5 XAM4 JSR PRBYTE XAM IN HEX XAM5 JSR NXTA1 BCC MOD8CHK CARRY CLEAR IF A1 ZFLG:AA STA ZFLG RST2 JSR INITXQTS STZ TFLG STZ JFLG PRHOME JSR HOME JSR PRTITLE MONZ STZ ERRFLG STZ ASFLAG #1022 DEC BRKADDR+1 INSURE BRKPOINT CLEARED JSR CHKVID MATCH HOOKS W/DISPLAY MODE JSR STPRMPT JSR GETLNZ PARSE JSR ZMODE STZ DSPTOP DISPLAY AT TOP NXTITM JSR GETNUM HANDLE HEX DIGS TO 1ST STY YSAV NON-HEX CHAR+1 (Y=INDX) LDY #SUBTBL-CHRTBL CHRSRCH DEY ACC = F(ACC) BMI SYNERR CMP CHRTBL,Y BNE CHRSRCH PHY JSR TOSUB PLY BEQ MONZ 0 = OFFSET FOR F(CR) NEXTITM LDY YSAV BRA NXTITM SYNERR JSR BELL BRA MONZ DIG LDX #$03 HEX DIGIT NOW IN ACC LO ASL A NIBBLE. KEYS 0-9=00-09 ASL A KEYS A-F=FA-FF. MOVE ASL A LO NIBBLE TO HI NIBBLE ASL A NXTBIT ASL A 4 BIT HEX DIG. INTO A2L ROL A2L A2L TO A2H ROL A2H DEX BPL NXTBIT NXTBAS LDA MODE BNE NXTBS2 IF MODE=0 COPY LDA A2H,X A2 TO A1 & A3 STA A1H,X STA A3H,X NXTBS2 INX BEQ NXTBAS BNE NXTCHR GETNUM LDX #0 STX A2L STX A2H NXTCHR LDA IN,Y F(ACC) = ACC EOR $B0 INY ADC $88 (CARRY SET) EOR #$B0 KEYS 0-9=$00-09 CMP #$0A BCC DIG TAKEN IF KEYS 0-9 ADC #$88 KEYS A-F=$FA-FF CMP #$FA BCS DIG TAKEN IF KEYS A-F RTS TOSUB TYA # OF FUNCTION (START=0) ASL A MULT BY 2 TAY LDA SUBTBL+1,Y PHA LDA SUBTBL,Y PHA LDA MODE OLD MODE FOR F(CR)&F( ) ZMODE LDY #$00 STY MODE RTS RTS TO SUBROUTINE EXECJSR LDA JFLG F(J) BNE GOJSR 'J' WITH NO JSR? ERRJ JMP BELL RTS TO NEXTITM VIA BELL. GOJSR LDY YSAV GET # OF PARM BYTES JSR GETNUM DEY STY YSAV LDA A2H BNE ERRJ LDA A2L CMP #10 BCS ERRJ ONLY 9 PARM BYTES MAX TAY SAVE BYTE COUNT GOPC LDX #17 XQINIT2 LDA INITBL2,X FILL DUMMY BLOCK STA XQT,X DEX BPL XQINIT2 LDA PCL MOVE JSR ADDR TO XQT XQLOC1 STA XQT+1 LDA PCH STA XQT+2 LDX SPNT SET PC = PARM LIST - 1 INX LDA STACK,X STA PCL INX LDA STACK,X STA PCH STX SPNT TYA GET PARM BYTES TAX BEQ MVPRM1 NO PARM BYTES TO MOVE MOVPARM JSR YPEEK MOVE PARM LIST TO DUMMY STA XQT+2,Y DEY BNE MOVPARM MVPRM1 INX TXA ADJ PC TO POINT TO INST CLC FOLLOWING PARM LIST JSR PCADJAP JMP XQJ EXECUTE JSR IMMED. MODE INITBL2 JSR $0000 DUMMY BLOCK FOR F(J) NOP 9 NOP'S FOR PARM BYTES NOP NOP NOP NOP NOP NOP NOP NOP JSR XQTS+36 RESTORE ANALYST R/W JMP JRTS JRTS JSR SAVE JSR CHKVID LDA JFLG BEQ JRTS3 DURING 'G0' W/O BREAK STZ JFLG LDA TFLG BEQ JRTS2 DURING 'STEP' JMP TRACE5 DURING TRACE IMMEDIATE JRTS2 DEC DSPTOP UPDATE REGDSP AFTER JSR. JRTSX JSR CLEARDSP 'SKIP' ENTERS HERE JMP NXTPC JRTS3 RTS RTS TO NEXTITM. FIND LDA #$FF F(CTRL-F) A4 80 SETVID LDY YSAV F(@) LDA IN,Y INC YSAV CMP #$B8 '8' BEQ SET80 CMP #$B4 '4' BEQ SET40 CMP #$B1 '1' BNE CKGR2 LDY #$20 HGR BRA SETGR CKGR2 CMP #$B2 '2' BNE ATSIGN STA ENAPAGE2 ENABLE GRAPHICS PAGE 2 LDY #$40 HGR2 SETGR JSR INITGR SET COUT TO GRAPHICS JMP VTAB CHK80 BCC SET40 80 -> 40 RTS7 RTS TEXTNG LDA RDTEXT DO TEXT IF NOT IN GRAPHICS MODE BMI TEXT LDY GBASE BRA SETGR ATSIGN DEC YSAV @ ALONE TEXT STA LOWSCR #1007 SO TEXT RECOVERS FROM HGR2 STA TXTSET STA INHPAGE2 #1009 SO TEXT RECOVERS FROM @2 IN AUX LDA OUTVECT STA CSWL LDA OUTVECT+1 STA CSWH LDA RD80VID SET 40 OR 80 COL BPL SET40 TEXT BASED ON RD80VID SET80 LDA #$FF STA FLG8 LDA #80 STA WNDWDTH BIT RD80VID BMI SET8D STA SET80VID LDA #$00 SET8A PHA JSR VTABZ LDY #$00 SET8B LDA (BASL),Y TAX PHY TYA LSR A TAY BCS SET8C STA HISCR SET8C TXA STA (BASL),Y PLY STA LOWSCR INY CPY #$28 BCC SET8B TYA JSR CLEOLZ PLA INC A CMP #$18 BCC SET8A SET8D BRA SETDONE SET40 STZ FLG8 BIT RD80VID BPL SET4D STA CLR80VID LDA #$00 SET4A PHA JSR VTABZ LDY #$27 SET4B TYA LSR A PHY TAY BCS SET4C STA HISCR SET4C LDA (BASL),Y PLY STA LOWSCR STA (BASL),Y DEY BPL SET4B PLA INC A CMP #$18 BCC SET4A SET4D LDA #40 STA WNDWDTH SETDONE JMP VTAB HELP LDY #0 F(?) LIST LAST 16 PC HLP2 LDA PCBUF,Y ADDRESSES EXECUTED INY DURING TRACE. LDX PCBUF,Y INY JSR PRNTAX CPY PCPNT BNE HLP3 LDA #$BC JSR COUT HLP3 JSR CROUT CPY #32 BCC HLP2 RTS PRTITLE LDX #$00 F(V). PRINT TITLE PRTITL1 LDA TITLE,X BEQ PRADDR JSR COUT INX BRA PRTITL1 PRADDR LDA STARTLOC+1 PRINT ORIGIN ADDRESS JSR PRBYTE LDA #0 JSR PRBYTE JMP CROUT CHN A128XGB.1024 \ No newline at end of file diff --git a/A128XGB.1023.txt b/A128XGB.1023.txt new file mode 100644 index 0000000..18b7492 --- /dev/null +++ b/A128XGB.1023.txt @@ -0,0 +1 @@ +* ANALYST 128XG PART B * * LAST EDIT: 01/19/19 * * CALL HERE TO INIT GRAPHICS DRIVER * WITH Y = $20 FOR HGR OR $40 FOR HGR2 * INITGR LDA HCOUTLOC+1 STA CSWH LDA HCOUTLOC STA CSWL STA HIRES STA MIXCLR STA HISCR STZ CH HOME CURSOR BUT DONT CLS STZ CV TYA CMP #$40 BEQ H6026 STA LOWSCR H6026 STA GBASE STA TXTCLR HCOUT PHA CMP #$88 BACKSPACE BNE CHKL DEC CH BPL CHKL LDA #$8D DO CR CHKL CMP #$8C CTRL-L BNE HCOUTZ HCLS LDY #$00 CLEAR SCREEN STY BAS2L LDA GBASE STA BAS2H H6050 TYA H6058 STA (BAS2L),Y INY BNE H6058 INC BAS2H LDA BAS2H SEC SBC GBASE CMP #$20 BNE H6050 STY CH Y = 0 STY CV CLC BCC H60DC HCOUTZ CMP #$8D BEQ HCROUT CMP #$A0 BCC H60EE IGNORE CTRL CHARS LDA CV LSR A AND #$03 ORA GBASE STA BAS2H LDA CV ROR A PHP ASL A AND #$18 STA BAS2L ASL A ASL A ORA BAS2L ASL A PLP ROR A CLC ADC CH STA BAS2L PLA AND #$7F MASK SEC SBC #$20 CONVERT FOR FONT TABLE PHA LDA FONTLOC+1 LSR A LSR A LSR A STA BASH PLA PHA ROL A ROL BASH ROL A ROL BASH ROL A ROL BASH AND #$F8 STA BASL LDY #$00 H60AF LDA (BASL),Y PHY LDY #$00 PHA TYA STA (BAS2L),Y PLA EOR (BAS2L),Y STA (BAS2L),Y PLY LDA BAS2H CLC ADC #$04 STA BAS2H INY CPY #$08 BNE H60AF INC CH LDA CH CMP WNDWDTH H60DC BCC H60EE HCROUT LDA #0 STA CH INC CV LDA CV CMP #24 IS IT BELOW BOTTOM OF SCREEN? BCC H60EE BRANCH IF NOT, OTHERWISE CLEAR SCREEN JMP HCLS AND MOVE TO TOP INSTEAD OF SCROLLING H60EE PLA RTS * * #1020 AUXLOAD MOVED HERE AND MADE RELOCATEABLE * AUXV STZ MA1 F(CTRL-X) MOVE ANALYST TO AUX MEMORY STZ MA4 PAGE ALIGNED LOW = 0 LDA STARTLOC+1 PAGE# OF START STA MA1+1 STA MA4+1 STZ MA2 PAGE ALIGNED LOW = 0 LDA ENDLOC+1 STA MA2+1 LDA #$03 STA INITBL+43 LDA #$05 STA INITBL+46 JSR INITXQTS LDA #$60 STA AUXV DISABLE FUTURE MOVES TO AUXMEM LDA #$D8 'X' STA BANKORG SEC JSR AUXMOVE A1.A2 TO A4 LDX #5 AUXLD2 LDA INITBL4,X STA XQT,X DEX BPL AUXLD2 STZ START DESTROY OLD ANALYST ID STA INHPAGE2 #1008 SO CTRL-X WORKS JMP XQT LST ON INITBL4 JSR XQTS+36 JMP TXTMON SKP 1 *** PROGRAM DATA AREA *** SKP 1 * * CHAR1 MARKS START OF PROGRAM DATA AREA #1020 * CHAR1 DFB 172,169,172,163,168,164 CHAR2 DFB 217,0,216,164,164,0 LST ON HEREL EQU >* DS $100-HEREL * * ASCII.SET FROM HRCG TOOLKIT * MUST BE DIVISIBLE BY $800 * FONTADR DB $00,$00,$00,$00 * LST OFF DB $00,$00,$00,$00 DB $08,$08,$08,$08 DB $08,$00,$08,$00 DB $14,$14,$14,$00 DB $00,$00,$00,$00 DB $28,$94,$7E,$14 DB $BF,$8A,$0A,$00 DB $08,$3C,$0A,$1C DB $28,$1E,$08,$00 DB $06,$26,$10,$08 DB $04,$32,$30,$00 DB $04,$0A,$0A,$04 DB $2A,$12,$2C,$00 DB $08,$08,$08,$00 DB $00,$00,$00,$00 DB $08,$04,$02,$02 DB $02,$04,$08,$00 DB $08,$10,$20,$20 DB $20,$10,$08,$00 DB $08,$2A,$1C,$08 DB $1C,$2A,$08,$00 DB $00,$08,$08,$3E DB $08,$08,$00,$00 DB $00,$00,$00,$00 DB $00,$8C,$88,$84 DB $00,$00,$00,$3E DB $00,$00,$00,$00 DB $00,$00,$00,$00 DB $00,$00,$8C,$00 DB $00,$20,$10,$08 DB $04,$02,$00,$00 DB $8C,$92,$22,$22 DB $22,$92,$8C,$00 DB $08,$0C,$08,$08 DB $08,$08,$1C,$00 DB $1C,$22,$20,$10 DB $84,$82,$3E,$00 DB $3E,$90,$10,$18 DB $20,$22,$1C,$00 DB $10,$18,$14,$12 DB $3E,$10,$10,$00 DB $3E,$02,$1E,$20 DB $20,$22,$1C,$00 DB $18,$04,$82,$1E DB $22,$22,$1C,$00 DB $3E,$90,$10,$88 DB $08,$84,$04,$00 DB $1C,$22,$22,$1C DB $22,$22,$1C,$00 DB $1C,$22,$22,$3C DB $90,$10,$0C,$00 DB $00,$00,$8C,$00 DB $00,$8C,$00,$00 DB $00,$00,$8C,$00 DB $00,$8C,$88,$84 DB $10,$08,$04,$02 DB $04,$08,$10,$00 DB $00,$00,$3E,$00 DB $3E,$00,$00,$00 DB $04,$08,$10,$20 DB $10,$08,$04,$00 DB $1C,$22,$90,$88 DB $08,$00,$08,$00 DB $1C,$22,$2A,$3A DB $1A,$02,$3C,$00 DB $08,$8C,$14,$92 DB $3E,$22,$22,$00 DB $1E,$22,$22,$1E DB $22,$22,$1E,$00 DB $1C,$22,$02,$02 DB $02,$22,$1C,$00 DB $1E,$22,$22,$22 DB $22,$22,$1E,$00 DB $3E,$02,$02,$1E DB $02,$02,$3E,$00 DB $3E,$02,$02,$1E DB $02,$02,$02,$00 DB $3C,$02,$02,$02 DB $32,$22,$3C,$00 DB $22,$22,$22,$3E DB $22,$22,$22,$00 DB $1C,$08,$08,$08 DB $08,$08,$1C,$00 DB $20,$20,$20,$20 DB $20,$22,$1C,$00 DB $22,$12,$0A,$06 DB $0A,$12,$22,$00 DB $02,$02,$02,$02 DB $02,$02,$3E,$00 DB $22,$36,$2A,$2A DB $22,$22,$22,$00 DB $22,$22,$26,$2A DB $32,$22,$22,$00 DB $1C,$22,$22,$22 DB $22,$22,$1C,$00 DB $1E,$22,$22,$1E DB $02,$02,$02,$00 DB $1C,$22,$22,$22 DB $2A,$12,$2C,$00 DB $1E,$22,$22,$1E DB $0A,$12,$22,$00 DB $1C,$22,$02,$1C DB $20,$22,$1C,$00 DB $3E,$08,$08,$08 DB $08,$08,$08,$00 DB $22,$22,$22,$22 DB $22,$22,$1C,$00 DB $22,$22,$22,$92 DB $14,$8C,$08,$00 DB $22,$22,$22,$2A DB $2A,$36,$22,$00 DB $22,$92,$14,$08 DB $14,$92,$22,$00 DB $22,$92,$14,$08 DB $08,$08,$08,$00 DB $3E,$90,$10,$08 DB $04,$82,$3E,$00 DB $3E,$06,$06,$06 DB $06,$06,$3E,$00 DB $00,$02,$04,$08 DB $10,$20,$00,$00 DB $3E,$30,$30,$30 DB $30,$30,$3E,$00 DB $00,$00,$08,$14 DB $22,$00,$00,$00 DB $00,$00,$00,$00 DB $00,$00,$00,$7F * * #1012 DELETED LAST $100 OF FONT TABLE * BECAUSE ASCII CHARS $60-7F NOT USED * MNEML DFB 28,138 DFB 28,35,93,139,27,161,157,138 DFB 29,35,157,139,29,161,28,41 DFB 25,174,105,168,25,35,36,83 DFB 27,35,36,83,25,161,173,26 DFB 165,91,165,172,139,138,174,174 DFB 168,173,41,138,124,139,21,156 DFB 109,156,165,105,41,83,132,19 DFB 52,17,165,105,35,160 MNEMR DFB 216,98 DFB 90,72,38,98,148,136,84,68 DFB 200,84,104,68,232,148,196,180 DFB 8,132,116,180,40,110,116,244 DFB 204,74,114,242,164,138,6,170 DFB 118,162,116,198,116,116,68,104 DFB 178,50,178,114,34,114,26,26 DFB 38,38,114,114,136,200,196,202 DFB 38,72,68,68,162,200 FMT1 DFB 240,34,0,51,93,130,0,147 DFB 243,34,0,51,93,136,0,153 DFB 240,47,0,51,93,143,0,159 DFB 240,34,0,59,93,136,0,148 DFB 253,34,0,51,93,200,0,147 DFB 17,34,0,51,93,200,0,169 DFB 241,34,0,51,93,143,0,159 DFB 241,34,0,51,93,143,0,159 DFB 38,49,135,154 REPL65C DFB 17,49,81,113,145,177 DFB 209,241,194,226,52,164,172,196 DFB 228,92,92,92,92,124,60,52 DFB 124,160,160,160,160,192,192 DFB 224,224 RTBL ASC "AXY" TITLE DFB $8D ASC "ANALYST 128XG" DFB $8D ASC "BUILD = 1023" DFB $8D ASC "ORG = " BANKORG ASC "$" DFB $00 NOT65C DFB $8D ASC "65C02 REQ'D" DFB $8D DOSTR ASC "3F5<3D0G" DFB $8D FMT2 DFB 0,33,129,130,90,73,89,77 DFB 145,146,134,74,133,157 CHAR3 ASC "CZIDB-VN" OPC65C DFB 18,50,82,114 DFB 146,178,210,242,58,26,137,28 DFB 20,122,90,156,100,158,116,124 DFB 60,52 DFB 76,164,172,180,188,196,204,228 DFB 236 CHRTBL DFB 198,152,249,177,241,3 DFB 236,6,149,5 DFB 0,147,2,167,153 DFB 155,239,233,1,191 DFB 168,237,159,235,197 SUBTBL DW BL1-1 F(CR) MUST BE 1ST IN TBL DW HELP-1 F(?) LIST PC'S TRACED DW SETVID-1 F(@) SWITCH 40/80 COL DW AUXV-1 F(CTRL-X) MOVE TO AUX DW AUXRW-1 F(X) MAIN/AUX $200-BFFF DW EXECJSR-1 F(J) EXECUTE JSR DW STEP-1 F(S) STEP DW MOVE-1 F(M) MOVE DW LT-1 F(<) COPY A2 TO A4 & A5 DW LIST-1 F(L) LIST DISASSEMBLY DW GO-1 F(G) GO DW SETMODE-1 F(:) STORE DW SETREG-1 F(I) SET INTERNAL PC/REG DW SETMODE-1 F(.) XAM DW BLANK-1 F( ) HANDLE SPACES DW ASC-1 F(") DUMP IN ASCII DW PRTITLE-1 F(V) PRINT TITLE DW SETPRNT-1 F(P) TO PRINTER DW LOAD-1 F(H) LOAD FOR HSF DW FIND-1 F(CTRL-F) HEX SEQ. FIND DW SETDOS-1 F(/) SET DOS CALL JSR #. DW TRACE-1 F(T) TRACE DW EXDOS-1 F(&) EXIT TO DOS DW RELOC-1 F(R) RELOCATOR DW HOME-1 F(CTRL-L) CLEAR SCREEN OUTVECT DW VIDOUT HCOUTLOC DW HCOUT FONTLOC DW FONTADR STARTLOC DW START ENDLOC DW PGMEND MARKER FOR END OF CODE TO RELOC SKP 1 * DYNAMIC PROGRAM AREA * SKP 1 GBASE DFB $40 $20 = HGR $40 = HGR2 CSWL DS 1 ADDR. OF OUTPUT ROUTINE CSWH DS 1 TFLG DS 1 <>0 = CANCEL COUT FOR TRC JFLG DS 1 SET TO ALLOW F(J) DOSCALL DW MLI ROUTINE TO JSR IMMED. ERRFLG DS 1 SET FOR BAD OPCODE ASFLAG DS 1 #1022 NZ WHEN APPLESOFT NEWSTT ENCOUNTERED PCREG DS 2,0 ACC DFB 0 DON'T CHANGE ORDER XREG DFB 0 OF ACC TO SPNT YREG DFB 0 STATUS DFB 0 SPNT DFB $FF SREF DFB $FF STACK REF SET BY TXS OPC LMNEM DS 1 RMNEM DS 1 LENGTH DS 1 FORMAT DS 1 MODE DS 1 FLG8 DS 1 FF = 80 COL, 0 = 40 COL WNDWDTH DS 1 PROMPT DS 1 CH DS 1 CV DFB 0 DSPTOP DS 1 TOP OF DISPLAY FOR STEP YSAV DS 1 YSAV1 DS 1 PCPNT DFB 0 INDEX TO PCBUF BRKADDR DS 2,255 BREAK FOR STEP,TRACE,LIST TEMP1 DS 1 FOR INSTDSP AND STEP. TEMP2 DS 1 FOR STEP. TEMP3 DS 1 FOR STEP. PCFLG DS 1 PRNTPC ON/OFF FOR TRACE COUNTER DS 1 FOR TRACE ZBUF DS $100-PCL PAGE ZERO STORAGE BUFFER LST ON PAGEFIL EQU >* DS $FF-PAGEFIL ROMFLG DFB 1 1 = TRACE JSR ROM $D000-FFFF * LST OFF STACK DS $100,0 MUST BE ON PAGE BOUNDARY PGMEND EQU * #1020 PAGE ALIGNED END OF MOVE * LST NOASYM \ No newline at end of file diff --git a/A128XGB.1024.txt b/A128XGB.1024.txt new file mode 100644 index 0000000..cf57283 --- /dev/null +++ b/A128XGB.1024.txt @@ -0,0 +1 @@ +* ANALYST 128XG PART B * * LAST EDIT: 01/27/19 * * CALL HERE TO INIT GRAPHICS DRIVER * WITH Y = $20 FOR HGR OR $40 FOR HGR2 * INITGR LDA HCOUTLOC+1 STA CSWH LDA HCOUTLOC STA CSWL STA HIRES STA MIXCLR STA HISCR STZ CH HOME CURSOR BUT DONT CLS STZ CV TYA CMP #$40 BEQ H6026 STA LOWSCR H6026 STA GBASE STA TXTCLR HCOUT PHA CMP #$88 BACKSPACE BNE CHKL DEC CH BPL CHKL LDA #$8D DO CR CHKL CMP #$8C CTRL-L BNE HCOUTZ HCLS LDY #$00 CLEAR SCREEN STY BAS2L LDA GBASE STA BAS2H H6050 TYA H6058 STA (BAS2L),Y INY BNE H6058 INC BAS2H LDA BAS2H SEC SBC GBASE CMP #$20 BNE H6050 STY CH Y = 0 STY CV CLC BCC H60DC HCOUTZ CMP #$8D BEQ HCROUT CMP #$A0 BCC H60EE IGNORE CTRL CHARS LDA CV LSR A AND #$03 ORA GBASE STA BAS2H LDA CV ROR A PHP ASL A AND #$18 STA BAS2L ASL A ASL A ORA BAS2L ASL A PLP ROR A CLC ADC CH STA BAS2L PLA AND #$7F MASK SEC SBC #$20 CONVERT FOR FONT TABLE PHA LDA FONTLOC+1 LSR A LSR A LSR A STA BASH PLA PHA ROL A ROL BASH ROL A ROL BASH ROL A ROL BASH AND #$F8 STA BASL LDY #$00 H60AF LDA (BASL),Y PHY LDY #$00 PHA TYA STA (BAS2L),Y PLA EOR (BAS2L),Y STA (BAS2L),Y PLY LDA BAS2H CLC ADC #$04 STA BAS2H INY CPY #$08 BNE H60AF INC CH LDA CH CMP WNDWDTH H60DC BCC H60EE HCROUT LDA #0 STA CH INC CV LDA CV CMP #24 IS IT BELOW BOTTOM OF SCREEN? BCC H60EE BRANCH IF NOT, OTHERWISE CLEAR SCREEN JMP HCLS AND MOVE TO TOP INSTEAD OF SCROLLING H60EE PLA RTS * * #1020 AUXLOAD MOVED HERE AND MADE RELOCATEABLE * AUXV STZ MA1 F(CTRL-X) MOVE ANALYST TO AUX MEMORY STZ MA4 PAGE ALIGNED LOW = 0 LDA STARTLOC+1 PAGE# OF START STA MA1+1 STA MA4+1 STZ MA2 PAGE ALIGNED LOW = 0 LDA ENDLOC+1 STA MA2+1 LDA #$03 STA INITBL+43 LDA #$05 STA INITBL+46 JSR INITXQTS LDA #$60 STA AUXV DISABLE FUTURE MOVES TO AUXMEM LDA #$D8 'X' STA BANKORG SEC JSR AUXMOVE A1.A2 TO A4 LDX #5 AUXLD2 LDA INITBL4,X STA XQT,X DEX BPL AUXLD2 STZ START DESTROY OLD ANALYST ID STA INHPAGE2 #1008 SO CTRL-X WORKS JMP XQT LST ON INITBL4 JSR XQTS+36 JMP TXTMON SKP 1 *** PROGRAM DATA AREA *** SKP 1 * * CHAR1 MARKS START OF PROGRAM DATA AREA #1020 * CHAR1 DFB 172,169,172,163,168,164 CHAR2 DFB 217,0,216,164,164,0 LST ON HEREL EQU >* DS $100-HEREL * * ASCII.SET FROM HRCG TOOLKIT * MUST BE DIVISIBLE BY $800 * FONTADR DB $00,$00,$00,$00 * LST OFF DB $00,$00,$00,$00 DB $08,$08,$08,$08 DB $08,$00,$08,$00 DB $14,$14,$14,$00 DB $00,$00,$00,$00 DB $28,$94,$7E,$14 DB $BF,$8A,$0A,$00 DB $08,$3C,$0A,$1C DB $28,$1E,$08,$00 DB $06,$26,$10,$08 DB $04,$32,$30,$00 DB $04,$0A,$0A,$04 DB $2A,$12,$2C,$00 DB $08,$08,$08,$00 DB $00,$00,$00,$00 DB $08,$04,$02,$02 DB $02,$04,$08,$00 DB $08,$10,$20,$20 DB $20,$10,$08,$00 DB $08,$2A,$1C,$08 DB $1C,$2A,$08,$00 DB $00,$08,$08,$3E DB $08,$08,$00,$00 DB $00,$00,$00,$00 DB $00,$8C,$88,$84 DB $00,$00,$00,$3E DB $00,$00,$00,$00 DB $00,$00,$00,$00 DB $00,$00,$8C,$00 DB $00,$20,$10,$08 DB $04,$02,$00,$00 DB $8C,$92,$22,$22 DB $22,$92,$8C,$00 DB $08,$0C,$08,$08 DB $08,$08,$1C,$00 DB $1C,$22,$20,$10 DB $84,$82,$3E,$00 DB $3E,$90,$10,$18 DB $20,$22,$1C,$00 DB $10,$18,$14,$12 DB $3E,$10,$10,$00 DB $3E,$02,$1E,$20 DB $20,$22,$1C,$00 DB $18,$04,$82,$1E DB $22,$22,$1C,$00 DB $3E,$90,$10,$88 DB $08,$84,$04,$00 DB $1C,$22,$22,$1C DB $22,$22,$1C,$00 DB $1C,$22,$22,$3C DB $90,$10,$0C,$00 DB $00,$00,$8C,$00 DB $00,$8C,$00,$00 DB $00,$00,$8C,$00 DB $00,$8C,$88,$84 DB $10,$08,$04,$02 DB $04,$08,$10,$00 DB $00,$00,$3E,$00 DB $3E,$00,$00,$00 DB $04,$08,$10,$20 DB $10,$08,$04,$00 DB $1C,$22,$90,$88 DB $08,$00,$08,$00 DB $1C,$22,$2A,$3A DB $1A,$02,$3C,$00 DB $08,$8C,$14,$92 DB $3E,$22,$22,$00 DB $1E,$22,$22,$1E DB $22,$22,$1E,$00 DB $1C,$22,$02,$02 DB $02,$22,$1C,$00 DB $1E,$22,$22,$22 DB $22,$22,$1E,$00 DB $3E,$02,$02,$1E DB $02,$02,$3E,$00 DB $3E,$02,$02,$1E DB $02,$02,$02,$00 DB $3C,$02,$02,$02 DB $32,$22,$3C,$00 DB $22,$22,$22,$3E DB $22,$22,$22,$00 DB $1C,$08,$08,$08 DB $08,$08,$1C,$00 DB $20,$20,$20,$20 DB $20,$22,$1C,$00 DB $22,$12,$0A,$06 DB $0A,$12,$22,$00 DB $02,$02,$02,$02 DB $02,$02,$3E,$00 DB $22,$36,$2A,$2A DB $22,$22,$22,$00 DB $22,$22,$26,$2A DB $32,$22,$22,$00 DB $1C,$22,$22,$22 DB $22,$22,$1C,$00 DB $1E,$22,$22,$1E DB $02,$02,$02,$00 DB $1C,$22,$22,$22 DB $2A,$12,$2C,$00 DB $1E,$22,$22,$1E DB $0A,$12,$22,$00 DB $1C,$22,$02,$1C DB $20,$22,$1C,$00 DB $3E,$08,$08,$08 DB $08,$08,$08,$00 DB $22,$22,$22,$22 DB $22,$22,$1C,$00 DB $22,$22,$22,$92 DB $14,$8C,$08,$00 DB $22,$22,$22,$2A DB $2A,$36,$22,$00 DB $22,$92,$14,$08 DB $14,$92,$22,$00 DB $22,$92,$14,$08 DB $08,$08,$08,$00 DB $3E,$90,$10,$08 DB $04,$82,$3E,$00 DB $3E,$06,$06,$06 DB $06,$06,$3E,$00 DB $00,$02,$04,$08 DB $10,$20,$00,$00 DB $3E,$30,$30,$30 DB $30,$30,$3E,$00 DB $00,$00,$08,$14 DB $22,$00,$00,$00 DB $00,$00,$00,$00 DB $00,$00,$00,$7F * * #1012 DELETED LAST $100 OF FONT TABLE * BECAUSE ASCII CHARS $60-7F NOT USED * MNEML DFB 28,138 DFB 28,35,93,139,27,161,157,138 DFB 29,35,157,139,29,161,28,41 DFB 25,174,105,168,25,35,36,83 DFB 27,35,36,83,25,161,173,26 DFB 165,91,165,172,139,138,174,174 DFB 168,173,41,138,124,139,21,156 DFB 109,156,165,105,41,83,132,19 DFB 52,17,165,105,35,160 MNEMR DFB 216,98 DFB 90,72,38,98,148,136,84,68 DFB 200,84,104,68,232,148,196,180 DFB 8,132,116,180,40,110,116,244 DFB 204,74,114,242,164,138,6,170 DFB 118,162,116,198,116,116,68,104 DFB 178,50,178,114,34,114,26,26 DFB 38,38,114,114,136,200,196,202 DFB 38,72,68,68,162,200 FMT1 DFB 240,34,0,51,93,130,0,147 DFB 243,34,0,51,93,136,0,153 DFB 240,47,0,51,93,143,0,159 DFB 240,34,0,59,93,136,0,148 DFB 253,34,0,51,93,200,0,147 DFB 17,34,0,51,93,200,0,169 DFB 241,34,0,51,93,143,0,159 DFB 241,34,0,51,93,143,0,159 DFB 38,49,135,154 REPL65C DFB 17,49,81,113,145,177 DFB 209,241,194,226,52,164,172,196 DFB 228,92,92,92,92,124,60,52 DFB 124,160,160,160,160,192,192 DFB 224,224 RTBL ASC "AXY" TITLE DFB $8D ASC "ANALYST 128XG" DFB $8D ASC "BUILD = 1024" DFB $8D ASC "ORG = " BANKORG ASC "$" DFB $00 NOT65C DFB $8D ASC "65C02 REQ'D" DFB $8D DOSTR ASC "3F5<3D0G" DFB $8D FMT2 DFB 0,33,129,130,90,73,89,77 DFB 145,146,134,74,133,157 CHAR3 ASC "CZIDB-VN" OPC65C DFB 18,50,82,114 DFB 146,178,210,242,58,26,137,28 DFB 20,122,90,156,100,158,116,124 DFB 60,52 DFB 76,164,172,180,188,196,204,228 DFB 236 CHRTBL DFB 198,152,249,177,241,3 DFB 236,6,149,5 DFB 0,147,2,167,153 DFB 155,239 * DFB 233 #1024 f(P) removed DFB 1,191 DFB 168,237,159,235,197 SUBTBL DW BL1-1 F(CR) MUST BE 1ST IN TBL DW HELP-1 F(?) LIST PC'S TRACED DW SETVID-1 F(@) SWITCH 40/80 COL DW AUXV-1 F(CTRL-X) MOVE TO AUX DW AUXRW-1 F(X) MAIN/AUX $200-BFFF DW EXECJSR-1 F(J) EXECUTE JSR DW STEP-1 F(S) STEP DW MOVE-1 F(M) MOVE DW LT-1 F(<) COPY A2 TO A4 & A5 DW LIST-1 F(L) LIST DISASSEMBLY DW GO-1 F(G) GO DW SETMODE-1 F(:) STORE DW SETREG-1 F(I) SET INTERNAL PC/REG DW SETMODE-1 F(.) XAM DW BLANK-1 F( ) HANDLE SPACES DW ASC-1 F(") DUMP IN ASCII DW PRTITLE-1 F(V) PRINT TITLE * DW SETPRNT-1 F(P) TO PRINTER #1024 REMOVED DW LOAD-1 F(H) LOAD FOR HSF DW FIND-1 F(CTRL-F) HEX SEQ. FIND DW SETDOS-1 F(/) SET DOS CALL JSR #. DW TRACE-1 F(T) TRACE DW EXDOS-1 F(&) EXIT TO DOS DW RELOC-1 F(R) RELOCATOR DW HOME-1 F(CTRL-L) CLEAR SCREEN OUTVECT DW VIDOUT HCOUTLOC DW HCOUT FONTLOC DW FONTADR STARTLOC DW START ENDLOC DW PGMEND MARKER FOR END OF CODE TO RELOC SKP 1 * DYNAMIC PROGRAM AREA * SKP 1 GBASE DFB $40 $20 = HGR $40 = HGR2 CSWL DS 1 ADDR. OF OUTPUT ROUTINE CSWH DS 1 TFLG DS 1 <>0 = CANCEL COUT FOR TRC JFLG DS 1 SET TO ALLOW F(J) DOSCALL DW MLI ROUTINE TO JSR IMMED. ERRFLG DS 1 SET FOR BAD OPCODE ASFLAG DS 1 #1022 NZ WHEN APPLESOFT NEWSTT ENCOUNTERED PCREG DS 2,0 ACC DFB 0 DON'T CHANGE ORDER XREG DFB 0 OF ACC TO SPNT YREG DFB 0 STATUS DFB 0 SPNT DFB $FF SREF DFB $FF STACK REF SET BY TXS OPC LMNEM DS 1 RMNEM DS 1 LENGTH DS 1 FORMAT DS 1 MODE DS 1 FLG8 DS 1 FF = 80 COL, 0 = 40 COL WNDWDTH DS 1 PROMPT DS 1 CH DS 1 CV DFB 0 DSPTOP DS 1 TOP OF DISPLAY FOR STEP YSAV DS 1 YSAV1 DS 1 PCPNT DFB 0 INDEX TO PCBUF BRKADDR DS 2,255 BREAK FOR STEP,TRACE,LIST TEMP1 DS 1 FOR INSTDSP AND STEP. TEMP2 DS 1 FOR STEP. TEMP3 DS 1 FOR STEP. PCFLG DS 1 PRNTPC ON/OFF FOR TRACE COUNTER DS 1 FOR TRACE ZBUF DS $100-PCL PAGE ZERO STORAGE BUFFER LST ON PAGEFIL EQU >* DS $FF-PAGEFIL ROMFLG DFB 0 1 = TRACE JSR ROM $D000-FFFF * LST OFF STACK DS $100,0 MUST BE ON PAGE BOUNDARY PGMEND EQU * #1020 PAGE ALIGNED END OF MOVE * LST NOASYM \ No newline at end of file