home *** CD-ROM | disk | FTP | other *** search
/ ftp.whtech.com / ftp.whtech.com.tar / ftp.whtech.com / Geneve / 9640news / CAT17 / DSSSMBLR.ARK < prev    next >
Text File  |  2006-10-19  |  6KB  |  119 lines

  1. ?
  2.                            FAST FORTH DISASSEMBLER
  3.                            =======================
  4. (Excerpted from Network-99 Newletter 1#5 by permission of the Author
  5. Briand Sanderson.  For a subscription write to Briand Sanderson, c/o LTC
  6. M. C.  Sanderson, Hdq. 2nd/33rd Armor, P.O. Box 4356, APO NY 09045.  The
  7. newsletter is a monthly and costs $10 per year.)
  8.  
  9. Briand has written the first half of a super-fast FORTH disassembler.  He
  10. has two versions of the first part which gives the disassemble listing of
  11. the address, its contents, text and the opcode.  In the second installment
  12. in the next Network-99 Newsletter he will be adding the operands to the
  13. diassembled code.  The first version below is four screens long but turns
  14. out to be about 15% faster, according to Briand, than the second which takes
  15. up only two screens.  Both are blindingly fast!
  16.  
  17.  
  18. ( FORTH DISASSEMBLER VERSION 1.1 NETWORK-99 NEWLETTER 1#4 PG1 )
  19. BASE->R HEX
  20. : FORMAT ( HEX --- FORMAT ) DUP 0 < IF 1 ELSE DUP 200 < IF 0
  21.   ELSE DUP 340 < IF 8 ELSE DUP 400 < IF 7
  22.   ELSE DUP 800 < IF 6 ELSE DUP 1000 < IF 5
  23.   ELSE DUP 2000 < IF 2 ELSE DUP 2C00 < IF 3 ELSE DUP 3000 < IF 9
  24.   ELSE DUP 3800 < IF 4 ELSE DUP 4000 < IF 9 ELSE 1 THEN THEN
  25.   THEN THEN THEN THEN THEN THEN THEN THEN THEN SWAP DROP ;
  26. : FM1 DUP 0 1000 M/ SWAP DROP CASE 4 OF ." SZC  " ENDOF 5
  27.   OF ." SZCB " ENDOF 6 OF ." S    " ENDOF 7 OF ." SB   " ENDOF 8
  28.   OF ." C    " ENDOF 9 OF ." CB   " ENDOF A OF ." A    " ENDOF B
  29.   OF ." AB   " ENDOF C OF ." MOV  " ENDOF D OF ." MOVB " ENDOF E
  30.   OF ." SOC  " ENDOF F OF ." SOCB " ENDOF ENDCASE ;
  31. : FM9 DUP 100 / 4 / CASE B OF ." XOP  " ENDOF E OF ." MPY  "
  32.   ENDOF F OF ." DIV " ENDOF ENDCASE ;
  33. -->
  34. ( FORTH DISASSEMBLER V1.1   PG2 )
  35. : FM2 DUP 100 / CASE 10 OF DUP
  36.   1000 = IF ." NOP  " ELSE ." JMP  "
  37.   THEN ENDOF 11 OF ." JLT  " ENDOF 12 OF ." JLE  " ENDOF
  38.   13 OF ." JEQ  " ENDOF 14 OF ." JHE  " ENDOF 15 OF ." JGT  "
  39.   ENDOF 16 OF ." JNE  " ENDOF 17 OF ." JNC  " ENDOF 18 OF
  40.   ." JOC  " ENDOF 19 OF ." JNO  " ENDOF 1A OF ." JL   " ENDOF
  41.   1B OF ." JH   " ENDOF 1C OF ." JOP  " ENDOF 1D OF ." SBO  "
  42.   ENDOF 1E OF ." SBZ  " ENDOF 1F OF ." TB   " ENDOF ENDCASE ;
  43. : FM4 DUP 100 / 4 / CASE C OF ." LDCR " ENDOF D OF ." STCR "
  44.   ENDOF ENDCASE ;
  45. : FM5 DUP 100 / CASE 8 OF ." SRA  " ENDOF 9 OF ." SRL  " ENDOF A
  46.   OF ." SLA  " ENDOF B OF ." SRC  " ENDOF ENDCASE ;
  47. : FM7 DUP 10 / 2 / CASE 1A OF ." IDLE " ENDOF 1B OF ." RSET "
  48.   ENDOF 1C OF ." RTWP " ENDOF 1D OF ." CKON " ENDOF 1E OF
  49.   ." CKOF " ENDOF 1F OF ." LREX " ENDOF ENDCASE ; -->
  50. ( FORTH DISASSEMBLER V1.1  PG3 )
  51. : FM6 DUP 10 / 4 / CASE 10 OF ." BLWP " ENDOF 11 OF ." B    "
  52.   ENDOF 12 OF ." X    " ENDOF 13 OF
  53.   ." CLR  " ENDOF 14 OF ." NEG  " ENDOF 15 OF ." INV  " ENDOF 16
  54.   OF ." INC  " ENDOF 17 OF ." INCT " ENDOF 18 OF ." DEC  " ENDOF
  55.   19 OF ." DECI " ENDOF 1A OF ." BL   " ENDOF 1B OF ." SWPB "
  56.   ENDOF 1C OF ." SETO " ENDOF 1D OF ." ABS  " ENDOF ENDCASE ;
  57. : FM8 DUP 10 / 2 /            CASE 10 OF ." LI   " ENDOF 11 OF
  58.   ." AI   " ENDOF 12 OF ." ANDI " ENDOF 13 OF ." ORI  " ENDOF
  59.   14 OF ." CI   " ENDOF 15 OF ." STWP " ENDOF 16 OF ." STST "
  60.   ENDOF 17 OF   ." LWPI " ENDOF 18 OF ." LIMI " ENDOF ENDCASE ;
  61.  
  62.  
  63. : FM3 DUP 100 / 4 / CASE 8 OF ." COC  " ENDOF 9 OF ." CZC  "
  64.   ENDOF A OF ." XOR  " ENDOF ENDCASE ;
  65. -->
  66. ( FORTH DISASSEMBLER V1.1 PG4 )
  67. : (DASSM) ( HEX FORMAT --- OPCODE/OPERAND ) CASE 0 OF ." ---- "
  68.   ENDOF 1 OF FM1 ENDOF 2 OF FM2 ENDOF 3 OF FM3 ENDOF 4
  69.   OF FM4 ENDOF 5 OF FM5 ENDOF 6 OF FM6 ENDOF 7 OF FM7 ENDOF 8 OF
  70.   FM8 ENDOF 9 OF FM9 ENDOF ENDCASE DROP ;
  71. : TXT DUP 20 < IF ." ." DROP ELSE DUP 7E > IF ." ." DROP ELSE
  72.   EMIT THEN THEN ;
  73. : (TEXT) ( HEX --- ) 100 /MOD TXT TXT ;
  74.  
  75. : DASSM ( LOW HIGH --- ) BASE @ >R CLS 0 0 GOTOXY
  76.   ." ADDR DATA TX OPCODE/OPERAND"
  77.   CR 28 SCRN_START ! 2+ SWAP HEX DO I DUP 4 U.R SPACE @ DUP DUP
  78.   DUP 4 U.R SPACE (TEXT) SPACE FORMAT (DASSM) CR PAUSE IF
  79.   LEAVE THEN 2 +LOOP 0 SCRN_START ! R> BASE ! ;
  80.  
  81. R->BASE
  82. ( FORTH DISASSEMBLER VERSION 1.2 NETWORK-99 NEWSLETTER 1#5 )
  83. 0 VARIABLE M 270 ALLOT
  84.   M  !" LI  AI  ANDIORI CI  STWPSTSTLWPILIMIIDLERSETRTWPCKONCKOF
  85. LREXBLWPB   X   CLR NEG INV INC INCTDEC DECTBL  SWPBSETOABS SRA
  86. SRL SLA SRC JMP JLT JLE JEQ JHE JGT JNE JNC JOC JNO JL  JH  JOP
  87. SBO SBZ TB  COC CZC XOR XOP LDCRSTCRMPY DIV SZC SZCBS   SB  C
  88. " M 248 + !" CB  A   AB  MOV MOVBSOC SOCB"
  89. : MNEM 4 * M + 4 TYPE SPACE ;
  90. HEX 00 VARIABLE OP 00 , 200 , 220 , 240 , 260 , 280 , 2A0 , 2C0
  91. , 2E0 , 300 , 340 , 360 , 380 , 3A0 , 3C0 , 400 , 440 ,
  92. 480 , 4C0 , 500 , 540 , 580 , 5C0 , 600 , 640 , 680 , 6C0 ,
  93. 700 , 740 , 800 , 900 , A00 , B00 , 1000 , 1100 , 1200 , 1300 ,
  94. 1400 , 1500 , 1600 , 1700 , 1800 , 1900 , 1A00 , 1B00 , 1C00 ,
  95. 1D00 , 1E00 , 1F00 , 2000 , 2400 , 2800 , 2C00 , 3000 , 3400 ,
  96. 3800 , 3C00 , 4000 , 5000 , 6000 , 7000 , 8000 , 9000 , A000 ,
  97. B000 , C000 , D000 , E000 , F000 , DECIMAL BASE->R -->
  98. : D< DMINUS D+ SWAP DROP 0< ; 0 VARIABLE LOW 0 VARIABLE HIGH
  99. : 2DUP OVER OVER ;
  100. : (MNM) ( DATA --- INDX ) 68 0 DO 2DUP I 2 * 4 + OP + @ 0 D< IF
  101.   I LEAVE ELSE I 67 = IF 68 LEAVE THEN THEN LOOP ;
  102. : MNM ( DATA --- ) 0 (MNM) DUP 0= IF ." ----" DROP ELSE 1-
  103.   MNEM THEN DROP DROP ; HEX
  104. : TXT DUP 20 < IF ." ." DROP ELSE DUP 7E > IF ." ." DROP ELSE
  105.   EMIT THEN THEN ;
  106. : (TEXT) ( HEX --- ) 100 /MOD TXT TXT ;
  107. : (DASSM) ( ADDR --- ) DUP 4 U.R SPACE @ DUP DUP 4 U.R SPACE
  108.   (TEXT) SPACE MNM CR ;
  109. : DASSM ( LOW HIGH --- ) HIGH ! LOW ! BASE @ >R CLS 0 0 GOTOXY
  110.   ." ADDR DATA TX MNM  OPERANDS" CR 28 SCRN_START !
  111.   HEX BEGIN LOW @ (DASSM) PAUSE IF HIGH @ LOW ! THEN 2 LOW +!
  112.   HIGH @ 0 LOW @ 0 D< UNTIL 0 SCRN_START ! R> BASE ! ;
  113. ( END VERSION 1.2 NETWORK-99 NEWSLETTER 1#5 ) R->BASE
  114.  
  115.  
  116. Download complete.  Turn off Capture File.
  117.  
  118.  
  119.