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 / CONVRS12.ASM < prev    next >
Assembly Source File  |  2000-06-30  |  12KB  |  425 lines

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