home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / GENASM / CONVERSI.ASM < prev    next >
Assembly Source File  |  2000-06-30  |  12KB  |  399 lines

  1. ;
  2. ;    CONVERSI.ASM ver 1.1
  3. ;     Base conversion program
  4. ;
  5. ;From Heathkit course on assembly language
  6. ;
  7. ;Converts between ASCII, Binary, Decimal,
  8. ;Hexadecimal, Octal, and Split Octal.
  9. ;
  10. ;Entered by  Ben Miller    WB8LGH
  11. ;on 02/20/80, with routines for CP/M
  12. ;I/O. Added prompt for input info.
  13. ;Added lower case print on ASCII output.
  14. ;
  15. CR    EQU    0DH    ;CARRIAGE RETURN
  16. LF    EQU    0AH    ;LINE FEED
  17. BDOS    EQU    0005H    ;CP/M ENTRY POINT
  18. ;
  19.     ORG    100H    ;ORIGIN OF OBJECT CODE
  20. ;
  21. BEGIN    LXI    SP,STACK;DEFINE TOP OF STACK
  22.     LXI    H,MESS6    ;SET H-L TO MESSAGE #6
  23.     CALL    PRINT    ;GO PRINT MESSAGE
  24. ;
  25. BEGIN1    LXI    H,MESS1    ;SET H-L TO MESSAGE #1
  26.     CALL    PRINT    ;GO PRINT MESSAGE
  27.     LXI    D,0000H ;LOAD D-E REGISTERS WITH 0
  28.     CALL    INPUT    ;GET BASE OF ENTRY
  29.     CPI    'D'    ;IS IT DECIMAL?
  30.     JZ    DECIN    ;IF DECIMAL GO DECIN
  31.     CPI    'H'    ;IS IT HEXADECIMAL?
  32.     JZ    HEXIN    ;IF HEXADECIMAL GO HEXIN
  33.     CPI    'O'    ;IS IT OCTAL?
  34.     JZ    OCTIN    ;IF OCTAL GO OCTIN
  35.     CPI    'S'    ;IS IT SPLIT OCTAL
  36.     JZ    SOCTN    ;IF SPLIT OCTAL GO SOCTN
  37.     CPI    'B'    ;IS IT BINARY
  38.     JZ    BININ    ;IF BINARY GO BININ
  39.     CPI    'A'    ;IS IT ASCII?
  40.     JZ    ASCIN    ;IF ASCII GO ASCIN
  41.     CPI    'X'    ;ARE YOU DONE?
  42.     JZ    0000H    ;DO A WARM BOOT
  43.     LXI    H,MESS2    ;NONE OF THE ABOVE? -MUST BE AN ERROR
  44.     CALL    PRINT    ;GO PRINT ERROR MESSAGE
  45.     JMP    BEGIN    ;START AGAIN TURKEY INPUT IN ERROR
  46. ;
  47. PRINT    MOV    A,M    ;GET MESSAGE CHARACTER
  48.     ORA    A    ;CHECK FOR DELIMITER
  49.     RZ        ;RETURN IF DONE
  50.     CALL    OUTPT    ;DISPLAY CHARACTER
  51.     INX    H    ;SET H-L TO NEXT CHARACTER
  52.     JMP    PRINT    ;DO ANOTHER CHARACTER
  53. ;
  54. INPUT    PUSH    B    ;SAVE REGISTERS
  55.     PUSH    D
  56.     PUSH    H
  57.     MVI    C,1    ;READ CONSOLE KBD
  58.     CALL    BDOS    ;CALL CP/M ENTRY
  59.     POP    H    ;RESTORE REGISTERS
  60.     POP    D
  61.     POP    B
  62.     RET        ;RETURN TO MAIN PROGRAM
  63. ;
  64. OUTPT    PUSH    PSW    ;SAVE REGISTERS
  65.     PUSH    B
  66.     PUSH    D
  67.     PUSH    H
  68.     MOV    E,A    ;GET CHARACTER FOR CP/M
  69.     MVI    C,2    ;WRITE CHARACTER TO CRT
  70.     CALL    BDOS    ;CALL CP/M ENTRY
  71.     POP    H    ;RESTORE REGISTERS
  72.     POP    D
  73.     POP    B
  74.     POP    PSW
  75.     RET        ;RETURN TO MAIN PROGRAM
  76. ;
  77. DECIN    LXI    H,DECIMAL;POINT TO ASCII FOR DECIMAL
  78.     CALL    VALIN    ;SHOW QUESTIONS WITH PROPER BASE
  79. ;
  80. NEXT1    CALL    GETIN    ;GET CHARACTER AND ECHO
  81.     JZ    CNVRT    ;GO CONVERT TO ALL BASES IF SO
  82.     SUI    30H    ;SUBTRACT 30 HEX FROM ASCII
  83.     JC    ERROR    ;NO GOOD IF CARRY
  84.     CPI    10    ;HIGHER THAN "9"?
  85.     JNC    ERROR    ;NO GOOD IF SO
  86.     LXI    H,0000H ;CLEAR H-L FOR MULTIPLICATION
  87.     DAD    D    ;H-L=D-E TIMES ONE
  88.     DAD    H    ;H-L=D-E TIMES TWO
  89.     DAD    H    ;H-L=D-E TIMES FOUR
  90.     DAD    D    ;H-L=D-E TIMES FIVE
  91.     DAD    H    ;H-L=D-E TIMES TEN
  92.     MOV    E,A    ;NEW KEY VALUE TO E
  93.     MVI    D,00H    ;CLEAR D
  94.     DAD    D    ;ADD UNIT VALUE TO D-E
  95.     XCHG        ;NEW TOTAL TO D-E
  96.     JMP    NEXT1    ;LOOP FOR NEXT CHARACTER
  97. ;
  98. OCTIN    LXI    H,OCTAL    ;POINT TO ASCII FOR OCTAL
  99.     CALL    VALIN    ;SHOWS QUESTION WITH PROPER BASE
  100. ;
  101. NEXT2    CALL    GETIN    ;GET CHARACTER AND ECHO IT
  102.     JZ    CNVRT    ;GO CONVERT TO ALL BASES IF SO
  103.     SUI    30H    ;SUBTRACT 30 HEX FROM ASCII
  104.     JC    ERROR    ;NO GOOD IF CARRY
  105.     CPI    8    ;HIGHER THAN "7"?
  106.     JNC    ERROR    ;NO GOOD IF SO
  107.     LXI    H,0000H ;CLEAR H-L FOR MULTIPLICATION
  108.     DAD    D    ;H-L=D-E TIMES ONE
  109.     DAD    H    ;H-L=D-E TIMES TWO
  110.     DAD    H    ;H-L=D-E TIMES FOUR
  111.     DAD    H    ;H-L=D-E TIMES EIGHT
  112.     MOV    E,A    ;NEW KEY VALUE TO E
  113.     MVI    D,00H    ;CLEAR D
  114.     DAD    D    ;ADD UNIT VALUE TO TOTAL
  115.     XCHG        ;NEW TOTAL TO D-E
  116.     JMP    NEXT2    ;LOOP FOR NEXT DIGIT
  117. ;
  118. HEXIN    LXI    H,HEXAD    ;POINT TO ASCII FOR HEXADECIMAL
  119.     CALL    VALIN    ;SHOWS QUESTION WITH PROPER BASE
  120. ;
  121. NEXT3    CALL    GETIN    ;GET CHARACTER AND ECHO IT
  122.     JZ    CNVRT    ;GO CONVERT TO ALL BASES IF DONE
  123.     SUI    30H    ;SUBTRACT 30 HEX ASCII
  124.     JC    ERROR    ;NO GOOD IF CARRY
  125.     CPI    10    ;IS IT 0 THROUGH 9?
  126.     JC    HEXOK    ;IT'S OK IF SO
  127.     SUI    7    ;SUBTRACT 7 MORE FOR LETTERS
  128.     CPI    10    ;LOWER THAN 10?
  129.     JC    ERROR    ;NO GOOD IF SO
  130.     CPI    16    ;HIGHER THAN 16?
  131.     JNC    ERROR    ;NO GOOD IF SO
  132. ;
  133. HEXOK    LXI    H,0000H ;CLEAR H-L FOR MULTIPLICATION
  134.     DAD    D    ;H-L=D-E TIMES ONE
  135.     DAD    H    ;H-L=D-E TIMES TWO
  136.     DAD    H    ;H-L=D-E TIMES FOUR
  137.     DAD    H    ;H-L=D-E TIMES EIGHT
  138.     DAD    H    ;H-L=D-E TIMES SIXTEEN
  139.     MOV    E,A    ;NEW KEY VALUE TO E
  140.     MVI    D,00H    ;CLEAR D
  141.     DAD    D    ;ADD UNIT VALUE TO TOTAL
  142.     XCHG        ;NEW TOTAL TO D-E
  143.     JMP    NEXT3    ;LOOP FOR NEXT DIGIT
  144. ;
  145. BININ    LXI    H,BINRY    ;SHOWS ASCII FOR BINARY
  146.     CALL    VALIN    ;SHOWS QUESTION WITH PROPER BASE
  147. ;
  148. NEXT4    CALL    GETIN    ;GET CHARACTER AND ECHO IT
  149.     JZ    CNVRT    ;GO CONVERT IF SO
  150.     SUI    30H    ;SUBTRACT 30H FROM ASCII
  151.     JC    ERROR    ;NO GOOD IF CARRY
  152.     CPI    2    ;IF HIGHER THAN "1"?
  153.     JNC    ERROR    ;NO GOOD IF SO
  154.     LXI    H,0000H ;CLEAR H-L FOR MULTIPLICATION
  155.     DAD    D    ;H-L=D-E TIMES ONE
  156.     DAD    H    ;H-L=D-E TIMES TWO
  157.     MOV    E,A    ;NEW KEY VALUE TO E
  158.     MVI    D,00H    ;CLEAR D
  159.     DAD    D    ;ADD UNIT VALUE TO TOTAL
  160.     XCHG        ;NEW TOTAL TO D-E
  161.     JMP    NEXT4    ;LOOP FOR NEXT DIGIT
  162. ;
  163. SOCTN    LXI    H,SPLIT    ;POINT TO ASCII FOR SPLIT OCTAL
  164.     CALL    VALIN    ;SHOWS QUESTION WITH PROPER BASE
  165. ;
  166. NEXT5    CALL    GETIN    ;GET CHARACTER AND ECHO IT
  167.     JZ    CNVRT    ;GO CONVERT TO ALL BASES IF SO
  168.     CPI    '/'    ;IS CHARACTER A SLASH?
  169.     JNZ    NODOT    ;NO-CONTINUE
  170.     MOV    D,E    ;YES - TOTAL IN E BECOMES HIGH BYTE
  171.     MVI    E,00H    ;CLEAR E
  172.     JMP    NEXT5    ;GO GET NEXT CHARACTER
  173. ;
  174. NODOT    SUI    30H    ;SUBTRACT30H FROM ASCII
  175.     JC    ERROR    ;NO GOOD IF CARRY
  176.     CPI    8    ;HIGHER THAN "7"?
  177.     JNC    ERROR    ;NO GOOD IF SO
  178.     MOV    L,A    ;SAVE NEW KEY VALUE IN L
  179.     MOV    A,E    ;PREVIOUS TOTAL TO A
  180.     ADD    A    ;PREVIOUS TOTAL TIMES TWO
  181.     ADD    A    ;PREVIOUS TOTAL TIMES FOUR
  182.     ADD    A    ;PREVIOUS TOTAL TIMES EIGHT
  183.     ADD    L    ;ADD NEW KEY TO MULTIPLIED TOTAL
  184.     MOV    E,A    ;NEWTOTAL BACK TO E
  185.     JMP    NEXT5    ;LOOP FOR NEXT DIGIT
  186. ;
  187. ASCIN    LXI    H,ASCII    ;POINT TO ASCII FOR ASCII
  188.     CALL    VALIN    ;SHOWS QUESTION WITH PROPER BASE
  189. ;
  190. NEXT6    CALL    GETIN    ;GET CHARACTER AND ECHO IT
  191.     JZ    CNVRT    ;GO CONVERT TO ALL BASES IF SO
  192.     MOV    D,E    ;LAST CHARACTER MOVES TO D
  193.     MOV    E,A    ;NEW CHARACTER GOES IN E
  194.     JMP    NEXT6    ;LOOP FOR NEXT CHARACTER
  195. ;
  196. CNVRT    LXI    H,MESS5    ;SET H-L TO BEGINNING OF MESSAGE
  197.     CALL    PRINT    ;DISPLAY MESSAGE
  198. ;
  199. DOUT    XCHG        ;SWAP UNKNOWN INTO H-L
  200.     PUSH    H    ;SAVE UNKNOWN ON STACK
  201.     LXI    B,10000D;LOAD B-C WITH 10000 DECIMAL
  202.     CALL    SUBTR    ;SUBTRACT AND DISPLAY
  203.     LXI    B,1000D    ;LOAD B-C WITH 1000 DECIMAL
  204.     CALL    SUBTR    ;SUBTRACT AND DISPLAY
  205.     LXI    B,100D    ;LOAD B-C WITH 100 DECIMAL
  206.     CALL    SUBTR    ;SUBTRACT AND DISPLAY
  207.     LXI    B,10D    ;LOAD B-C WITH 10 DECIMAL
  208.     CALL    SUBTR    ;SUBTRACT AND DISPLAY
  209.     MOV    A,L    ;WHAT'S LEFT IS UNITS ONLY
  210.     ADI    30H    ;MAKE IT ASCII
  211.     CALL    OUTPT    ;DISPLAY UNITS
  212.     POP    D    ;GET ORIGINAL BACK
  213.     CALL    SPACES    ;OUTPUT TWO SPACES
  214. ;
  215. HOUT    MOV    A,D    ;HIGH BYTE OF UNKNOWN TO A
  216.     CALL    DOHEX    ;CONVERT HEX AND DISPLAY
  217.     MOV    A,E    ;LOW BYTE OF UNKNOWN TO A
  218.     CALL    DOHEX    ;CONVERT AND DISPLAY
  219.     CALL    SPACES    ;OUTPUT TWO SPACES
  220. ;
  221. OOUT    MOV    A,D    ;HIGH BYTE OF UNKNOWN TO A
  222.     RAL        ;ROTATE LEFT MOST BIT
  223.     RAL        ; INTO RIGHTMOST POSITION
  224.     PUSH    PSW    ;SAVE NEW BYTE ON STACK
  225.     ANI    01H    ;ZER0 ALL BUT RIGHT BIT
  226.     CALL    OCTOUT    ;MAKE ASCII AND DISPLAY ON CRT
  227.     POP    PSW    ;GET MODIFIED BYTE BACK
  228.     CALL    ROTES    ;GO NEXT 3 BYTES 2 TIMES
  229.     MOV    A,E    ;LOW BYTE OF UNKNOWN TO A
  230.     CALL    ROTES    ;DO LEFTOVER OF HIGH AND 5 OF LOW
  231.     CALL    ROTER    ;DO LAST THREE BYETE
  232.     CALL    SPACES    ;OUTPUT TWO SPACES
  233. ;
  234. SOOUT    MOV    A,D    ;HIGH BYTE OF UNKNOWN TO A
  235.     CALL    SOCT    ;CONVERT TO OCTAL DISPLAY
  236.     MVI    A,'/'    ;SET UP A '/' TO DISPLAY
  237.     CALL    OUTPT    ;DISPLAY ON CRT
  238.     MOV    A,E    ;LOW BYTE OF UNKNOWN TO A
  239.     CALL    SOCT    ;CONVERT TO OCTAL AND DISPLAY
  240.     CALL    SPACES    ;OUTPUT TWO SPACES
  241. ;
  242. BOUT    MOV    A,D    ;HIGH BYTE OF UNKNOWN TO A
  243.     CALL    BINOUT    ;DISPLAY AS 0'S AND 1'S
  244.     MOV    A,E    ;LOW BYTE OF UNKNOWN TO A
  245.     CALL    BINOUT    ;DISPLAY AS O'S AND 1'S
  246.     CALL    SPACES    ;OUTPUT TWO SPACES
  247. ;
  248. AOUT    MOV    A,D    ;HIGH BYTE OF UNKNOWN TO A
  249.     CALL    ATEST    ;TEST FOR LEGAL AND DISPLAY
  250.     MVI    A,' '    ;NEED A SPACE TO SEPERATE
  251.     CALL    OUTPT    ;DISPLAY THE SPACE
  252.     MOV    A,E    ;LOW BYTE OF UNKNOWN TO A
  253.     CALL    ATEST    ;TEST FOR LEGAL AND DISPLAY
  254.     CALL    CRLF    ;DO A CAR RET AND LINE FEED
  255.     CALL    CRLF    ;ONE MORE MAKES IT NICE
  256.     JMP    BEGIN1    ;START ALL OVER AGAIN???
  257. ;
  258. CRLF    MVI    A,0DH    ;SETUP A CARRIAGE RETURN
  259.     CALL    OUTPT    ;DISPLAY IT
  260.     MVI    A,0AH    ;SET UP A LINE FEED
  261.     JMP    OUTPT    ;DISPLAY IT AND RETURN TO WHEREVER
  262. ;
  263. ATEST    CPI    ' '    ;LOWER THAN A SPACE?
  264.     JC    DODOT    ;DISPLAY A '.' IF SO
  265.     CPI    7FH    ;HIGHER THAN A RUBOUT?
  266.     JC    OUTPT    ;DISPLAY A CHARACTER IF SO
  267. ;
  268. DODOT    MVI    A,'.'    ;SETUP A DOT TO DISPLAY
  269.     JMP    OUTPT    ;DISPLAY THE DOT ON THE CRT
  270.  
  271. BINOUT    MVI    B,08H    ;8 BITS TO DO - SETUP COUNTER
  272. ;
  273. BLOOP    RAL        ;ROTATE A BIT INTO CARRY
  274.     PUSH    PSW    ;SAVE THE MODIFIED BYTE
  275.     MVI    A,'1'    ;ASSUME BIT LOGIC IS 1
  276.     JC    BINOK    ;DISPLAY IT IF A-OK
  277.     MVI    A,'0'    ;OOPS  CHANGED MY MIND  FICKLE  
  278. ;
  279. BINOK    CALL    OUTPT    ;DISPLAY WHATEVER
  280.     POP    PSW    ;GET MODIFIED BYTE BACK
  281.     DCR    B    ;COUNT ONE BIT COMPLETED
  282.     JNZ    BLOOP    ;DO ANOTHER UNTILL ALL 8 ARE DONE
  283.     RET        ;THEN GO BACK TO WHEREVER
  284. ;
  285. SOCT    RAL        ;ROTATE TWO LEFTMOST BITS
  286.     RAL        ; INTO TWO RIGHTMOST
  287.     RAL        ; POSITIONS
  288.     PUSH    PSW    ;SAVE MODIFIED BYTE ON STACK
  289.     ANI    03H    ;ZERO ALL BUT TWO RIGHTMOST BITS
  290.     CALL    SPOUT    ;MAKE ASCII AND DISPLAY ON CRT
  291.     POP    PSW    ;GET MODIFIED BYTE BACK
  292.     CALL    SPINR    ;DO 3 BITS AND FALL INTO 3 MORE
  293. ;
  294. SPINR    RAL        ;ROTATE TWO LEFTMOST BITS
  295.     RAL        ; INOT TWO RIGHTMOST
  296.     RAL        ; POSITIONS
  297. ;
  298. SPOUT    PUSH    PSW    ;SAVE MODIFIED BYTE ON STACK
  299.     ANI    07H    ;ZERO ALL BUT THREE RIGHT BITS
  300.     ADI    30H    ;ADD ASCII OFFSET
  301.     CALL    OUTPT    ;DISPLAY CHARACTER ON CRT
  302.     POP    PSW    ;GET MODIFIED BYTE BACK
  303.     RET        ;GO BACK TO WHERE YOU CAME FROM
  304. ;
  305. ROTES    CALL    ROTER    ;DO 3 BITS AND FALL INTO 3 MORE
  306. ;
  307. ROTER    RAL        ;ROTATE CARRY PLUS LEFTMOST
  308.     RAL        ; TWO BITS OF DATA BYTE INTO
  309.     RAL        ; THREE RIGHTMOST BITS
  310. ;
  311. OCTOUT    PUSH    PSW    ;SAVE MODIFIED BYTE ON STACK
  312.     ANI    07H    ;ZERO ALL BUT RIGHT THREE BITS
  313.     ADI    30H    ;ADD IN ASCII OFFSET
  314.     CALL    OUTPT    ;DISPLAY CHARACTER ON CRT
  315.     POP    PSW    ;GET MODIFIEY BYTE BACK
  316.     RET        ;RETURN TO MAIN PROGRAM
  317. ;
  318. DOHEX    PUSH    PSW    ;SAVE BYTE ON STACK
  319.     RRC        ;ROTATE
  320.     RRC        ;LEFT
  321.     RRC        ; FOUR BITS
  322.     RRC        ; INTO PLACE
  323.     CALL    HEXOUT    ;MAKE ASCII AND DISPLAY
  324.      POP    PSW    ;GET BYTE BACK
  325. ;
  326. HEXOUT    ANI    0FH    ;KEEP ONLY RIGHT FOUR BITS
  327.     ADI    30H    ;ADD ASCII OFFSET
  328.     CPI    ':'    ;IS IT A NUMBER
  329.     JC    OUTPT    ;DISPLAY IT ON CRT IF SO
  330.     ADI    07H    ;MAKE IT A LETTER
  331.     JMP    OUTPT    ;AND DISPLAY ON CRT
  332. ;
  333. SUBTR    MVI    D,0FFH    ;D REGISTER TO MINUS ONE
  334. ;
  335. LOOP5    MOV     A,L    ;LOW BYTE OF UNKNOWN TO A
  336.     SUB    C    ;SUBTRACT LOW BYTE OF DIVISOR
  337.     MOV    L,A    ;DIFFERENCE BACK TO L
  338.     MOV    A,H    ;HIGHT BYTE OF UNKNOWN TO A
  339.     SBB    B    ;SUBTRACT B AND BORROW IF ANY
  340.     MOV    H,A    ;DIFFERENCE BACK TO H
  341.     INR    D    ;COUNT ONE SUBTRACTION
  342.     JNC    LOOP5    ;SUBTRACT AGAIN IF NO BORROW
  343.     DAD    B    ;ADD DIVISOR BACK TO UNKNOWN
  344.     MOV    A,D    ;COUNT TO A
  345.     ADI    30H    ;MAKE IT ASCII
  346.     JMP    OUTPT    ;DISPLAY ON CRT
  347. ;
  348. ERROR    LXI    H,MESS4    ;SET H-L TO BEGINNING OF MESSAGE
  349.     CALL    PRINT    ;GO PRINT IT
  350.     JMP    BEGIN    ;START OVER
  351. ;
  352. SPACES    MVI    A,' '    ;PUT A SPACE IN REGISTER A
  353.     CALL    OUTPT    ;PRINT IT
  354.     JMP    OUTPT    ;OUTPUT ANOTHER SPACE THEN RETURN
  355. ;
  356. GETIN    CALL    INPUT    ;GET CHARACTER FROM KEYBOARD
  357.     CPI    0DH    ;ARE THEY DONE ENTERING?
  358.     RNZ        ;BACK TO WHOEVER IF NOT
  359.     JMP    CNVRT    ;JMP TO CONVERT ALL BASES
  360. ;
  361. VALIN    PUSH    H    ;SAVE BASE POINTER
  362.     LXI    H,WHAT    ;POINT TO QUESTION
  363.     CALL    PRINT    ;SHOWS THE QUESTION
  364.     POP    H    ;GET THE BASE NAME POINTER BACK
  365.     CALL    PRINT    ;PRINT IT
  366.     LXI    H,VALUE    ;POINT TO  VALUE
  367.     JMP    PRINT    ;PRINT IT THEN JUMP WHEREVER
  368. ;
  369. WHAT    DB    CR,LF,'What''s your ',0
  370. VALUE    DB    ' Value? ',0
  371. DECIMAL    DB    'Decimal',0
  372. HEXAD    DB    'Hexadecimal',0
  373. OCTAL    DB    'Octal',0
  374. SPLIT    DB    'Split Octal',0
  375. BINRY    DB    'Binary',0
  376. ASCII    DB    'ASCII',0
  377. MESS1    DB    CR,LF,'What base is your entry? ',0
  378. MESS2    DB    CR,LF,'Sorry that is not a base I can work with. ',0
  379. MESS4    DB    CR,LF
  380.     DB    'Input character wrong for base specified, '
  381.     DB    're-enter',0
  382. MESS5    DB    CR,LF,' Decimal Hex   Octal   S/Octal  Binary'
  383.     DB    '           ASCII',CR,LF,'  ',0
  384. MESS6    DB    CR,LF,'Possible choices are: ',CR,LF
  385.     DB    CR,LF,'    A = ASCII '
  386.     DB    CR,LF,'    B = Binary '
  387.     DB    CR,LF,'    D = Decimal '
  388.     DB    CR,LF,'    H = Hexadecimal'
  389.     DB    CR,LF,'    O = Octal '
  390.     DB    CR,LF,'    S = Split Octal '
  391.     DB    CR,LF,'    X = Exit '
  392.     DB    CR,LF,0
  393. ;
  394.     DS    60    ;RESERVE SPACE FOR STACK
  395. STACK    EQU    $    ;TOP OF STACK
  396. ;
  397.     END
  398.  
  399.