summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob McDonnell <jacob@jacobmcdonnell.com>2025-02-14 18:20:46 -0500
committerJacob McDonnell <jacob@jacobmcdonnell.com>2025-02-14 18:20:46 -0500
commit7b2d0640e6209539d80e79126d3b05ff8bf88176 (patch)
tree46cd3c6455e37e1654aaf96c753454ecca223fbd
parentdb27faf84654f0084542536e538044a0458bb554 (diff)
HW4 Finished
-rw-r--r--ExamPrepTwo/ASM_layout.hwl18
-rw-r--r--ExamPrepTwo/Default.membin0 -> 285 bytes
-rw-r--r--ExamPrepTwo/ExamPrepTwo.mcpbin0 -> 57065 bytes
-rw-r--r--ExamPrepTwo/ExamPrepTwo_Data/CWSettingsWindows.stgbin0 -> 2088 bytes
-rw-r--r--ExamPrepTwo/ExamPrepTwo_Data/Standard/ObjectCode/main.asm.obin0 -> 2726 bytes
-rw-r--r--ExamPrepTwo/ExamPrepTwo_Data/Standard/ObjectCode/main.asm.sx5
-rw-r--r--ExamPrepTwo/ExamPrepTwo_Data/Standard/TargetDataWindows.tdtbin0 -> 61634 bytes
-rw-r--r--ExamPrepTwo/Full_Chip_Simulation.ini27
-rw-r--r--ExamPrepTwo/Sources/derivative.inc10
-rw-r--r--ExamPrepTwo/Sources/main.asm56
-rw-r--r--ExamPrepTwo/bin/Project.absbin0 -> 2726 bytes
-rw-r--r--ExamPrepTwo/bin/Project.abs.phy2
-rw-r--r--ExamPrepTwo/bin/Project.abs.s195
-rw-r--r--ExamPrepTwo/bin/main.dbg55
-rw-r--r--ExamPrepTwo/cmd/Full_Chip_Simulation_Postload.cmd1
-rw-r--r--ExamPrepTwo/cmd/Full_Chip_Simulation_Preload.cmd1
-rw-r--r--ExamPrepTwo/cmd/Full_Chip_Simulation_Reset.cmd1
-rw-r--r--ExamPrepTwo/cmd/Full_Chip_Simulation_SetCPU.cmd1
-rw-r--r--ExamPrepTwo/cmd/Full_Chip_Simulation_Startup.cmd1
-rw-r--r--ExamPrepTwo/prm/burner.bbl157
-rw-r--r--cmpen472hw4_McDonnell/Full_Chip_Simulation.ini2
-rw-r--r--cmpen472hw4_McDonnell/Sources/cmpen472hw4_McDonnell.asm172
-rw-r--r--cmpen472hw4_McDonnell/Sources/main.asm86
-rw-r--r--cmpen472hw4_McDonnell/bin/Project.absbin3402 -> 3398 bytes
-rw-r--r--cmpen472hw4_McDonnell/bin/Project.abs.s198
-rw-r--r--cmpen472hw4_McDonnell/bin/main.dbg86
-rw-r--r--cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/ObjectCode/main.asm.obin3402 -> 3398 bytes
-rw-r--r--cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/ObjectCode/main.asm.sx8
-rw-r--r--cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/TargetDataWindows.tdtbin62658 -> 62658 bytes
29 files changed, 607 insertions, 95 deletions
diff --git a/ExamPrepTwo/ASM_layout.hwl b/ExamPrepTwo/ASM_layout.hwl
new file mode 100644
index 0000000..af05bda
--- /dev/null
+++ b/ExamPrepTwo/ASM_layout.hwl
@@ -0,0 +1,18 @@
+OPEN source 0 0 60 42
+Source < attributes MARKS off
+OPEN assembly 60 0 40 30
+Assembly < attributes ADR on,CODE off,ABSADR on,SYMB off,TOPPC 0xF800
+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,ADDRESS 0x80
+OPEN data 0 42 60 28
+Data < attributes SCOPE global,COMPLEMENT None,FORMAT Symb,MODE automatic,UPDATERATE 10,NAMEWIDTH 16
+OPEN command 0 70 60 30
+Command < attributes CACHESIZE 1000
+bckcolor 50331647
+font 'Courier New' 9 BLACK
+AUTOSIZE on
+ACTIVATE Assembly Memory Register Command Data Source Procedure
diff --git a/ExamPrepTwo/Default.mem b/ExamPrepTwo/Default.mem
new file mode 100644
index 0000000..bf49148
--- /dev/null
+++ b/ExamPrepTwo/Default.mem
Binary files differ
diff --git a/ExamPrepTwo/ExamPrepTwo.mcp b/ExamPrepTwo/ExamPrepTwo.mcp
new file mode 100644
index 0000000..69554d2
--- /dev/null
+++ b/ExamPrepTwo/ExamPrepTwo.mcp
Binary files differ
diff --git a/ExamPrepTwo/ExamPrepTwo_Data/CWSettingsWindows.stg b/ExamPrepTwo/ExamPrepTwo_Data/CWSettingsWindows.stg
new file mode 100644
index 0000000..db4777a
--- /dev/null
+++ b/ExamPrepTwo/ExamPrepTwo_Data/CWSettingsWindows.stg
Binary files differ
diff --git a/ExamPrepTwo/ExamPrepTwo_Data/Standard/ObjectCode/main.asm.o b/ExamPrepTwo/ExamPrepTwo_Data/Standard/ObjectCode/main.asm.o
new file mode 100644
index 0000000..f0db289
--- /dev/null
+++ b/ExamPrepTwo/ExamPrepTwo_Data/Standard/ObjectCode/main.asm.o
Binary files differ
diff --git a/ExamPrepTwo/ExamPrepTwo_Data/Standard/ObjectCode/main.asm.sx b/ExamPrepTwo/ExamPrepTwo_Data/Standard/ObjectCode/main.asm.sx
new file mode 100644
index 0000000..cccac41
--- /dev/null
+++ b/ExamPrepTwo/ExamPrepTwo_Data/Standard/ObjectCode/main.asm.sx
@@ -0,0 +1,5 @@
+S0700000433A5C55736572735C4A61636F62204D63446F6E6E656C6C5C446F63756D656E74735C434D50454E2D3437322D48575C4578616D5072657054776F5C4578616D5072657054776F5F446174615C5374616E646172645C4F626A656374436F64655C6D61696E2E61736D2E70726D69
+S104300000CB
+S12331008646C63C1806A7863CC6BA1806A786C4C6BA1816A78646C6C41816A7F63000B66B
+S108312030004326FD10
+S9033100CB
diff --git a/ExamPrepTwo/ExamPrepTwo_Data/Standard/TargetDataWindows.tdt b/ExamPrepTwo/ExamPrepTwo_Data/Standard/TargetDataWindows.tdt
new file mode 100644
index 0000000..f8b9e74
--- /dev/null
+++ b/ExamPrepTwo/ExamPrepTwo_Data/Standard/TargetDataWindows.tdt
Binary files differ
diff --git a/ExamPrepTwo/Full_Chip_Simulation.ini b/ExamPrepTwo/Full_Chip_Simulation.ini
new file mode 100644
index 0000000..6a37f67
--- /dev/null
+++ b/ExamPrepTwo/Full_Chip_Simulation.ini
@@ -0,0 +1,27 @@
+[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=2,3,-1,-1,-1,-1,130,130,2050,1153
+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/ExamPrepTwo/Sources/derivative.inc b/ExamPrepTwo/Sources/derivative.inc
new file mode 100644
index 0000000..988343b
--- /dev/null
+++ b/ExamPrepTwo/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/ExamPrepTwo/Sources/main.asm b/ExamPrepTwo/Sources/main.asm
new file mode 100644
index 0000000..fc86659
--- /dev/null
+++ b/ExamPrepTwo/Sources/main.asm
@@ -0,0 +1,56 @@
+**************************************************************************
+* 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
+
+**************************************************************************
+* Data Section: address used [ $3000 to $30FF ] RAM Memory
+*
+ org $3000 ; Reserved RAM memory starting address
+ ; for Data for CMPEN 472 class
+num dc.b 0
+
+*
+**************************************************************************
+* Program Section: address used [ $3100 to $3FFF ] RAM Memory
+*
+ org $3100 ; Program start address, in RAM
+pgstart ldaa #70
+ ldab #60
+ aba
+ nop
+
+ ldaa #60
+ ldab #-70
+ aba
+ nop
+
+ ldaa #-60
+ ldab #-70
+ sba
+ nop
+
+ ldaa #70
+ ldab #-60
+ sba
+ nop
+
+ ldab num
+
+dly ldaa num
+loop deca
+ bne loop
+
+*
+**************************************************************************
+
+done
+ end ; Last line of the file \ No newline at end of file
diff --git a/ExamPrepTwo/bin/Project.abs b/ExamPrepTwo/bin/Project.abs
new file mode 100644
index 0000000..f0db289
--- /dev/null
+++ b/ExamPrepTwo/bin/Project.abs
Binary files differ
diff --git a/ExamPrepTwo/bin/Project.abs.phy b/ExamPrepTwo/bin/Project.abs.phy
new file mode 100644
index 0000000..c781cf8
--- /dev/null
+++ b/ExamPrepTwo/bin/Project.abs.phy
@@ -0,0 +1,2 @@
+S04E0000433A5C55736572735C4A61636F62204D63446F6E6E656C6C5C446F63756D656E74735C434D50454E2D3437322D48575C4578616D5072657054776F5C62696E5C50726F6A6563742E61627398
+S9030000FC
diff --git a/ExamPrepTwo/bin/Project.abs.s19 b/ExamPrepTwo/bin/Project.abs.s19
new file mode 100644
index 0000000..287233e
--- /dev/null
+++ b/ExamPrepTwo/bin/Project.abs.s19
@@ -0,0 +1,5 @@
+S04E0000433A5C55736572735C4A61636F62204D63446F6E6E656C6C5C446F63756D656E74735C434D50454E2D3437322D48575C4578616D5072657054776F5C62696E5C50726F6A6563742E61627398
+S104300000CB
+S12331008646C63C1806A7863CC6BA1806A786C4C6BA1816A78646C6C41816A7F63000B66B
+S108312030004326FD10
+S9030000FC
diff --git a/ExamPrepTwo/bin/main.dbg b/ExamPrepTwo/bin/main.dbg
new file mode 100644
index 0000000..f284c7d
--- /dev/null
+++ b/ExamPrepTwo/bin/main.dbg
@@ -0,0 +1,55 @@
+**************************************************************************
+* 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
+
+**************************************************************************
+* Data Section: address used [ $3000 to $30FF ] RAM Memory
+*
+ org $3000 ; Reserved RAM memory starting address
+ ; for Data for CMPEN 472 class
+num dc.b 0
+
+*
+**************************************************************************
+* Program Section: address used [ $3100 to $3FFF ] RAM Memory
+*
+ org $3100 ; Program start address, in RAM
+pgstart ldaa #70
+ ldab #60
+ aba
+ nop
+
+ ldaa #60
+ ldab #-70
+ aba
+ nop
+
+ ldaa #-60
+ ldab #-70
+ sba
+ nop
+
+ ldaa #70
+ ldab #-60
+ sba
+ nop
+
+ ldab num
+
+dly ldaa num
+loop deca
+ bne loop
+
+*
+**************************************************************************
+
+done
diff --git a/ExamPrepTwo/cmd/Full_Chip_Simulation_Postload.cmd b/ExamPrepTwo/cmd/Full_Chip_Simulation_Postload.cmd
new file mode 100644
index 0000000..ac4d359
--- /dev/null
+++ b/ExamPrepTwo/cmd/Full_Chip_Simulation_Postload.cmd
@@ -0,0 +1 @@
+// After load the commands written below will be executed
diff --git a/ExamPrepTwo/cmd/Full_Chip_Simulation_Preload.cmd b/ExamPrepTwo/cmd/Full_Chip_Simulation_Preload.cmd
new file mode 100644
index 0000000..0bed464
--- /dev/null
+++ b/ExamPrepTwo/cmd/Full_Chip_Simulation_Preload.cmd
@@ -0,0 +1 @@
+// Before load the commands written below will be executed
diff --git a/ExamPrepTwo/cmd/Full_Chip_Simulation_Reset.cmd b/ExamPrepTwo/cmd/Full_Chip_Simulation_Reset.cmd
new file mode 100644
index 0000000..bf55944
--- /dev/null
+++ b/ExamPrepTwo/cmd/Full_Chip_Simulation_Reset.cmd
@@ -0,0 +1 @@
+// After reset the commands written below will be executed
diff --git a/ExamPrepTwo/cmd/Full_Chip_Simulation_SetCPU.cmd b/ExamPrepTwo/cmd/Full_Chip_Simulation_SetCPU.cmd
new file mode 100644
index 0000000..6a1549a
--- /dev/null
+++ b/ExamPrepTwo/cmd/Full_Chip_Simulation_SetCPU.cmd
@@ -0,0 +1 @@
+// At startup the commands written below will be executed
diff --git a/ExamPrepTwo/cmd/Full_Chip_Simulation_Startup.cmd b/ExamPrepTwo/cmd/Full_Chip_Simulation_Startup.cmd
new file mode 100644
index 0000000..6a1549a
--- /dev/null
+++ b/ExamPrepTwo/cmd/Full_Chip_Simulation_Startup.cmd
@@ -0,0 +1 @@
+// At startup the commands written below will be executed
diff --git a/ExamPrepTwo/prm/burner.bbl b/ExamPrepTwo/prm/burner.bbl
new file mode 100644
index 0000000..0c57619
--- /dev/null
+++ b/ExamPrepTwo/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
+
diff --git a/cmpen472hw4_McDonnell/Full_Chip_Simulation.ini b/cmpen472hw4_McDonnell/Full_Chip_Simulation.ini
index 0ea39fd..e7c287d 100644
--- a/cmpen472hw4_McDonnell/Full_Chip_Simulation.ini
+++ b/cmpen472hw4_McDonnell/Full_Chip_Simulation.ini
@@ -10,7 +10,7 @@ Target=sim
Layout=Full_Chip_Simulation.hwl
LoadDialogOptions=AUTOERASEANDFLASH NORUNAFTERLOAD
CPU=HC12
-MainFrame=2,3,-32000,-32000,-1,-1,985,223,2200,1246
+MainFrame=2,3,-1,-1,-1,-1,985,223,2200,1246
Configuration=Full_Chip_Simulation.hwc
Statusbar=1
ShowToolbar=1
diff --git a/cmpen472hw4_McDonnell/Sources/cmpen472hw4_McDonnell.asm b/cmpen472hw4_McDonnell/Sources/cmpen472hw4_McDonnell.asm
new file mode 100644
index 0000000..87a8a3c
--- /dev/null
+++ b/cmpen472hw4_McDonnell/Sources/cmpen472hw4_McDonnell.asm
@@ -0,0 +1,172 @@
+**************************************************************************
+*
+* Title: LED Light Dimmer Loop
+*
+* Objective: CMPEN 472 Homework 4
+*
+* Revision: V1.0
+*
+* Date: Feb. 14, 2025
+*
+* Programmer: Jacob McDonnell
+*
+* Company: The Pennsylvania State University
+* Department of Computer Science and Engineering
+*
+* Algorithm: Simple Parallel I/O use, time delay-loop, and PWM control
+*
+* Register Use: A to control LEDS initially and for Light Level
+* X to hold the counter in the loop.
+*
+* Memory Use: RAM Locations from $3000 for data,
+* RAM Locations from $3100 for program
+*
+* Input: Parameters hard-coded in the program - PORTB
+* Switch 1 at PORTB bit 0
+* Switch 2 at PORTB bit 1
+* Switch 3 at PORTB bit 2
+* Switch 4 at PORTB bit 3
+*
+* 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
+*
+* Observation: This program will decrease LED 4 from 100% to 0% in 400ms
+* and then increase LED 4 from 0% to 100% in 400ms. The program
+* will loop forever.
+*
+* 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
+
+**************************************************************************
+* 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
+
+*
+**************************************************************************
+* 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 #%01010000
+ staa PORTB ; Turn on only LEDs 1 & 3 on PORTB
+
+mainLoop
+ ldaa #100 ; load 100 into accumulator A
+decrease tbeq A,increase ; Test if A == 0, skip loop if so
+ staa LEVEL ; store A in counter LEVEL
+ jsr dimmer ; jump to dimmer subroutine
+ jsr dimmer ; jump to dimmer subroutine
+ jsr dimmer ; jump to dimmer subroutine
+ jsr dimmer ; jump to dimmer subroutine
+ deca ; decrement accumulator A by 1
+ bra decrease ; loop to decrease always
+increase cmpa #100 ; Compare A to 100
+ beq mainLoop ; Test if A == 100, jump to mainLoop
+ staa LEVEL ; store A in counter LEVEL
+ jsr dimmer ; jump to dimmer subroutine
+ jsr dimmer ; jump to dimmer subroutine
+ jsr dimmer ; jump to dimmer subroutine
+ jsr dimmer ; jump to dimmer subroutine
+ inca ; increment accumulator A by 1
+ bra increase ; loop to increase always
+
+**************************************************************************
+* Subroutine Section: address used [ $3100 to $3FFF ] RAM Memory
+*
+
+;*************************************************************************
+; dimmer subroutine
+;
+; This subroutine will dim LED4 to a given level
+;
+; Input: Two 1 byte counters, ONN and OFF, for how many times
+; LED4 should be on and off for.
+; Output: LED4 dimmed to a given level, wasted cycles
+; Registers in use: A accumulator to counter number of times looped
+; Memory locations in use: Two bytes ONN and OFF used to dim the LED4 to a given level
+;
+; Comments: This subroutine requires delay10usec subroutine
+;
+
+dimmer
+ bset PORTB,%10000000 ; Turn LED4 on
+ psha ; Save A to the stack
+ ldaa LEVEL ; Load the light level into accumulator A
+onDelay tbeq A, skipToOff ; Test if A == 0, skip loop if so
+ jsr delay10usec ; delay for 10 microseconds
+ deca ; decrement accumulator A by 1
+ bra onDelay ; jump back to onDelay always
+skipToOff bclr PORTB,%10000000 ; Turn off LED4
+ ldaa #100 ; load 100 into accumulator A
+ suba LEVEL ; Subtract LEVEL to get off count
+offDelay tbeq A,doneLoop ; Test if A == 0, skip loop if so
+ jsr delay10usec ; delay 10 microseconds
+ deca ; decrement accumulator A by 1
+ bra offDelay ; jump back to offDelay always
+doneLoop pula ; restore A from the stack
+ rts ; return to caller
+
+;*************************************************************************
+; delay10usec subroutine
+;
+; This subroutine causes a 10 usec. delay
+;
+; Input: a 16bit count number in 'Counter'
+; Output: time delay, cpu cycle wasted
+; Registers in use: X register, as counter
+; Memory locations in use: a 16bit input number at 'Counter'
+;
+; Comments: Code relies on counter being $39 to be exactly 10 usec work is below
+; Given: freq = 24MHz = 24000000 sec = 10 usec = 0.00001
+; freq = cycles / seconds
+;
+; cycles = freq * seconds = 24000000Hz * 0.00001 = 240
+;
+; This sub routine is 12 + 4 * 'Counter' cycles long, solving for 'Counter'
+; the result is found to be 57.
+;
+
+delay10usec
+ pshx ; Save register x to the stack
+ ldx Counter ; load counter into register x
+innerLoop dex ; decrement register x by 1
+ bne innerLoop ; loop while register x is not 0
+ pulx ; restore register x from the stack
+ nop ; extra nop to make exactly 10 usec
+ rts ; return to caller
+
+ end ; last line of the file
+
diff --git a/cmpen472hw4_McDonnell/Sources/main.asm b/cmpen472hw4_McDonnell/Sources/main.asm
index bbf1a9a..87a8a3c 100644
--- a/cmpen472hw4_McDonnell/Sources/main.asm
+++ b/cmpen472hw4_McDonnell/Sources/main.asm
@@ -1,22 +1,22 @@
**************************************************************************
*
-* Title: LED Light Dimmer
+* Title: LED Light Dimmer Loop
*
-* Objective: CMPEN 472 Homework 3
+* Objective: CMPEN 472 Homework 4
*
* Revision: V1.0
*
-* Date: Feb. 5, 2025
+* Date: Feb. 14, 2025
*
* Programmer: Jacob McDonnell
*
* Company: The Pennsylvania State University
* Department of Computer Science and Engineering
*
-* Algorithm: Simple Parallel I/O use and time delay-loop demo
+* Algorithm: Simple Parallel I/O use, time delay-loop, and PWM control
*
-* Register Use: A: LED Light on/off state and Switch 1 on/off state
-* X: Delay loop counter
+* Register Use: A to control LEDS initially and for Light Level
+* X to hold the counter in the loop.
*
* Memory Use: RAM Locations from $3000 for data,
* RAM Locations from $3100 for program
@@ -32,8 +32,9 @@
* LED 3 at PORTB bit 6
* LED 4 at PORTB bit 7
*
-* Observation: This program will dim the LED4 to either 5% when the
-* switch is not pressed and 15% when the switch is pressed.
+* Observation: This program will decrease LED 4 from 100% to 0% in 400ms
+* and then increase LED 4 from 0% to 100% in 400ms. The program
+* will loop forever.
*
* Note: ON CSM-12C128 board,
* Switch 1 is at PORTB bit 0, and
@@ -83,25 +84,24 @@ pgstart lds #$3100 ; initialize the stack pointer
staa PORTB ; Turn on only LEDs 1 & 3 on PORTB
mainLoop
- ldaa #100 ; 1 ; load 100 into accumulator A
- ldab #100 ; 1 ; load 100 into accumulator B
-decrease tbeq A,increase ; 3 ; Test if A == 0, skip loop if so
- staa LEVEL ; 3 ; store A in counter LEVEL
- jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine
- jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine
- jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine
- jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine
- deca ; 1 ; decrement accumulator A by 1
- bra decrease ; 3 ; loop to decrease always
-increase tbeq B,mainLoop ; 3 ; Test if B == 0, go back to mainLoop if so
- staa LEVEL ; 3 ; store A in counter LEVEL
- jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine
- jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine
- jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine
- jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine
- inca ; 1 ; increment accumulator A by 1
- decb ; 1 ; decrement accumulator B by 1
- bra increase ; 3 ; loop to increase always
+ ldaa #100 ; load 100 into accumulator A
+decrease tbeq A,increase ; Test if A == 0, skip loop if so
+ staa LEVEL ; store A in counter LEVEL
+ jsr dimmer ; jump to dimmer subroutine
+ jsr dimmer ; jump to dimmer subroutine
+ jsr dimmer ; jump to dimmer subroutine
+ jsr dimmer ; jump to dimmer subroutine
+ deca ; decrement accumulator A by 1
+ bra decrease ; loop to decrease always
+increase cmpa #100 ; Compare A to 100
+ beq mainLoop ; Test if A == 100, jump to mainLoop
+ staa LEVEL ; store A in counter LEVEL
+ jsr dimmer ; jump to dimmer subroutine
+ jsr dimmer ; jump to dimmer subroutine
+ jsr dimmer ; jump to dimmer subroutine
+ jsr dimmer ; jump to dimmer subroutine
+ inca ; increment accumulator A by 1
+ bra increase ; loop to increase always
**************************************************************************
* Subroutine Section: address used [ $3100 to $3FFF ] RAM Memory
@@ -122,22 +122,22 @@ increase tbeq B,mainLoop ; 3 ; Test if B == 0, go back to mainLoo
;
dimmer
- bset PORTB,%10000000 ; 6 ; Turn LED4 on
- psha ; 2 ; Save A to the stack
- ldaa LEVEL ; 3 ; Load the light level into accumulator A
-onDelay tbeq A, skipToOff ; 3 ; Test if A == 0, skip loop if so
- jsr delay10usec ; 244 ; delay for 10 microseconds
- deca ; 1 ; decrement accumulator A by 1
- bra onDelay ; 3, 1; jump back to onDelay always
-skipToOff bclr PORTB,%10000000 ; 6 ; Turn off LED4
- ldaa #100 ; 1 ; load 100 into accumulator A
- suba LEVEL ; 3 ; Subtract LEVEL to get off count
-offDelay tbeq A,doneLoop ; 3 ; Test if A == 0, skip loop if so
- jsr delay10usec ; 244 ; delay 10 microseconds
- deca ; 1 ; decrement accumulator A by 1
- bra offDelay ; 3, 1; jump back to offDelay always
-doneLoop pula ; 3 ; restore A from the stack
- rts ; 5 ; return to caller
+ bset PORTB,%10000000 ; Turn LED4 on
+ psha ; Save A to the stack
+ ldaa LEVEL ; Load the light level into accumulator A
+onDelay tbeq A, skipToOff ; Test if A == 0, skip loop if so
+ jsr delay10usec ; delay for 10 microseconds
+ deca ; decrement accumulator A by 1
+ bra onDelay ; jump back to onDelay always
+skipToOff bclr PORTB,%10000000 ; Turn off LED4
+ ldaa #100 ; load 100 into accumulator A
+ suba LEVEL ; Subtract LEVEL to get off count
+offDelay tbeq A,doneLoop ; Test if A == 0, skip loop if so
+ jsr delay10usec ; delay 10 microseconds
+ deca ; decrement accumulator A by 1
+ bra offDelay ; jump back to offDelay always
+doneLoop pula ; restore A from the stack
+ rts ; return to caller
;*************************************************************************
; delay10usec subroutine
diff --git a/cmpen472hw4_McDonnell/bin/Project.abs b/cmpen472hw4_McDonnell/bin/Project.abs
index 2810115..c7cfa1a 100644
--- a/cmpen472hw4_McDonnell/bin/Project.abs
+++ b/cmpen472hw4_McDonnell/bin/Project.abs
Binary files differ
diff --git a/cmpen472hw4_McDonnell/bin/Project.abs.s19 b/cmpen472hw4_McDonnell/bin/Project.abs.s19
index 82aa46b..44b157e 100644
--- a/cmpen472hw4_McDonnell/bin/Project.abs.s19
+++ b/cmpen472hw4_McDonnell/bin/Project.abs.s19
@@ -1,7 +1,7 @@
S0580000433A5C55736572735C4A61636F62204D63446F6E6E656C6C5C446F63756D656E74735C434D50454E2D3437322D48575C636D70656E3437326877345F4D63446F6E6E656C6C5C62696E5C50726F6A6563742E6162734C
S10630000036058E
-S1233100CF310086F15A0386505A018664C6640440127A300216313A16313A16313A1631C6
-S12331203A4320EB0451E47A300216313A16313A16313A16313A425320EA4C018036B63092
-S12331400204400616315D4320F74D01808664B0300204400616315D4320F7323D34FE306E
-S10A3160000926FD30A73D24
+S1233100CF310086F15A0386505A0186640440127A3002163138163138163138163138437B
+S123312020EB816427E57A30021631381631381631381631384220EA4C018036B6300204AC
+S1233140400616315B4320F74D01808664B0300204400616315B4320F7323D34FE3000096F
+S108316026FD30A73D2F
S9030000FC
diff --git a/cmpen472hw4_McDonnell/bin/main.dbg b/cmpen472hw4_McDonnell/bin/main.dbg
index 4154ae3..853722f 100644
--- a/cmpen472hw4_McDonnell/bin/main.dbg
+++ b/cmpen472hw4_McDonnell/bin/main.dbg
@@ -1,22 +1,22 @@
**************************************************************************
*
-* Title: LED Light Dimmer
+* Title: LED Light Dimmer Loop
*
-* Objective: CMPEN 472 Homework 3
+* Objective: CMPEN 472 Homework 4
*
* Revision: V1.0
*
-* Date: Feb. 5, 2025
+* Date: Feb. 14, 2025
*
* Programmer: Jacob McDonnell
*
* Company: The Pennsylvania State University
* Department of Computer Science and Engineering
*
-* Algorithm: Simple Parallel I/O use and time delay-loop demo
+* Algorithm: Simple Parallel I/O use, time delay-loop, and PWM control
*
-* Register Use: A: LED Light on/off state and Switch 1 on/off state
-* X: Delay loop counter
+* Register Use: A to control LEDS initially and for Light Level
+* X to hold the counter in the loop.
*
* Memory Use: RAM Locations from $3000 for data,
* RAM Locations from $3100 for program
@@ -32,8 +32,9 @@
* LED 3 at PORTB bit 6
* LED 4 at PORTB bit 7
*
-* Observation: This program will dim the LED4 to either 5% when the
-* switch is not pressed and 15% when the switch is pressed.
+* Observation: This program will decrease LED 4 from 100% to 0% in 400ms
+* and then increase LED 4 from 0% to 100% in 400ms. The program
+* will loop forever.
*
* Note: ON CSM-12C128 board,
* Switch 1 is at PORTB bit 0, and
@@ -83,25 +84,24 @@ pgstart lds #$3100 ; initialize the stack pointer
staa PORTB ; Turn on only LEDs 1 & 3 on PORTB
mainLoop
- ldaa #100 ; 1 ; load 100 into accumulator A
- ldab #100 ; 1 ; load 100 into accumulator B
-decrease tbeq A,increase ; 3 ; Test if A == 0, skip loop if so
- staa LEVEL ; 3 ; store A in counter LEVEL
- jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine
- jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine
- jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine
- jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine
- deca ; 1 ; decrement accumulator A by 1
- bra decrease ; 3 ; loop to decrease always
-increase tbeq B,mainLoop ; 3 ; Test if B == 0, go back to mainLoop if so
- staa LEVEL ; 3 ; store A in counter LEVEL
- jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine
- jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine
- jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine
- jsr dimmer ; 4 + 25,135 ; jump to dimmer subroutine
- inca ; 1 ; increment accumulator A by 1
- decb ; 1 ; decrement accumulator B by 1
- bra increase ; 3 ; loop to increase always
+ ldaa #100 ; load 100 into accumulator A
+decrease tbeq A,increase ; Test if A == 0, skip loop if so
+ staa LEVEL ; store A in counter LEVEL
+ jsr dimmer ; jump to dimmer subroutine
+ jsr dimmer ; jump to dimmer subroutine
+ jsr dimmer ; jump to dimmer subroutine
+ jsr dimmer ; jump to dimmer subroutine
+ deca ; decrement accumulator A by 1
+ bra decrease ; loop to decrease always
+increase cmpa #100 ; Compare A to 100
+ beq mainLoop ; Test if A == 100, jump to mainLoop
+ staa LEVEL ; store A in counter LEVEL
+ jsr dimmer ; jump to dimmer subroutine
+ jsr dimmer ; jump to dimmer subroutine
+ jsr dimmer ; jump to dimmer subroutine
+ jsr dimmer ; jump to dimmer subroutine
+ inca ; increment accumulator A by 1
+ bra increase ; loop to increase always
**************************************************************************
* Subroutine Section: address used [ $3100 to $3FFF ] RAM Memory
@@ -122,22 +122,22 @@ increase tbeq B,mainLoop ; 3 ; Test if B == 0, go back to mainLoo
;
dimmer
- bset PORTB,%10000000 ; 6 ; Turn LED4 on
- psha ; 2 ; Save A to the stack
- ldaa LEVEL ; 3 ; Load the light level into accumulator A
-onDelay tbeq A, skipToOff ; 3 ; Test if A == 0, skip loop if so
- jsr delay10usec ; 244 ; delay for 10 microseconds
- deca ; 1 ; decrement accumulator A by 1
- bra onDelay ; 3, 1; jump back to onDelay always
-skipToOff bclr PORTB,%10000000 ; 6 ; Turn off LED4
- ldaa #100 ; 1 ; load 100 into accumulator A
- suba LEVEL ; 3 ; Subtract LEVEL to get off count
-offDelay tbeq A,doneLoop ; 3 ; Test if A == 0, skip loop if so
- jsr delay10usec ; 244 ; delay 10 microseconds
- deca ; 1 ; decrement accumulator A by 1
- bra offDelay ; 3, 1; jump back to offDelay always
-doneLoop pula ; 3 ; restore A from the stack
- rts ; 5 ; return to caller
+ bset PORTB,%10000000 ; Turn LED4 on
+ psha ; Save A to the stack
+ ldaa LEVEL ; Load the light level into accumulator A
+onDelay tbeq A, skipToOff ; Test if A == 0, skip loop if so
+ jsr delay10usec ; delay for 10 microseconds
+ deca ; decrement accumulator A by 1
+ bra onDelay ; jump back to onDelay always
+skipToOff bclr PORTB,%10000000 ; Turn off LED4
+ ldaa #100 ; load 100 into accumulator A
+ suba LEVEL ; Subtract LEVEL to get off count
+offDelay tbeq A,doneLoop ; Test if A == 0, skip loop if so
+ jsr delay10usec ; delay 10 microseconds
+ deca ; decrement accumulator A by 1
+ bra offDelay ; jump back to offDelay always
+doneLoop pula ; restore A from the stack
+ rts ; return to caller
;*************************************************************************
; delay10usec subroutine
diff --git a/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/ObjectCode/main.asm.o b/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/ObjectCode/main.asm.o
index 2810115..c7cfa1a 100644
--- a/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/ObjectCode/main.asm.o
+++ b/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/ObjectCode/main.asm.o
Binary files differ
diff --git a/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/ObjectCode/main.asm.sx b/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/ObjectCode/main.asm.sx
index fbb3fb6..581ede7 100644
--- a/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/ObjectCode/main.asm.sx
+++ b/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/ObjectCode/main.asm.sx
@@ -1,7 +1,7 @@
S0840000433A5C55736572735C4A61636F62204D63446F6E6E656C6C5C446F63756D656E74735C434D50454E2D3437322D48575C636D70656E3437326877345F4D63446F6E6E656C6C5C636D70656E3437326877345F4D63446F6E6E656C6C5F446174615C5374616E646172645C4F626A656374436F64655C6D61696E2E61736D2E70726DD1
S10630000036058E
-S1233100CF310086F15A0386505A018664C6640440127A300216313A16313A16313A1631C6
-S12331203A4320EB0451E47A300216313A16313A16313A16313A425320EA4C018036B63092
-S12331400204400616315D4320F74D01808664B0300204400616315D4320F7323D34FE306E
-S10A3160000926FD30A73D24
+S1233100CF310086F15A0386505A0186640440127A3002163138163138163138163138437B
+S123312020EB816427E57A30021631381631381631381631384220EA4C018036B6300204AC
+S1233140400616315B4320F74D01808664B0300204400616315B4320F7323D34FE3000096F
+S108316026FD30A73D2F
S9033100CB
diff --git a/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/TargetDataWindows.tdt b/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/TargetDataWindows.tdt
index ecf32b1..e7c73d0 100644
--- a/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/TargetDataWindows.tdt
+++ b/cmpen472hw4_McDonnell/cmpen472hw4_McDonnell_Data/Standard/TargetDataWindows.tdt
Binary files differ