NAM MAARS * THIS PROGRAM PUNCHES LOADS INSPECTS AND CHANGES * MEMORY......INSPECT AND CHANGES THE TARGET REGISTERS * AND GOES TO TARGET PEROGRAM (FOR BREAKPOINT USE "SWI") * ....DISPLAYS THE PROGRAM IN SYMBOLIC CODE AND ABSOLUTE * ADDRESSES (I.E. DISASSEMBLER )...... AND INPUTS THE * PROGRAM IN SYMBOLIC FORM AND ABSOLUTE ADDRESSES * WRITTEN BY STEFANO STEFANI SPC 1 ORG $1FD0 SBP RMB 1 MASC RMB 1 MASK FOR TRANSLATION TX RMB 1 TEST BUFFER (CONSTANT) TY1 RMB 1 TY2 RMB 1 TY3 RMB 1 TY4 RMB 1 TM RMB 1 TL RMB 1 TEST BUFFER (VARIABLE) GX RMB 1 GY1 RMB 1 GY2 RMB 1 GY3 RMB 1 GY4 RMB 1 GM RMB 1 GL RMB 1 SAX1 RMB 2 FOR THE X REGISTER SAX2 RMB 2 SAS RMB 2 INPON RMB 2 POINTERS TO OBJECT MEMORY ENPON RMB 2 COPON RMB 2 RELBUF RMB 2 TCC RMB 1 TARGET REGISTERS TB RMB 1 TA RMB 1 TXR RMB 2 TS RMB 2 SWICH RMB 2 SPC 1 ORG $2000 CAPO LDX #TARE ******** PROGRAM START ******** STX $FFFA INITIALIZE VECTORS STX $FFFC IN EXORCISER LDS #SBP JMP MASTER SPC 1 * AS THE MASTER STATUS IS ENTERED A "!" * IS PRINTED AND A CONTROL CHARACTER MAY BE INPUTED * THE CONTROL SET : G R L B I P M D S * ANY OTHER CHARACTER INITIATES THE COMMENT STATUS * IN COMMENT STATUS THE PRINTER ONLY ECHOES THE * CHARACTERS AND NO OTHER ACTION IS PERFORMED * AS "!" IS INPUTED THEN THE COMMENT STATUS TERMINES * AND REENTERS THE MASTER STATUS *"G" GO TO TARGET PROGRAM (THE START ADDRESS * IS THEN REQUESTED ) *"R" DISPLAY THE TARGET REGISTERS * IN "R" FUNCTION IF AFTER THE PRINTING ACTION * A (CR) IS INPUTED THE "M" FUNCTON IS * INITIATED FOR THE MODIFICATION OF REGISTERS * AND INTERRUPT VECTORS *"L" LOAD FROM TAPE *"B" PROGRAM BRANCH MODIFY *"I" PROGRAM INPUT *"P" PROGRAM PRINT *"M" DATA OPEN *"D" DATA PRINT *"S" SAVE : PUNCH ON TAPE *IN "D" OR "S" THE BEGINNING ADDRESS AND ENDING * ADDRESS ARE REQUESTED * "'" IS THE REQUEST OF A 4 HEX VALUE THEN * IF A CHAR. IS NOT HEX GO TO MASTER STATUS * IN "M" FUNCTION : * "(SP)(H)(H)" ENTER THE BYTE IN CURRENT LOCATION * (H) IS FOR HEX DIGIT * AND ADVANCE AT THE FOLLOWING LOCATION * (CR)" OPEN THE FOLLOWING LOCATION * "P" OPEN THE PRECEEDING LOCATION * ANY OTHER CHARACTER EXIT FROM "M" FUNCTION * IF ONE ATTEMPT TO WRITE IN A NON WRITABLE * LOCATION THE PROGRAM PRINTS "?" * ALSO IN THIS CASE THE POINTER ADVANCES * IN "I" FUNCTION : * THE USER INPUTS " 4 CHAR. INSTR. CODE " * (NOTE: IF THE CODE IS ILLEGAL THE "I" FUNCTION * TERMINATES ) * (NOTE: ONE MUST USE THE ABOVE WAY TO * TERMINATE THE "I" FUNCTION ) * NOW IF , THE CASE , THE PROGRAM REQUESTS * THE ARGUMENT PRINTING "'" (4 ESA INPUT) * IF THE ARGUMENT IS DESIGNATED AS A IMMEDIATE * ARGUMENT A "#" CHARACTER MUST IMMEDIATELY * FOLLOW THE 4 HEX DIGITS * IF THE ARGUMENT IS DESIGNATED AS A INDEXED VALUE * A "X" CHARACTER MUST IMMEDIATELY FOLLOW * THE 4 HEX DIGITS * ANY OTHER CHARACTER IN THIS POSITION HAS * NO EFFECT : THE FOLLOWING CHARACTERS ARE * COMMENT FIELD. THE COMMENT FIELD TERMINATES * WHEN A (CR) IS INPUTED. *THE "L" FUNCTION TERMINATE IF THE STRING "S9" * IS INPUTED AS RECORD HEAD *IN "S" AND "L" FUNCTION THE FORMAT IS THE * EXORCISER "S1 FORMAT" * A "?" IS PRINTED AND THE "L" FUNCTION IS * ABORTED IF A PARITY ERROR IS DETECTED *THE ATTEMPT TO LOADING IN A NON WRITABLE * LOCATION ABORTES THE "L" FUNCTION * THE PROGGRAM IS TIMED FOR ASR33 TELETYPE * THE " NATIVE ASSEMBLER FUNCTION " IS EQUIPPED * WITH A COMMUNICATION ZONE IN PROVISION TO ITS * EXTENSION TO A CANONICAL ASSEMBLER SPC 1 OPNCH EQU * PUNCH IN "S1" FORMAT JSR INEXTR JSR LINE LDAA #$12 * JSR OUT BSR ROUBAU DUMP1 LDX #INPON LDAA ENPON+1-INPON,X SUBA 1,X LDAB ENPON-INPON,X SBCB X BNE DUMP2 CMPA #16 *#27 BCS *+4 DUMP2 LDAA #15 *#26 ADDA #4 STAA 4,X FRAME COUNT SUBA #3 STAA 5,X BYTE COUNT JSR LINE LDAA #'S JSR OUT LDAA #'1 JSR OUT LDX #INPON-1 CLRA LDAB 5,X BSR DUMBO BSR DUMLOC BSR DUMLOC LDX INPON DUMP3 BSR DUMLOC DEC COPON+1 BNE DUMP3 STX INPON COMA TAB BSR DUMBO DEX DEX CPX ENPON BNE DUMP1 BSR ROUBAU LDAA #$14 * JSR OUT RTS SPC 1 DUMLOC LDAB X DUMBO ABA PSHA JSR PBESA PULA INX RTS SPC 1 ROUBAU LDAB #30 CLRA JSR OUT DECB BNE ROUBAU+2 RTS SPC 1 LOAD EQU * LOAD MEMORY FROM TAPE LOAD1 JSR INCAR IN "S1" FORMAT CMPA #'S BNE LOAD1 JSR INCAR CMPA #'9 BNE *+3 RTS CMPA #'1 BNE LOAD1 CLRA LDX #TL STAA X BSR BYCHE BSR BYCHE BSR BYCHE LDX TL+1 BSR BYCHE BNE *-2 INCA BEQ LOAD1 JSR QUEMAR RTS SPC 1 BYCHE PSHA JSR INBYTE TAB PULA ABA DEC TL BEQ BYCHE1 STAB X CMPB X BEQ *+5 JMP CAPO INX LDAB #$FF BYCHE1 RTS SPC 1 TITOL FCC /CBAX/ FORMAT FOR TARGET REGISTERS FCB 0 PRINT FCC /P/ FCB 0 FCC /S/ FCB 0 SPC 1 TARE EQU * SAVE REGISTERS LDX #TCC WHEN TARGET PROGRAM DETACHES TARE1 PULA STAA X INX CPX #TS BNE TARE1 STS X JMP CAPO SPC 1 TARE2 LDAA #$7E LOAD TARGET REGISTERS FOR LDX #SAX2-1 A TARGET PROGRAM RESUME STAA X INX JSR INDUAL LDX #TCC LDAA X TAP LDAB TB-TCC,X LDAA TA-TCC,X LDS TS-TCC,X LDX TXR-TCC,X JMP SAX2-1 SPC 1 TARE3 JSR DSPACE PRINT TARGET REGISTERS LDX #TITOL STX SAX1 LDX #TCC TARE4 STX SAX2 LDX SAX1 LDAA X BEQ TARE5 JSR SPACE JSR OUT LDAA #'- JSR OUT TARE5 INX STX SAX1 LDX SAX2 LDAB X JSR PBESA INX CPX #TS+2 BNE TARE4 JSR INCAR CMPA #$D BEQ *+3 REGISTERS CHANGE ? RTS LDX #TCC STX COPON JMP DATA5 SPC 1 SWTAB FCB 'G SWICHING TABLE FDB TARE2 FCB 'R FDB TARE3 FCB 'B FDB PROGRA FCB 'I FDB PINPUT FCB 'P FDB DISAS FCB 'M FDB DATA1 FCB 'D FDB DATA FCB 'S FDB OPNCH FCB 'L SWTABT FDB LOAD SPC 1 MASTER EQU * MAIN PROGRAM *************** JSR LINE LDX #UNKNOW STX SWICH LDAA #'! JSR OUT JSR INCAR LDX #SWTAB MAST4 CMPA X BNE MAST5 LDX 1,X JSR X BRA MASTER MAST5 INX INX INX CPX #SWTABT+2 BNE MAST4 MAST3 JSR INCAR CMPA #'! COMMENT STATUS BEQ MASTER BRA MAST3 SPC 1 PROGRA LDX #INPON BRANCH MODIFY JSR INDUAL LDX INPON STX ENPON INX INX JSR DISAS0 JSR INRELA LDX INPON LDAA RELBUF+1 STAA 1,X RTS SPC 1 DATA JSR INEXTR DATA PRINT DATA3 JSR LINE LDX #INPON JSR PDUXE LDX X LDAA #16 DATA4 PSHA JSR SPACE LDAB X JSR PBESA INX PULA DECA BNE DATA4 STX INPON LDX #INPON JSR DUCOMP BLS DATA3 RTS DATA1 LDX #COPON DATA OPEN JSR INDUAL DATA5 JSR LINE LDX #COPON JSR PDUXE JSR SPACE LDX X LDAB X JSR PBESA JSR SPACE JSR INCAR CMPA #$20 BNE DATA6 DATA7 JSR INBYTE STAA X CMPA X BEQ *+5 JSR QUEMAR JSR INCAR CMPA #$20 BNE DATA6 INX BRA DATA7 DATA6 CMPA #'P BNE DATA8 DEX DEX BRA DATA9 DATA8 CMPA #$D BEQ DATA9 RTS DATA9 INX STX COPON BRA DATA5 SPC 1 INRELA EQU * COMPUTE A RELATIVE ADDRESS LDX #INPON LDAA X STAA COPON-INPON,X INX LDAA X STAA COPON-INPON,X INX BSR COMMUT JSR GETESA-UNKNOW,X JSR DINCO LDX #ENPON LDAA 1,X SUBA COPON+1-ENPON,X STAA RELBUF+1-ENPON,X ROLB ROLA RORB LDAA X SBCA COPON-ENPON,X BNE INREL1 TSTB BMI INREL2 RTS INREL1 COMA BNE INREL2 TSTB BPL INREL2 RTS INREL2 BSR COMMUT JSR X RTS SPC 1 PINPUT LDX #INPON PROGRAM INPUT JSR INDUAL START POINTER PINPU1 JSR LINE LDX #INPON JSR PDUXE LDX #TY1 PINPU0 BSR COMMUT INPUT CODE JSR GETCHA-UNKNOW,X LDX SAX1 STAA X INX CPX #TM BNE PINPU0 ONLY SYMBOLIC LDAA #$1E STAA MASC JSR ENGRA TRANSLATE TST GX BNE PINPU3 BSR COMMUT NOT FIND RTS PINPU7 TST RELBUF TENTATIVE FOR A DIRECT BNE PINPU8 ADDRESS LDAA #2 STAA TM JSR ENGRA TST GX BNE PINP10 DEPOSIT IN MEMORY PINPU8 LDAB #$4 EXTENDET BRA PINPU4 PINPU6 BSR INRELA RELATIVE ADDRESS REQUESTED BRA PINP10 DEPOSIT IN MEMORY SPC 1 COMMUT STX SAX1 LDX SWICH RTS SPC 1 PINPU3 LDAA GM IMMEDIATE CMPA #5 BEQ PINP10 DEPOSIT IN MEMORY CMPA #6 BEQ PINPU6 RELATIVE ADDRESS LDX #RELBUF IMMEDIATE ARGUMENT BSR COMMUT JSR GETESA-UNKNOW,X LDAA #$3E TRANSLATE ALSO ADDRESS MODE STAA MASC BSR COMMUT JSR GETCHA-UNKNOW,X LDAB #1 CMPA #'# IMMEDIATE BEQ PINPU4 LDAB #3 CMPA #'X INDEXED BNE PINPU7 PINPU4 STAB TM JSR ENGRA PINP10 BSR COMMUT TRANSFER CODE TO MEMORY LDAA GX BNE *+3 RTS JSR OUTCOD-UNKNOW,X LDAB GL DECB BEQ PINP13 DECB BEQ PINP12 LDAA RELBUF JSR OUTCOD-UNKNOW,X PINP12 LDAA RELBUF+1 JSR OUTCOD-UNKNOW,X PINP13 JSR GETCHA-UNKNOW,X CMPA #$D BNE PINP13 CONTINUE JMP PINPU1 SPC 1 UNKNOW JMP QUEMAR ASSEMBLER COMMUNICATION ZONE GETCHA JMP INCAR GETESA LDX SAX1 JMP INDUAL OUTCOD LDX INPON STAA X INX STX INPON LDX SWICH RTS SPC 1 * DETECT IN GX THE ADDRESSING MODE * AND THE CODE LENGTH AND WRITE * THEM IN "GM" AND "GL" * 1=IMMEDIATE 2=DIRECT * 3=INDEXET 4=EXTENDET * 5=INHERENT 6=RELATIVE ADMO STX SAX2 LDX #GX LDAA #$3 STAA 6,X LDAA #$4 STAA 5,X LDAA #$F0 ANDA X BSR COMPAR BNE AD1 BRA ADCOR AD1 DEC 5,X DEC 6,X ADDA #$10 BSR COMPAR BEQ ADCOR DEC 5,X ANDA #$B0 CMPA #$A0 BEQ ADCOR DEC 5,X CMPA #$90 BEQ ADCOR LDAA #$6 STAA 5,X LDAA #$F0 ANDA X CMPA #$20 BEQ ADCOR DEC 5,X DEC 6,X SPC 1 * THE EXCEPTIONS : ADCOR LDAA 0,X CMPA #$8D BNE AD2 LDAB #$6 STAB 5,X AD2 CMPA #$8C BEQ AD4 ANDA #$BF CMPA #$8E BNE AD3 AD4 INC 6,X AD3 LDX SAX2 RTS SPC 1 * USED FROM ADMO COMPAR CMPA #$70 BEQ CORE CMPA #$B0 BEQ CORE CMPA #$F0 CORE RTS SPC 1 QUEMAR LDAA #'? OUTPUT ON ACIA OUT PSHA OUT1 LDAA #$02 ANDA $FCF4 BEQ OUT1 PULA STAA $FCF5 RTS SPC 1 PBESA BSR PBH PRINT THE CONTENT OF ASLB B REGISTER IN HEX FORM ASLB ASLB ASLB PBH TBA SEC RORA ASRA LSRA LSRA CMPA #$39 BLS PBH1 ADDA #$7 PBH1 BSR OUT RTS SPC 1 LINE LDAA #$D LINE FEED AND C.R. BSR OUT LDAA #$A BSR OUT CLRA BSR OUT BSR OUT BSR OUT BSR OUT RTS SPC 1 DSPACE BSR SPACE DUAL SPACE SPACE PSHA LDAA #$20 BSR OUT PULA RTS SPC 1 * EXPANSION OF SYMBOLIC CODE DEPAC LDAA #$20 STAA GY4 LDAA X STAA GX LDAB #$1F TBA ANDA 1,X ADDA #$40 STAA GY1 ANDB 2,X ADDB #$40 STAB GY2 LDAA 1,X LSRA LSRA LDAB #$C0 ANDB 2,X ABA LSRA LSRA LSRA ADDA #$40 STAA GY3 INX INX INX RTS SPC 1 * VARIATION FOR SYMBOLIC PRODUCTION AMODE LDAA #$41 STAA GY4 RTS SPC 1 PAIR BSR DEPAC BSR AMODE JSR POINT INC GX INC GY4 JSR POINT RTS SPC 1 VARIAT LDAB #$3 BRA VARIA VARIAQ LDAB #$4 VARIA BSR POINT BSR INCGX DECB BNE VARIA RTS SPC 1 INCGX LDAA #$10 BRA INC1 DECGX LDAA #$F0 INC1 ADDA GX STAA GX RTS SPC 1 * ENUMERATION OF CODE ENGRA STS SAS SAVE RETURN FROM ANY NESTING LDX #ORW BSR PAIR BSR PAIR BSR DEPAC BSR AMODE BSR VARIAT BSR INCGX INC GY4 BSR VARIAT BSR DEPAC BSR VARIAT BSR DEPAC BSR VARIAT E1 JSR DEPAC BSR AMODE BSR VARIAQ INC GY4 BSR VARIAQ TST X BNE E1 INX E2 JSR DEPAC BSR VARIAQ TST X BNE E2 INX E3 JSR DEPAC BSR POINT BSR DECGX BSR POINT BSR AMODE INC GY4 JSR DECGX BSR POINT DEC GY4 BSR DECGX BSR POINT TST X BNE E3 INX E4 JSR DEPAC BSR POINT TST X BNE E4 JSR DEPAC BSR POINT RTS SPC 1 POINT PSHA * ARE THE BUFFERS UNDER PSHB * THE MASK EQUAL ? JSR ADMO LDX #MASC LDAB X POINT1 CPX #TL BEQ POINT2 INX LSRB BCC POINT1 LDAA X CMPA 7,X BEQ POINT1 PULB PULA LDX SAX2 RTS POINT2 LDS SAS RTS SPC 1 DINCO BSR INCOP POINTER INCREMENT INCOP LDX COPON INX STX COPON RTS SPC 1 DUCOMP LDAA X DUAL COMPARATION CMPA 2,X BNE DUCOM1 LDAA 1,X CMPA 3,X DUCOM1 RTS SPC 1 INEXTR LDX #INPON INPUT TWO POINTERS JSR INDUAL JSR INDUAL RTS SPC 1 DISAS BSR INEXTR DISASSEMBLER DISAS0 JSR LINE LDX INPON STX COPON LDAA #$01 TRANSLATION MASK STAA MASC DISAS1 LDX #ENPON BSR DUCOMP BGE DISA11 RTS DISA11 INX INX JSR LINE JSR DSPACE JSR DSPACE JSR PDUXE LDX X LDAB X STAB TX JSR PBESA CODE PRINT IN HEX JSR SPACE JSR ENGRA JSR INCOP LDAA #1 CMPA GL BNE DISAS2 PRINT THE ARGUMENT IF ANY JSR DSPACE BRA DISAS3 DISAS2 LDAB X JSR PBESA BSR INCOP LDAA #$3 CMPA GL BEQ DISAS4 DISAS3 JSR DSPACE BRA DISAS5 DISAS4 LDAB X JSR PBESA BSR INCOP DISAS5 JSR DSPACE LDX #GY1-1 * PRINT THE SYMBOLIC DISAS6 INX LDAA X JSR OUT CPX #GY4 BNE DISAS6 JSR SPACE LDAB 1,X *PRINT "#" OR "X" IF NECESSARY LDAA #'# CMPB #1 BEQ DISAS7 CMPB #3 BNE DISAS8 LDAA #'X SPC 1 DISAS7 JSR OUT *IF THE ADDRESSING IS DISAS8 CMPB #6 *RELATIVE COMPUTE AND BNE DISAS9 *PRINT IT ABSOLUTE VALUE JSR SPACE LDX #COPON LDX X DEX CLRB LDAA X BPL DISA10 COMB DISA10 LDX #COPON ADDA 1,X ADCB X STAA 3,X STAB 2,X INX INX BSR PDUXE DISAS9 JMP DISAS1 * CONTINUE SPC 1 *INPUT 2 BYTES (4 HEX ) INDUAL JSR SPACE LDAA #'' JSR OUT BSR INDUA INDUA BSR INBYTE STAA X INX RTS SPC 1 PDUXE LDAB X PRINT IN HEX TWO LOCATIONS JSR PBESA LDAB 1,X JSR PBESA JSR SPACE RTS SPC 1 INESA BSR INCAR INPUT ONE HEX SUBA #$30 BMI INESA1 CMPA #$9 BLE INESA2 CMPA #$11 BMI INESA1 CMPA #$16 BGT INESA1 SUBA #$7 INESA2 RTS *IF NOT HEX ABORT INESA1 JMP CAPO SPC 1 INBYTE BSR INESA *INPUT IN HEX ONE BYTE ASLA ASLA ASLA ASLA TAB PSHB BSR INESA PULB ABA RTS SPC 1 INCAR LDAA $FCF4 GET ACIA RORA BCC *-4 LDAA $FCF5 ANDA #$7F JSR OUT RTS SPC 1 * CODE GENERATION CONSTANTS ORW FCB $36,$10,$53,$32,$90,$55,$97,$33,$14 FCB $DF,$13,$D4,$9F,$73,$94,$8B,$81,$04 FCB $89,$61,$04,$84,$81,$0E,$85,$82,$89 FCB $81,$03,$8D,$88,$45,$8F,$86,$2C,$04 FCB $8A,$2F,$12,$80,$53,$15,$82,$73,$02 FCB $00 FCB $CE,$0C,$C4,$8E,$6C,$84,$8C,$03,$D0 FCB $00 FCB $7F,$43,$8C,$73,$A3,$4F,$70,$EE,$05 FCB $7A,$64,$05,$7C,$69,$0E,$79,$92,$4F FCB $76,$52,$8F,$78,$81,$53,$77,$41,$93 FCB $74,$4C,$93,$7D,$94,$93 FCB $00 FCB $1B,$21,$02,$11,$23,$02,$19,$24,$01 FCB $10,$33,$02,$17,$34,$02,$16,$53,$01 FCB $09,$04,$C5,$34,$64,$85,$08,$09,$CE FCB $31,$69,$8E,$35,$74,$98,$30,$14,$D3 FCB $20,$22,$12,$22,$22,$48,$23,$62,$8C FCB $24,$62,$03,$25,$62,$83,$26,$A2,$0E FCB $27,$22,$85,$28,$62,$16,$2A,$82,$50 FCB $2B,$22,$4D,$2C,$A2,$07,$2D,$82,$8C FCB $2E,$82,$87,$2F,$A2,$0C,$6E,$0A,$8D FCB $7E,$0A,$8D,$AD,$4A,$93,$BD,$4A,$93 FCB $01,$0E,$8F,$3B,$32,$54,$39,$72,$94 FCB $3F,$33,$57,$3E,$37,$41,$0C,$63,$0C FCB $0E,$23,$4C,$0A,$C3,$8C,$0D,$73,$05 FCB $0F,$33,$45,$0B,$D3,$85,$06,$14,$81 FCB $07,$34,$10,$29,$62,$96,$8D,$42,$93 FCB $00,$18,$D8 END