]> git.the-white-hart.net Git - vhdl/commitdiff
Update test programs
authorrs <>
Thu, 3 Jul 2025 04:58:44 +0000 (23:58 -0500)
committerrs <>
Thu, 3 Jul 2025 04:58:44 +0000 (23:58 -0500)
projects/cpu_0/asm/int_test.asm [new file with mode: 0644]
projects/cpu_0/asm/int_test2.asm [new file with mode: 0644]
projects/cpu_0/asm/test.asm

diff --git a/projects/cpu_0/asm/int_test.asm b/projects/cpu_0/asm/int_test.asm
new file mode 100644 (file)
index 0000000..093e5d1
--- /dev/null
@@ -0,0 +1,92 @@
+( host registers )
+host_ctrl=0x02004000
+host_flags=0x02004001
+host_mbox=0x02004002
+host_swled=0x02004003
+host_sseg0=0x02004004
+host_sseg1=0x02004005
+host_sseg2=0x02004006
+host_sseg3=0x02004007
+
+( ps2 registers )
+ps2_ctrl=0x02004008
+ps2_imask=0x02004009
+ps2_iflag=0x0200400a
+ps2_error=0x0200400b
+ps2_data=0x0200400c
+
+( rs232 registers )
+rs232_ctrl=0x02004010
+rs232_baudl=0x02004011
+rs232_baudh=0x02004012
+rs232_imask=0x02004013
+rs232_iflag=0x02004014
+rs232_data=0x02004015
+
+( ivec -- )
+isr:
+    dup jz reset
+
+    dup + dup + #32 isr_jumptable + @32 >r ;
+
+isr_jumptable:
+    reset isr_1 isr_2 isr_3
+
+isr_1:
+    #8 0x11i8 #32 host_swled !8 drop
+    jmp halt
+
+isr_2:
+    #8 0x22i8 #32 host_swled !8 drop
+    jmp halt
+
+isr_3:
+    #8 0x33i8 #32 host_swled !8 drop
+    jmp halt
+
+    dup #32 host_swled !8 drop
+    #32 rs232_data @8
+    #32 rs232_data !8 drop
+    ien ;
+
+reset:
+    ( Write ISR vec to LEDs )
+    #32 host_swled !8
+
+    ( 9600 baud, enable Tx/Rx, write "A" )
+       #8 0x14i8 #32 rs232_baudh !8 drop
+       #8 0x58i8 #32 rs232_baudl !8 drop
+       #8 0x01i8 #32 rs232_imask !8 drop
+       #8 0x03i8 #32 rs232_ctrl  !8 drop
+       #8 0x41i8 #32 rs232_data  !8 drop
+       #8 0x41i8 #32 rs232_data  !8 drop
+       #8 0x41i8 #32 rs232_data  !8 drop
+       #8 0x41i8 #32 rs232_data  !8 drop
+
+    ien
+    ( Wait for a flag )
+wait:
+    #32 host_flags @8
+    jz wait
+
+    #32 host_flags @8
+    ( #32 host_swled !8 )
+    #32 host_flags !8 drop
+
+    #8 0x42i8 #32 rs232_data  !8 drop
+    jmp wait
+
+    ( Write a value to ram and read it back )
+
+    ( Read value from uart and echo )
+       ( #32 rs232_data @8 )
+       ( #32 rs232_data !8 drop )
+
+    ( Enable uart rx interrupt )
+    ( #8 0x01i8 #32 rs232_imask !8 drop )
+
+    ( Drop return address, enable interrupts, and halt )
+    ( drop ien )
+halt:
+    jmp halt
+
diff --git a/projects/cpu_0/asm/int_test2.asm b/projects/cpu_0/asm/int_test2.asm
new file mode 100644 (file)
index 0000000..08c97cd
--- /dev/null
@@ -0,0 +1,124 @@
+( host registers )
+host_ctrl=0x02004000
+host_flags=0x02004001
+host_mbox=0x02004002
+host_swled=0x02004003
+host_sseg0=0x02004004
+host_sseg1=0x02004005
+host_sseg2=0x02004006
+host_sseg3=0x02004007
+
+( ps2 registers )
+ps2_ctrl=0x02004008
+ps2_imask=0x02004009
+ps2_iflag=0x0200400a
+ps2_error=0x0200400b
+ps2_data=0x0200400c
+
+( rs232 registers )
+uart_ctrl=0x02004010
+uart_baudl=0x02004011
+uart_baudh=0x02004012
+uart_imask=0x02004013
+uart_iflag=0x02004014
+uart_data=0x02004015
+
+( timer registers )
+timer0_ctrl=0x02004018
+timer0_count_l=0x02004019
+timer0_count_m=0x0200401a
+timer0_count_h=0x0200401b
+timer1_ctrl=0x0200401c
+timer1_count_l=0x0200401d
+timer1_count_m=0x0200401e
+timer1_count_h=0x0200401f
+
+
+( ivec -- )
+isr:
+    dup #8 5i8 - jn isr_unk
+    dup + dup + #32 isr_jumptable + @32 >r ;
+
+    align
+isr_jumptable:
+    isr_reset
+    isr_flags
+    isr_ps2
+    isr_uart
+    isr_timer0
+    isr_timer1
+
+
+( reset )
+isr_reset:
+    ( 9600 baud, enable Tx/Rx, write "A" )
+       #8 0x14i8 #32 uart_baudh !8 drop
+       #8 0x58i8 #32 uart_baudl !8 drop
+       #8 0x01i8 #32 uart_imask !8 drop
+       #8 0x13i8 #32 uart_ctrl  !8 drop
+       #8 0x41i8 #32 uart_data  !8 drop
+       #8 0x41i8 #32 uart_data  !8 drop
+       #8 0x41i8 #32 uart_data  !8 drop
+       #8 0x41i8 #32 uart_data  !8 drop
+
+    ( Enable timer 0 with 1s period, auto-restart )
+    #8 0x02i8 #32 timer0_count_h !8 drop
+    #8 0xfai8 #32 timer0_count_m !8 drop
+    #8 0xf0i8 #32 timer0_count_l !8 drop
+    #8 0x0fi8 #32 timer0_ctrl    !8 drop
+
+    ( enable interrupts and halt while waiting )
+    ien jmp start
+
+
+( host flags )
+isr_flags:
+    #32 host_flags @8
+    #32 host_swled !8
+    #32 host_flags !8 drop
+    ien ;
+
+
+( ps2 )
+isr_ps2:
+    #8 0xa5i8 #32 host_swled !8 drop
+    jmp halt
+
+
+( uart )
+isr_uart:
+    ( echo )
+    #32 uart_data @8
+    #32 uart_data !8 drop
+    ien ;
+
+
+( timer 0 )
+isr_timer0:
+    ( clear interrupt flag )
+    #32 timer0_ctrl @8
+    #32 timer0_ctrl !8 drop
+
+    ( say hello )
+    #8 0x41i8 #32 uart_data !8 drop
+
+    ien ;
+
+
+( timer 1 )
+isr_timer1:
+    ( clear interrupt flag )
+    #32 timer1_ctrl @8
+    #32 timer1_ctrl !8 drop
+    ien ;
+
+
+( unknown )
+isr_unk:
+    #8 0xffi8 #32 host_swled !8 drop
+    jmp halt
+
+
+start:
+halt:
+    jmp halt
index 711a01bab51a48eb3c832d010b28556b1495d326..ffd2d8520a018bcad4a7b67b44f435e787d87400 100644 (file)
@@ -43,28 +43,32 @@ isr_unknown:
 ( reset )
 isr_0:
     ( write something to seven seg display )
-    #8 0x3ci8 #32 host_sseg0 !8
-    #8 0xa5i8 #32 host_sseg1 !8
-    #8 0x5ai8 #32 host_sseg2 !8
-    #8 0xc3i8 #32 host_sseg3 !8
+    #8 0x3ci8 #32 host_sseg0 !8 drop
+    #8 0xa5i8 #32 host_sseg1 !8 drop
+    #8 0x5ai8 #32 host_sseg2 !8 drop
+    #8 0xc3i8 #32 host_sseg3 !8 drop
 
     ( write 0x1458 to baud register - 9600 baud )
-    #8 0x14i8 #32 rs232_baudh !8
-    #8 0x58i8 #32 rs232_baudl !8
+    #8 0x14i8 #32 rs232_baudh !8 drop
+    #8 0x58i8 #32 rs232_baudl !8 drop
 
     ( enable rx ready interrupt )
-    #8 0x01i8 #32 rs232_imask !8
+    #8 0x01i8 #32 rs232_imask !8 drop
 
     ( enable transmitter and receiver )
-    #8 0x03i8 #32 rs232_ctrl !8
+    #8 0x03i8 #32 rs232_ctrl !8 drop
 
     ( Say hi )
-    #8 0x41i8 #32 rs232_data !8
+    #8 0x41i8 #32 rs232_data !8 drop
 
-    jmp halt
+    ien jmp halt
 
 ( host mailbox flag interrupt )
 isr_1:
+    ( Read host flags, write to LEDs, then clear all )
+    #32 host_flags @8
+    #32 host_swled !8
+    #32 host_flags !8 drop
     ien ;
 
 ( ps2 interrupt )
@@ -77,7 +81,8 @@ isr_3:
     #32 rs232_iflag @8 #8 0x01i8 & jz _isr_3_ret
 
     ( [rs232_data] = [rs232_data] )
-    #32 rs232_data dup @8 !8
+    #32 rs232_data @8
+    #32 rs232_data !8 drop
 _isr_3_ret:
     ien ;