!CDIR NAME ATTR TRAK SCTR SIZE EXEC 00 01 01 004E EDIT 00 04 01 0032 FORT 00 05 19 00C7 RLOAD 00 0D 10 00B5 FORLB 00 14 0F 007A SORTS 00 19 07 0006 LX 00 19 0D 000A SORT 00 19 17 0066 SORTL 00 1D 15 0066 SORT1 00 21 13 0006 ASMB 00 21 19 0079 DEMOS 00 26 10 000D !CLIST,DEMOS NAM DEMO OPT O,NOM,NOP * * PROMPT FOR A MESSAGE AND THE NUMBER OF TIMES TO * PRINT THE MESSAGE. * SIOCSR EQU $F000 ;CONTROL/STATUS REGISTER SIODR EQU $F001 ;DATA REGISTER CR EQU $0D ;ASCII CARRIAGE RETURN LF EQU $0A ;ASCII LINE FEED * ORG $2000 * * PROMPT FOR AND INPUT A MESSAGE STRING * START LDX #MMSG ;PROMPT TO ENTER A MESSAGE BSR DISPMSG * LDX #MSGBUF+2 ;X->WHERE TO PUT CHARACTERS INLOOP BSR GETCHAR ;GET CHARACTER BSR OUTCHAR ;ECHO STAA 0,X ;SAVE NEXT BYTE OF NAME INX CMPA #CR ;CR ENTERED? BNE INLOOP ;NO, KEEP GOING * CLR 0,X ;END OF STRING * * PROMPT FOR AND INPUT NUMBER OF TIMES TO DISPLAY THE MESSAGE * TIMES LDX #MTIMES ;DISPLAY "# TIMES?" BSR DISPMSG BSR GETCHAR ;GET COUNT BSR OUTCHAR SUBA #'0 ;CONVERT TO BINARY 0-9 CMPA #9 BHI TIMES ;INVALID STAA MSGCNT * * DISPLAY THE MESSAGE THE SPECIFIED NUMBER OF TIMES * DSPLOOP LDX #MSGBUF ;DISPLAY THE MESSAGE BSR DISPMSG DEC MSGCNT ;DECREMENT THE MSGCNT BNE DSPLOOP * JMP $E800 ;RELOAD EDOS * * DISPMSG - DISPLAY NULL TERMINATED STRING * DISPMSG LDAA 0,X BEQ DMEXIT ;DONE BSR OUTCHAR INX BRA DISPMSG * * OUTCHAR - OUTPUT CHARACTER TO CONSOLE * OUTCHAR LDAB SIOCSR BITB #02 BEQ OUTCHAR * STAA SIODR DMEXIT RTS * * GETCHAR - GET CHARACTER FROM CONSOLE * GETCHAR LDAA SIOCSR BITA #1 BEQ GETCHAR * LDAA SIODR ANDA #$7F RTS * MSGCNT FCB 0 * * MESSAGES * MMSG FCB CR,LF,LF FCC 'ENTER A MESSAGE: ' FCB 0 MTIMES FCB CR,LF FCC 'REPEAT COUNT: ' FCB 0 MSGBUF FCB CR,LF END !ASM,2,DEMO,DEMOS M6800 ASSEMBLER VERSION 1.2 --- PAGE 001 DEMO 00001 NAM DEMO 00002 OPT O,NOM,NOP 00003 * 00004 * PROMPT FOR A MESSAGE AND THE NUMBER OF TIMES TO 00005 * PRINT THE MESSAGE. 00006 * 00007 F000 SIOCSR EQU $F000 ;CONTROL/STATUS REGISTER 00008 F001 SIODR EQU $F001 ;DATA REGISTER 00009 000D CR EQU $0D ;ASCII CARRIAGE RETURN 00010 000A LF EQU $0A ;ASCII LINE FEED 00011 * 00012 2000 ORG $2000 00013 * 00014 * PROMPT FOR AND INPUT A MESSAGE STRING 00015 * 00016 2000 CE 2056 START LDX #MMSG ;PROMPT TO ENTER A MESSAGE 00017 2003 8D 2F BSR DISPMSG 00018 * 00019 2005 CE 207E LDX #MSGBUF+2 ;X->WHERE TO PUT CHARACTERS 00020 2008 8D 3E INLOOP BSR GETCHAR ;GET CHARACTER 00021 200A 8D 31 BSR OUTCHAR ;ECHO 00022 200C A7 00 STA A 0,X ;SAVE NEXT BYTE OF NAME 00023 200E 08 INX 00024 200F 81 0D CMP A #CR ;CR ENTERED? 00025 2011 26 F5 BNE INLOOP ;NO, KEEP GOING 00026 * 00027 2013 6F 00 CLR 0,X ;END OF STRING 00028 * 00029 * PROMPT FOR AND INPUT NUMBER OF TIMES TO DISPLAY TH 00030 * 00031 2015 CE 206B TIMES LDX #MTIMES ;DISPLAY "# TIMES?" 00032 2018 8D 1A BSR DISPMSG 00034 201A 8D 2C BSR GETCHAR ;GET COUNT 00035 201C 8D 1F BSR OUTCHAR 00036 201E 80 30 SUB A #'0 ;CONVERT TO BINARY 0-9 00037 2020 81 09 CMP A #9 00038 2022 22 F1 BHI TIMES ;INVALID 00040 2024 B7 2055 STA A MSGCNT 00041 * 00042 * DISPLAY THE MESSAGE THE SPECIFIED NUMBER OF TIMES 00043 * 00044 2027 CE 207C DSPLOO LDX #MSGBUF ;DISPLAY THE MESSAGE 00045 202A 8D 08 BSR DISPMSG 00046 202C 7A 2055 DEC MSGCNT ;DECREMENT THE MSGCNT 00047 202F 26 F6 BNE DSPLOOP 00048 * 00049 2031 7E E800 JMP $E800 ;RELOAD EDOS 00050 * 00051 * DISPMSG - DISPLAY NULL TERMINATED STRING 00052 * 00053 2034 A6 00 DISPMS LDA A 0,X 00054 2036 27 0F BEQ DMEXIT ;DONE 00055 2038 8D 03 BSR OUTCHAR 00056 203A 08 INX 00057 203B 20 F7 BRA DISPMSG 00058 * 00059 * OUTCHAR - OUTPUT CHARACTER TO CONSOLE 00060 * 00061 203D F6 F000 OUTCHA LDA B SIOCSR 00062 2040 C5 02 BIT B #02 00063 2042 27 F9 BEQ OUTCHAR 00064 * 00065 2044 B7 F001 STA A SIODR 00066 2047 39 DMEXIT RTS 00067 * 00068 * GETCHAR - GET CHARACTER FROM CONSOLE 00069 * 00070 2048 B6 F000 GETCHA LDA A SIOCSR 00071 204B 85 01 BIT A #1 00072 204D 27 F9 BEQ GETCHAR 00073 * 00074 204F B6 F001 LDA A SIODR 00075 2052 84 7F AND A #$7F 00076 2054 39 RTS 00077 * 00078 2055 00 MSGCNT FCB 0 00079 * 00080 * MESSAGES 00081 * 00082 2056 0D MMSG FCB CR,LF,LF 2057 0A 2058 0A 00083 2059 45 FCC 'ENTER A MESSAGE: ' 205A 4E 205B 54 205C 45 205D 52 205E 20 205F 41 2060 20 2061 4D 2062 45 2063 53 2064 53 2065 41 2066 47 2067 45 2068 3A 2069 20 00084 206A 00 FCB 0 00085 206B 0D MTIMES FCB CR,LF 206C 0A 00086 206D 52 FCC 'REPEAT COUNT: ' 206E 45 206F 50 2070 45 2071 41 2072 54 2073 20 2074 43 2075 4F 2076 55 2077 4E 2078 54 2079 3A 207A 20 00087 207B 00 FCB 0 00088 207C 0D MSGBUF FCB CR,LF 207D 0A 00089 END TOTAL ERRORS 00000 !CLIST,DEMO S00B000044454D4F202020204F S11E2000CE20568D2FCE207E8D3E8D31A70008810D26F56F00CE206B8D1A8D78 S11E201B2C8D1F8030810922F1B72055CE207C8D087A205526F67EE800A6003F S11E2036270F8D030820F7F6F000C50227F9B7F00139B6F000850127F9B6F006 S11E205101847F39000D0A0A454E5445522041204D4553534147453A20000DA7 S115206C0A52455045415420434F554E543A20000D0A79 S9030000FC !LOAD,DEMO .J 2000 ENTER A MESSAGE: THE EDOS ASSEMBLER NOW WORKS! REPEAT COUNT: 5 THE EDOS ASSEMBLER NOW WORKS! THE EDOS ASSEMBLER NOW WORKS! THE EDOS ASSEMBLER NOW WORKS! THE EDOS ASSEMBLER NOW WORKS! THE EDOS ASSEMBLER NOW WORKS! M6800 EDOS VER 2.6 !