diff options
| -rw-r--r-- | cmpen472_hw8McDonnell/Full_Chip_Simulation.ini | 2 | ||||
| -rw-r--r-- | cmpen472_hw8McDonnell/Sources/main.asm | 267 | ||||
| -rw-r--r-- | cmpen472_hw8McDonnell/bin/Project.abs | bin | 7328 -> 7576 bytes | |||
| -rw-r--r-- | cmpen472_hw8McDonnell/bin/Project.abs.phy | 2 | ||||
| -rw-r--r-- | cmpen472_hw8McDonnell/bin/Project.abs.s19 | 79 | ||||
| -rw-r--r-- | cmpen472_hw8McDonnell/bin/main.dbg | 267 | ||||
| -rw-r--r-- | cmpen472_hw8McDonnell/cmpen472_hw8McDonnell.mcp | bin | 57065 -> 57065 bytes | |||
| -rw-r--r-- | cmpen472_hw8McDonnell/cmpen472_hw8McDonnell_Data/Standard/ObjectCode/main.asm.o | bin | 7328 -> 7576 bytes | |||
| -rw-r--r-- | cmpen472_hw8McDonnell/cmpen472_hw8McDonnell_Data/Standard/ObjectCode/main.asm.sx | 79 | ||||
| -rw-r--r-- | cmpen472_hw8McDonnell/cmpen472_hw8McDonnell_Data/Standard/TargetDataWindows.tdt | bin | 64523 -> 64924 bytes |
10 files changed, 372 insertions, 324 deletions
diff --git a/cmpen472_hw8McDonnell/Full_Chip_Simulation.ini b/cmpen472_hw8McDonnell/Full_Chip_Simulation.ini index e4aeeaf..eb3f16f 100644 --- a/cmpen472_hw8McDonnell/Full_Chip_Simulation.ini +++ b/cmpen472_hw8McDonnell/Full_Chip_Simulation.ini @@ -10,7 +10,7 @@ Target=sim Layout=ASM_layout.hwl LoadDialogOptions=AUTOERASEANDFLASH NORUNAFTERLOAD CPU=HC12 -MainFrame=0,1,-1,-1,-1,-1,312,312,2232,1335 +MainFrame=0,1,-1,-1,-1,-1,90,205,2010,1221 Configuration=Full_Chip_Simulation.hwc Statusbar=1 ShowToolbar=1 diff --git a/cmpen472_hw8McDonnell/Sources/main.asm b/cmpen472_hw8McDonnell/Sources/main.asm index 2f83517..6deb86c 100644 --- a/cmpen472_hw8McDonnell/Sources/main.asm +++ b/cmpen472_hw8McDonnell/Sources/main.asm @@ -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,24 +583,28 @@ 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 end ; last line of the file diff --git a/cmpen472_hw8McDonnell/bin/Project.abs b/cmpen472_hw8McDonnell/bin/Project.abs Binary files differindex af94fce..4262f22 100644 --- a/cmpen472_hw8McDonnell/bin/Project.abs +++ b/cmpen472_hw8McDonnell/bin/Project.abs 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 diff --git a/cmpen472_hw8McDonnell/cmpen472_hw8McDonnell.mcp b/cmpen472_hw8McDonnell/cmpen472_hw8McDonnell.mcp Binary files differindex ce6cfc9..01ddcf5 100644 --- a/cmpen472_hw8McDonnell/cmpen472_hw8McDonnell.mcp +++ b/cmpen472_hw8McDonnell/cmpen472_hw8McDonnell.mcp diff --git a/cmpen472_hw8McDonnell/cmpen472_hw8McDonnell_Data/Standard/ObjectCode/main.asm.o b/cmpen472_hw8McDonnell/cmpen472_hw8McDonnell_Data/Standard/ObjectCode/main.asm.o Binary files differindex af94fce..4262f22 100644 --- a/cmpen472_hw8McDonnell/cmpen472_hw8McDonnell_Data/Standard/ObjectCode/main.asm.o +++ b/cmpen472_hw8McDonnell/cmpen472_hw8McDonnell_Data/Standard/ObjectCode/main.asm.o diff --git a/cmpen472_hw8McDonnell/cmpen472_hw8McDonnell_Data/Standard/ObjectCode/main.asm.sx b/cmpen472_hw8McDonnell/cmpen472_hw8McDonnell_Data/Standard/ObjectCode/main.asm.sx index 5482821..dbd40cb 100644 --- a/cmpen472_hw8McDonnell/cmpen472_hw8McDonnell_Data/Standard/ObjectCode/main.asm.sx +++ b/cmpen472_hw8McDonnell/cmpen472_hw8McDonnell_Data/Standard/ObjectCode/main.asm.sx @@ -1,47 +1,38 @@ S0840000433A5C55736572735C4A61636F62204D63446F6E6E656C6C5C446F63756D656E74735C434D50454E2D3437322D48575C636D70656E3437325F6877384D63446F6E6E656C6C5C636D70656E3437325F6877384D63446F6E6E656C6C5F446174615C5374616E646172645C4F626A656374436F64655C6D61696E2E61736D2E70726DC9 S123300000000000000000000000000000000000000010000000000000000000000000009C -S111302000000000001000000000000000008E -S105FFF03123B7 -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 +S123302000000000001000000000000000000000000000000000000000000000000000007C +S106304000106811 +S105FFF0315D7D +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 S9033100CB diff --git a/cmpen472_hw8McDonnell/cmpen472_hw8McDonnell_Data/Standard/TargetDataWindows.tdt b/cmpen472_hw8McDonnell/cmpen472_hw8McDonnell_Data/Standard/TargetDataWindows.tdt Binary files differindex a624e60..88492b3 100644 --- a/cmpen472_hw8McDonnell/cmpen472_hw8McDonnell_Data/Standard/TargetDataWindows.tdt +++ b/cmpen472_hw8McDonnell/cmpen472_hw8McDonnell_Data/Standard/TargetDataWindows.tdt |
