diff options
| author | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2025-02-21 18:58:06 -0500 |
|---|---|---|
| committer | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2025-02-21 18:58:06 -0500 |
| commit | f8fee6a63422a85bfee5fe2d903bf5c1316241a6 (patch) | |
| tree | 27fbe56db343119c49cf2c7d4e13600b08080587 /cmpen472hw6_McDonnell | |
| parent | 2b6e22d8d4debc81cb8b7a16f731b46c7dd59c2e (diff) | |
HW6 Printing in All Types
Diffstat (limited to 'cmpen472hw6_McDonnell')
21 files changed, 1168 insertions, 0 deletions
diff --git a/cmpen472hw6_McDonnell/ASM_layout.hwl b/cmpen472hw6_McDonnell/ASM_layout.hwl new file mode 100644 index 0000000..89689db --- /dev/null +++ b/cmpen472hw6_McDonnell/ASM_layout.hwl @@ -0,0 +1,21 @@ +OPEN source 0 0 60 42 +Source < attributes TOOLTIP on,TOOLTIP_FORMAT signed,TOOLTIP_MODE details,FREEZE off,MARKS off +OPEN assembly 60 0 40 30 +Assembly < attributes ADR on,CODE off,ABSADR on,SYMB off,FORMAT Auto,FREEZE off,TOPPC 0x3100 +OPEN procedure 60 60 40 17 +Procedure < attributes VALUES on,TYPES off +OPEN register 60 30 40 30 +Register < attributes FORMAT AUTO,COMPLEMENT None +OPEN memory 60 77 40 23 +Memory < attributes FORMAT hex,COMPLEMENT None,WORD 1,ASC on,ADR on,MODE automatic,UPDATERATE 10,ADDRESS 0x80 +OPEN data 0 42 60 28 +Data < attributes SCOPE global,COMPLEMENT None,FORMAT Symb,MODE automatic,SORT NotSort,UPDATERATE 10,NAMEWIDTH 16 +OPEN command 0 70 60 30 +Command < attributes CACHESIZE 1000 +OPEN Terminal 61 47 33 48 +Terminal < attributes CACHESIZE 1000 +Terminal < attributes SCI_DEFAULT_TEXT "Virtual SCI",SCI_CONNECTION 0,1,SCI_CONNECTION 1,0,SCI_CONNECTION 1,3,SCI_CONNECTION 3,1,SCI_PORT COM1,SCI_BAUD 9600,SCI_SHOW_PROTOCOL OFF,SCI_VIRTUAL_IN "Sci:2.SerialOutput",SCI_VIRTUAL_OUT "Sci:2.SerialInput",SCI_FILENAME_IN "",SCI_FILENAME_OUT "" +bckcolor 50331647 +font 'Courier New' 9 BLACK +AUTOSIZE on +ACTIVATE "Assembly" "Memory" "Register" "Command" "Data" "Source" "Procedure" "Terminal" diff --git a/cmpen472hw6_McDonnell/Default.mem b/cmpen472hw6_McDonnell/Default.mem Binary files differnew file mode 100644 index 0000000..bf49148 --- /dev/null +++ b/cmpen472hw6_McDonnell/Default.mem diff --git a/cmpen472hw6_McDonnell/Full_Chip_Simulation.hwc b/cmpen472hw6_McDonnell/Full_Chip_Simulation.hwc new file mode 100644 index 0000000..f3ce7c9 --- /dev/null +++ b/cmpen472hw6_McDonnell/Full_Chip_Simulation.hwc @@ -0,0 +1 @@ +LOADMEM default.mem diff --git a/cmpen472hw6_McDonnell/Full_Chip_Simulation.ini b/cmpen472hw6_McDonnell/Full_Chip_Simulation.ini new file mode 100644 index 0000000..a59351c --- /dev/null +++ b/cmpen472hw6_McDonnell/Full_Chip_Simulation.ini @@ -0,0 +1,39 @@ +[Environment Variables] +GENPATH={Project}Sources;{Compiler}lib\hc12c\src;{Compiler}lib\hc12c\include;{Compiler}lib\hc12c\lib;{Compiler}lib\xgatec\src;{Compiler}lib\xgatec\include;{Compiler}lib\xgatec\lib +LIBPATH={Compiler}lib\hc12c\include;{Compiler}lib\xgatec\include +OBJPATH={Project}bin +TEXTPATH={Project}bin +ABSPATH={Project}bin + +[HI-WAVE] +Target=sim +Layout=ASM_layout.hwl +LoadDialogOptions=AUTOERASEANDFLASH NORUNAFTERLOAD +CPU=HC12 +MainFrame=0,1,-1,-1,-1,-1,457,164,2377,1187 +Configuration=Full_Chip_Simulation.hwc +Statusbar=1 +ShowToolbar=1 +Smallborder=0 +Hideheadline=0 +Hidetitle=0 +TOOLBAR=57600 57601 32795 0 57635 57634 57637 0 57671 57669 0 32777 32776 32782 32780 32781 32778 0 32806 + + + + + + + + + +[Simulator] +CMDFILE0=CMDFILE STARTUP ON ".\cmd\Full_Chip_Simulation_startup.cmd" + +[Simulator HC12] +CMDFILE0=CMDFILE RESET ON ".\cmd\Full_Chip_Simulation_reset.cmd" +CMDFILE1=CMDFILE PRELOAD ON ".\cmd\Full_Chip_Simulation_preload.cmd" +CMDFILE2=CMDFILE POSTLOAD ON ".\cmd\Full_Chip_Simulation_postload.cmd" +CMDFILE3=CMDFILE SETCPU ON ".\cmd\Full_Chip_Simulation_setcpu.cmd" +HCS12_SUPPORT=1 +FCS=MC9S12C32 diff --git a/cmpen472hw6_McDonnell/Sources/derivative.inc b/cmpen472hw6_McDonnell/Sources/derivative.inc new file mode 100644 index 0000000..988343b --- /dev/null +++ b/cmpen472hw6_McDonnell/Sources/derivative.inc @@ -0,0 +1,10 @@ + + ; Note: This file is recreated by the project wizard whenever the MCU is + ; changed and should not be edited by hand + ; + + ; include derivative specific macros + INCLUDE 'mc9s12c32.inc' + + + diff --git a/cmpen472hw6_McDonnell/Sources/main.asm b/cmpen472hw6_McDonnell/Sources/main.asm new file mode 100644 index 0000000..923c8b9 --- /dev/null +++ b/cmpen472hw6_McDonnell/Sources/main.asm @@ -0,0 +1,440 @@ +************************************************************************** +* +* Title: Hardware Controller +* +* Objective: CMPEN 472 Homework 5 +* +* Revision: V1.0 +* +* Date: Feb. 21, 2025 +* +* Programmer: Jacob McDonnell +* +* Company: The Pennsylvania State University +* Department of Computer Science and Engineering +* +* Algorithm: Simple Serial I/O, Parallel I/O use, time delay-loop, and PWM control +* +* Register Use: A & B to control LEDS initially, Light Level, current byte, etc +* X & Y to hold the counter in the loop and address of strings and length of string. +* +* Memory Use: RAM Locations from $3000 for data, +* RAM Locations from $3100 for program +* +* Input: Parameters hard-coded in the program - PORTB +* Serial Port for User Input +* +* Output: LED 1 at PORTB bit 4 +* LED 2 at PORTB bit 5 +* LED 3 at PORTB bit 6 +* LED 4 at PORTB bit 7 +* Serial Port for String Output +* +* Observation: This program will respond to user input to turn on and off LEDs 1, 2, & 3, +* Dim LED 4 from 100% to 0%, Dim LED 4 from 0% to 100%, and echo user input +* back to the terminal in Type Writer Mode. +* +* Note: ON CSM-12C128 board, +* Switch 1 is at PORTB bit 0, and +* LED 4 is at PORTB bit 7. +* +* Comments: This program is developed and simulated using CodeWarrior +* development software and targeted for Axion +* Manufacturing's CSM-12C128 board running at 24MHz. +* +************************************************************************** +* Parameter Declearation Section +* +* Export Symbols + xdef pgstart ; export 'pgstart' symbol + absentry pgstart ; for assembly entry point + +* Symbols and Macros +PORTA equ $0000 ; i/o port A addresses +DDRA equ $0002 ; data direction register for PORTA +PORTB equ $0001 ; i/o port B addresses +DDRB equ $0003 ; data direction register for PORTB + +SCIBDH equ $00C8 ; Serial port (SCI) Baud Register H +SCIBDL equ $00C9 ; Serial port (SCI) Baud Register L +SCICR2 equ $00CB ; Serial port (SCI) Control Register 2 +SCISR1 equ $00CC ; Serial port (SCI) Status Register 1 +SCIDRL equ $00CF ; Serial port (SCI) Data Register + +CR equ $0d ; carriage return, ASCII 'Return' key +LF equ $0a ; line feed, ASCII 'next line' character +NULL equ $00 ; NULL Terminator character + +************************************************************************** +* Data Section: address used [ $3000 to $30FF ] RAM Memory +* + org $3000 ; Reserved RAM memory starting address + ; for Data for CMPEN 472 class +Counter dc.w $0036 ; X register count number for time Delay + ; loop for 10 useconds + ; The work to calculate this number is in + ; the comments for the delay10usec subroutine. + +LEVEL dc.b $0005 ; Light Level that the LED should be + +buffer ds.b $000F ; Array of 16 bytes to read a string + dc.b NULL +lenBuf dc.w $000F ; Length of str array +* There is a second Data Section at the end of the file. +* +************************************************************************** +* Program Section: address used [ $3100 to $3FFF ] RAM Memory +* + org $3100 ; Program start address, in RAM +pgstart lds #$3100 ; initialize the stack pointer + + ldaa #%11110001 ; LED 1,2,3,4 at PORTB bit 4,5,6,7 + staa DDRB ; set PORTB bit 4,5,6,7 as output + + ldaa #$0C ; Enable SCI port Tx and Rx units + staa SCICR2 ; disable SCI interrupts + + ldd #$0001 ; Set SCI Baud Register = $0001 => 1.5M baud at 24MHz (for simulation) + std SCIBDH ; SCI port baud rate change + + +mainLoop + ldaa #$12 + ldab #$CD + ldy #buffer + jsr PrintHexWord + + ldx #buffer + ldy lenBuf + jsr Zeros + + ldaa #CR + jsr putchar + ldaa #LF + jsr putchar + + ldaa #$FF + ldab #$FF + ldy #buffer + jsr PrintDecimalWord + + ldx #buffer + ldy lenBuf + jsr Zeros + + ldaa #CR + jsr putchar + ldaa #LF + jsr putchar + + bra mainLoop + + ldx #msg ; Load the address of msg into X + jsr WriteString ; Jump to WriteString to output message on serial + + ldx #buffer ; Load the address of buffer into X + ldy lenBuf ; Load length of buffer into Y + jsr Zeros ; jump to Zeros to zero out buffer + + ldx #buffer ; Reload address of buffer into X + ldy lenBuf ; Load the length of the buffer into Y + jsr ReadString ; Jump to ReadString to read user input into buffer + + ldx #buffer ; Reload Address of buffer into X + jsr CheckInput ; Jump to CheckInput to handle user input + bra mainLoop ; Loop back to mainLoop always +TypeWriter ldx #twMsg ; Load Type Writer welcome message address + jsr WriteString ; Jump to WriteString to write message to serial +twReadLoop jsr getchar ; Read Character from Serial + beq twReadLoop ; While Character == 0, branch to twReadLoop + jsr putchar ; Write Character back to terminal + staa PORTB ; Write Character to PORTB + bra twReadLoop ; Branch always to twReadLoop + +************************************************************************** +* Subroutine Section: address used [ $3100 to $3FFF ] RAM Memory +* + +;************************************************************************* +; CheckInput subroutine +; +; This subroutine will check the input string and match the option. +; +; Input: Address of null terminated string in X. +; Output: No Output, Control flow changed to proper subroutine. +; Registers in use: X for the address of the string, A & B to read characters from +; from the string. +; Memory locations in use: Memory Address for serial line, address of the string +; +; Comments: This subroutine will not return a value, it will jump to the proper subroutine +; based on the input given. +; + +CheckInput + rts ; Return to caller + +;************************************************************************* +; PrintBinaryWord subroutine +; +; This subroutine will print a given word of data to the serial in binary. +; +; Input: 1 word of data in register D +; Output: Binary representation of the data on the serial console +; Registers in use: X to count the number of bits written, D for the input, A for characters, +; B for the byte being written. +; Memory locations in use: Memory addresses for serial. +; +; Comments: This subroutine requires serial to be setup and putchar subroutine. +; + +PrintBinaryWord + pshx ; Save X to the stack + pshd ; Save D (A:B) to the stack + pshb ; Save B to the stack (we want these bits again later) + tab ; Transfer A to B to get upper byte + ldaa #'%' ; Load '%' into A + jsr putchar ; Print '%' to serial to denote binary number + ldx #16 ; Load 16 into X, since we're printing 16 bits +bPrintLoop rolb ; Rotate MSB of B into C of CCR + tpa ; Copy CCR into A + anda #1 ; and A with 1 to get only LSB + adda #'0' ; Add '0' to A to get ASCII Character + jsr putchar ; Print Character A to serial + dbeq X,bPrintDone ; Decrement X and if X == 0, branch to done + cpx #8 ; Compare X to 8 to check if done with upper byte + bne bPrintLoop ; If X != 8, loop to bPrintLoop + pulb ; Restore B from stack to get lower byte + bra bPrintLoop ; Branch back into loop to print lower byte +bPrintDone puld ; Restore D (A:B) from the stack + pulx ; Restore X from the stack + rts ; Return to caller + +;************************************************************************* +; PrintHexWord subroutine +; +; This subroutine will print a given word of data to the serial in binary. +; +; Input: 1 word of data in register D, Buffer Address in Y +; Output: Hexadecimal representation of the data on the serial console +; Registers in use: Y for the address of the buffer, X to count the number of bits +; written and for division, D for the input, A for characters. +; Memory locations in use: Memory addresses for serial. +; +; Comments: This subroutine requires serial to be setup and putchar subroutine. +; + +PrintHexWord + pshx ; Save X to the stack + pshd ; Save D (A:B) to the stack + pshy ; Save Y to the stack + iny ; Increment Y by 1 + iny ; Increment Y by 1 + iny ; Increment Y by 1 + iny ; Increment Y by 1 + ldx #5 ; Load 5 into X since we have at most 4 digits +hPrintLoop dex ; Decrement X by 1 + beq hPrintDone ; If X == 0, exit Loop + pshx ; Save X to the stack + ldx #16 ; Load 16 in X for division + idiv ; Divide D / 16 to get Hex Digit + cpd #0 ; Compare D to 0 + beq hPrintDone ; If D == 0, exit loop + cmpb #$0A ; Compare A to $0A + blt hex10 ; If B < $A, branch to hex10 + addb #'A' ; Add 'A' to B to get ASCII Character + subb #$0A ; Subtract $A to adjust characters + stab 1,-y ; Save character from B to Y + exg X,D ; Swap values in X and D + pulx ; Restore Count from stack to X + bra hPrintLoop ; loop to hPrintLoop +hex10 addb #'0' ; Add '0' to B to get ASCII Character + stab 1,-y ; Save character from B to Y + exg X,D ; Swap values in X and D + pulx ; Restore Count from stack to X + bra hPrintLoop ; Loop to hPrintLoop +hPrintDone ldaa #'$' ; Load '$' into A + jsr putchar ; Print '$' to denote Hex Number + exg Y,X ; Move Address from Y to X + jsr WriteString ; Jump to write string to write the number + puly ; Restore Y from the stack + puld ; Restore D (A:B) from the stack + pulx ; Restore X from the stack + rts ; Return to caller + +;************************************************************************* +; PrintHexWord subroutine +; +; This subroutine will print a given word of data to the serial in binary. +; +; Input: 1 word of data in register D, Buffer Address in Y +; Output: Hexadecimal representation of the data on the serial console +; Registers in use: Y for the address of the buffer, X to count the number of bits +; written and for division, D for the input, A for characters. +; Memory locations in use: Memory addresses for serial. +; +; Comments: This subroutine requires serial to be setup and putchar subroutine. +; + +PrintDecimalWord + pshx ; Save X to the stack + pshd ; Save D (A:B) to the stack + pshy ; Save Y to the stack + iny ; Increment Y by 1 + iny ; Increment Y by 1 + iny ; Increment Y by 1 + iny ; Increment Y by 1 + iny ; Increment Y by 1 + ldx #6 ; Load 5 into X since we have at most 5 digits +dPrintLoop dex ; Decrement X by 1 + beq dPrintDone ; If X == 0, exit Loop + pshx ; Save X to the stack + ldx #10 ; Load 10 in X for division + idiv ; Divide D / 16 to get Hex Digit + cpd #0 ; Compare D to 0 + beq dPrintDone ; If D == 0, exit loop + addb #'0' ; Add '0' to B to get ASCII Character + stab 1,-y ; Save character from B to Y + exg X,D ; Swap values in X and D + pulx ; Restore Count from stack to X + bra dPrintLoop ; Loop to hPrintLoop +dPrintDone exg Y,X ; Move Address from Y to X + jsr WriteString ; Jump to write string to write the number + puly ; Restore Y from the stack + puld ; Restore D (A:B) from the stack + pulx ; Restore X from the stack + rts ; Return to caller + +;************************************************************************* +; Zeros subroutine +; +; This subroutine will write zeros to every byte in a given array. +; +; Input: Address of an array in X and its length in Y +; Output: Zeros in every byte of an array. +; Registers in use: X for the address of the array, Y for the length, and A for 0 +; Memory locations in use: Memory Address of the array +; +; Comments: This subroutine requires serial to be setup and putchar subroutine. +; + +Zeros + psha ; Save A to the Stack + clra ; Clear A +zerosLoop staa 1,x+ ; Load A into byte at X + dbne y,zerosLoop ; Decrement Y and loop if Y != 0 + pula ; Restore A from the stack + rts ; Return to caller + +;************************************************************************* +; WriteString subroutine +; +; This subroutine will write a given null terminated string to the serial. +; +; Input: Address of null terminated string in X +; Output: Null terminated string written to serial +; Registers in use: X for the address of the string and A for the current byte +; Memory locations in use: Memory Address for serial line, address of the string +; +; Comments: This subroutine requires serial to be setup and putchar subroutine. +; + +WriteString + psha ; Save A to the stack +writeLoop ldaa 1,x+ ; Load the byte at addr in X, then add 1 + beq doneWrite ; if A == 0, branch to doneWrite + jsr putchar ; Jump to putchar to write byte to serial + bra writeLoop ; branch always to writeLoop +doneWrite pula ; restore A from the stack + rts ; return to caller + +;************************************************************************* +; ReadString subroutine +; +; This subroutine will read a string from the serial line to a given address. +; +; Input: Address of an array in X +; Output: Null terminated string in the given array +; Registers in use: X for the address of the string Y for the length of the string, +; and A for the current byte +; Memory locations in use: Memory Address for serial line, address of the string +; +; Comments: This subroutine requires serial to be setup and getchar subroutine. +; + +ReadString + psha ; Save accumulator A to the stack + pshy ; Save Y to the stack + pshx ; Save X to the stack +readLoop jsr getchar ; Jump to putchar to write byte to serial + beq readLoop ; While A == 0, loop + cmpa #CR ; If A == CR, exit loop + beq doneRead ; Branch to doneRead if A == CR + staa 1,x+ ; Save the byte to the addr in X, then add 1 + jsr putchar ; Write Character back to the terminal + dey ; Decrement Y by 1 + beq doneRead ; If Y == 0, no more room, stop reading + bra readLoop ; branch always to readLoop +doneRead ldaa #LF ; Load Line Feed into A + jsr putchar ; Write LF to terminal + pulx ; Restore X from the stack + pulY ; Restore Y from the stack + pula ; restore A from the stack + rts ; return to caller + + +;************************************************************************* +; putchar subroutine +; +; This subroutine writes a single byte to a serial line +; +; Input: A single ASCII byte in accumulator A +; Output: Sends one character to SCI port +; Registers in use: Accumulator A with input byte +; Memory locations in use: SCISR1 and SCIDRL status and data registers +; + +putchar brclr SCISR1,#%10000000,putchar ; wait for transmit buffer empty + staa SCIDRL ; send a character + rts ; Return to caller + +;************************************************************************* +; putchar subroutine +; +; This subroutine reads one byte from the SCI port +; +; Input: One byte from the SCI port +; Output: One byte in accumulator A +; Registers in use: Accumulator A for output byte +; Memory locations in use: SCISR1 and SCIDRL status and data registers +; + +getchar brclr SCISR1,#%00100000,getchar7 ; If no input on SCI port, return 0 + ldaa SCIDRL ; Read one byte from SCI port into A + rts ; Return to caller +getchar7 clra ; Set A to 0 + rts ; Return to caller + +************************************************************************** +* Data Section: address used [ $3100 to $3FFF ] RAM Memory +* + +; unknown: string to warn the user of unknown output +unknown dc.b 'Error: Unknown Command',CR,LF,NULL + +; twMsg: welcome message when type writer loads +twMsg dc.b 'Welcome to Type Writer, you may type below.',CR,LF + dc.b 'Restart to enter main menu again.',CR,LF,NULL + +; msg: this is the main option menu string +msg dc.b 'L1: Turn on LED1',CR,LF + dc.b 'F1: Turn off LED1',CR,LF + dc.b 'L2: Turn on LED2',CR,LF + dc.b 'F2: Turn off LED2',CR,LF + dc.b 'L3: Turn on LED3',CR,LF + dc.b 'F3: Turn off LED3',CR,LF + dc.b 'L4: LED4 goes from 0% light level to 100% light level in 0.4 seconds',CR,LF + dc.b 'F4: LED4 goes from 100% light level to 0% light level in 0.4 seconds',CR,LF + dc.b 'QUIT: Quit menu program, run Type writer program.',CR,LF,NULL + + + end ; last line of the file diff --git a/cmpen472hw6_McDonnell/bin/Project.abs b/cmpen472hw6_McDonnell/bin/Project.abs Binary files differnew file mode 100644 index 0000000..68eb469 --- /dev/null +++ b/cmpen472hw6_McDonnell/bin/Project.abs diff --git a/cmpen472hw6_McDonnell/bin/Project.abs.phy b/cmpen472hw6_McDonnell/bin/Project.abs.phy new file mode 100644 index 0000000..4fc6b3e --- /dev/null +++ b/cmpen472hw6_McDonnell/bin/Project.abs.phy @@ -0,0 +1,2 @@ +S0580000433A5C55736572735C4A61636F62204D63446F6E6E656C6C5C446F63756D656E74735C434D50454E2D3437322D48575C636D70656E3437326877365F4D63446F6E6E656C6C5C62696E5C50726F6A6563742E6162734A +S9030000FC diff --git a/cmpen472hw6_McDonnell/bin/Project.abs.s19 b/cmpen472hw6_McDonnell/bin/Project.abs.s19 new file mode 100644 index 0000000..3c4bd30 --- /dev/null +++ b/cmpen472hw6_McDonnell/bin/Project.abs.s19 @@ -0,0 +1,27 @@ +S0580000433A5C55736572735C4A61636F62204D63446F6E6E656C6C5C446F63756D656E74735C434D50454E2D3437322D48575C636D70656E3437326877365F4D63446F6E6E656C6C5C62696E5C50726F6A6563742E6162734A +S118300000360500000000000000000000000000000000000F6D +S1233100CF310086F15A03860C5ACBCC00015CC88612C6CDCD30031631A4CE3003FD3013D8 +S123312016320D860D163241860A16324186FFC6FFCD30031631E2CE3003FD301316320DF8 +S1233140860D163241860A16324120C4CE32BB163216CE3003FD301316320DCE3003FD3075 +S123316013163222CE300316317E20A4CE326A16321616324827FB1632415A0120F43D3461 +S12331803B37180E8625163241CE001055B72084018B301632410405088E000826EE33207E +S12331A0EB3A303D343B3502020202CE000509272334CE001018108C00002718C10A2D0B9F +S12331C0CB41C00A6B6FB7D43020E3CB306B6FB7D43020DA8624163241B7E5163216313A5B +S12331E0303D343B350202020202CE000609271434CE000A18108C00002709CB306B6FB71C +S1233200D43020E9B7E5163216313A303D36876A300436FB323D36A630270516324120F7F8 +S1233220323D36353416324827FB810D270A6A3016324103270220ED860A16324130313203 +S12332403D4FCC80FC5ACF3D4FCC200396CF3D873D4572726F723A20556E6B6E6F776E2018 +S1233260436F6D6D616E640D0A0057656C636F6D6520746F20547970652057726974657246 +S12332802C20796F75206D617920747970652062656C6F772E0D0A52657374617274207441 +S12332A06F20656E746572206D61696E206D656E7520616761696E2E0D0A004C313A205433 +S12332C075726E206F6E204C4544310D0A46313A205475726E206F6666204C4544310D0A49 +S12332E04C323A205475726E206F6E204C4544320D0A46323A205475726E206F6666204CCC +S12333004544320D0A4C333A205475726E206F6E204C4544330D0A46333A205475726E207D +S12333206F6666204C4544330D0A4C343A204C45443420676F65732066726F6D20302520F5 +S12333406C69676874206C6576656C20746F2031303025206C69676874206C6576656C20B0 +S1233360696E20302E34207365636F6E64730D0A46343A204C45443420676F6573206672F7 +S12333806F6D2031303025206C69676874206C6576656C20746F203025206C696768742037 +S12333A06C6576656C20696E20302E34207365636F6E64730D0A515549543A2051756974E2 +S12333C0206D656E752070726F6772616D2C2072756E20547970652077726974657220704C +S10D33E0726F6772616D2E0D0A0012 +S9030000FC diff --git a/cmpen472hw6_McDonnell/bin/main.dbg b/cmpen472hw6_McDonnell/bin/main.dbg new file mode 100644 index 0000000..eae7f5a --- /dev/null +++ b/cmpen472hw6_McDonnell/bin/main.dbg @@ -0,0 +1,439 @@ +************************************************************************** +* +* Title: Hardware Controller +* +* Objective: CMPEN 472 Homework 5 +* +* Revision: V1.0 +* +* Date: Feb. 21, 2025 +* +* Programmer: Jacob McDonnell +* +* Company: The Pennsylvania State University +* Department of Computer Science and Engineering +* +* Algorithm: Simple Serial I/O, Parallel I/O use, time delay-loop, and PWM control +* +* Register Use: A & B to control LEDS initially, Light Level, current byte, etc +* X & Y to hold the counter in the loop and address of strings and length of string. +* +* Memory Use: RAM Locations from $3000 for data, +* RAM Locations from $3100 for program +* +* Input: Parameters hard-coded in the program - PORTB +* Serial Port for User Input +* +* Output: LED 1 at PORTB bit 4 +* LED 2 at PORTB bit 5 +* LED 3 at PORTB bit 6 +* LED 4 at PORTB bit 7 +* Serial Port for String Output +* +* Observation: This program will respond to user input to turn on and off LEDs 1, 2, & 3, +* Dim LED 4 from 100% to 0%, Dim LED 4 from 0% to 100%, and echo user input +* back to the terminal in Type Writer Mode. +* +* Note: ON CSM-12C128 board, +* Switch 1 is at PORTB bit 0, and +* LED 4 is at PORTB bit 7. +* +* Comments: This program is developed and simulated using CodeWarrior +* development software and targeted for Axion +* Manufacturing's CSM-12C128 board running at 24MHz. +* +************************************************************************** +* Parameter Declearation Section +* +* Export Symbols + xdef pgstart ; export 'pgstart' symbol + absentry pgstart ; for assembly entry point + +* Symbols and Macros +PORTA equ $0000 ; i/o port A addresses +DDRA equ $0002 ; data direction register for PORTA +PORTB equ $0001 ; i/o port B addresses +DDRB equ $0003 ; data direction register for PORTB + +SCIBDH equ $00C8 ; Serial port (SCI) Baud Register H +SCIBDL equ $00C9 ; Serial port (SCI) Baud Register L +SCICR2 equ $00CB ; Serial port (SCI) Control Register 2 +SCISR1 equ $00CC ; Serial port (SCI) Status Register 1 +SCIDRL equ $00CF ; Serial port (SCI) Data Register + +CR equ $0d ; carriage return, ASCII 'Return' key +LF equ $0a ; line feed, ASCII 'next line' character +NULL equ $00 ; NULL Terminator character + +************************************************************************** +* Data Section: address used [ $3000 to $30FF ] RAM Memory +* + org $3000 ; Reserved RAM memory starting address + ; for Data for CMPEN 472 class +Counter dc.w $0036 ; X register count number for time Delay + ; loop for 10 useconds + ; The work to calculate this number is in + ; the comments for the delay10usec subroutine. + +LEVEL dc.b $0005 ; Light Level that the LED should be + +buffer ds.b $000F ; Array of 16 bytes to read a string + dc.b NULL +lenBuf dc.w $000F ; Length of str array +* There is a second Data Section at the end of the file. +* +************************************************************************** +* Program Section: address used [ $3100 to $3FFF ] RAM Memory +* + org $3100 ; Program start address, in RAM +pgstart lds #$3100 ; initialize the stack pointer + + ldaa #%11110001 ; LED 1,2,3,4 at PORTB bit 4,5,6,7 + staa DDRB ; set PORTB bit 4,5,6,7 as output + + ldaa #$0C ; Enable SCI port Tx and Rx units + staa SCICR2 ; disable SCI interrupts + + ldd #$0001 ; Set SCI Baud Register = $0001 => 1.5M baud at 24MHz (for simulation) + std SCIBDH ; SCI port baud rate change + + +mainLoop + ldaa #$12 + ldab #$CD + ldy #buffer + jsr PrintHexWord + + ldx #buffer + ldy lenBuf + jsr Zeros + + ldaa #CR + jsr putchar + ldaa #LF + jsr putchar + + ldaa #$FF + ldab #$FF + ldy #buffer + jsr PrintDecimalWord + + ldx #buffer + ldy lenBuf + jsr Zeros + + ldaa #CR + jsr putchar + ldaa #LF + jsr putchar + + bra mainLoop + + ldx #msg ; Load the address of msg into X + jsr WriteString ; Jump to WriteString to output message on serial + + ldx #buffer ; Load the address of buffer into X + ldy lenBuf ; Load length of buffer into Y + jsr Zeros ; jump to Zeros to zero out buffer + + ldx #buffer ; Reload address of buffer into X + ldy lenBuf ; Load the length of the buffer into Y + jsr ReadString ; Jump to ReadString to read user input into buffer + + ldx #buffer ; Reload Address of buffer into X + jsr CheckInput ; Jump to CheckInput to handle user input + bra mainLoop ; Loop back to mainLoop always +TypeWriter ldx #twMsg ; Load Type Writer welcome message address + jsr WriteString ; Jump to WriteString to write message to serial +twReadLoop jsr getchar ; Read Character from Serial + beq twReadLoop ; While Character == 0, branch to twReadLoop + jsr putchar ; Write Character back to terminal + staa PORTB ; Write Character to PORTB + bra twReadLoop ; Branch always to twReadLoop + +************************************************************************** +* Subroutine Section: address used [ $3100 to $3FFF ] RAM Memory +* + +;************************************************************************* +; CheckInput subroutine +; +; This subroutine will check the input string and match the option. +; +; Input: Address of null terminated string in X. +; Output: No Output, Control flow changed to proper subroutine. +; Registers in use: X for the address of the string, A & B to read characters from +; from the string. +; Memory locations in use: Memory Address for serial line, address of the string +; +; Comments: This subroutine will not return a value, it will jump to the proper subroutine +; based on the input given. +; + +CheckInput + rts ; Return to caller + +;************************************************************************* +; PrintBinaryWord subroutine +; +; This subroutine will print a given word of data to the serial in binary. +; +; Input: 1 word of data in register D +; Output: Binary representation of the data on the serial console +; Registers in use: X to count the number of bits written, D for the input, A for characters, +; B for the byte being written. +; Memory locations in use: Memory addresses for serial. +; +; Comments: This subroutine requires serial to be setup and putchar subroutine. +; + +PrintBinaryWord + pshx ; Save X to the stack + pshd ; Save D (A:B) to the stack + pshb ; Save B to the stack (we want these bits again later) + tab ; Transfer A to B to get upper byte + ldaa #'%' ; Load '%' into A + jsr putchar ; Print '%' to serial to denote binary number + ldx #16 ; Load 16 into X, since we're printing 16 bits +bPrintLoop rolb ; Rotate MSB of B into C of CCR + tpa ; Copy CCR into A + anda #1 ; and A with 1 to get only LSB + adda #'0' ; Add '0' to A to get ASCII Character + jsr putchar ; Print Character A to serial + dbeq X,bPrintDone ; Decrement X and if X == 0, branch to done + cpx #8 ; Compare X to 8 to check if done with upper byte + bne bPrintLoop ; If X != 8, loop to bPrintLoop + pulb ; Restore B from stack to get lower byte + bra bPrintLoop ; Branch back into loop to print lower byte +bPrintDone puld ; Restore D (A:B) from the stack + pulx ; Restore X from the stack + rts ; Return to caller + +;************************************************************************* +; PrintHexWord subroutine +; +; This subroutine will print a given word of data to the serial in binary. +; +; Input: 1 word of data in register D, Buffer Address in Y +; Output: Hexadecimal representation of the data on the serial console +; Registers in use: Y for the address of the buffer, X to count the number of bits +; written and for division, D for the input, A for characters. +; Memory locations in use: Memory addresses for serial. +; +; Comments: This subroutine requires serial to be setup and putchar subroutine. +; + +PrintHexWord + pshx ; Save X to the stack + pshd ; Save D (A:B) to the stack + pshy ; Save Y to the stack + iny ; Increment Y by 1 + iny ; Increment Y by 1 + iny ; Increment Y by 1 + iny ; Increment Y by 1 + ldx #5 ; Load 5 into X since we have at most 4 digits +hPrintLoop dex ; Decrement X by 1 + beq hPrintDone ; If X == 0, exit Loop + pshx ; Save X to the stack + ldx #16 ; Load 16 in X for division + idiv ; Divide D / 16 to get Hex Digit + cpd #0 ; Compare D to 0 + beq hPrintDone ; If D == 0, exit loop + cmpb #$0A ; Compare A to $0A + blt hex10 ; If B < $A, branch to hex10 + addb #'A' ; Add 'A' to B to get ASCII Character + subb #$0A ; Subtract $A to adjust characters + stab 1,-y ; Save character from B to Y + exg X,D ; Swap values in X and D + pulx ; Restore Count from stack to X + bra hPrintLoop ; loop to hPrintLoop +hex10 addb #'0' ; Add '0' to B to get ASCII Character + stab 1,-y ; Save character from B to Y + exg X,D ; Swap values in X and D + pulx ; Restore Count from stack to X + bra hPrintLoop ; Loop to hPrintLoop +hPrintDone ldaa #'$' ; Load '$' into A + jsr putchar ; Print '$' to denote Hex Number + exg Y,X ; Move Address from Y to X + jsr WriteString ; Jump to write string to write the number + puly ; Restore Y from the stack + puld ; Restore D (A:B) from the stack + pulx ; Restore X from the stack + rts ; Return to caller + +;************************************************************************* +; PrintHexWord subroutine +; +; This subroutine will print a given word of data to the serial in binary. +; +; Input: 1 word of data in register D, Buffer Address in Y +; Output: Hexadecimal representation of the data on the serial console +; Registers in use: Y for the address of the buffer, X to count the number of bits +; written and for division, D for the input, A for characters. +; Memory locations in use: Memory addresses for serial. +; +; Comments: This subroutine requires serial to be setup and putchar subroutine. +; + +PrintDecimalWord + pshx ; Save X to the stack + pshd ; Save D (A:B) to the stack + pshy ; Save Y to the stack + iny ; Increment Y by 1 + iny ; Increment Y by 1 + iny ; Increment Y by 1 + iny ; Increment Y by 1 + iny ; Increment Y by 1 + ldx #6 ; Load 5 into X since we have at most 5 digits +dPrintLoop dex ; Decrement X by 1 + beq dPrintDone ; If X == 0, exit Loop + pshx ; Save X to the stack + ldx #10 ; Load 10 in X for division + idiv ; Divide D / 16 to get Hex Digit + cpd #0 ; Compare D to 0 + beq dPrintDone ; If D == 0, exit loop + addb #'0' ; Add '0' to B to get ASCII Character + stab 1,-y ; Save character from B to Y + exg X,D ; Swap values in X and D + pulx ; Restore Count from stack to X + bra dPrintLoop ; Loop to hPrintLoop +dPrintDone exg Y,X ; Move Address from Y to X + jsr WriteString ; Jump to write string to write the number + puly ; Restore Y from the stack + puld ; Restore D (A:B) from the stack + pulx ; Restore X from the stack + rts ; Return to caller + +;************************************************************************* +; Zeros subroutine +; +; This subroutine will write zeros to every byte in a given array. +; +; Input: Address of an array in X and its length in Y +; Output: Zeros in every byte of an array. +; Registers in use: X for the address of the array, Y for the length, and A for 0 +; Memory locations in use: Memory Address of the array +; +; Comments: This subroutine requires serial to be setup and putchar subroutine. +; + +Zeros + psha ; Save A to the Stack + clra ; Clear A +zerosLoop staa 1,x+ ; Load A into byte at X + dbne y,zerosLoop ; Decrement Y and loop if Y != 0 + pula ; Restore A from the stack + rts ; Return to caller + +;************************************************************************* +; WriteString subroutine +; +; This subroutine will write a given null terminated string to the serial. +; +; Input: Address of null terminated string in X +; Output: Null terminated string written to serial +; Registers in use: X for the address of the string and A for the current byte +; Memory locations in use: Memory Address for serial line, address of the string +; +; Comments: This subroutine requires serial to be setup and putchar subroutine. +; + +WriteString + psha ; Save A to the stack +writeLoop ldaa 1,x+ ; Load the byte at addr in X, then add 1 + beq doneWrite ; if A == 0, branch to doneWrite + jsr putchar ; Jump to putchar to write byte to serial + bra writeLoop ; branch always to writeLoop +doneWrite pula ; restore A from the stack + rts ; return to caller + +;************************************************************************* +; ReadString subroutine +; +; This subroutine will read a string from the serial line to a given address. +; +; Input: Address of an array in X +; Output: Null terminated string in the given array +; Registers in use: X for the address of the string Y for the length of the string, +; and A for the current byte +; Memory locations in use: Memory Address for serial line, address of the string +; +; Comments: This subroutine requires serial to be setup and getchar subroutine. +; + +ReadString + psha ; Save accumulator A to the stack + pshy ; Save Y to the stack + pshx ; Save X to the stack +readLoop jsr getchar ; Jump to putchar to write byte to serial + beq readLoop ; While A == 0, loop + cmpa #CR ; If A == CR, exit loop + beq doneRead ; Branch to doneRead if A == CR + staa 1,x+ ; Save the byte to the addr in X, then add 1 + jsr putchar ; Write Character back to the terminal + dey ; Decrement Y by 1 + beq doneRead ; If Y == 0, no more room, stop reading + bra readLoop ; branch always to readLoop +doneRead ldaa #LF ; Load Line Feed into A + jsr putchar ; Write LF to terminal + pulx ; Restore X from the stack + pulY ; Restore Y from the stack + pula ; restore A from the stack + rts ; return to caller + + +;************************************************************************* +; putchar subroutine +; +; This subroutine writes a single byte to a serial line +; +; Input: A single ASCII byte in accumulator A +; Output: Sends one character to SCI port +; Registers in use: Accumulator A with input byte +; Memory locations in use: SCISR1 and SCIDRL status and data registers +; + +putchar brclr SCISR1,#%10000000,putchar ; wait for transmit buffer empty + staa SCIDRL ; send a character + rts ; Return to caller + +;************************************************************************* +; putchar subroutine +; +; This subroutine reads one byte from the SCI port +; +; Input: One byte from the SCI port +; Output: One byte in accumulator A +; Registers in use: Accumulator A for output byte +; Memory locations in use: SCISR1 and SCIDRL status and data registers +; + +getchar brclr SCISR1,#%00100000,getchar7 ; If no input on SCI port, return 0 + ldaa SCIDRL ; Read one byte from SCI port into A + rts ; Return to caller +getchar7 clra ; Set A to 0 + rts ; Return to caller + +************************************************************************** +* Data Section: address used [ $3100 to $3FFF ] RAM Memory +* + +; unknown: string to warn the user of unknown output +unknown dc.b 'Error: Unknown Command',CR,LF,NULL + +; twMsg: welcome message when type writer loads +twMsg dc.b 'Welcome to Type Writer, you may type below.',CR,LF + dc.b 'Restart to enter main menu again.',CR,LF,NULL + +; msg: this is the main option menu string +msg dc.b 'L1: Turn on LED1',CR,LF + dc.b 'F1: Turn off LED1',CR,LF + dc.b 'L2: Turn on LED2',CR,LF + dc.b 'F2: Turn off LED2',CR,LF + dc.b 'L3: Turn on LED3',CR,LF + dc.b 'F3: Turn off LED3',CR,LF + dc.b 'L4: LED4 goes from 0% light level to 100% light level in 0.4 seconds',CR,LF + dc.b 'F4: LED4 goes from 100% light level to 0% light level in 0.4 seconds',CR,LF + dc.b 'QUIT: Quit menu program, run Type writer program.',CR,LF,NULL + + diff --git a/cmpen472hw6_McDonnell/cmd/Full_Chip_Simulation_Postload.cmd b/cmpen472hw6_McDonnell/cmd/Full_Chip_Simulation_Postload.cmd new file mode 100644 index 0000000..ac4d359 --- /dev/null +++ b/cmpen472hw6_McDonnell/cmd/Full_Chip_Simulation_Postload.cmd @@ -0,0 +1 @@ +// After load the commands written below will be executed diff --git a/cmpen472hw6_McDonnell/cmd/Full_Chip_Simulation_Preload.cmd b/cmpen472hw6_McDonnell/cmd/Full_Chip_Simulation_Preload.cmd new file mode 100644 index 0000000..0bed464 --- /dev/null +++ b/cmpen472hw6_McDonnell/cmd/Full_Chip_Simulation_Preload.cmd @@ -0,0 +1 @@ +// Before load the commands written below will be executed diff --git a/cmpen472hw6_McDonnell/cmd/Full_Chip_Simulation_Reset.cmd b/cmpen472hw6_McDonnell/cmd/Full_Chip_Simulation_Reset.cmd new file mode 100644 index 0000000..bf55944 --- /dev/null +++ b/cmpen472hw6_McDonnell/cmd/Full_Chip_Simulation_Reset.cmd @@ -0,0 +1 @@ +// After reset the commands written below will be executed diff --git a/cmpen472hw6_McDonnell/cmd/Full_Chip_Simulation_SetCPU.cmd b/cmpen472hw6_McDonnell/cmd/Full_Chip_Simulation_SetCPU.cmd new file mode 100644 index 0000000..6a1549a --- /dev/null +++ b/cmpen472hw6_McDonnell/cmd/Full_Chip_Simulation_SetCPU.cmd @@ -0,0 +1 @@ +// At startup the commands written below will be executed diff --git a/cmpen472hw6_McDonnell/cmd/Full_Chip_Simulation_Startup.cmd b/cmpen472hw6_McDonnell/cmd/Full_Chip_Simulation_Startup.cmd new file mode 100644 index 0000000..6a1549a --- /dev/null +++ b/cmpen472hw6_McDonnell/cmd/Full_Chip_Simulation_Startup.cmd @@ -0,0 +1 @@ +// At startup the commands written below will be executed diff --git a/cmpen472hw6_McDonnell/cmpen472hw6_McDonnell.mcp b/cmpen472hw6_McDonnell/cmpen472hw6_McDonnell.mcp Binary files differnew file mode 100644 index 0000000..b0cc7cb --- /dev/null +++ b/cmpen472hw6_McDonnell/cmpen472hw6_McDonnell.mcp diff --git a/cmpen472hw6_McDonnell/cmpen472hw6_McDonnell_Data/CWSettingsWindows.stg b/cmpen472hw6_McDonnell/cmpen472hw6_McDonnell_Data/CWSettingsWindows.stg Binary files differnew file mode 100644 index 0000000..b7b7e30 --- /dev/null +++ b/cmpen472hw6_McDonnell/cmpen472hw6_McDonnell_Data/CWSettingsWindows.stg diff --git a/cmpen472hw6_McDonnell/cmpen472hw6_McDonnell_Data/Standard/ObjectCode/main.asm.o b/cmpen472hw6_McDonnell/cmpen472hw6_McDonnell_Data/Standard/ObjectCode/main.asm.o Binary files differnew file mode 100644 index 0000000..68eb469 --- /dev/null +++ b/cmpen472hw6_McDonnell/cmpen472hw6_McDonnell_Data/Standard/ObjectCode/main.asm.o diff --git a/cmpen472hw6_McDonnell/cmpen472hw6_McDonnell_Data/Standard/ObjectCode/main.asm.sx b/cmpen472hw6_McDonnell/cmpen472hw6_McDonnell_Data/Standard/ObjectCode/main.asm.sx new file mode 100644 index 0000000..d5adbf0 --- /dev/null +++ b/cmpen472hw6_McDonnell/cmpen472hw6_McDonnell_Data/Standard/ObjectCode/main.asm.sx @@ -0,0 +1,27 @@ +S0840000433A5C55736572735C4A61636F62204D63446F6E6E656C6C5C446F63756D656E74735C434D50454E2D3437322D48575C636D70656E3437326877365F4D63446F6E6E656C6C5C636D70656E3437326877365F4D63446F6E6E656C6C5F446174615C5374616E646172645C4F626A656374436F64655C6D61696E2E61736D2E70726DCD +S118300000360500000000000000000000000000000000000F6D +S1233100CF310086F15A03860C5ACBCC00015CC88612C6CDCD30031631A4CE3003FD3013D8 +S123312016320D860D163241860A16324186FFC6FFCD30031631E2CE3003FD301316320DF8 +S1233140860D163241860A16324120C4CE32BB163216CE3003FD301316320DCE3003FD3075 +S123316013163222CE300316317E20A4CE326A16321616324827FB1632415A0120F43D3461 +S12331803B37180E8625163241CE001055B72084018B301632410405088E000826EE33207E +S12331A0EB3A303D343B3502020202CE000509272334CE001018108C00002718C10A2D0B9F +S12331C0CB41C00A6B6FB7D43020E3CB306B6FB7D43020DA8624163241B7E5163216313A5B +S12331E0303D343B350202020202CE000609271434CE000A18108C00002709CB306B6FB71C +S1233200D43020E9B7E5163216313A303D36876A300436FB323D36A630270516324120F7F8 +S1233220323D36353416324827FB810D270A6A3016324103270220ED860A16324130313203 +S12332403D4FCC80FC5ACF3D4FCC200396CF3D873D4572726F723A20556E6B6E6F776E2018 +S1233260436F6D6D616E640D0A0057656C636F6D6520746F20547970652057726974657246 +S12332802C20796F75206D617920747970652062656C6F772E0D0A52657374617274207441 +S12332A06F20656E746572206D61696E206D656E7520616761696E2E0D0A004C313A205433 +S12332C075726E206F6E204C4544310D0A46313A205475726E206F6666204C4544310D0A49 +S12332E04C323A205475726E206F6E204C4544320D0A46323A205475726E206F6666204CCC +S12333004544320D0A4C333A205475726E206F6E204C4544330D0A46333A205475726E207D +S12333206F6666204C4544330D0A4C343A204C45443420676F65732066726F6D20302520F5 +S12333406C69676874206C6576656C20746F2031303025206C69676874206C6576656C20B0 +S1233360696E20302E34207365636F6E64730D0A46343A204C45443420676F6573206672F7 +S12333806F6D2031303025206C69676874206C6576656C20746F203025206C696768742037 +S12333A06C6576656C20696E20302E34207365636F6E64730D0A515549543A2051756974E2 +S12333C0206D656E752070726F6772616D2C2072756E20547970652077726974657220704C +S10D33E0726F6772616D2E0D0A0012 +S9033100CB diff --git a/cmpen472hw6_McDonnell/cmpen472hw6_McDonnell_Data/Standard/TargetDataWindows.tdt b/cmpen472hw6_McDonnell/cmpen472hw6_McDonnell_Data/Standard/TargetDataWindows.tdt Binary files differnew file mode 100644 index 0000000..686cab1 --- /dev/null +++ b/cmpen472hw6_McDonnell/cmpen472hw6_McDonnell_Data/Standard/TargetDataWindows.tdt diff --git a/cmpen472hw6_McDonnell/prm/burner.bbl b/cmpen472hw6_McDonnell/prm/burner.bbl new file mode 100644 index 0000000..0c57619 --- /dev/null +++ b/cmpen472hw6_McDonnell/prm/burner.bbl @@ -0,0 +1,157 @@ +/* logical s-record file */ +OPENFILE "%ABS_FILE%.s19" +format=motorola +busWidth=1 +origin=0 +len=0x1000000 +destination=0 +SRECORD=Sx +SENDBYTE 1 "%ABS_FILE%" +CLOSE + + +/* physical s-record file */ +OPENFILE "%ABS_FILE%.phy" +format = motorola +busWidth = 1 +len = 0x4000 + +/* logical non banked flash at $4000 and $C000 to physical */ +origin = 0x004000 +destination = 0x0F8000 +SENDBYTE 1 "%ABS_FILE%" + +origin = 0x00C000 +destination = 0x0FC000 +SENDBYTE 1 "%ABS_FILE%" + +/* physical FTS512K flash window to physical +origin = 0x008000 +destination = 0x080000 +SENDBYTE 1 "%ABS_FILE%" +*/ + +/* physical FTS256K parts flash window to physical +origin = 0x008000 +destination = 0x0C0000 +SENDBYTE 1 "%ABS_FILE%" +*/ + +/* physical FTS128K parts flash window to physical +origin = 0x008000 +destination = 0x0E0000 +SENDBYTE 1 "%ABS_FILE%" +*/ + +/* physical FTS64K parts flash window to physical +origin = 0x008000 +destination = 0x0F0000 +SENDBYTE 1 "%ABS_FILE%" +*/ + +/* physical FTS32K parts flash window to physical +origin = 0x008000 +destination = 0x0F8000 +SENDBYTE 1 "%ABS_FILE%" +*/ + +/* logical 512 kB banked flash to physical */ +origin = 0x208000 +destination = 0x080000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x218000 +destination = 0x084000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x228000 +destination = 0x088000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x238000 +destination = 0x08C000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x248000 +destination = 0x090000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x258000 +destination = 0x094000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x268000 +destination = 0x098000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x278000 +destination = 0x09C000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x288000 +destination = 0x0A0000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x298000 +destination = 0x0A4000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x2A8000 +destination = 0x0A8000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x2B8000 +destination = 0x0AC000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x2C8000 +destination = 0x0B0000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x2D8000 +destination = 0x0B4000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x2E8000 +destination = 0x0B8000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x2F8000 +destination = 0x0BC000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x308000 +destination = 0x0C0000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x318000 +destination = 0x0C4000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x328000 +destination = 0x0C8000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x338000 +destination = 0x0CC000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x348000 +destination = 0x0D0000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x358000 +destination = 0x0D4000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x368000 +destination = 0x0D8000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x378000 +destination = 0x0DC000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x388000 +destination = 0x0E0000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x398000 +destination = 0x0E4000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x3A8000 +destination = 0x0E8000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x3B8000 +destination = 0x0EC000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x3C8000 +destination = 0x0F0000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x3D8000 +destination = 0x0F4000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x3E8000 +destination = 0x0F8000 +SENDBYTE 1 "%ABS_FILE%" +origin = 0x3F8000 +destination = 0x0FC000 +SENDBYTE 1 "%ABS_FILE%" + +CLOSE + |
