summaryrefslogtreecommitdiff
path: root/cmpen472_hw8McDonnell/bin
diff options
context:
space:
mode:
Diffstat (limited to 'cmpen472_hw8McDonnell/bin')
-rw-r--r--cmpen472_hw8McDonnell/bin/Project.absbin7328 -> 7576 bytes
-rw-r--r--cmpen472_hw8McDonnell/bin/Project.abs.phy2
-rw-r--r--cmpen472_hw8McDonnell/bin/Project.abs.s1979
-rw-r--r--cmpen472_hw8McDonnell/bin/main.dbg267
4 files changed, 186 insertions, 162 deletions
diff --git a/cmpen472_hw8McDonnell/bin/Project.abs b/cmpen472_hw8McDonnell/bin/Project.abs
index af94fce..4262f22 100644
--- a/cmpen472_hw8McDonnell/bin/Project.abs
+++ b/cmpen472_hw8McDonnell/bin/Project.abs
Binary files differ
diff --git a/cmpen472_hw8McDonnell/bin/Project.abs.phy b/cmpen472_hw8McDonnell/bin/Project.abs.phy
index 4fd2ee7..1871899 100644
--- a/cmpen472_hw8McDonnell/bin/Project.abs.phy
+++ b/cmpen472_hw8McDonnell/bin/Project.abs.phy
@@ -1,3 +1,3 @@
S0580000433A5C55736572735C4A61636F62204D63446F6E6E656C6C5C446F63756D656E74735C434D50454E2D3437322D48575C636D70656E3437325F6877384D63446F6E6E656C6C5C62696E5C50726F6A6563742E61627348
-S2060FFFF03123A7
+S2060FFFF0315D6D
S9030000FC
diff --git a/cmpen472_hw8McDonnell/bin/Project.abs.s19 b/cmpen472_hw8McDonnell/bin/Project.abs.s19
index d2070bd..049bddb 100644
--- a/cmpen472_hw8McDonnell/bin/Project.abs.s19
+++ b/cmpen472_hw8McDonnell/bin/Project.abs.s19
@@ -1,47 +1,38 @@
S0580000433A5C55736572735C4A61636F62204D63446F6E6E656C6C5C446F63756D656E74735C434D50454E2D3437322D48575C636D70656E3437325F6877384D63446F6E6E656C6C5C62696E5C50726F6A6563742E61627348
S123300000000000000000000000000000000000000010000000000000000000000000009C
-S111302000000000001000000000000000008E
-S1233100CF310086F15A03860C5ACBCC00015CC8CE33561632EB4C3B194C38804C378010EE
-S1233120EF20FE4C3780343BFE302A087E302A8E003C262ACE00007E302AFE3028087E3008
-S1233140288E003C2618CE00007E3028FE3026087E30268E00182606CE00007E3026FC30C7
-S123316026CD300016325D863A163316FC3028CD300016325D863A163316FC302ACD3000FC
-S123318016325D860D163316860A1633163A300B353B34C77B302CCD0000A630813922204F
-S12331A081302D08028D0004221620EE812B2730812D272C812A2728812F27248100273873
-S12331C0876A0030341632EB860D163316860A163316CE33261632EB8604B702303A313D0D
-S12331E07A302CA61E81302DD7813922D3CB01C10122CDCD000020A2A61E81302DC28139A3
-S123320022BEB6302C27B987B702303A313D3BCD0000E630272AC12B2726C12D2722C12AF6
-S1233220271EC12F271AC1202716C1302D17C1392213C03037CC000A13B7C63319ED20D2DA
-S123324087B7023A3D8604B7023A3D343536A67F27056A3020F8876A303231303D34353BC2
-S12332608C000027572D633635348630CE3013CD00051632E53031876A4032CE000A181087
-S12332808E00002708CB306B60B7D420EE8C000026F33A3B8C000A2C0486306A60B6302C9C
-S12332A0812D26026A60CE301316324B1632EBFD3024CE30131632DC3A31303D8630163336
-S12332C01686301633163A31303D36862D7A302C3240800150C001C30001208B36876A305E
-S12332E00436FB323D6A300436FB3D36A630270516331620F7323D36353416331D27FB8155
-S12333000D270A6A3016331603270220ED860A1633163031323D4FCC80FC5ACF3D4FCC2042
-S12333200396CF3D873D496E76616C696420696E70757420666F726D61740D0A0045636140
-S12333406C633E20004F766572666C6F77204572726F720D0A0052756C657320666F722015
-S123336043616C63756C61746F723A0D0A31292020496E70757420706F7369746976652091
-S1233380646563696D616C20696E7465676572206E756D62657273206F6E6C790D0A3229DC
-S12333A02020496E70757420616E64206F7574707574206D6178696D756D20666F7572207B
-S12333C06469676974206E756D62657273206F6E6C790D0A3329202056616C6964206F7038
-S12333E0657261746F7273206172653A202B2C202D2C202A2C20616E64202F0D0A3429209B
-S123340020496E707574206E756D6265722077697468206C656164696E67207A65726F20FF
-S12334206973204F4B0D0A35292020496E707574206F6E6C792074776F206E756D62657228
-S12334407320616E64206F6E65206F70657261746F7220696E206265747765656E2C206EF9
-S12334606F207370616365730D0A3629202053686F77204563616C633E2070726F6D7074EB
-S123348020616E64206563686F207072696E742075736572206B65797374726F6B65732056
-S12334A0756E6C74696C2052657475726E206B65790D0A372920205265706561742070724D
-S12334C0696E74207573657220696E70757420616E64207072696E7420616E7377657220FE
-S12334E0616674657220746865203D207369676E0D0A38292020496E2063617365206F6607
-S123350020616E20696E76616C696420696E70757420666F726D61742C20726570656174EB
-S1233520207072696E7420746865207573657220696E70757420756E74696C2074686520DD
-S12335406572726F72206368617261637465720D0A39292020496E2063617365206F66202F
-S1233560616E20696E76616C696420696E70757420666F726D61742C207072696E7420657A
-S123358072726F72206D657373616765206F6E20746865206E657874206C696E653A2049B5
-S12335A06E76616C696420696E70757420666F726D61740D0A313029204B656570203136C3
-S12335C062697420696E7465726E616C2062696E617279206E756D62657220666F726D61A8
-S12335E0742C2064657465637420616E6420666C6167206F766572666C6F77206572726F15
-S1233600720D0A3131292055736520696E7465676572206469766973696F6E20616E64203F
-S11B36207472756E6361746520616E79206672616374696F6E0D0A0033
-S105FFF03123B7
+S123302000000000001000000000000000000000000000000000000000000000000000007C
+S106304000106811
+S1233100CF310086F15A03860C5ACBCC00015CC8CE341016334A4C3B194C38804C3780CE15
+S12331203030FD304016333B10EF1631AECE3030FD3040163356CE3030163228CE3030FD43
+S1233140304016333B20E614104D3880CE33CC16334A16337C9727FA16337520F54C378095
+S123316034FE302C087E302C8E2328263FCE00007E302CFE302A087E302A8E003C262ACED5
+S123318000007E302AFE3028087E30288E003C2618CE00007E3028FE3026087E30268E00B5
+S12331A0182606CE00007E30261631AE300B3B3534860D163375860A163375CE33951633D3
+S12331C04AFC30268C000A240736863016337532CD30001632CC863A163375FC30288C0043
+S12331E00A240736863016337532CD30001632CC863A163375FC302A8C000A240736863028
+S123320016337532CD30001632CC8620163375163375163375163375CE339D16334ACE30DC
+S12332203016334A30313A3D3BA630274E8174260220488168260BE630C10026307A3042B1
+S12332402039816D260BE630C10026217A3042202A8173260BE630C10026127A3042201B43
+S123326081712609E630C100260306314734CE33A316334ACE33AB16334A303A3D3BCD0052
+S123328000E630272AC12B2726C12D2722C12A271EC12F271AC1202716C1302D17C1392283
+S12332A013C03037CC000A13B7C63319ED20D287B7023A3D8604B7023A3D343536A67F27E3
+S12332C0056A3020F8876A303231303D34353B8C0000274C2D533635348630CE3013CD00EC
+S12332E0051633443031876A4032CE000A18108E00002708CB306B60B7D420EE8C000026A6
+S1233300F3B6302F812D26026A60CE30131632BA16334AFD3024CE301316333B3A31303D9D
+S123332086301633753A31303D36862D7A302F3240800150C001C30001209B36876A30049D
+S123334036FB323D6A300436FB3D36A630270516337520F7323D36353416337C27FB810D2D
+S1233360270A6A3016337503270220ED860A1633753031323D4FCC80FC5ACF3D4FCC20032E
+S123338096CF3D873D496E76616C696420496E7075740D0A00436C6F636B3E2000434D4497
+S12333A03E20004572726F723E2000496E76616C696420496E7075740D0A004F7665726633
+S12333C06C6F77204572726F720D0A00436C6F636B2073746F7070656420616E642054790B
+S12333E0706577726974652070726F6772616D20737461727465642E0D0A596F75206D612A
+S12334007920747970652062656C6F772E0D0A00436F6D6D616E64733A0D0A743A205365C6
+S123342074207468652074696D6520696E20666F726D61742048483A4D4D3A53530D0A6861
+S12334403A20446973706C61792074686520686F757273206F6E2074686520372073656772
+S12334606D656E7420646973706C6179730D0A6D3A20446973706C617920746865206D6900
+S12334806E75746573206F6E207468652037207365676D656E7420646973706C6179730D9B
+S12334A00A733A20446973706C617920746865207365636F6E6473206F6E20746865203736
+S12334C0207365676D656E7420646973706C6179730D0A713A2053746F70207468652063E0
+S11F34E06C6F636B20616E6420656E74657220747970657772697465720D0A00FC
+S105FFF0315D7D
S9030000FC
diff --git a/cmpen472_hw8McDonnell/bin/main.dbg b/cmpen472_hw8McDonnell/bin/main.dbg
index e946a3c..9467888 100644
--- a/cmpen472_hw8McDonnell/bin/main.dbg
+++ b/cmpen472_hw8McDonnell/bin/main.dbg
@@ -84,9 +84,17 @@ minutes dc.w $0000 ; Buffer to hold the minutes of the time
seconds dc.w $0000 ; Buffer to hold the seconds of the time
-operator dc.b $0
+counter dc.w $0000 ; Counter for RTI ISR for 1 second
-numBuf dc.b $0
+numBuf dc.b $0000 ; Used by ReadDecimal for reading numbers
+
+operator dc.b $0000 ; Used by ReadDecimal for reading numbers
+
+inputBuffer ds.b $0010 ; Input Buffer Length
+
+lenInput dc.w $0010 ; Length of the Input Buffer
+
+outputBuf dc.b 'h' ; Used to control what to output on 7 segment display
*
* There is a section Data Section at the end of the file
@@ -119,17 +127,49 @@ pgstart lds #$3100 ; initialize the stack pointer
bset CRGINT,%10000000; enable RTI interrupt
bset CRGFLG,%10000000; clear RTI IF (Interrupt Flag)
+ ldx #inputBuffer ; Load the address of inputBuffer into X
+ ldy lenInput ; Load the length of inputBuffer into Y
+ jsr Zeros ; Zero out inputBuffer
cli ; Enable interrupts
+ jsr PrintTime ; Jump to PrintTime to write to serial console
mainLoop
+ ldx #inputBuffer ; Load the address of inputBuffer into X
+ ldy lenInput ; Load the length of inputBuffer into Y
+ jsr ReadString ; Jump to ReadString to read input
+
+ ldx #inputBuffer ; Load the address of inputBuffer into X
+ jsr ExecuteCommand ; Jump to ExecuteCommand
+
+ ldx #inputBuffer ; Load the address of inputBuffer into X
+ ldy lenInput ; Load the length of inputBuffer into Y
+ jsr Zeros ; Zero out inputBuffer
+
bra mainLoop ; Loop back to mainLoop always
+TypeWrite
+ sei ; Disable Interrupts
+ bclr CRGINT,%10000000; Disable RTI interrupt
+ ldx #twMsg ; Load the address of twMsg into X
+ jsr WriteString ; Write the string to the serial console
+twLoop jsr getchar ; Read a character from the serial console
+ tsta ; Compare A to 0
+ beq twLoop ; If A == 0, branch to twLoop
+ jsr putchar ; Write character to serial console
+ bra twLoop ; Branch always to twLoop
+
**************************************************************************
* Subroutine Section: address used [ $3100 to $3FFF ] RAM Memory
*
rtiisr bset CRGFLG,%10000000; Clear RTI Interrupt Flag
pshx ; Save X to the stack
- pshd ; Save D to the stack
+ ldx counter ; Load counter into X
+ inx ; Increment counter by 1
+ stx counter ; Save X to counter
+ cpx #9000 ; Compare counter to 9000, This is about 1 second on my computer
+ bne rtiSkip ; If counter != 400, branch to rtiSkip
+ ldx #0 ; Load 0 into X
+ stx counter ; Save X to counter
ldx seconds ; Load the seconds into X
inx ; Increment the seconds by 1
stx seconds ; Save the new seconds to the location
@@ -151,111 +191,108 @@ rtiisr bset CRGFLG,%10000000; Clear RTI Interrupt Flag
bne rtidone ; If X != 24, exit the isr
ldx #0 ; Reset the hours
stx hours ; Save the updated hours
-rtidone ldd hours ; Load the hours into D
- ldy #buffer ; Load the address of buffer into Y
+rtidone jsr PrintTime ; Jump to PrintTime
+rtiSkip pulx ; Restore X from the stack
+ RTI
+
+PrintTime pshd ; Save D to the stack
+ pshy ; Save Y to the stack
+ pshx ; Save X to the stack
+ ldaa #CR ; Load the character CR into A
+ jsr putchar ; Write the character to the serial
+ ldaa #LF ; Load the character LF into A
+ jsr putchar ; Write the character to the serial
+ ldx #clock ; Load the address of the clock prompt into X
+ jsr WriteString ; Write the string to serial
+ ldd hours ; Load the hours into D
+ cpd #10 ; Compare D to 10
+ bhs goodHours ; If D >= goodHours
+ psha ; Save A to the stack
+ ldaa #'0' ; Load '0' character into A
+ jsr putchar ; Print '0' to the serial
+ pula ; Restore A from the stack
+goodHours ldy #buffer ; Load the address of buffer into Y
jsr PrintDecimalWord; Print the number to the serial
ldaa #':' ; Load the character ':' into A
jsr putchar ; Write the character to the serial
ldd minutes ; Load the minutes into D
- ldy #buffer ; Load the address of buffer into Y
+ cpd #10 ; Compare D to 10
+ bhs goodMins ; If D >= goodMins
+ psha ; Save A to the stack
+ ldaa #'0' ; Load '0' character into A
+ jsr putchar ; Print '0' to the serial
+ pula ; Restore A from the stack
+goodMins ldy #buffer ; Load the address of buffer into Y
jsr PrintDecimalWord; Print the number to the serial
ldaa #':' ; Load the character ':' into A
jsr putchar ; Write the character to the serial
ldd seconds ; Load the seconds into D
- ldy #buffer ; Load the address of buffer into Y
+ cpd #10 ; Compare D to 10
+ bhs goodSecs ; If D >= goodSecs
+ psha ; Save A to the stack
+ ldaa #'0' ; Load '0' character into A
+ jsr putchar ; Print '0' to the serial
+ pula ; Restore A from the stack
+goodSecs ldy #buffer ; Load the address of buffer into Y
jsr PrintDecimalWord; Print the number to the serial
- ldaa #CR ; Load the character CR into A
- jsr putchar ; Write the character to the serial
- ldaa #LF ; Load the character LF into A
- jsr putchar ; Write the character to the serial
- puld ; Restore D from the stack
+ ldaa #' ' ; Load ' ' character into A
+ jsr putchar ; Write the character to the serial console
+ jsr putchar ; Write the character to the serial console
+ jsr putchar ; Write the character to the serial console
+ jsr putchar ; Write the character to the serial console
+ ldx #CMD ; Load the address of CMD into X
+ jsr WriteString ; Write the string to the serial
+ ldx #inputBuffer ; Load the address of the inputBuffer into X
+ jsr WriteString ; Write the string to the serial
pulx ; Restore X from the stack
- RTI
-
-;*************************************************************************
-; VerifyInput subroutine
-;
-; This subroutine will verify the user input is valid.
-;
-; Input: An address of a Null terminated string in register X.
-; Output: If valid Zero bit = 0 in CCR, if invalid, Zero bit = 1
-; and the string is outputed up to the error on the serial
-; console with an error message.
-; Registers in use: X for the address of the string, A for reading characters.
-; Y to count the number of digits in a number, & B to count the number of numbers
-; Memory locations in use: Memory Address for serial line, address of the string, 1 byte for operator
-;
-; Comments: This subroutine will modify the user string if invalid.
-;
-
-VerifyInput
- pshy ; Save Y to the stack
- pshd ; Save D to the stack
- pshx ; Save X to the stack
- clrb ; Set B to Zero
- stab operator ; Clear operator
- ldy #0 ; Load Zero into Y
-vNumLoop ldaa 1,x+ ; Load character from X into A
- cmpa #'9' ; Compare A to '9'
- bhi vInvalid ; If A > '9', not valid string
- cmpa #'0' ; Compare A to '0'
- blt vIsOp ; If A < '0', check if operator
- iny ; Increment Y by 1 to count numbers
- cpy #4 ; Compare Y to 4
- bhi vInvalid ; If greater than 4, invalid
- bra vNumLoop ; Loop back to check for more digits
-vIsOp cmpa #'+' ; Compare A to '+'
- beq vOp ; This is an operator
- cmpa #'-' ; Compare A to '-'
- beq vOp ; This is an operator
- cmpa #'*' ; Compare A to '*'
- beq vOp ; This is an operator
- cmpa #'/' ; Compare A to '/'
- beq vOp ; This is an operator
- cmpa #NULL ; Compare A to NULL character
- beq vEndOfLine ; Check if end of line
-vInvalid clra ; Set A to zero
- staa 0,X ; Write Null terminator to X
- pulx ; Restore X from the stack
- pshx ; Save X to the stack
- jsr WriteString ; Write invalid string to serial console
- ldaa #CR ; Load CR into A
- jsr putchar ; Jump to putchar to write the character
- ldaa #LF ; Load LF into A
- jsr putchar ; Jump to putchar to write the character
- ldx #invalidStr ; Load address of invalid string into X
- jsr WriteString ; Write invalid string to serial console
- ldaa #4 ; Load 4 into A to set zero bit
- tap ; Transfer A to CCR
- pulx ; Restore X from the stack
- puld ; Restore D from the stack
puly ; Restore Y from the stack
- rts ; Return to caller
-vOp staa operator ; Store operator in operator buffer
- ldaa -2,x ; Load previous character into A
- cmpa #'0' ; Compare A to '0'
- blt vInvalid ; Invalid string since previous is not number
- cmpa #'9' ; Compare A to '9'
- bhi vInvalid ; Invalid string since previous is not number
- addb #1 ; Increment B by 1
- cmpb #1 ; Compare B to 1
- bhi vInvalid ; Invalid string since B > 1 and we have another operator
- ldy #0 ; Set Y to 0
- bra vNumLoop ; Check for next number
-vEndOfLine ldaa -2,x ; Load previous character into A
- cmpa #'0' ; Compare A to '0'
- blt vInvalid ; Invalid string since previous is not number
- cmpa #'9' ; Compare A to '9'
- bhi vInvalid ; Invalid string since previous is not number
- ldaa operator ; Load operator character from buffer
- beq vInvalid ; If operator buffer is zero, invalid
- clra ; Set A to zero
- tap ; Transfer A to CCR
- pulx ; Restore X from the stack
puld ; Restore D from the stack
- puly ; Restore Y from the stack
rts ; Return to caller
+ExecuteCommand
+ pshd ; Save D to the stack
+ ldaa 1,x+ ; Load the character from X into A
+ beq ecDone ; If A == 0, jump to ecDone
+ cmpa #'t' ; Compare A to 't'
+ bne isH ; If A != 't', branch to isH
+ bra ecDone ; Branch to ecDone
+isH cmpa #'h' ; Compare A to 'h'
+ bne isM ; If A != 'h', branch to isM
+ ldab 1,x+ ; Load next character into B
+ cmpb #NULL ; Compare B to NULL
+ bne badCommand ; If B != CR, bad command
+ staa outputBuf ; Store A into outputBuf
+ bra ecDone ; Branch to ecDone
+isM cmpa #'m' ; Compare A to 'm'
+ bne isS ; If A != 'm', branch to isS
+ ldab 1,x+ ; Load next character into B
+ cmpb #NULL ; Compare B to NULL
+ bne badCommand ; If B != CR, bad command
+ staa outputBuf ; Store A into outputBuf
+ bra ecDone ; Branch to ecDone
+isS cmpa #'s' ; Compare A to 's'
+ bne isQ ; If A != 's', branch to isQ
+ ldab 1,x+ ; Load next character into B
+ cmpb #NULL ; Compare B to NULL
+ bne badCommand ; If B != CR, bad command
+ staa outputBuf ; Store A into outputBuf
+ bra ecDone ; Branch to ecDone
+isQ cmpa #'q' ; Compare A to 'q'
+ bne badCommand ; If A != 'q', branch to badCommand
+ ldab 1,x+ ; Load next character into B
+ cmpb #NULL ; Compare B to NULL
+ bne badCommand ; If B != NULL, branch to ecDone
+ jmp TypeWrite ; Jump to TypeWrite
+badCommand pshx ; Save X to the stack
+ ldx #error ; Load the address of the error prompt into X
+ jsr WriteString ; Jump to WriteString
+ ldx #badInput ; Load the address of badInput into X
+ jsr WriteString ; Jump to WriteString
+ pulx ; Restore X from stack
+ecDone puld ; Restore D from the stack
+ rts ; Return to caller
+
+
;*************************************************************************
; ReadDecimal subroutine
;
@@ -383,13 +420,7 @@ dDNotZero addb #'0' ; Add '0' to B to get ASCII Character
bra dPrintLoop ; Loop to hPrintLoop
dCheck cpd #0 ; Compare D to 0
bne dDNotZero ; If D != 0, branch back to hDNotZero
-dPrintDone puld ; Restore D from the stack
- pshd ; Save D to the stack
- cpd #10 ; Compare D to 10
- bge dNoZero ; If D >= 10, jump to dNoZero
- ldaa #'0' ; Load '0' character into A
- staa 1,+y ; Load the '0' character in A to Y and increment Y
-dNoZero ldaa operator ; Load operator into A to see if negative
+dPrintDone ldaa operator ; Load operator into A to see if negative
cmpa #'-' ; Compare A to '-'
bne dNotNeg ; If A != '-', jump to dNotNeg
staa 1,+y ; Save '-' into buffer
@@ -405,8 +436,6 @@ dNotNeg ldx #buffer2 ; Load the address of buffer2 in X
rts ; Return to caller
dIsZero ldaa #'0' ; Load '0' character into A
jsr putchar ; Print character to the screen
- ldaa #'0' ; Load '0' character into A
- jsr putchar ; Print character to the screen
puld ; Restore D (A:B) from the stack
puly ; Restore Y from the stack
pulx ; Restore X from the stack
@@ -554,23 +583,27 @@ getchar7 clra ; Set A to 0
* Data Section 2: address used [ $3100 to $3FFF ] RAM Memory
*
-invalidStr dc.b 'Invalid input format',CR,LF,NULL ; Invalid input error message
+invalidStr dc.b 'Invalid Input',CR,LF,NULL ; Invalid input error message
-prompt dc.b 'Ecalc> ',NULL ; Prompt string for calculator
+clock dc.b 'Clock> ',NULL ; Prompt string for clock
+
+CMD dc.b 'CMD> ',NULL ; Prompt string for CMD
+
+error dc.b 'Error> ',NULL ; Prompt string for errors
+
+badInput dc.b 'Invalid Input',CR,LF,NULL ; Invalid Input Prompt
overflow dc.b 'Overflow Error',CR,LF,NULL ; Overflow error message
+; twMsg: welcome message for typewrite
+twMsg dc.b 'Clock stopped and Typewrite program started.',CR,LF
+ dc.b 'You may type below.',CR,LF,NULL
+
; msg: this is the main option menu string
-msg dc.b 'Rules for Calculator:',CR,LF
- dc.b '1) Input positive decimal integer numbers only',CR,LF
- dc.b '2) Input and output maximum four digit numbers only',CR,LF
- dc.b '3) Valid operators are: +, -, *, and /',CR,LF
- dc.b '4) Input number with leading zero is OK',CR,LF
- dc.b '5) Input only two numbers and one operator in between, no spaces',CR,LF
- dc.b '6) Show Ecalc> prompt and echo print user keystrokes unltil Return key',CR,LF
- dc.b '7) Repeat print user input and print answer after the = sign',CR,LF
- dc.b '8) In case of an invalid input format, repeat print the user input until the error character',CR,LF
- dc.b '9) In case of an invalid input format, print error message on the next line: Invalid input format',CR,LF
- dc.b '10) Keep 16bit internal binary number format, detect and flag overflow error',CR,LF
- dc.b '11) Use integer division and truncate any fraction',CR,LF,NULL
+msg dc.b 'Commands:',CR,LF
+ dc.b 't: Set the time in format HH:MM:SS',CR,LF
+ dc.b 'h: Display the hours on the 7 segment displays',CR,LF
+ dc.b 'm: Display the minutes on the 7 segment displays',CR,LF
+ dc.b 's: Display the seconds on the 7 segment displays',CR,LF
+ dc.b 'q: Stop the clock and enter typewriter',CR,LF,NULL