From 2dfafb988bb71c07734e8e9beca8deebfb64be0a Mon Sep 17 00:00:00 2001 From: rs <> Date: Wed, 2 Jul 2025 23:58:44 -0500 Subject: [PATCH] Update test programs --- projects/cpu_0/asm/int_test.asm | 92 +++++++++++++++++++++++ projects/cpu_0/asm/int_test2.asm | 124 +++++++++++++++++++++++++++++++ projects/cpu_0/asm/test.asm | 27 ++++--- 3 files changed, 232 insertions(+), 11 deletions(-) create mode 100644 projects/cpu_0/asm/int_test.asm create mode 100644 projects/cpu_0/asm/int_test2.asm diff --git a/projects/cpu_0/asm/int_test.asm b/projects/cpu_0/asm/int_test.asm new file mode 100644 index 0000000..093e5d1 --- /dev/null +++ b/projects/cpu_0/asm/int_test.asm @@ -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 index 0000000..08c97cd --- /dev/null +++ b/projects/cpu_0/asm/int_test2.asm @@ -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 diff --git a/projects/cpu_0/asm/test.asm b/projects/cpu_0/asm/test.asm index 711a01b..ffd2d85 100644 --- a/projects/cpu_0/asm/test.asm +++ b/projects/cpu_0/asm/test.asm @@ -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 ; -- 2.43.0