home *** CD-ROM | disk | FTP | other *** search
- /***********************************************************************/
- /***********************************************************************/
- /* */
- /* ╘HIS PROGRAM IS COPYRIGHT 1986 BY ┴LAN ┘ORINKS. ╔T MAY BE FREELY */
- /* DISTRIBUTED FOR NON COMMERCIAL USAGE IF THIS COPYRIGHT NOTICE IS */
- /* LEFT INTACT. ├OMMERCIAL USAGE OF THIS PROGRAM IS EXPLICITLY */
- /* FORBIDDEN WITHOUT THE WRITTEN PERMISSION OF THE AUTHOR. */
- /* */
- /***********************************************************************/
- /***********************************************************************/
-
-
- /* CDT VERSION 1.0 PART 13 OF 15 ╩ULY 25, 1986 */
-
- /* 6502/8502 DISASSEMBLER */
-
- #INCLUDE <STDIO.H>
- #INCLUDE "DBUG.H"
-
- #IFDEF ├64
- #DEFINE ╬╪╘┬┘╘┼ ╨┼┼╦(╙┴──╥(DSDMP)++)
- #ELSE
- #DEFINE ╬╪╘┬┘╘┼ (CHAR)PEEK(┬┴╬╦(DSDMP),╙┴──╥(DSDMP)++)
- #ENDIF
-
- #DEFINE ┴──╥ñ═╧─┼ 3 /* ADDRESSING MODE POSITION */
-
-
-
- VOID
- DASMBL()
- █
- INT NUMBYTE ; /* NUMBER OF BYTES TO PRINT PER OPCODE */
- AUTO CHAR BYTE1, BYTE2, BYTE3 ; /* VARIABLES TO HOLD OPCODE AND OPERAND BYTES*/
- AUTO CHAR OPBUF[10] ; /* TEMPORARY BUFFER FOR PRINTED OUTPUT */
- EXTERN CHAR *OPCODE[] ; /* OPCODE AND ADDRESSING STRUCTURE */
- EXTERN INT PAGE ; /* PAGINATION FLAG */
- EXTERN VOID PAGER() ;
-
- /* ╙┴──╥(DSDMP) WILL BE INCREMENTED BY THE MACRO ╬╪╘┬┘╘ */
-
- WHILE( ╙┴──╥(DSDMP) < ┼┴──╥(DSDMP) )
- █
- BYTE1 = ╬╪╘┬┘╘┼ ;
-
- /* PRINT ADDRESS OF BYTE - ADJUST FOR INCREMENT OF ╬╪╘┬┘╘┼ */
- PRINTF("%04X ",(╙┴──╥(DSDMP)) - 1) ;
-
- /* PRINT OPCODE IN HEX */
- PRINTF("%02X ",BYTE1) ;
-
- /* GET ASCII REPRESENTATION OF OPCODE AND # OF BYTES OF OPERAND */
- /* PLACE HEX VALUES OF OPERANDS IN OPBUF TO BE OUTPUT AFTER */
- /* AFTER ASCII OPCODE IN RECOGNIZABLE ORDER( HI BYTE - LOW BYTE */
- SWITCH(OPCODE[BYTE1][┴──╥ñ═╧─┼])
- █
- CASE ╔══:
- BYTE2 = ╬╪╘┬┘╘┼ ;
- SPRINTF(OPBUF,"#$%02X",BYTE2) ;
- NUMBYTE = 1 ;
- BREAK ;
- CASE ┴┬╙:
- BYTE2 = ╬╪╘┬┘╘┼ ;
- BYTE3 = ╬╪╘┬┘╘┼ ;
- SPRINTF(OPBUF,"$%02X%02X",BYTE3,BYTE2) ;
- NUMBYTE = 2 ;
- BREAK ;
- CASE ┴┬╙╪:
- BYTE2 = ╬╪╘┬┘╘┼ ;
- BYTE3 = ╬╪╘┬┘╘┼ ;
- SPRINTF(OPBUF,"$%02X%02X,X",BYTE3,BYTE2) ;
- NUMBYTE = 2 ;
- BREAK ;
- CASE ┴┬╙┘:
- BYTE2 = ╬╪╘┬┘╘┼ ;
- BYTE3 = ╬╪╘┬┘╘┼ ;
- SPRINTF(OPBUF,"$%02X%02X,Y",BYTE3,BYTE2) ;
- NUMBYTE = 2 ;
- BREAK ;
- CASE ┌╨:
- BYTE2 = ╬╪╘┬┘╘┼ ;
- SPRINTF(OPBUF,"#$%02X",BYTE2) ;
- NUMBYTE = 1 ;
- BREAK ;
- CASE ┌╨╪:
- BYTE2 = ╬╪╘┬┘╘┼ ;
- SPRINTF(OPBUF,"#$%02X,X",BYTE2) ;
- NUMBYTE = 1 ;
- BREAK ;
- CASE ┌╨┘:
- BYTE2 = ╬╪╘┬┘╘┼ ;
- SPRINTF(OPBUF,"#$%02X,Y",BYTE2) ;
- NUMBYTE = 1 ;
- BREAK ;
- CASE ╔╬─:
- BYTE2 = ╬╪╘┬┘╘┼ ;
- BYTE3 = ╬╪╘┬┘╘┼ ;
- SPRINTF(OPBUF,"$%02X%02X,X",BYTE3,BYTE2) ;
- NUMBYTE = 2 ;
- BREAK ;
- CASE ╔╬─╪:
- BYTE2 = ╬╪╘┬┘╘┼ ;
- SPRINTF(OPBUF,"#$%02X,X",BYTE2) ;
- NUMBYTE = 1 ;
- BREAK ;
- CASE ╔╬─┘:
- BYTE2 = ╬╪╘┬┘╘┼ ;
- SPRINTF(OPBUF,"#$%02X,Y",BYTE2) ;
- NUMBYTE = 1 ;
- BREAK ;
- CASE ╥┼╠:
- BYTE2 = ╬╪╘┬┘╘┼ ;
- IF( BYTE2 <= 0X7F ) /* FORWARD BRANCH */
- SPRINTF(OPBUF,"$%04X",╙┴──╥(DSDMP) + (CHAR)BYTE2 ) ;
- ELSE
- /* BACKWARD BRANCH - 2'S COMPLEMENT */
- SPRINTF(OPBUF,"$%04X",╙┴──╥(DSDMP) -
- ( (CHAR)(»BYTE2 & 0X00FF) + 1) ) ;
- NUMBYTE = 1 ;
- BREAK ;
- CASE ┴├├:
- SPRINTF(OPBUF,"A") ;
- NUMBYTE = 0 ;
- BREAK ;
- CASE ╬╧╬┼:
- DEFAULT :
- *OPBUF = '\0' ;
- NUMBYTE = 0 ;
- BREAK ;
- ▌
-
- /* PRINT THE HEX VALUES OF OPERANDS IN READ ORDER AFTER HEX OPCODE */
- PRINTF( (NUMBYTE >= 1 ? "%02X " : " "),BYTE2) ;
- PRINTF( (NUMBYTE >= 2 ? "%02X " : " "),BYTE3) ;
-
- /* PRINT ASCII REPRESENTATION OF OPCODE */
- PRINTF(" %C%C%C ",OPCODE[BYTE1][0],OPCODE[BYTE1][1],
- OPCODE[BYTE1][2] ) ;
-
- /* PRINT OPERANDS STORED IN OPBUF */
- PRINTF("%S\N",OPBUF) ;
-
- /* TAKE CARE OF PAGEING IF NECESSARY */
- IF ( PAGE == ╘╥╒┼ )
- PAGER() ;
- ▌
- ▌
-