URL
https://opencores.org/ocsvn/rf6809/rf6809/trunk
Subversion Repositories rf6809
[/] [rf6809/] [trunk/] [software/] [boot/] [disassem.asm] - Rev 17
Go to most recent revision | Compare with Previous | Blame | View Log
; ============================================================================; __; \\__/ o\ (C) 2013-2022 Robert Finch, Waterloo; \ __ / All rights reserved.; \/_// robfinch<remove>@opencores.org; ||;;; BSD 3-Clause License; Redistribution and use in source and binary forms, with or without; modification, are permitted provided that the following conditions are met:;; 1. Redistributions of source code must retain the above copyright notice, this; list of conditions and the following disclaimer.;; 2. Redistributions in binary form must reproduce the above copyright notice,; this list of conditions and the following disclaimer in the documentation; and/or other materials provided with the distribution.;; 3. Neither the name of the copyright holder nor the names of its; contributors may be used to endorse or promote products derived from; this software without specific prior written permission.;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE; FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL; DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER; CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,; OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.;; ============================================================================;farflag EQU $15Fasmbuf EQU $160 ; to $17FCharOutVec EQU $800CharInVec EQU $804; Disassembler;;DIRECT EQU 1LSREL EQU 2IMMB EQU 3SREL EQU 4NDX EQU 5EXT EQU 6IMMW EQU 7FAREXT EQU 8TFREXG EQU 9distbl1:; 00 to 0Ffcb "NEG ", DIRECTfcb " ", 0fcb " ", 0fcb "COM ", DIRECTfcb "LSR ", DIRECTfcb " ", 0fcb "ROR ", DIRECTfcb "ASR ", DIRECTfcb "ASL ", DIRECTfcb "ROL ", DIRECTfcb "DEC ", DIRECTfcb " ", 0fcb "INC ", DIRECTfcb "TST ", DIRECTfcb "JMP ", DIRECTfcb "CLR ", DIRECT; 10 to 1Ffcb " ", 0fcb " ", 0fcb "NOP ", 0fcb "SYNC", 0fcb " ", 0fcb "FAR ", 0fcb "LBRA", LSRELfcb "LBSR", LSRELfcb " ", 0fcb "DAA ", 0fcb "ORCC", IMMBfcb " ", 0fcb "ANDC", IMMBfcb "SEX ", 0fcb "EXG ", TFREXGfcb "TFR ", TFREXG; 20 to 2Ffcb "BRA ", SRELfcb "BRN ", SRELfcb "BHI ", SRELfcb "BLS ", SRELfcb "BHS ", SRELfcb "BLO ", SRELfcb "BNE ", SRELfcb "BEQ ", SRELfcb "BVC ", SRELfcb "BVS ", SRELfcb "BPL ", SRELfcb "BMI ", SRELfcb "BGE ", SRELfcb "BLT ", SRELfcb "BGT ", SRELfcb "BLE ", SREL; 30 to 3Ffcb "LEAX", NDXfcb "LEAY", NDXfcb "LEAS", NDXfcb "LEAU", NDXfcb "PSHS", IMMBfcb "PULS", IMMBfcb "PSHU", IMMBfcb "PULU", IMMBfcb "RTF ", 0fcb "RTS ", 0fcb "ABX ", 0fcb "RTI ", 0fcb "CWAI", IMMBfcb "MUL ", 0fcb " ", 0fcb "SWI ", 0; 40 to 4Ffcb "NEGA", 0fcb " ", 0fcb " ", 0fcb "COMA", 0fcb "LSRA", 0fcb " ", 0fcb "RORA", 0fcb "ASRA", 0fcb "ASLA", 0fcb "ROLA", 0fcb "DECA", 0fcb " ", 0fcb "INCA", 0fcb "TSTA", 0fcb " ", 0fcb "CLRA", 0; 50 to 5Ffcb "NEGB", 0fcb " ", 0fcb " ", 0fcb "COMB", 0fcb "LSRB", 0fcb " ", 0fcb "RORB", 0fcb "ASRB", 0fcb "ASLB", 0fcb "ROLB", 0fcb "DECB", 0fcb " ", 0fcb "INCB", 0fcb "TSTB", 0fcb " ", 0fcb "CLRB", 0; 60 to 6Ffcb "NEG ", NDXfcb " ", 0fcb " ", 0fcb "COM ", NDXfcb "LSR ", NDXfcb " ", 0fcb "ROR ", NDXfcb "ASR ", NDXfcb "ASL ", NDXfcb "ROL ", NDXfcb "DEC ", NDXfcb " ", 0fcb "INC ", NDXfcb "TST ", NDXfcb "JMP ", NDXfcb "CLR ", NDX; 70 to 7Ffcb "NEG ", EXTfcb " ", 0fcb " ", 0fcb "COM ", EXTfcb "LSR ", EXTfcb " ", 0fcb "ROR ", EXTfcb "ASR ", EXTfcb "ASL ", EXTfcb "ROL ", EXTfcb "DEC ", EXTfcb " ", 0fcb "INC ", EXTfcb "TST ", EXTfcb "JMP ", EXTfcb "CLR ", EXT; 80 to 8Ffcb "SUBA", IMMBfcb "CMPA", IMMBfcb "SBCA", IMMBfcb "SUBD", IMMWfcb "ANDA", IMMBfcb "BITA", IMMBfcb "LDA ", IMMBfcb " ", 0fcb "EORA", IMMBfcb "ADCA", IMMBfcb "ORA ", IMMBfcb "ADDA", IMMBfcb "CMPX", IMMWfcb "BSR ", SRELfcb "LDX ", IMMWfcb "JMF ", FAREXT; 90 to 9Ffcb "SUBA", DIRECTfcb "CMPA", DIRECTfcb "SBCA", DIRECTfcb "SUBD", DIRECTfcb "ANDA", DIRECTfcb "BITA", DIRECTfcb "LDA ", DIRECTfcb "STA ", DIRECTfcb "EORA", DIRECTfcb "ADCA", DIRECTfcb "ORA ", DIRECTfcb "ADDA", DIRECTfcb "CMPX", DIRECTfcb "JSR ", DIRECTfcb "LDX ", DIRECTfcb "STX ", DIRECT; A0 to AFfcb "SUBA", NDXfcb "CMPA", NDXfcb "SBCA", NDXfcb "SUBD", NDXfcb "ANDA", NDXfcb "BITA", NDXfcb "LDA ", NDXfcb "STA ", NDXfcb "EORA", NDXfcb "ADCA", NDXfcb "ORA ", NDXfcb "ADDA", NDXfcb "CMPX", NDXfcb "JSR ", NDXfcb "LDX ", NDXfcb "STX ", NDX; B0 to BFfcb "SUBA", EXTfcb "CMPA", EXTfcb "SBCA", EXTfcb "SUBD", EXTfcb "ANDA", EXTfcb "BITA", EXTfcb "LDA ", EXTfcb "STA ", EXTfcb "EORA", EXTfcb "ADCA", EXTfcb "ORA ", EXTfcb "ADDA", EXTfcb "CMPX", EXTfcb "JSR ", EXTfcb "LDX ", EXTfcb "STX ", EXT; C0 to CFfcb "SUBB", IMMBfcb "CMPB", IMMBfcb "SBCb", IMMBfcb "ADDD", IMMWfcb "ANDB", IMMBfcb "BITB", IMMBfcb "LDB ", IMMBfcb " ", 0fcb "EORB", IMMBfcb "ADCB", IMMBfcb "ORB ", IMMBfcb "ADDB", IMMBfcb "LDD ", IMMWfcb " ", SRELfcb "LDU ", IMMWfcb "JSF ", FAREXT; D0 to DFfcb "SUBB", DIRECTfcb "CMPB", DIRECTfcb "SBCB", DIRECTfcb "ADDD", DIRECTfcb "ANDB", DIRECTfcb "BITB", DIRECTfcb "LDB ", DIRECTfcb "STB ", DIRECTfcb "EORB", DIRECTfcb "ADCB", DIRECTfcb "ORB ", DIRECTfcb "ADDB", DIRECTfcb "LDD ", DIRECTfcb "STD ", DIRECTfcb "LDU ", DIRECTfcb "STU ", DIRECT; E0 to EFfcb "SUBB", NDXfcb "CMPB", NDXfcb "SBCB", NDXfcb "ADDD", NDXfcb "ANDB", NDXfcb "BITB", NDXfcb "LDB ", NDXfcb "STB ", NDXfcb "EORB", NDXfcb "ADCB", NDXfcb "ORB ", NDXfcb "ADDB", NDXfcb "LDD ", NDXfcb "STD ", NDXfcb "LDU ", NDXfcb "STU ", NDX; F0 to FFfcb "SUBB", EXTfcb "CMPB", EXTfcb "SBCB", EXTfcb "ADDD", EXTfcb "ANDB", EXTfcb "BITB", EXTfcb "LDB ", EXTfcb "STB ", EXTfcb "EORB", EXTfcb "ADCB", EXTfcb "ORB ", EXTfcb "ADDB", EXTfcb "LDD ", EXTfcb "STD ", EXTfcb "LDU ", EXTfcb "STU ", EXT; 120 to 12Fdistbl2:fcb "LBRA"fcb "LBRN"fcb "LBHI"fcb "LBLS"fcb "LBHS"fcb "LBLO"fcb "LBNE"fcb "LBEQ"fcb "LBVC"fcb "LBVS"fcb "LBPL"fcb "LBMI"fcb "LBGE"fcb "LBLT"fcb "LBGT"fcb "LBLE"distbl3:fcb $13Ffcb $183fcb $18Cfcb $18Efcb $193fcb $19Cfcb $19Efcb $19Ffcb $1A3fcb $1ACfcb $1AEfcb $1AFfcb $1B3fcb $1BCfcb $1BEfcb $1BFfcb $1CEfcb $1DEfcb $1DFfcb $1EEfcb $1EFfcb $1FEfcb $1FFfcb $23Ffcb $283fcb $28Cfcb $293fcb $29Cfcb $2A3fcb $2ACfcb $2B3fcb $2BCdistbl4:fcb "SWI2", 0fcb "CMPD", IMMWfcb "CMPY", IMMWfcb "LDY ", IMMWfcb "CMPD", DIRECTfcb "CMPY", DIRECTfcb "LDY ", DIRECTfcb "STY ", DIRECTfcb "CMPD", NDXfcb "CMPY", NDXfcb "LDY ", NDXfcb "STY ", NDXfcb "CMPD", EXTfcb "CMPY", EXTfcb "LDY ", EXTfcb "STY ", EXTfcb "LDS ", IMMWfcb "LDS ", DIRECTfcb "STS ", DIRECTfcb "LDS ", NDXfcb "STS ", NDXfcb "LDS ", EXTfcb "STS ", EXTfcb "SWI3", 0fcb "CMPU", IMMWfcb "CMPS", IMMWfcb "CMPU", DIRECTfcb "CMPS", DIRECTfcb "CMPU", NDXfcb "CMPS", NDXfcb "CMPU", EXTfcb "CMPS", EXTdisassem:clr farflagswifcb MF_GetRangeswifcb MF_CRLFldy mon_r1+2disLoop1:tfr y,dswifcb MF_DisplayWordAsHexldb #' 'swifcb MF_OUTCHldb ,y+bitb #$300lbne dis1andb #$FF ; mask off extra bitscmpb #$15bne dis20stb farflagbra disLoop1dis20:ldx #distbl1dis23:lda #5mulabxldb ,x+swifcb MF_OUTCHldb ,x+swifcb MF_OUTCHldb ,x+swifcb MF_OUTCHldb ,x+swifcb MF_OUTCHldb #' 'swifcb MF_OUTCHldb ,x+lbeq disNextLinecmpb #DIRECTbne disNotDirectldb ,y+swifcb MF_DisplayByteAsHexlbra disNextLinedisNotDirect:cmpb #LSRELbne disNotLReldis21:ldd ,y++dis2:leax d,ytfr x,dswifcb MF_DisplayWordAsHexlbra disNextLinedisNotLRel:cmpb #SRELbne disNotRelldb ,y+clrabra dis2disNotRel:cmpb #NDXbne disNotNdxldb ,y+bitb #$800bne disNot9 ; test for offset 9 modepshs bandb #$1FF ; mask to offset bitsclra ;bitb #$100 ; test for negative offsetbeq dis3deca ; sign extend offsetorb #$E00dis3:swifcb MF_DisplayWordAsHexldb #','swifcb MF_OUTCHpuls bbsr disNdxRegswifcb MF_OUTCHlbra disNextLinedisNot9:pshs bbitb #$100 ; check if indirectbeq dis4ldb #'['swifcb MF_OUTCHdis4:ldb ,s ; get back bandb #15bne disNotRplusldb ,sbitb #$80 ; outer indexed?beq dis5ldb #']'swifcb MF_OUTCHdis5:ldb #','swifcb MF_OUTCHldb ,sbsr disNdxRegswifcb MF_OUTCHldb #'+'swifcb MF_OUTCHpuls bbitb #$100lbeq disNextLinebitb #$80lbne disNextLineldb #']'swifcb MF_OUTCHlbra disNextLinedisNotRplus:cmpb #1bne disNotRplusplusldb ,sbitb #$80 ; outer indexed?beq dis6ldb #']'swifcb MF_OUTCHdis6:ldb #','swifcb MF_OUTCHldb ,sbsr disNdxRegswifcb MF_OUTCHldb #'+'swifcb MF_OUTCHswifcb MF_OUTCHpuls bbitb #$100lbeq disNextLinebitb #$80lbne disNextLineldb #']'swifcb MF_OUTCHlbra disNextLinedisNotRplusplus:cmpb #2bne disNotRminusldb ,sbitb #$80 ; outer indexed?beq dis7ldb #']'swifcb MF_OUTCHdis7:ldb #','swifcb MF_OUTCHldb ,sbsr disNdxRegswifcb MF_OUTCHldb #'-'swifcb MF_OUTCHpuls bbitb #$100lbeq disNextLinebitb #$80lbne disNextLineldb #']'swifcb MF_OUTCHlbra disNextLinedisNotRminus:cmpb #3bne disNotRminusminusldb ,sbitb #$80 ; outer indexed?beq dis8ldb #']'swifcb MF_OUTCHdis8:ldb #','swifcb MF_OUTCHldb ,sbsr disNdxRegswifcb MF_OUTCHldb #'-'swifcb MF_OUTCHswifcb MF_OUTCHpuls bbitb #$100lbeq disNextLinebitb #$80lbne disNextLineldb #']'swifcb MF_OUTCHlbra disNextLinedisNotRminusminus:cmpb #4bne disNotRldb ,sbitb #$80 ; outer indexed?beq dis9ldb #']'swifcb MF_OUTCHdis9:ldb #','swifcb MF_OUTCHldb ,sbsr disNdxRegswifcb MF_OUTCHpuls bbitb #$100lbeq disNextLinebitb #$80lbne disNextLineldb #']'swifcb MF_OUTCHlbra disNextLinedisNotR:cmpb #5bne disNotBOffsldb #'B'swifcb MF_OUTCHldb ,sbitb #$80 ; outer indexed?beq dis10ldb #']'swifcb MF_OUTCHdis10:ldb #','swifcb MF_OUTCHldb ,sbsr disNdxRegswifcb MF_OUTCHldb #'-'swifcb MF_OUTCHswifcb MF_OUTCHpuls bbitb #$100lbeq disNextLinebitb #$80lbne disNextLineldb #']'swifcb MF_OUTCHlbra disNextLinedisNotBOffs:cmpb #6bne disNotAOffsldb #'A'swifcb MF_OUTCHldb ,sbitb #$80 ; outer indexed?beq dis11ldb #']'swifcb MF_OUTCHdis11:ldb #','swifcb MF_OUTCHldb ,sbsr disNdxRegswifcb MF_OUTCHldb #'-'swifcb MF_OUTCHswifcb MF_OUTCHpuls bbitb #$100lbeq disNextLinebitb #$80lbne disNextLineldb #']'swifcb MF_OUTCHlbra disNextLinedisNotAOffs:cmpb #8bne disNotBOldb ,y+sexswifcb MF_DisplayWordAsHexldb ,sbitb #$80 ; outer indexed?beq dis12ldb #']'swifcb MF_OUTCHdis12:ldb #','swifcb MF_OUTCHldb ,sbsr disNdxRegswifcb MF_OUTCHldb #'-'swifcb MF_OUTCHswifcb MF_OUTCHpuls bbitb #$100lbeq disNextLinebitb #$80lbne disNextLineldb #']'swifcb MF_OUTCHlbra disNextLinedisNotBO:cmpb #9bne disNotWOldd ,y++swifcb MF_DisplayWordAsHexldb ,sbitb #$80 ; outer indexed?beq dis13ldb #']'swifcb MF_OUTCHdis13:ldb #','swifcb MF_OUTCHldb ,sbsr disNdxRegswifcb MF_OUTCHldb #'-'swifcb MF_OUTCHswifcb MF_OUTCHpuls bbitb #$100lbeq disNextLinebitb #$80lbne disNextLineldb #']'swifcb MF_OUTCHlbra disNextLinedisNotWO:cmpb #10bne disNotTOldb ,y++swifcb MF_DisplayByteAsHexldd ,y++swifcb MF_DisplayWordAsHexldb ,sbitb #$80 ; outer indexed?beq dis14ldb #']'swifcb MF_OUTCHdis14:ldb #','swifcb MF_OUTCHldb ,sbsr disNdxRegswifcb MF_OUTCHldb #'-'swifcb MF_OUTCHswifcb MF_OUTCHpuls bbitb #$100lbeq disNextLinebitb #$80lbne disNextLineldb #']'swifcb MF_OUTCHlbra disNextLinedisNotTO:cmpb #11bne disNotDOffsldb #'D'swifcb MF_OUTCHldb ,sbitb #$80 ; outer indexed?beq dis15ldb #']'swifcb MF_OUTCHdis15:ldb #','swifcb MF_OUTCHldb ,sbsr disNdxRegswifcb MF_OUTCHldb #'-'swifcb MF_OUTCHswifcb MF_OUTCHpuls bbitb #$100lbeq disNextLinebitb #$80lbne disNextLineldb #']'swifcb MF_OUTCHlbra disNextLinedisNotDOffs:cmpb #12bne disNotPBOldb ,y+sexswifcb MF_DisplayWordAsHexldb ,sbitb #$80 ; outer indexed?beq dis16ldb #']'swifcb MF_OUTCHdis16:ldb #','swifcb MF_OUTCHldb ,sbsr disNdxRegldb #'P'swifcb MF_OUTCHldb #'C'swifcb MF_OUTCHldb #'-'swifcb MF_OUTCHswifcb MF_OUTCHpuls bbitb #$100lbeq disNextLinebitb #$80lbne disNextLineldb #']'swifcb MF_OUTCHlbra disNextLinedisNotPBO:cmpb #13bne disNotPWOldd ,y++swifcb MF_DisplayWordAsHexldb ,sbitb #$80 ; outer indexed?beq dis17ldb #']'swifcb MF_OUTCHdis17:ldb #','swifcb MF_OUTCHldb ,sbsr disNdxRegldb #'P'swifcb MF_OUTCHldb #'C'swifcb MF_OUTCHldb #'-'swifcb MF_OUTCHswifcb MF_OUTCHpuls bbitb #$100lbeq disNextLinebitb #$80lbne disNextLineldb #']'swifcb MF_OUTCHlbra disNextLinedisNotPWO:cmpb #14bne disNotPTOldb ,y+swifcb MF_DisplayByteAsHexldd ,y++swifcb MF_DisplayWordAsHexldb ,sbitb #$80 ; outer indexed?beq dis18ldb #']'swifcb MF_OUTCHdis18:ldb #','swifcb MF_OUTCHldb ,sbsr disNdxRegldb #'P'swifcb MF_OUTCHldb #'C'swifcb MF_OUTCHldb #'-'swifcb MF_OUTCHswifcb MF_OUTCHpuls bbitb #$100lbeq disNextLinebitb #$80lbne disNextLineldb #']'swifcb MF_OUTCHlbra disNextLinedisNotPTO:ldb #'['swifcb MF_OUTCHldd ,y++swifcb MF_DisplayWordAsHexldb #']'swifcb MF_OUTCHlbra disNextLinedisNotNdx:cmpb #EXTbne disNotExttst farflagbeq dis30ldb ,y++swifcb MF_DisplayByteAsHexdis30:ldd ,y++swifcb MF_DisplayWordAsHexclr farflaglbra disNextLinedisNotExt:cmpb #IMMBbne disNotIMMBldb #'#'swifcb MF_OUTCHldb ,y+swifcb MF_DisplayByteAsHexlbra disNextLinedisNotIMMB:cmpb #IMMWbne disNotIMMWldb #'#'swifcb MF_OUTCHldd ,y++swifcb MF_DisplayWordAsHexbra disNextLinedisNotIMMW:cmpb #TFREXGbne disNotTfrldb ,y+bsr disTfrExgbra disNextLinedisNotTfr:dis1:cmpb #$121blo dis19cmpb #$12Fbhi dis19andb #$FFldx #distbl2aslbaslbabxldb ,x+swifcb MF_OUTCHldb ,x+swifcb MF_OUTCHldb ,x+swifcb MF_OUTCHldb ,x+swifcb MF_OUTCHldb #' 'swifcb MF_OUTCHlbra dis21dis19:ldx #0dis24:cmpb distbl3,xbne dis25ldx #distbl4lbra dis23dis25:inxcmpx #31blo dis24ldb #'?'swifcb MF_OUTCHswifcb MF_OUTCHswifcb MF_OUTCHswifcb MF_OUTCHbra disNextLinedisNextLine:clr farflagswifcb MF_CRLFcmpy mon_r2+2lblo disLoop1disJmpMon:swifcb MF_Monitorbra disJmpMondisNdxRegs:fcb 'X','Y','S','U'disTfrRegs:fcb "D X Y U S PC A B CCDP "disNdxReg:andb #$600rolbrolbrolbrolbclrapshs utfr d,ulda disNdxRegs,upuls uexg a,brtsdisTfrReg:pshs b,xldx #disTfrRegsaslblda b,xexg a,bswifcb MF_OUTCHexg a,binxldb b,xcmpb #' 'beq disTfr1swifcb MF_OUTCHdisTfr1:puls b,x,pcdisTfrExg:pshs brolbrolbrolbrolbandb #15bsr disTfrRegldb #','swifcb MF_OUTCHldb ,sandb #15bsr disTfrRegpuls b,pcASMO:pshs dldd #ASMOUTCHstd CharOutVecpuls d,pcASMOO:pshs d'' ldd #DisplayCharstd CharOutVecpuls d,pcASMOUTCH:stb ,u+rtsDumpAsmbuf:ldu #asmbufdab2:ldb ,u+beq dab1swifcb MF_OUTCHbra dab2dab1:rts
Go to most recent revision | Compare with Previous | Blame | View Log
