From 7089b663ca7d1695bb7dd26206b8593cc7cea4da Mon Sep 17 00:00:00 2001 From: Byron Lathi Date: Mon, 20 Nov 2023 22:23:18 -0800 Subject: [PATCH 01/10] add interrupt init code (and increase rtc tick rate) --- hw/efinix_fpga/init_hex.mem | 338 +++++++++--------- sw/kernel/devices/interrupt.s | 51 --- sw/kernel/devices/rtc.s | 28 +- sw/kernel/{devices => interrupts}/interrupt.h | 2 + sw/kernel/interrupts/interrupt.s | 43 +++ sw/kernel/irq.c | 2 +- sw/kernel/kernel.c | 10 +- 7 files changed, 244 insertions(+), 230 deletions(-) delete mode 100644 sw/kernel/devices/interrupt.s rename sw/kernel/{devices => interrupts}/interrupt.h (82%) create mode 100644 sw/kernel/interrupts/interrupt.s diff --git a/hw/efinix_fpga/init_hex.mem b/hw/efinix_fpga/init_hex.mem index 0fea330..6e2da2b 100644 --- a/hw/efinix_fpga/init_hex.mem +++ b/hw/efinix_fpga/init_hex.mem @@ -1,9 +1,9 @@ @00000000 00 80 4C 00 00 8D 13 92 8E 14 92 8D 1A 92 8E 1B 92 88 B9 FF FF 8D 24 92 88 B9 FF FF 8D 23 92 8C -26 92 20 FF FF A0 FF D0 E8 60 00 00 42 FD 00 00 -00 00 A2 FF 9A D8 A9 00 85 04 A9 DF 85 05 20 BA -FD 20 2F FA 20 52 F0 58 20 69 F2 6C FC FF 20 23 +26 92 20 FF FF A0 FF D0 E8 60 00 00 43 FD 00 00 +00 00 A2 FF 9A D8 A9 00 85 04 A9 DF 85 05 20 BB +FD 20 30 FA 20 52 F0 58 20 69 F2 6C FC FF 20 24 FA 00 A0 00 F0 07 A9 52 A2 F0 4C 05 92 60 AD FF EF A2 00 60 8D FF EF 60 20 4F F2 C9 0A D0 05 A9 0D 20 4F F2 60 DA 5A A8 B2 04 AA A9 1B 20 4F F2 @@ -13,19 +13,19 @@ A9 63 20 4F F2 68 60 40 DA BA 48 E8 E8 BD 00 01 29 10 D0 06 68 FA 20 68 F2 40 68 FA 7C BF F0 C5 F0 C9 F0 CA F0 20 9A F0 40 40 20 68 F0 40 48 A0 04 B1 04 09 40 20 3F F2 88 B1 04 20 3F F2 88 10 -F8 68 09 01 20 3F F2 20 1F FB 60 A2 08 A9 FF 20 +F8 68 09 01 20 3F F2 20 20 FB 60 A2 08 A9 FF 20 3F F2 C9 FF D0 03 CA D0 F4 60 85 0C 86 0D 20 EB -F0 92 0C A9 FF 20 3F F2 A0 01 91 0C 20 0C FB 60 -AA 20 96 FC A9 FF 20 3F F2 92 0C E6 0C D0 02 E6 +F0 92 0C A9 FF 20 3F F2 A0 01 91 0C 20 0D FB 60 +AA 20 97 FC A9 FF 20 3F F2 92 0C E6 0C D0 02 E6 0D CA D0 F0 60 85 0C 86 0D 20 EB F0 C9 02 B0 12 -E6 0C D0 02 E6 0C A5 0C A6 0D 20 C3 FC A9 04 20 +E6 0C D0 02 E6 0C A5 0C A6 0D 20 C4 FC A9 04 20 10 F1 60 48 A9 FF 20 3F F2 A9 00 20 33 F2 A9 FF 20 3F F2 68 20 CE F0 20 EB F0 A8 A9 FF 20 3F F2 A9 00 20 39 F2 A9 FF 20 3F F2 98 A2 00 60 A9 00 20 39 F2 20 8B F1 A9 FF 20 3F F2 A9 00 20 39 F2 A2 50 A9 FF 20 3F F2 CA D0 F8 60 A2 01 A9 C8 3A -D0 FD CA D0 F8 60 85 0E 86 0F A9 FF 92 0E 20 96 -FC A5 04 85 10 A5 05 85 11 20 C7 FA A0 00 B1 10 +D0 FD CA D0 F8 60 85 0E 86 0F A9 FF 92 0E 20 97 +FC A5 04 85 10 A5 05 85 11 20 C8 FA A0 00 B1 10 91 04 C8 B1 10 91 04 C8 B1 10 91 04 C8 B1 10 91 04 A9 FF 20 3F F2 A9 00 20 33 F2 A9 FF 20 3F F2 A9 11 A0 04 91 04 A9 00 20 CE F0 20 EB F0 C9 FF @@ -37,90 +37,90 @@ EB A9 FF 20 3F F2 A9 FF 20 3F F2 A5 15 92 0E A5 F2 68 60 A9 01 8D DB EF 60 9C DB EF 60 A9 00 8D DA EF AD DB EF 30 FB AD D9 EF 60 8D E6 EF 60 48 8D E6 EF AD E7 EF 89 02 D0 F9 68 60 AD E6 EF A2 -00 60 AD E7 EF A2 00 60 60 20 EA FA A2 00 86 06 -86 07 A9 00 20 81 FB 20 D0 FA A9 FC A2 FD 20 90 -FA 20 31 F3 C9 00 20 2E FC D0 03 4C 98 F2 A9 F5 -A2 FD 20 90 FA 4C 25 F3 A9 EC A2 FD 20 90 FA A0 -05 20 3D FB 20 81 FB AD 00 92 AE 01 92 20 C3 FC -A9 0C 20 4E FB 20 96 F1 A0 07 91 04 A0 07 A2 00 -B1 04 C9 00 20 34 FC D0 03 4C DC F2 A0 06 A2 00 -B1 04 C9 FE 20 34 FC F0 03 4C E5 F2 A2 00 A9 00 +00 60 AD E7 EF A2 00 60 60 20 EB FA A2 00 86 06 +86 07 A9 00 20 82 FB 20 D1 FA A9 FD A2 FD 20 91 +FA 20 31 F3 C9 00 20 2F FC D0 03 4C 98 F2 A9 F6 +A2 FD 20 91 FA 4C 25 F3 A9 ED A2 FD 20 91 FA A0 +05 20 3E FB 20 82 FB AD 00 92 AE 01 92 20 C4 FC +A9 0C 20 4F FB 20 96 F1 A0 07 91 04 A0 07 A2 00 +B1 04 C9 00 20 35 FC D0 03 4C DC F2 A0 06 A2 00 +B1 04 C9 FE 20 35 FC F0 03 4C E5 F2 A2 00 A9 00 D0 03 4C E9 F2 A2 00 A9 01 D0 03 4C F1 F2 4C 22 -F3 A0 06 A2 00 B1 04 A2 00 29 F0 20 15 FA D0 03 -4C 0D F3 A9 F5 A2 FD 20 90 FA 4C 22 F3 A9 DD A2 -FD 20 C3 FC A0 08 A2 00 B1 04 20 C3 FC A0 04 20 -5C FA 6C 00 92 4C 28 F3 4C 28 F3 A0 0C 20 FB F9 -60 20 F7 FA A9 00 20 AD FC 20 6E F1 4C 68 F3 A0 +F3 A0 06 A2 00 B1 04 A2 00 29 F0 20 16 FA D0 03 +4C 0D F3 A9 F6 A2 FD 20 91 FA 4C 22 F3 A9 DE A2 +FD 20 C4 FC A0 08 A2 00 B1 04 20 C4 FC A0 04 20 +5D FA 6C 00 92 4C 28 F3 4C 28 F3 A0 0C 20 FC F9 +60 20 F8 FA A9 00 20 AE FC 20 6E F1 4C 68 F3 A0 00 A2 00 18 A9 01 71 04 91 04 A0 00 A2 00 B1 04 -C9 FF 20 34 FC D0 03 4C 68 F3 A9 1B A2 FE 20 90 +C9 FF 20 35 FC D0 03 4C 68 F3 A9 1C A2 FE 20 91 FA A2 00 A9 01 4C 1E F4 20 22 F4 A0 01 91 04 C9 -01 20 2E FC D0 C9 A9 01 20 4E FB 20 3F F4 A0 01 -A2 00 B1 04 C9 01 20 2E FC D0 03 4C 9C F3 A9 12 -A2 FE 20 90 FA A2 00 A9 01 4C 1E F4 A0 05 A2 00 -B1 04 C9 AA 20 2E FC D0 03 4C B3 F3 A2 00 A9 01 +01 20 2F FC D0 C9 A9 01 20 4F FB 20 3F F4 A0 01 +A2 00 B1 04 C9 01 20 2F FC D0 03 4C 9C F3 A9 13 +A2 FE 20 91 FA A2 00 A9 01 4C 1E F4 A0 05 A2 00 +B1 04 C9 AA 20 2F FC D0 03 4C B3 F3 A2 00 A9 01 4C 1E F4 A2 00 A9 00 A0 00 91 04 A0 00 A2 00 B1 -04 C9 FF 20 34 FC D0 03 4C D9 F3 A9 03 A2 FE 20 -90 FA A2 00 A9 01 4C 1E F4 20 61 F5 A0 01 91 04 -A0 01 A2 00 B1 04 C9 02 20 4D FC D0 03 4C F7 F3 +04 C9 FF 20 35 FC D0 03 4C D9 F3 A9 04 A2 FE 20 +91 FA A2 00 A9 01 4C 1E F4 20 61 F5 A0 01 91 04 +A0 01 A2 00 B1 04 C9 02 20 4E FC D0 03 4C F7 F3 20 7E F5 A0 01 91 04 A0 00 A2 00 18 A9 01 71 04 -91 04 A0 01 A2 00 B1 04 C9 00 20 2E FC D0 AC A9 -01 20 4E FB 20 E7 F4 A2 00 A9 00 4C 1E F4 20 24 -FB 60 A2 00 A9 00 20 AD FC A2 00 86 06 86 07 A9 -00 20 81 FB A2 00 A9 94 20 43 F1 4C 3E F4 60 20 -C3 FC A2 00 A9 FF 20 3F F2 A2 00 A9 00 20 33 F2 -A2 00 A9 FF 20 3F F2 A2 00 A9 08 20 AD FC A2 01 -A9 00 85 06 A9 00 85 07 A9 AA 20 81 FB A2 00 A9 -86 20 CE F0 A0 01 20 34 FB 20 25 F1 A2 00 A9 FF +91 04 A0 01 A2 00 B1 04 C9 00 20 2F FC D0 AC A9 +01 20 4F FB 20 E7 F4 A2 00 A9 00 4C 1E F4 20 25 +FB 60 A2 00 A9 00 20 AE FC A2 00 86 06 86 07 A9 +00 20 82 FB A2 00 A9 94 20 43 F1 4C 3E F4 60 20 +C4 FC A2 00 A9 FF 20 3F F2 A2 00 A9 00 20 33 F2 +A2 00 A9 FF 20 3F F2 A2 00 A9 08 20 AE FC A2 01 +A9 00 85 06 A9 00 85 07 A9 AA 20 82 FB A2 00 A9 +86 20 CE F0 A0 01 20 35 FB 20 25 F1 A2 00 A9 FF 20 3F F2 A2 00 A9 00 20 39 F2 A2 00 A9 FF 20 3F -F2 20 0C FB 60 20 C3 FC A2 00 A9 FF 20 3F F2 A2 +F2 20 0D FB 60 20 C4 FC A2 00 A9 FF 20 3F F2 A2 00 A9 00 20 33 F2 A2 00 A9 FF 20 3F F2 A2 00 A9 -0D 20 AD FC A2 00 86 06 86 07 A9 00 20 81 FB A2 -00 A9 00 20 CE F0 A0 01 20 34 FB 20 FA F0 A2 00 +0D 20 AE FC A2 00 86 06 86 07 A9 00 20 82 FB A2 +00 A9 00 20 CE F0 A0 01 20 35 FB 20 FA F0 A2 00 A9 FF 20 3F F2 A2 00 A9 00 20 39 F2 A2 00 A9 FF -20 3F F2 20 0C FB 60 20 C3 FC 20 C7 FA A2 00 A9 +20 3F F2 20 0D FB 60 20 C4 FC 20 C8 FA A2 00 A9 FF 20 3F F2 A2 00 A9 00 20 33 F2 A2 00 A9 FF 20 -3F F2 A0 00 91 04 A0 00 A2 00 B1 04 C9 FF 20 2E +3F F2 A0 00 91 04 A0 00 A2 00 B1 04 C9 FF 20 2F FC D0 03 4C 27 F5 4C 19 F5 A2 00 A9 FF 20 3F F2 -C9 FF 20 2E FC D0 F2 A2 00 A9 3A 20 AD FC A2 00 -86 06 86 07 A9 00 20 81 FB A2 00 A9 00 20 CE F0 -A0 02 20 34 FB 20 25 F1 A2 00 A9 FF 20 3F F2 A2 -00 A9 00 20 39 F2 A2 00 A9 FF 20 3F F2 20 1A FB -60 A2 00 A9 37 20 AD FC A2 00 86 06 86 07 A9 00 -20 81 FB A2 00 A9 00 20 43 F1 4C 7D F5 60 A2 00 -A9 29 20 AD FC A2 00 86 06 A9 40 85 07 A9 00 20 -81 FB A2 00 A9 00 20 43 F1 4C 9C F5 60 20 C3 FC -20 EA FA A0 03 A2 00 B1 04 4C AC F5 A0 0E 20 FB -F9 60 20 C3 FC A9 00 20 AD FC 20 D0 FA A2 00 A9 -00 A0 00 20 DB FC A0 01 20 34 FB E0 02 20 4D FC -F0 03 4C D8 F5 4C 3A F6 A9 24 A2 FE 20 C3 FC A0 -06 20 34 FB A0 00 20 29 FB 20 C3 FC A0 07 A2 00 -A9 01 20 EB F9 A0 04 20 5C FA A0 02 A2 00 B1 04 -C9 1F 20 34 FC D0 03 4C 1C F6 A9 28 A2 FE 20 90 +C9 FF 20 2F FC D0 F2 A2 00 A9 3A 20 AE FC A2 00 +86 06 86 07 A9 00 20 82 FB A2 00 A9 00 20 CE F0 +A0 02 20 35 FB 20 25 F1 A2 00 A9 FF 20 3F F2 A2 +00 A9 00 20 39 F2 A2 00 A9 FF 20 3F F2 20 1B FB +60 A2 00 A9 37 20 AE FC A2 00 86 06 86 07 A9 00 +20 82 FB A2 00 A9 00 20 43 F1 4C 7D F5 60 A2 00 +A9 29 20 AE FC A2 00 86 06 A9 40 85 07 A9 00 20 +82 FB A2 00 A9 00 20 43 F1 4C 9C F5 60 20 C4 FC +20 EB FA A0 03 A2 00 B1 04 4C AC F5 A0 0E 20 FC +F9 60 20 C4 FC A9 00 20 AE FC 20 D1 FA A2 00 A9 +00 A0 00 20 DC FC A0 01 20 35 FB E0 02 20 4E FC +F0 03 4C D8 F5 4C 3A F6 A9 25 A2 FE 20 C4 FC A0 +06 20 35 FB A0 00 20 2A FB 20 C4 FC A0 07 A2 00 +A9 01 20 EC F9 A0 04 20 5D FA A0 02 A2 00 B1 04 +C9 1F 20 35 FC D0 03 4C 1C F6 A9 29 A2 FE 20 91 FA A2 00 A9 00 A0 02 91 04 4C 2E F6 A2 00 A9 20 20 68 F0 A0 02 A2 00 18 A9 01 71 04 91 04 A0 00 -A2 00 A9 01 20 EB F9 4C C6 F5 A9 28 A2 FE 20 90 -FA 20 1F FB 60 A0 00 B1 1A E6 1A D0 02 E6 1B 60 -AD 4A 92 8D 45 92 20 F1 F6 A9 45 A2 92 20 C3 FC -20 A4 FC 4C 02 92 A5 18 38 E9 02 85 18 B0 02 C6 -19 60 AD 4F 92 D0 11 20 8F F6 4C 0E FA AD 4F 92 -D0 06 20 8F F6 4C 08 FA 20 8F F6 85 06 86 07 20 +A2 00 A9 01 20 EC F9 4C C6 F5 A9 29 A2 FE 20 91 +FA 20 20 FB 60 A0 00 B1 1A E6 1A D0 02 E6 1B 60 +AD 4A 92 8D 45 92 20 F1 F6 A9 45 A2 92 20 C4 FC +20 A5 FC 4C 02 92 A5 18 38 E9 02 85 18 B0 02 C6 +19 60 AD 4F 92 D0 11 20 8F F6 4C 0F FA AD 4F 92 +D0 06 20 8F F6 4C 09 FA 20 8F F6 85 06 86 07 20 66 F6 A0 01 B1 18 AA 88 B1 18 60 A0 00 84 0C 84 0D B1 1A 38 E9 30 90 2C C9 0A B0 28 20 49 F6 48 A5 0C A6 0D 06 0C 26 0D 06 0C 26 0D 65 0C 85 0C 8A 65 0D 85 0D 06 0C 26 0D 68 65 0C 85 0C 90 D1 E6 0D B0 CD A5 0C A6 0D 60 AC 51 92 EE 51 92 99 -52 92 60 A9 52 A2 92 18 6D 51 92 90 01 E8 4C C3 -FC A5 1C A6 1D 4C C3 FC 20 50 F6 EE 4B 92 D0 F8 +52 92 60 A9 52 A2 92 18 6D 51 92 90 01 E8 4C C4 +FC A5 1C A6 1D 4C C4 FC 20 50 F6 EE 4B 92 D0 F8 EE 4C 92 D0 F3 60 20 F1 F6 AD 66 92 AE 67 92 20 -C3 FC AD 68 92 AE 69 92 20 C3 FC 4C 02 92 84 0C -20 81 FB 20 E3 F6 A5 0C 4C B1 FB 84 0C 20 81 FB -20 E3 F6 A5 0C 4C F2 FB 48 A0 05 B9 18 00 99 3F -92 88 10 F7 68 85 18 86 19 20 04 FB 85 1A 86 1B -20 04 FB 85 1C 86 1D A9 00 A8 91 1C C8 91 1C C8 +C4 FC AD 68 92 AE 69 92 20 C4 FC 4C 02 92 84 0C +20 82 FB 20 E3 F6 A5 0C 4C B2 FB 84 0C 20 82 FB +20 E3 F6 A5 0C 4C F3 FB 48 A0 05 B9 18 00 99 3F +92 88 10 F7 68 85 18 86 19 20 05 FB 85 1A 86 1B +20 05 FB 85 1C 86 1D A9 00 A8 91 1C C8 91 1C C8 B1 1C 8D 03 92 C8 B1 1C 8D 04 92 A5 1A 85 0C A5 1B 85 0D A0 00 B1 1A F0 0B C9 25 F0 07 C8 D0 F5 E6 1B D0 F1 98 18 65 1A 85 1A 90 02 E6 1B 38 E5 -0C 85 0E A5 1B E5 0D 85 0F 05 0E F0 25 20 EA FA +0C 85 0E A5 1B E5 0D 85 0F 05 0E F0 25 20 EB FA A0 05 A5 1D 91 04 88 A5 1C 91 04 88 A5 0D 91 04 88 A5 0C 91 04 88 A5 0F 91 04 88 A5 0E 91 04 20 02 92 20 45 F6 AA D0 0B A2 05 BD 3F 92 95 18 CA @@ -136,103 +136,103 @@ C9 2A D0 09 20 49 F6 20 8F F6 4C 60 F8 20 9B F6 8D 4D 92 8E 4E 92 B1 1A C9 7A F0 19 C9 68 F0 15 C9 74 F0 11 C9 6A F0 08 C9 4C F0 04 C9 6C D0 0B A9 FF 8D 4F 92 20 49 F6 4C 66 F8 8C 51 92 A2 52 -8E 66 92 A2 92 8E 67 92 20 49 F6 C9 63 D0 0D 20 -8F F6 8D 52 92 A2 00 A9 01 4C 92 F9 C9 64 F0 04 -C9 69 D0 2D A2 00 AD 48 92 F0 02 A2 20 AD 47 92 -F0 02 A2 2B 8E 50 92 20 7D F6 A4 07 30 0B AC 50 -92 F0 06 8C 52 92 EE 51 92 A0 0A 20 1E F7 4C 89 -F9 C9 6E D0 15 20 8F F6 85 0C 86 0D A0 00 B1 1C -91 0C C8 B1 1C 91 0C 4C 6B F7 C9 6F D0 27 20 7D -F6 AC 49 92 F0 17 48 86 14 05 14 05 06 05 07 0D -4D 92 0D 4E 92 F0 06 A9 30 20 D9 F6 68 A0 08 20 -1E F7 4C 89 F9 C9 70 D0 0D A2 00 8E 4F 92 E8 8E -49 92 A9 78 D0 27 C9 73 D0 0C 20 8F F6 8D 66 92 -8E 67 92 4C 89 F9 C9 75 D0 0B 20 72 F6 A0 0A 20 -2B F7 4C 89 F9 C9 78 F0 04 C9 58 D0 29 48 AD 49 -92 F0 0A A9 30 20 D9 F6 A9 58 20 D9 F6 20 72 F6 -A0 10 20 2B F7 68 C9 78 D0 09 AD 66 92 AE 67 92 -20 1B FD 4C 89 F9 4C 6B F7 AD 66 92 AE 67 92 20 -05 FD 8D 68 92 8E 69 92 AD 4D 92 0D 4E 92 F0 15 -AE 4D 92 EC 68 92 AD 4E 92 A8 ED 69 92 B0 06 8E -68 92 8C 69 92 38 AD 4B 92 ED 68 92 AA AD 4C 92 -ED 69 92 B0 03 A9 00 AA 49 FF 8D 4C 92 8A 49 FF -8D 4B 92 AD 46 92 D0 03 20 FB F6 20 06 F7 AD 46 -92 F0 03 20 FB F6 4C 6B F7 A0 00 18 71 04 91 04 -48 C8 8A 71 04 91 04 AA 68 60 C8 48 18 98 65 04 -85 04 90 02 E6 05 68 60 A0 FF E0 80 B0 02 A0 00 -84 06 84 07 60 E0 00 D0 06 AA D0 03 A9 01 60 A2 -00 8A 60 A0 00 F0 07 A9 52 A2 F0 4C 05 92 60 A9 -00 85 0C A9 F0 85 0D A9 00 85 0E A9 92 85 0F A2 -CD A9 FF 85 14 A0 00 E8 F0 0D B1 0C 91 0E C8 D0 -F6 E6 0D E6 0F D0 F0 E6 14 D0 EF 60 8C 6A 92 88 -88 98 18 65 04 85 0C A6 05 90 01 E8 86 0D A0 01 -B1 0C AA 88 B1 0C 20 C3 FC A5 0C A6 0D 20 8A FD -AC 6A 92 4C FB F9 85 0C 86 0D 20 75 F0 4C 94 FA -85 0C 86 0D A0 00 B1 0C F0 0E C8 84 14 20 68 F0 -A4 14 D0 F2 E6 0D D0 EE 60 E0 00 D0 15 4A AA BD -51 FE 90 05 4A 4A 4A 4A 18 29 0F AA BD 46 FE A2 -00 60 38 A9 00 AA 60 A4 04 D0 02 C6 05 C6 04 60 -A5 04 38 E9 02 85 04 90 01 60 C6 05 60 A5 04 38 -E9 04 85 04 90 01 60 C6 05 60 A5 04 38 E9 06 85 -04 90 01 60 C6 05 60 A5 04 38 E9 07 85 04 90 01 -60 C6 05 60 A0 01 B1 04 AA 88 B1 04 E6 04 F0 05 -E6 04 F0 03 60 E6 04 E6 05 60 A0 03 4C FB F9 A0 -05 4C FB F9 A0 08 4C FB F9 85 0C 86 0D A2 00 B1 -0C 60 A0 01 B1 04 AA 88 B1 04 60 A0 03 B1 04 85 -07 88 B1 04 85 06 88 B1 04 AA 88 B1 04 60 A2 00 -18 65 04 48 8A 65 05 AA 68 60 18 49 FF 69 01 48 -8A 49 FF 69 00 AA A5 06 49 FF 69 00 85 06 A5 07 -49 FF 69 00 85 07 68 60 A9 00 AA A0 00 84 06 84 -07 48 20 DD FA A0 03 A5 07 91 04 88 A5 06 91 04 -88 8A 91 04 68 88 91 04 60 85 14 20 04 FB 85 0E -86 0F 85 10 86 11 20 96 FC 20 04 FB 85 06 86 07 -60 20 99 FB A6 07 A4 14 C0 0A D0 39 A5 06 05 0D -05 0C D0 11 E0 80 D0 0D A0 0B B9 3A FE 91 0E 88 -10 F8 4C 29 FC 8A 10 1D A9 2D A0 00 91 0E E6 0E -D0 02 E6 0F A5 0C A6 0D 20 5A FB 85 0C 86 0D 4C -F5 FB 20 99 FB A9 00 48 A0 20 A9 00 06 0C 26 0D -26 06 26 07 2A C5 14 90 04 E5 14 E6 0C 88 D0 EC -A8 B9 2A FE 48 A5 0C 05 0D 05 06 05 07 D0 D9 A0 -00 68 91 0E F0 03 C8 D0 F8 A5 10 A6 11 60 D0 06 -A2 00 8A 60 D0 FA A2 00 A9 01 60 F0 F9 30 F7 A2 -00 8A 60 F0 02 10 EF A2 00 8A 60 F0 E9 90 E7 A2 -00 8A 60 F0 DB A2 00 8A 2A 60 20 83 FC A6 11 F0 -13 B1 0C 91 0E C8 B1 0C 91 0E C8 D0 F4 E6 0D E6 -0F CA D0 ED A6 10 F0 08 B1 0C 91 0E C8 CA D0 F8 -4C 04 FB 85 10 86 11 20 96 FC C8 B1 04 AA 86 0F -88 B1 04 85 0E 60 A0 01 B1 04 85 0D 88 B1 04 85 -0C 4C 0C FB A9 01 4C C1 FC A0 00 B1 04 A4 04 F0 -07 C6 04 A0 00 91 04 60 C6 05 C6 04 91 04 60 A9 -00 A2 00 48 A5 04 38 E9 02 85 04 B0 02 C6 05 A0 -01 8A 91 04 68 88 91 04 60 A0 00 91 04 C8 48 8A -91 04 68 60 85 0E 86 0F 20 96 FC B1 0C D1 0E D0 -0C AA F0 10 C8 D0 F4 E6 0D E6 0F D0 EE B0 03 A2 -FF 60 A2 01 60 85 0E 86 0F A2 00 A0 00 B1 0E F0 -08 C8 D0 F9 E6 0F E8 D0 F4 98 60 85 0C 86 0D 85 -0E 86 0F A0 00 B1 0C F0 14 20 AD FA 29 02 F0 06 -B1 0C 69 20 91 0C C8 D0 EC E6 0D D0 E8 A5 0E A6 -0F 60 20 04 FB 85 0E 86 0F E8 8E 31 92 AA E8 8E -30 92 20 96 FC 20 04 FB 85 10 86 11 A0 00 84 14 -B1 10 18 65 0E 91 10 C8 B1 10 65 0F 91 10 CE 30 -92 F0 11 A4 14 B1 0C C8 D0 02 E6 0D 84 14 20 68 -F0 4C 6E FD CE 31 92 D0 EA 60 85 0C 86 0D A9 00 -8D 2A 92 8D 2B 92 A0 01 B1 04 AA 88 B1 04 20 C3 -FC A0 02 A9 2A 91 04 C8 A9 92 91 04 A5 0C A6 0D -20 38 F7 AD 2A 92 AE 2B 92 60 A9 32 85 0C A9 92 -85 0D A9 00 A8 A2 00 F0 0A 91 0C C8 D0 FB E6 0D -CA D0 F6 C0 39 F0 05 91 0C C8 D0 F7 60 62 61 64 -20 74 6F 6B 65 6E 3A 20 25 78 0A 00 53 75 63 63 -65 73 73 0A 00 45 72 72 6F 72 0A 00 53 74 61 72 -74 0A 00 6F 70 5F 63 6F 6E 64 20 65 72 72 6F 72 -0A 00 49 46 20 43 6F 6E 64 0A 00 47 6F 20 49 44 -4C 45 0A 00 25 32 78 00 0A 00 30 31 32 33 34 35 -36 37 38 39 41 42 43 44 45 46 2D 32 31 34 37 34 -38 33 36 34 38 00 00 01 02 0C 09 0A 10 40 50 A0 -D0 66 66 66 66 A6 88 88 66 66 66 66 66 66 66 66 -66 09 00 00 00 00 00 00 00 33 33 33 33 33 00 00 -00 50 55 55 25 22 22 22 22 22 22 22 22 22 02 00 -00 40 44 44 14 11 11 11 11 11 11 11 11 11 01 00 -70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +8E 66 92 A2 92 8E 67 92 20 49 F6 C9 63 D0 0E 20 +8F F6 8D 52 92 A9 00 8D 53 92 4C 8A F9 C9 64 F0 +04 C9 69 D0 2D A2 00 AD 48 92 F0 02 A2 20 AD 47 +92 F0 02 A2 2B 8E 50 92 20 7D F6 A4 07 30 0B AC +50 92 F0 06 8C 52 92 EE 51 92 A0 0A 20 1E F7 4C +8A F9 C9 6E D0 15 20 8F F6 85 0C 86 0D A0 00 B1 +1C 91 0C C8 B1 1C 91 0C 4C 6B F7 C9 6F D0 27 20 +7D F6 AC 49 92 F0 17 48 86 14 05 14 05 06 05 07 +0D 4D 92 0D 4E 92 F0 06 A9 30 20 D9 F6 68 A0 08 +20 1E F7 4C 8A F9 C9 70 D0 0D A2 00 8E 4F 92 E8 +8E 49 92 A9 78 D0 27 C9 73 D0 0C 20 8F F6 8D 66 +92 8E 67 92 4C 8A F9 C9 75 D0 0B 20 72 F6 A0 0A +20 2B F7 4C 8A F9 C9 78 F0 04 C9 58 D0 29 48 AD +49 92 F0 0A A9 30 20 D9 F6 A9 58 20 D9 F6 20 72 +F6 A0 10 20 2B F7 68 C9 78 D0 09 AD 66 92 AE 67 +92 20 1C FD 4C 8A F9 4C 6B F7 AD 66 92 AE 67 92 +20 06 FD 8D 68 92 8E 69 92 AD 4D 92 0D 4E 92 F0 +15 AE 4D 92 EC 68 92 AD 4E 92 A8 ED 69 92 B0 06 +8E 68 92 8C 69 92 38 AD 4B 92 ED 68 92 AA AD 4C +92 ED 69 92 B0 03 A9 00 AA 49 FF 8D 4C 92 8A 49 +FF 8D 4B 92 AD 46 92 D0 03 20 FB F6 20 06 F7 AD +46 92 F0 03 20 FB F6 4C 6B F7 A0 00 18 71 04 91 +04 48 C8 8A 71 04 91 04 AA 68 60 C8 48 18 98 65 +04 85 04 90 02 E6 05 68 60 A0 FF E0 80 B0 02 A0 +00 84 06 84 07 60 E0 00 D0 06 AA D0 03 A9 01 60 +A2 00 8A 60 A0 00 F0 07 A9 52 A2 F0 4C 05 92 60 +A9 00 85 0C A9 F0 85 0D A9 00 85 0E A9 92 85 0F +A2 CD A9 FF 85 14 A0 00 E8 F0 0D B1 0C 91 0E C8 +D0 F6 E6 0D E6 0F D0 F0 E6 14 D0 EF 60 8C 6A 92 +88 88 98 18 65 04 85 0C A6 05 90 01 E8 86 0D A0 +01 B1 0C AA 88 B1 0C 20 C4 FC A5 0C A6 0D 20 8B +FD AC 6A 92 4C FC F9 85 0C 86 0D 20 75 F0 4C 95 +FA 85 0C 86 0D A0 00 B1 0C F0 0E C8 84 14 20 68 +F0 A4 14 D0 F2 E6 0D D0 EE 60 E0 00 D0 15 4A AA +BD 52 FE 90 05 4A 4A 4A 4A 18 29 0F AA BD 47 FE +A2 00 60 38 A9 00 AA 60 A4 04 D0 02 C6 05 C6 04 +60 A5 04 38 E9 02 85 04 90 01 60 C6 05 60 A5 04 +38 E9 04 85 04 90 01 60 C6 05 60 A5 04 38 E9 06 +85 04 90 01 60 C6 05 60 A5 04 38 E9 07 85 04 90 +01 60 C6 05 60 A0 01 B1 04 AA 88 B1 04 E6 04 F0 +05 E6 04 F0 03 60 E6 04 E6 05 60 A0 03 4C FC F9 +A0 05 4C FC F9 A0 08 4C FC F9 85 0C 86 0D A2 00 +B1 0C 60 A0 01 B1 04 AA 88 B1 04 60 A0 03 B1 04 +85 07 88 B1 04 85 06 88 B1 04 AA 88 B1 04 60 A2 +00 18 65 04 48 8A 65 05 AA 68 60 18 49 FF 69 01 +48 8A 49 FF 69 00 AA A5 06 49 FF 69 00 85 06 A5 +07 49 FF 69 00 85 07 68 60 A9 00 AA A0 00 84 06 +84 07 48 20 DE FA A0 03 A5 07 91 04 88 A5 06 91 +04 88 8A 91 04 68 88 91 04 60 85 14 20 05 FB 85 +0E 86 0F 85 10 86 11 20 97 FC 20 05 FB 85 06 86 +07 60 20 9A FB A6 07 A4 14 C0 0A D0 39 A5 06 05 +0D 05 0C D0 11 E0 80 D0 0D A0 0B B9 3B FE 91 0E +88 10 F8 4C 2A FC 8A 10 1D A9 2D A0 00 91 0E E6 +0E D0 02 E6 0F A5 0C A6 0D 20 5B FB 85 0C 86 0D +4C F6 FB 20 9A FB A9 00 48 A0 20 A9 00 06 0C 26 +0D 26 06 26 07 2A C5 14 90 04 E5 14 E6 0C 88 D0 +EC A8 B9 2B FE 48 A5 0C 05 0D 05 06 05 07 D0 D9 +A0 00 68 91 0E F0 03 C8 D0 F8 A5 10 A6 11 60 D0 +06 A2 00 8A 60 D0 FA A2 00 A9 01 60 F0 F9 30 F7 +A2 00 8A 60 F0 02 10 EF A2 00 8A 60 F0 E9 90 E7 +A2 00 8A 60 F0 DB A2 00 8A 2A 60 20 84 FC A6 11 +F0 13 B1 0C 91 0E C8 B1 0C 91 0E C8 D0 F4 E6 0D +E6 0F CA D0 ED A6 10 F0 08 B1 0C 91 0E C8 CA D0 +F8 4C 05 FB 85 10 86 11 20 97 FC C8 B1 04 AA 86 +0F 88 B1 04 85 0E 60 A0 01 B1 04 85 0D 88 B1 04 +85 0C 4C 0D FB A9 01 4C C2 FC A0 00 B1 04 A4 04 +F0 07 C6 04 A0 00 91 04 60 C6 05 C6 04 91 04 60 +A9 00 A2 00 48 A5 04 38 E9 02 85 04 B0 02 C6 05 +A0 01 8A 91 04 68 88 91 04 60 A0 00 91 04 C8 48 +8A 91 04 68 60 85 0E 86 0F 20 97 FC B1 0C D1 0E +D0 0C AA F0 10 C8 D0 F4 E6 0D E6 0F D0 EE B0 03 +A2 FF 60 A2 01 60 85 0E 86 0F A2 00 A0 00 B1 0E +F0 08 C8 D0 F9 E6 0F E8 D0 F4 98 60 85 0C 86 0D +85 0E 86 0F A0 00 B1 0C F0 14 20 AE FA 29 02 F0 +06 B1 0C 69 20 91 0C C8 D0 EC E6 0D D0 E8 A5 0E +A6 0F 60 20 05 FB 85 0E 86 0F E8 8E 31 92 AA E8 +8E 30 92 20 97 FC 20 05 FB 85 10 86 11 A0 00 84 +14 B1 10 18 65 0E 91 10 C8 B1 10 65 0F 91 10 CE +30 92 F0 11 A4 14 B1 0C C8 D0 02 E6 0D 84 14 20 +68 F0 4C 6F FD CE 31 92 D0 EA 60 85 0C 86 0D A9 +00 8D 2A 92 8D 2B 92 A0 01 B1 04 AA 88 B1 04 20 +C4 FC A0 02 A9 2A 91 04 C8 A9 92 91 04 A5 0C A6 +0D 20 38 F7 AD 2A 92 AE 2B 92 60 A9 32 85 0C A9 +92 85 0D A9 00 A8 A2 00 F0 0A 91 0C C8 D0 FB E6 +0D CA D0 F6 C0 39 F0 05 91 0C C8 D0 F7 60 62 61 +64 20 74 6F 6B 65 6E 3A 20 25 78 0A 00 53 75 63 +63 65 73 73 0A 00 45 72 72 6F 72 0A 00 53 74 61 +72 74 0A 00 6F 70 5F 63 6F 6E 64 20 65 72 72 6F +72 0A 00 49 46 20 43 6F 6E 64 0A 00 47 6F 20 49 +44 4C 45 0A 00 25 32 78 00 0A 00 30 31 32 33 34 +35 36 37 38 39 41 42 43 44 45 46 2D 32 31 34 37 +34 38 33 36 34 38 00 00 01 02 0C 09 0A 10 40 50 +A0 D0 66 66 66 66 A6 88 88 66 66 66 66 66 66 66 +66 66 09 00 00 00 00 00 00 00 33 33 33 33 33 00 +00 00 50 55 55 25 22 22 22 22 22 22 22 22 22 02 +00 00 40 44 44 14 11 11 11 11 11 11 11 11 11 01 +00 70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 diff --git a/sw/kernel/devices/interrupt.s b/sw/kernel/devices/interrupt.s deleted file mode 100644 index 02b24ae..0000000 --- a/sw/kernel/devices/interrupt.s +++ /dev/null @@ -1,51 +0,0 @@ -; --------------------------------------------------------------------------- -; interrupt.s -; --------------------------------------------------------------------------- -; -; Interrupt handler. -; -; Checks for a BRK instruction and returns from all valid interrupts. - -.import _handle_irq -.import _cputc, _clrscr - -.export _irq_int, _nmi_int - -.include "io.inc65" - -.segment "CODE" - -.PC02 ; Force 65C02 assembly mode - -; --------------------------------------------------------------------------- -; Non-maskable interrupt (NMI) service routine - -_nmi_int: RTI ; Return from all NMI interrupts - -; --------------------------------------------------------------------------- -; Maskable interrupt (IRQ) service routine - -_irq_int: PHX ; Save X register contents to stack - TSX ; Transfer stack pointer to X - PHA ; Save accumulator contents to stack - INX ; Increment X so it points to the status - INX ; register value saved on the stack - LDA $100,X ; Load status register contents - AND #$10 ; Isolate B status bit - BNE break ; If B = 1, BRK detected - -; --------------------------------------------------------------------------- -; IRQ detected, return - -irq: PLA ; Restore accumulator contents - PLX ; Restore X register contents - jsr _handle_irq ; Handle the IRQ - RTI ; Return from all IRQ interrupts - -; --------------------------------------------------------------------------- -; BRK detected, stop - -break: - pla - plx - rti \ No newline at end of file diff --git a/sw/kernel/devices/rtc.s b/sw/kernel/devices/rtc.s index a9e3df7..2d66d16 100644 --- a/sw/kernel/devices/rtc.s +++ b/sw/kernel/devices/rtc.s @@ -14,6 +14,18 @@ RTC_IRQ_THRESHOLD = $20 RTC_OUTPUT = $30 RTC_CONTROL = $30 +THRESHOLD_0 = $a0 +; THRESHOLD_1 = $0f +THRESHOLD_1 = $00 +THRESHOLD_2 = $00 +THRESHOLD_3 = $00 + +; IRQ_THRESHOLD_0 = $32 +IRQ_THRESHOLD_0 = $10 +IRQ_THRESHOLD_1 = $00 +IRQ_THRESHOLD_2 = $00 +IRQ_THRESHOLD_3 = $00 + ; void init_rtc(void); ; Initialize rtc and generate 50ms interrupts .proc _init_rtc @@ -36,36 +48,36 @@ RTC_CONTROL = $30 lda #RTC_THRESHOLD+0 ; Set threshold to 4000 ($fa0) sta RTC_CMD - lda #$a0 + lda #THRESHOLD_0 sta RTC_DAT lda #RTC_THRESHOLD+1 sta RTC_CMD - lda #$0f + lda #THRESHOLD_1 sta RTC_DAT lda #RTC_THRESHOLD+2 sta RTC_CMD - lda #$00 + lda #THRESHOLD_2 sta RTC_DAT lda #RTC_THRESHOLD+3 sta RTC_CMD - lda #$00 + lda #THRESHOLD_3 sta RTC_DAT lda #RTC_IRQ_THRESHOLD+0 ; Set irq threshold to 50 ($32) sta RTC_CMD - lda #$32 + lda #IRQ_THRESHOLD_0 sta RTC_DAT lda #RTC_IRQ_THRESHOLD+1 sta RTC_CMD - lda #$00 + lda #IRQ_THRESHOLD_1 sta RTC_DAT lda #RTC_IRQ_THRESHOLD+2 sta RTC_CMD - lda #$00 + lda #IRQ_THRESHOLD_2 sta RTC_DAT lda #RTC_IRQ_THRESHOLD+3 sta RTC_CMD - lda #$00 + lda #IRQ_THRESHOLD_3 sta RTC_DAT lda #$30 diff --git a/sw/kernel/devices/interrupt.h b/sw/kernel/interrupts/interrupt.h similarity index 82% rename from sw/kernel/devices/interrupt.h rename to sw/kernel/interrupts/interrupt.h index d0231aa..bce65d4 100644 --- a/sw/kernel/devices/interrupt.h +++ b/sw/kernel/interrupts/interrupt.h @@ -9,6 +9,8 @@ void irq_int(); void nmi_int(); +void register_irq(void* addr, uint8_t irqn); + uint8_t irq_get_status(); void irq_set_status(uint8_t); diff --git a/sw/kernel/interrupts/interrupt.s b/sw/kernel/interrupts/interrupt.s new file mode 100644 index 0000000..74442b5 --- /dev/null +++ b/sw/kernel/interrupts/interrupt.s @@ -0,0 +1,43 @@ +.MACPACK generic + +.autoimport + +.export _irq_int, _nmi_int +.export _register_irq + +IRQ_CMD_ADDR = $effc +IRQ_DAT_ADDR = $effd + +IRQ_CMD_READIRQ = $00 + +.proc _nmi_int +rti +.endproc + + +; _irq_int +.proc _irq_int + ; Load IRQ number + lda #IRQ_CMD_READIRQ + sta IRQ_CMD_ADDR + lda IRQ_DAT_ADDR + ; shift by 2 (oh so only 128 interrupts are supported lol) + lsr + tax + jmp (irq_table,x) + ; use that to index jump table +.endproc + +; void register_irq(void* addr, uint8_t irqn); +.proc _register_irq + tax + jsr popa + sta irq_table,x + jsr popa + sta irq_table+1,x + rts +.endproc + +.data +; interrupt handler jump table +irq_table: .res 256 diff --git a/sw/kernel/irq.c b/sw/kernel/irq.c index 9911f8d..6e3f7ab 100644 --- a/sw/kernel/irq.c +++ b/sw/kernel/irq.c @@ -2,7 +2,7 @@ #include #include -#include "devices/interrupt.h" +#include "interrupts/interrupt.h" #include "devices/uart.h" diff --git a/sw/kernel/kernel.c b/sw/kernel/kernel.c index 50564bf..746682a 100644 --- a/sw/kernel/kernel.c +++ b/sw/kernel/kernel.c @@ -1,8 +1,14 @@ #include #include "devices/interrupt_controller.h" +#include "interrupts/interrupt.h" #include "devices/rtc.h" +void handle_rtc_interrupt() { + cputs("In IRQ interrupt!\n"); + asm volatile ("rti"); +} + int main() { cputs("Kernel\n"); @@ -19,6 +25,8 @@ int main() { cputs("Initialize RTC\n"); init_rtc(); + register_irq(&handle_rtc_interrupt, 0); + // cputs("Initialize Serial\n"); // // init_serial(); // enable_irq(2, IRQ_EDGE); @@ -26,4 +34,4 @@ int main() { while(1); return 0; -} \ No newline at end of file +} From d172706313ef4a5ce124e3cd86dfd8b86df82566 Mon Sep 17 00:00:00 2001 From: Byron Lathi Date: Mon, 20 Nov 2023 23:32:05 -0800 Subject: [PATCH 02/10] Clear interrupt before waiting --- sw/kernel/kernel.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sw/kernel/kernel.c b/sw/kernel/kernel.c index 746682a..b4a8f4a 100644 --- a/sw/kernel/kernel.c +++ b/sw/kernel/kernel.c @@ -27,6 +27,8 @@ int main() { register_irq(&handle_rtc_interrupt, 0); + asm volatile("cli"); + // cputs("Initialize Serial\n"); // // init_serial(); // enable_irq(2, IRQ_EDGE); From e7f8be44b7543782c39d8337fc169e23b8adfa9c Mon Sep 17 00:00:00 2001 From: Byron Lathi Date: Tue, 21 Nov 2023 08:06:46 -0800 Subject: [PATCH 03/10] enable interrupt when we register irq --- sw/kernel/interrupts/interrupt.s | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sw/kernel/interrupts/interrupt.s b/sw/kernel/interrupts/interrupt.s index 74442b5..ac245cd 100644 --- a/sw/kernel/interrupts/interrupt.s +++ b/sw/kernel/interrupts/interrupt.s @@ -2,6 +2,8 @@ .autoimport +.import _enable_irq + .export _irq_int, _nmi_int .export _register_irq @@ -35,6 +37,11 @@ rti sta irq_table,x jsr popa sta irq_table+1,x + + lda #$00 + jsr pusha + txa + jsr _enable_irq rts .endproc From 4392a01de89970f62fd1e914d517e0dcdceda0c4 Mon Sep 17 00:00:00 2001 From: Byron Lathi Date: Tue, 21 Nov 2023 08:17:36 -0800 Subject: [PATCH 04/10] #53 Reduce interrupts to 128 --- .../tbs/interrupt_controller_code_tb.sv | 2 +- .../simulation/tbs/interrupt_controller_tb.sv | 35 ++++++++++--------- hw/efinix_fpga/src/interrupt_controller.sv | 26 +++++++------- sw/kernel/devices/interrupt_controller.s | 9 ++--- sw/test_code/irq_test/main.s | 2 +- 5 files changed, 37 insertions(+), 37 deletions(-) diff --git a/hw/efinix_fpga/simulation/tbs/interrupt_controller_code_tb.sv b/hw/efinix_fpga/simulation/tbs/interrupt_controller_code_tb.sv index 791b6bc..a83a666 100644 --- a/hw/efinix_fpga/simulation/tbs/interrupt_controller_code_tb.sv +++ b/hw/efinix_fpga/simulation/tbs/interrupt_controller_code_tb.sv @@ -23,7 +23,7 @@ end initial begin // u_sim_top.u_dut.w_int_in = 0; repeat (2400) @(posedge u_sim_top.r_clk_cpu); - for (int i = 0; i < 256; i++) begin + for (int i = 0; i < 128; i++) begin repeat (100) @(posedge u_sim_top.r_clk_cpu); force u_sim_top.u_dut.u_interrupt_controller.int_in = 1 << i; $display("Activiating interrupt %d", i); diff --git a/hw/efinix_fpga/simulation/tbs/interrupt_controller_tb.sv b/hw/efinix_fpga/simulation/tbs/interrupt_controller_tb.sv index a234f5f..dd49a27 100644 --- a/hw/efinix_fpga/simulation/tbs/interrupt_controller_tb.sv +++ b/hw/efinix_fpga/simulation/tbs/interrupt_controller_tb.sv @@ -4,8 +4,7 @@ module interrupt_controller_tb(); logic r_clk_cpu; -localparam BITS_256 = 256'hffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; - +localparam BITS_128 = 128'hffffffffffffffffffffffffffffffff; // clk_cpu initial begin r_clk_cpu <= '1; @@ -21,10 +20,12 @@ logic [7:0] o_data; logic cs; logic rwb; -logic [255:0] int_in; +logic [127:0] int_in; logic int_out; -interrupt_controller u_interrupt_controller( +interrupt_controller #( + .N_INTERRUPTS(128) +) u_interrupt_controller ( .clk(r_clk_cpu), .reset(reset), .i_data(i_data), @@ -42,8 +43,8 @@ interrupt_controller u_interrupt_controller( task test_edge_irq(); $display("Testing Edge IRQ"); do_reset(); - set_enable(255'hff); - set_edge_type(255'h0); + set_enable(128'hff); + set_edge_type(128'h0); set_interrupts(1); assert (int_out == 1) else begin errors = errors + 1; @@ -64,8 +65,8 @@ endtask task test_level_irq(); $display("Testing level IRQ"); do_reset(); - set_enable(255'hff); - set_edge_type(255'hff); + set_enable(128'hff); + set_edge_type(128'hff); set_interrupts(1); assert (int_out == 1) else begin errors = errors + 1; @@ -91,8 +92,8 @@ task test_irq_val(); do_reset(); set_enable('1); set_edge_type('1); - for (int i = 255; i >= 0; i--) begin - set_interrupts(BITS_256 << i); + for (int i = 127; i >= 0; i--) begin + set_interrupts(BITS_128 << i); read_irqval(irq_val); assert(i == irq_val) else begin errors = errors + 1; @@ -100,8 +101,8 @@ task test_irq_val(); end end - for (int i = 0; i < 256; i++) begin - set_interrupts(BITS_256 >> i); + for (int i = 0; i < 128; i++) begin + set_interrupts(BITS_128 >> i); read_irqval(irq_val); assert(int_out == 1) else begin errors = errors + 1; @@ -175,21 +176,21 @@ task do_reset(); repeat (5) @(posedge r_clk_cpu); endtask -task set_enable(input logic [255:0] en); - for (int i = 0; i < 32; i++) begin +task set_enable(input logic [127:0] en); + for (int i = 0; i < 16; i++) begin write_reg(0, 8'h20 | i); write_reg(1, en[8*i +: 8]); end endtask -task set_edge_type(input logic [255:0] edge_type); - for (int i = 0; i < 32; i++) begin +task set_edge_type(input logic [127:0] edge_type); + for (int i = 0; i < 16; i++) begin write_reg(0, 8'h40 | i); write_reg(1, edge_type[8*i +: 8]); end endtask -task set_interrupts(logic [255:0] ints); +task set_interrupts(logic [127:0] ints); int_in = ints; @(posedge r_clk_cpu); endtask diff --git a/hw/efinix_fpga/src/interrupt_controller.sv b/hw/efinix_fpga/src/interrupt_controller.sv index 7f54f31..c556464 100644 --- a/hw/efinix_fpga/src/interrupt_controller.sv +++ b/hw/efinix_fpga/src/interrupt_controller.sv @@ -1,5 +1,7 @@ -module interrupt_controller -( +module interrupt_controller +#( + parameter N_INTERRUPTS = 128 +)( input clk, input reset, input [7:0] i_data, @@ -8,15 +10,15 @@ module interrupt_controller input cs, input rwb, - input [255:0] int_in, + input [N_INTERRUPTS-1:0] int_in, output logic int_out ); logic w_enable_write; logic [7:0] w_enable_data; -logic [255:0] w_enable_full_data; +logic [N_INTERRUPTS-1:0] w_enable_full_data; -logic [255:0] int_in_d1; +logic [N_INTERRUPTS-1:0] int_in_d1; logic [4:0] w_byte_sel; @@ -24,7 +26,7 @@ logic [7:0] irq_val; byte_sel_register #( .DATA_WIDTH(8), - .ADDR_WIDTH(32) + .ADDR_WIDTH(N_INTERRUPTS/8) ) reg_enable ( .i_clk(~clk), .i_reset(reset), @@ -40,17 +42,17 @@ logic we, re; assign we = cs & ~rwb; assign re = cs & rwb; -logic [255:0] int_masked; +logic [N_INTERRUPTS-1:0] int_masked; assign int_masked = int_in & w_enable_full_data; logic w_type_write; logic [7:0] w_type_data; -logic [255:0] w_type_full_data; +logic [N_INTERRUPTS-1:0] w_type_full_data; byte_sel_register #( .DATA_WIDTH(8), - .ADDR_WIDTH(32) + .ADDR_WIDTH(N_INTERRUPTS/8) ) reg_type ( .i_clk(~clk), .i_reset(reset), @@ -65,7 +67,7 @@ logic [7:0] cmd, cmd_next; logic w_eoi; -logic [255:0] r_int, r_int_next; +logic [N_INTERRUPTS-1:0] r_int, r_int_next; always_comb begin w_eoi = 0; @@ -108,13 +110,13 @@ always_comb begin int_out = |r_int; irq_val = 8'hff; - for (int i = 255; i >= 0; i--) begin + for (int i = N_INTERRUPTS-1; i >= 0; i--) begin if (r_int[i] == 1) begin irq_val = i; end end - for (int i = 0; i < 256; i++) begin + for (int i = 0; i < N_INTERRUPTS; i++) begin case (w_type_full_data[i]) 0: begin // Edge triggered if (w_eoi && i == irq_val) begin diff --git a/sw/kernel/devices/interrupt_controller.s b/sw/kernel/devices/interrupt_controller.s index 4c45167..a46c335 100644 --- a/sw/kernel/devices/interrupt_controller.s +++ b/sw/kernel/devices/interrupt_controller.s @@ -34,7 +34,7 @@ IRQ_CMD_EOI = $ff cmd_all: ; Send the same value to all 32 bytes txa - add #$20 + add #$10 sta tmp1 loop: txa @@ -51,12 +51,10 @@ loop: ; void enable_irq(uint8_t type, uint8_t irqnum); ; in A: .proc _enable_irq - ; Decide which byte we need to modify by dividing by 32 (>> 5) + ; Decide which byte we need to modify by dividing by 8 (>> 3) pha lsr lsr - lsr - lsr lsr ; A is now bytesel sta tmp2 ; tmp2 is now bytesel add #IRQ_CMD_ENABLE @@ -97,13 +95,12 @@ L3: sta IRQ_DAT_ADDR .endproc +; TODO this is mostly the same as enable, why copy? .proc _disable_irq ; Decide which byte we need to modify by dividing by 32 (>> 5) pha lsr lsr - lsr - lsr lsr ; A is now bytesel add #IRQ_CMD_ENABLE sta IRQ_CMD_ADDR diff --git a/sw/test_code/irq_test/main.s b/sw/test_code/irq_test/main.s index 7610350..31be63c 100644 --- a/sw/test_code/irq_test/main.s +++ b/sw/test_code/irq_test/main.s @@ -54,7 +54,7 @@ _init: cmd_all: txa - add #$20 + add #$10 sta tmp1 loop: txa From 1714a1e6da8a619717480a8c738c763f890d110e Mon Sep 17 00:00:00 2001 From: Byron Lathi Date: Tue, 21 Nov 2023 18:47:16 -0800 Subject: [PATCH 05/10] add uart interrupt --- hw/efinix_fpga/init_hex.mem | 462 +++++++++---------- hw/efinix_fpga/simulation/Makefile | 2 +- hw/efinix_fpga/simulation/tbs/uart_irq_tb.sv | 15 + hw/efinix_fpga/src/super6502.sv | 42 +- hw/efinix_fpga/src/uart_wrapper.sv | 5 +- 5 files changed, 272 insertions(+), 254 deletions(-) create mode 100644 hw/efinix_fpga/simulation/tbs/uart_irq_tb.sv diff --git a/hw/efinix_fpga/init_hex.mem b/hw/efinix_fpga/init_hex.mem index 6e2da2b..7ef0d38 100644 --- a/hw/efinix_fpga/init_hex.mem +++ b/hw/efinix_fpga/init_hex.mem @@ -1,238 +1,238 @@ @00000000 00 80 4C 00 00 8D 13 92 8E 14 92 8D 1A 92 8E 1B 92 88 B9 FF FF 8D 24 92 88 B9 FF FF 8D 23 92 8C -26 92 20 FF FF A0 FF D0 E8 60 00 00 43 FD 00 00 -00 00 A2 FF 9A D8 A9 00 85 04 A9 DF 85 05 20 BB -FD 20 30 FA 20 52 F0 58 20 69 F2 6C FC FF 20 24 +26 92 20 FF FF A0 FF D0 E8 60 00 00 1F FD 00 00 +00 00 A2 FF 9A D8 A9 00 85 04 A9 DF 85 05 20 97 +FD 20 0C FA 20 52 F0 58 20 45 F2 6C FC FF 20 00 FA 00 A0 00 F0 07 A9 52 A2 F0 4C 05 92 60 AD FF -EF A2 00 60 8D FF EF 60 20 4F F2 C9 0A D0 05 A9 -0D 20 4F F2 60 DA 5A A8 B2 04 AA A9 1B 20 4F F2 -A9 5B 20 4F F2 98 20 4F F2 A9 3B 20 4F F2 8A 20 -4F F2 A9 48 20 4F F2 7A FA 60 DA A9 1B 20 4F F2 -A9 63 20 4F F2 68 60 40 DA BA 48 E8 E8 BD 00 01 -29 10 D0 06 68 FA 20 68 F2 40 68 FA 7C BF F0 C5 -F0 C9 F0 CA F0 20 9A F0 40 40 20 68 F0 40 48 A0 -04 B1 04 09 40 20 3F F2 88 B1 04 20 3F F2 88 10 -F8 68 09 01 20 3F F2 20 20 FB 60 A2 08 A9 FF 20 -3F F2 C9 FF D0 03 CA D0 F4 60 85 0C 86 0D 20 EB -F0 92 0C A9 FF 20 3F F2 A0 01 91 0C 20 0D FB 60 -AA 20 97 FC A9 FF 20 3F F2 92 0C E6 0C D0 02 E6 -0D CA D0 F0 60 85 0C 86 0D 20 EB F0 C9 02 B0 12 -E6 0C D0 02 E6 0C A5 0C A6 0D 20 C4 FC A9 04 20 -10 F1 60 48 A9 FF 20 3F F2 A9 00 20 33 F2 A9 FF -20 3F F2 68 20 CE F0 20 EB F0 A8 A9 FF 20 3F F2 -A9 00 20 39 F2 A9 FF 20 3F F2 98 A2 00 60 A9 00 -20 39 F2 20 8B F1 A9 FF 20 3F F2 A9 00 20 39 F2 -A2 50 A9 FF 20 3F F2 CA D0 F8 60 A2 01 A9 C8 3A -D0 FD CA D0 F8 60 85 0E 86 0F A9 FF 92 0E 20 97 -FC A5 04 85 10 A5 05 85 11 20 C8 FA A0 00 B1 10 -91 04 C8 B1 10 91 04 C8 B1 10 91 04 C8 B1 10 91 -04 A9 FF 20 3F F2 A9 00 20 33 F2 A9 FF 20 3F F2 -A9 11 A0 04 91 04 A9 00 20 CE F0 20 EB F0 C9 FF -F0 3F 85 16 A0 00 A9 FF 20 3F F2 85 15 A5 15 C9 -FF D0 05 C8 D0 F0 80 23 A2 02 A0 00 A9 FF 20 3F -F2 92 0C E6 0C D0 02 E6 0D 88 D0 F0 A0 00 CA D0 -EB A9 FF 20 3F F2 A9 FF 20 3F F2 A5 15 92 0E A5 -16 48 A9 FF 20 3F F2 A9 00 20 39 F2 A9 FF 20 3F -F2 68 60 A9 01 8D DB EF 60 9C DB EF 60 A9 00 8D -DA EF AD DB EF 30 FB AD D9 EF 60 8D E6 EF 60 48 -8D E6 EF AD E7 EF 89 02 D0 F9 68 60 AD E6 EF A2 -00 60 AD E7 EF A2 00 60 60 20 EB FA A2 00 86 06 -86 07 A9 00 20 82 FB 20 D1 FA A9 FD A2 FD 20 91 -FA 20 31 F3 C9 00 20 2F FC D0 03 4C 98 F2 A9 F6 -A2 FD 20 91 FA 4C 25 F3 A9 ED A2 FD 20 91 FA A0 -05 20 3E FB 20 82 FB AD 00 92 AE 01 92 20 C4 FC -A9 0C 20 4F FB 20 96 F1 A0 07 91 04 A0 07 A2 00 -B1 04 C9 00 20 35 FC D0 03 4C DC F2 A0 06 A2 00 -B1 04 C9 FE 20 35 FC F0 03 4C E5 F2 A2 00 A9 00 -D0 03 4C E9 F2 A2 00 A9 01 D0 03 4C F1 F2 4C 22 -F3 A0 06 A2 00 B1 04 A2 00 29 F0 20 16 FA D0 03 -4C 0D F3 A9 F6 A2 FD 20 91 FA 4C 22 F3 A9 DE A2 -FD 20 C4 FC A0 08 A2 00 B1 04 20 C4 FC A0 04 20 -5D FA 6C 00 92 4C 28 F3 4C 28 F3 A0 0C 20 FC F9 -60 20 F8 FA A9 00 20 AE FC 20 6E F1 4C 68 F3 A0 -00 A2 00 18 A9 01 71 04 91 04 A0 00 A2 00 B1 04 -C9 FF 20 35 FC D0 03 4C 68 F3 A9 1C A2 FE 20 91 -FA A2 00 A9 01 4C 1E F4 20 22 F4 A0 01 91 04 C9 -01 20 2F FC D0 C9 A9 01 20 4F FB 20 3F F4 A0 01 -A2 00 B1 04 C9 01 20 2F FC D0 03 4C 9C F3 A9 13 -A2 FE 20 91 FA A2 00 A9 01 4C 1E F4 A0 05 A2 00 -B1 04 C9 AA 20 2F FC D0 03 4C B3 F3 A2 00 A9 01 -4C 1E F4 A2 00 A9 00 A0 00 91 04 A0 00 A2 00 B1 -04 C9 FF 20 35 FC D0 03 4C D9 F3 A9 04 A2 FE 20 -91 FA A2 00 A9 01 4C 1E F4 20 61 F5 A0 01 91 04 -A0 01 A2 00 B1 04 C9 02 20 4E FC D0 03 4C F7 F3 -20 7E F5 A0 01 91 04 A0 00 A2 00 18 A9 01 71 04 -91 04 A0 01 A2 00 B1 04 C9 00 20 2F FC D0 AC A9 -01 20 4F FB 20 E7 F4 A2 00 A9 00 4C 1E F4 20 25 -FB 60 A2 00 A9 00 20 AE FC A2 00 86 06 86 07 A9 -00 20 82 FB A2 00 A9 94 20 43 F1 4C 3E F4 60 20 -C4 FC A2 00 A9 FF 20 3F F2 A2 00 A9 00 20 33 F2 -A2 00 A9 FF 20 3F F2 A2 00 A9 08 20 AE FC A2 01 -A9 00 85 06 A9 00 85 07 A9 AA 20 82 FB A2 00 A9 -86 20 CE F0 A0 01 20 35 FB 20 25 F1 A2 00 A9 FF -20 3F F2 A2 00 A9 00 20 39 F2 A2 00 A9 FF 20 3F -F2 20 0D FB 60 20 C4 FC A2 00 A9 FF 20 3F F2 A2 -00 A9 00 20 33 F2 A2 00 A9 FF 20 3F F2 A2 00 A9 -0D 20 AE FC A2 00 86 06 86 07 A9 00 20 82 FB A2 -00 A9 00 20 CE F0 A0 01 20 35 FB 20 FA F0 A2 00 -A9 FF 20 3F F2 A2 00 A9 00 20 39 F2 A2 00 A9 FF -20 3F F2 20 0D FB 60 20 C4 FC 20 C8 FA A2 00 A9 -FF 20 3F F2 A2 00 A9 00 20 33 F2 A2 00 A9 FF 20 -3F F2 A0 00 91 04 A0 00 A2 00 B1 04 C9 FF 20 2F -FC D0 03 4C 27 F5 4C 19 F5 A2 00 A9 FF 20 3F F2 -C9 FF 20 2F FC D0 F2 A2 00 A9 3A 20 AE FC A2 00 -86 06 86 07 A9 00 20 82 FB A2 00 A9 00 20 CE F0 -A0 02 20 35 FB 20 25 F1 A2 00 A9 FF 20 3F F2 A2 -00 A9 00 20 39 F2 A2 00 A9 FF 20 3F F2 20 1B FB -60 A2 00 A9 37 20 AE FC A2 00 86 06 86 07 A9 00 -20 82 FB A2 00 A9 00 20 43 F1 4C 7D F5 60 A2 00 -A9 29 20 AE FC A2 00 86 06 A9 40 85 07 A9 00 20 -82 FB A2 00 A9 00 20 43 F1 4C 9C F5 60 20 C4 FC -20 EB FA A0 03 A2 00 B1 04 4C AC F5 A0 0E 20 FC -F9 60 20 C4 FC A9 00 20 AE FC 20 D1 FA A2 00 A9 -00 A0 00 20 DC FC A0 01 20 35 FB E0 02 20 4E FC -F0 03 4C D8 F5 4C 3A F6 A9 25 A2 FE 20 C4 FC A0 -06 20 35 FB A0 00 20 2A FB 20 C4 FC A0 07 A2 00 -A9 01 20 EC F9 A0 04 20 5D FA A0 02 A2 00 B1 04 -C9 1F 20 35 FC D0 03 4C 1C F6 A9 29 A2 FE 20 91 -FA A2 00 A9 00 A0 02 91 04 4C 2E F6 A2 00 A9 20 -20 68 F0 A0 02 A2 00 18 A9 01 71 04 91 04 A0 00 -A2 00 A9 01 20 EC F9 4C C6 F5 A9 29 A2 FE 20 91 -FA 20 20 FB 60 A0 00 B1 1A E6 1A D0 02 E6 1B 60 -AD 4A 92 8D 45 92 20 F1 F6 A9 45 A2 92 20 C4 FC -20 A5 FC 4C 02 92 A5 18 38 E9 02 85 18 B0 02 C6 -19 60 AD 4F 92 D0 11 20 8F F6 4C 0F FA AD 4F 92 -D0 06 20 8F F6 4C 09 FA 20 8F F6 85 06 86 07 20 -66 F6 A0 01 B1 18 AA 88 B1 18 60 A0 00 84 0C 84 -0D B1 1A 38 E9 30 90 2C C9 0A B0 28 20 49 F6 48 -A5 0C A6 0D 06 0C 26 0D 06 0C 26 0D 65 0C 85 0C -8A 65 0D 85 0D 06 0C 26 0D 68 65 0C 85 0C 90 D1 -E6 0D B0 CD A5 0C A6 0D 60 AC 51 92 EE 51 92 99 -52 92 60 A9 52 A2 92 18 6D 51 92 90 01 E8 4C C4 -FC A5 1C A6 1D 4C C4 FC 20 50 F6 EE 4B 92 D0 F8 -EE 4C 92 D0 F3 60 20 F1 F6 AD 66 92 AE 67 92 20 -C4 FC AD 68 92 AE 69 92 20 C4 FC 4C 02 92 84 0C -20 82 FB 20 E3 F6 A5 0C 4C B2 FB 84 0C 20 82 FB -20 E3 F6 A5 0C 4C F3 FB 48 A0 05 B9 18 00 99 3F -92 88 10 F7 68 85 18 86 19 20 05 FB 85 1A 86 1B -20 05 FB 85 1C 86 1D A9 00 A8 91 1C C8 91 1C C8 -B1 1C 8D 03 92 C8 B1 1C 8D 04 92 A5 1A 85 0C A5 -1B 85 0D A0 00 B1 1A F0 0B C9 25 F0 07 C8 D0 F5 -E6 1B D0 F1 98 18 65 1A 85 1A 90 02 E6 1B 38 E5 -0C 85 0E A5 1B E5 0D 85 0F 05 0E F0 25 20 EB FA -A0 05 A5 1D 91 04 88 A5 1C 91 04 88 A5 0D 91 04 -88 A5 0C 91 04 88 A5 0F 91 04 88 A5 0E 91 04 20 -02 92 20 45 F6 AA D0 0B A2 05 BD 3F 92 95 18 CA -10 F8 60 C9 25 D0 09 B1 1A C9 25 D0 09 20 49 F6 -20 53 F6 4C 6B F7 A9 00 A2 0B 9D 46 92 CA 10 FA -B1 1A C9 2D D0 05 8E 46 92 F0 19 C9 2B D0 05 8E -47 92 F0 10 C9 20 D0 05 8E 48 92 F0 07 C9 23 D0 -09 8E 49 92 20 49 F6 4C F0 F7 A2 20 C9 30 D0 06 -AA 20 49 F6 B1 1A 8E 4A 92 C9 2A D0 09 20 49 F6 -20 8F F6 4C 39 F8 20 9B F6 8D 4B 92 8E 4C 92 8C -4D 92 8C 4E 92 B1 1A C9 2E D0 1B 20 49 F6 B1 1A -C9 2A D0 09 20 49 F6 20 8F F6 4C 60 F8 20 9B F6 -8D 4D 92 8E 4E 92 B1 1A C9 7A F0 19 C9 68 F0 15 -C9 74 F0 11 C9 6A F0 08 C9 4C F0 04 C9 6C D0 0B -A9 FF 8D 4F 92 20 49 F6 4C 66 F8 8C 51 92 A2 52 -8E 66 92 A2 92 8E 67 92 20 49 F6 C9 63 D0 0E 20 -8F F6 8D 52 92 A9 00 8D 53 92 4C 8A F9 C9 64 F0 -04 C9 69 D0 2D A2 00 AD 48 92 F0 02 A2 20 AD 47 -92 F0 02 A2 2B 8E 50 92 20 7D F6 A4 07 30 0B AC -50 92 F0 06 8C 52 92 EE 51 92 A0 0A 20 1E F7 4C -8A F9 C9 6E D0 15 20 8F F6 85 0C 86 0D A0 00 B1 -1C 91 0C C8 B1 1C 91 0C 4C 6B F7 C9 6F D0 27 20 -7D F6 AC 49 92 F0 17 48 86 14 05 14 05 06 05 07 -0D 4D 92 0D 4E 92 F0 06 A9 30 20 D9 F6 68 A0 08 -20 1E F7 4C 8A F9 C9 70 D0 0D A2 00 8E 4F 92 E8 -8E 49 92 A9 78 D0 27 C9 73 D0 0C 20 8F F6 8D 66 -92 8E 67 92 4C 8A F9 C9 75 D0 0B 20 72 F6 A0 0A -20 2B F7 4C 8A F9 C9 78 F0 04 C9 58 D0 29 48 AD -49 92 F0 0A A9 30 20 D9 F6 A9 58 20 D9 F6 20 72 -F6 A0 10 20 2B F7 68 C9 78 D0 09 AD 66 92 AE 67 -92 20 1C FD 4C 8A F9 4C 6B F7 AD 66 92 AE 67 92 -20 06 FD 8D 68 92 8E 69 92 AD 4D 92 0D 4E 92 F0 -15 AE 4D 92 EC 68 92 AD 4E 92 A8 ED 69 92 B0 06 -8E 68 92 8C 69 92 38 AD 4B 92 ED 68 92 AA AD 4C -92 ED 69 92 B0 03 A9 00 AA 49 FF 8D 4C 92 8A 49 -FF 8D 4B 92 AD 46 92 D0 03 20 FB F6 20 06 F7 AD -46 92 F0 03 20 FB F6 4C 6B F7 A0 00 18 71 04 91 -04 48 C8 8A 71 04 91 04 AA 68 60 C8 48 18 98 65 -04 85 04 90 02 E6 05 68 60 A0 FF E0 80 B0 02 A0 -00 84 06 84 07 60 E0 00 D0 06 AA D0 03 A9 01 60 -A2 00 8A 60 A0 00 F0 07 A9 52 A2 F0 4C 05 92 60 -A9 00 85 0C A9 F0 85 0D A9 00 85 0E A9 92 85 0F -A2 CD A9 FF 85 14 A0 00 E8 F0 0D B1 0C 91 0E C8 -D0 F6 E6 0D E6 0F D0 F0 E6 14 D0 EF 60 8C 6A 92 -88 88 98 18 65 04 85 0C A6 05 90 01 E8 86 0D A0 -01 B1 0C AA 88 B1 0C 20 C4 FC A5 0C A6 0D 20 8B -FD AC 6A 92 4C FC F9 85 0C 86 0D 20 75 F0 4C 95 -FA 85 0C 86 0D A0 00 B1 0C F0 0E C8 84 14 20 68 -F0 A4 14 D0 F2 E6 0D D0 EE 60 E0 00 D0 15 4A AA -BD 52 FE 90 05 4A 4A 4A 4A 18 29 0F AA BD 47 FE -A2 00 60 38 A9 00 AA 60 A4 04 D0 02 C6 05 C6 04 -60 A5 04 38 E9 02 85 04 90 01 60 C6 05 60 A5 04 -38 E9 04 85 04 90 01 60 C6 05 60 A5 04 38 E9 06 -85 04 90 01 60 C6 05 60 A5 04 38 E9 07 85 04 90 -01 60 C6 05 60 A0 01 B1 04 AA 88 B1 04 E6 04 F0 -05 E6 04 F0 03 60 E6 04 E6 05 60 A0 03 4C FC F9 -A0 05 4C FC F9 A0 08 4C FC F9 85 0C 86 0D A2 00 -B1 0C 60 A0 01 B1 04 AA 88 B1 04 60 A0 03 B1 04 -85 07 88 B1 04 85 06 88 B1 04 AA 88 B1 04 60 A2 -00 18 65 04 48 8A 65 05 AA 68 60 18 49 FF 69 01 -48 8A 49 FF 69 00 AA A5 06 49 FF 69 00 85 06 A5 -07 49 FF 69 00 85 07 68 60 A9 00 AA A0 00 84 06 -84 07 48 20 DE FA A0 03 A5 07 91 04 88 A5 06 91 -04 88 8A 91 04 68 88 91 04 60 85 14 20 05 FB 85 -0E 86 0F 85 10 86 11 20 97 FC 20 05 FB 85 06 86 -07 60 20 9A FB A6 07 A4 14 C0 0A D0 39 A5 06 05 -0D 05 0C D0 11 E0 80 D0 0D A0 0B B9 3B FE 91 0E -88 10 F8 4C 2A FC 8A 10 1D A9 2D A0 00 91 0E E6 -0E D0 02 E6 0F A5 0C A6 0D 20 5B FB 85 0C 86 0D -4C F6 FB 20 9A FB A9 00 48 A0 20 A9 00 06 0C 26 -0D 26 06 26 07 2A C5 14 90 04 E5 14 E6 0C 88 D0 -EC A8 B9 2B FE 48 A5 0C 05 0D 05 06 05 07 D0 D9 -A0 00 68 91 0E F0 03 C8 D0 F8 A5 10 A6 11 60 D0 -06 A2 00 8A 60 D0 FA A2 00 A9 01 60 F0 F9 30 F7 -A2 00 8A 60 F0 02 10 EF A2 00 8A 60 F0 E9 90 E7 -A2 00 8A 60 F0 DB A2 00 8A 2A 60 20 84 FC A6 11 -F0 13 B1 0C 91 0E C8 B1 0C 91 0E C8 D0 F4 E6 0D -E6 0F CA D0 ED A6 10 F0 08 B1 0C 91 0E C8 CA D0 -F8 4C 05 FB 85 10 86 11 20 97 FC C8 B1 04 AA 86 -0F 88 B1 04 85 0E 60 A0 01 B1 04 85 0D 88 B1 04 -85 0C 4C 0D FB A9 01 4C C2 FC A0 00 B1 04 A4 04 -F0 07 C6 04 A0 00 91 04 60 C6 05 C6 04 91 04 60 -A9 00 A2 00 48 A5 04 38 E9 02 85 04 B0 02 C6 05 -A0 01 8A 91 04 68 88 91 04 60 A0 00 91 04 C8 48 -8A 91 04 68 60 85 0E 86 0F 20 97 FC B1 0C D1 0E -D0 0C AA F0 10 C8 D0 F4 E6 0D E6 0F D0 EE B0 03 -A2 FF 60 A2 01 60 85 0E 86 0F A2 00 A0 00 B1 0E -F0 08 C8 D0 F9 E6 0F E8 D0 F4 98 60 85 0C 86 0D -85 0E 86 0F A0 00 B1 0C F0 14 20 AE FA 29 02 F0 -06 B1 0C 69 20 91 0C C8 D0 EC E6 0D D0 E8 A5 0E -A6 0F 60 20 05 FB 85 0E 86 0F E8 8E 31 92 AA E8 -8E 30 92 20 97 FC 20 05 FB 85 10 86 11 A0 00 84 -14 B1 10 18 65 0E 91 10 C8 B1 10 65 0F 91 10 CE -30 92 F0 11 A4 14 B1 0C C8 D0 02 E6 0D 84 14 20 -68 F0 4C 6F FD CE 31 92 D0 EA 60 85 0C 86 0D A9 -00 8D 2A 92 8D 2B 92 A0 01 B1 04 AA 88 B1 04 20 -C4 FC A0 02 A9 2A 91 04 C8 A9 92 91 04 A5 0C A6 -0D 20 38 F7 AD 2A 92 AE 2B 92 60 A9 32 85 0C A9 -92 85 0D A9 00 A8 A2 00 F0 0A 91 0C C8 D0 FB E6 -0D CA D0 F6 C0 39 F0 05 91 0C C8 D0 F7 60 62 61 -64 20 74 6F 6B 65 6E 3A 20 25 78 0A 00 53 75 63 -63 65 73 73 0A 00 45 72 72 6F 72 0A 00 53 74 61 -72 74 0A 00 6F 70 5F 63 6F 6E 64 20 65 72 72 6F -72 0A 00 49 46 20 43 6F 6E 64 0A 00 47 6F 20 49 -44 4C 45 0A 00 25 32 78 00 0A 00 30 31 32 33 34 -35 36 37 38 39 41 42 43 44 45 46 2D 32 31 34 37 -34 38 33 36 34 38 00 00 01 02 0C 09 0A 10 40 50 -A0 D0 66 66 66 66 A6 88 88 66 66 66 66 66 66 66 -66 66 09 00 00 00 00 00 00 00 33 33 33 33 33 00 -00 00 50 55 55 25 22 22 22 22 22 22 22 22 22 02 -00 00 40 44 44 14 11 11 11 11 11 11 11 11 11 01 -00 70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +EF A2 00 60 8D FF EF 60 20 2C F2 C9 0A D0 05 A9 +0D 20 2C F2 60 DA 5A A8 B2 04 AA A9 1B 20 2C F2 +A9 5B 20 2C F2 98 20 2C F2 A9 3B 20 2C F2 8A 20 +2C F2 A9 48 20 2C F2 7A FA 60 DA A9 1B 20 2C F2 +A9 63 20 2C F2 68 60 40 6C 20 02 48 A0 04 B1 04 +09 40 20 1C F2 88 B1 04 20 1C F2 88 10 F8 68 09 +01 20 1C F2 20 FC FA 60 A2 08 A9 FF 20 1C F2 C9 +FF D0 03 CA D0 F4 60 85 0C 86 0D 20 C8 F0 92 0C +A9 FF 20 1C F2 A0 01 91 0C 20 E9 FA 60 AA 20 73 +FC A9 FF 20 1C F2 92 0C E6 0C D0 02 E6 0D CA D0 +F0 60 85 0C 86 0D 20 C8 F0 C9 02 B0 12 E6 0C D0 +02 E6 0C A5 0C A6 0D 20 A0 FC A9 04 20 ED F0 60 +48 A9 FF 20 1C F2 A9 00 20 10 F2 A9 FF 20 1C F2 +68 20 AB F0 20 C8 F0 A8 A9 FF 20 1C F2 A9 00 20 +16 F2 A9 FF 20 1C F2 98 A2 00 60 A9 00 20 16 F2 +20 68 F1 A9 FF 20 1C F2 A9 00 20 16 F2 A2 50 A9 +FF 20 1C F2 CA D0 F8 60 A2 01 A9 C8 3A D0 FD CA +D0 F8 60 85 0E 86 0F A9 FF 92 0E 20 73 FC A5 04 +85 10 A5 05 85 11 20 A4 FA A0 00 B1 10 91 04 C8 +B1 10 91 04 C8 B1 10 91 04 C8 B1 10 91 04 A9 FF +20 1C F2 A9 00 20 10 F2 A9 FF 20 1C F2 A9 11 A0 +04 91 04 A9 00 20 AB F0 20 C8 F0 C9 FF F0 3F 85 +16 A0 00 A9 FF 20 1C F2 85 15 A5 15 C9 FF D0 05 +C8 D0 F0 80 23 A2 02 A0 00 A9 FF 20 1C F2 92 0C +E6 0C D0 02 E6 0D 88 D0 F0 A0 00 CA D0 EB A9 FF +20 1C F2 A9 FF 20 1C F2 A5 15 92 0E A5 16 48 A9 +FF 20 1C F2 A9 00 20 16 F2 A9 FF 20 1C F2 68 60 +A9 01 8D DB EF 60 9C DB EF 60 A9 00 8D DA EF AD +DB EF 30 FB AD D9 EF 60 8D E6 EF 60 48 8D E6 EF +AD E7 EF 89 02 D0 F9 68 60 AD E6 EF A2 00 60 AD +E7 EF A2 00 60 20 C7 FA A2 00 86 06 86 07 A9 00 +20 5E FB 20 AD FA A9 D9 A2 FD 20 6D FA 20 0D F3 +C9 00 20 0B FC D0 03 4C 74 F2 A9 D2 A2 FD 20 6D +FA 4C 01 F3 A9 C9 A2 FD 20 6D FA A0 05 20 1A FB +20 5E FB AD 00 92 AE 01 92 20 A0 FC A9 0C 20 2B +FB 20 73 F1 A0 07 91 04 A0 07 A2 00 B1 04 C9 00 +20 11 FC D0 03 4C B8 F2 A0 06 A2 00 B1 04 C9 FE +20 11 FC F0 03 4C C1 F2 A2 00 A9 00 D0 03 4C C5 +F2 A2 00 A9 01 D0 03 4C CD F2 4C FE F2 A0 06 A2 +00 B1 04 A2 00 29 F0 20 F2 F9 D0 03 4C E9 F2 A9 +D2 A2 FD 20 6D FA 4C FE F2 A9 BA A2 FD 20 A0 FC +A0 08 A2 00 B1 04 20 A0 FC A0 04 20 39 FA 6C 00 +92 4C 04 F3 4C 04 F3 A0 0C 20 D8 F9 60 20 D4 FA +A9 00 20 8A FC 20 4B F1 4C 44 F3 A0 00 A2 00 18 +A9 01 71 04 91 04 A0 00 A2 00 B1 04 C9 FF 20 11 +FC D0 03 4C 44 F3 A9 F8 A2 FD 20 6D FA A2 00 A9 +01 4C FA F3 20 FE F3 A0 01 91 04 C9 01 20 0B FC +D0 C9 A9 01 20 2B FB 20 1B F4 A0 01 A2 00 B1 04 +C9 01 20 0B FC D0 03 4C 78 F3 A9 EF A2 FD 20 6D +FA A2 00 A9 01 4C FA F3 A0 05 A2 00 B1 04 C9 AA +20 0B FC D0 03 4C 8F F3 A2 00 A9 01 4C FA F3 A2 +00 A9 00 A0 00 91 04 A0 00 A2 00 B1 04 C9 FF 20 +11 FC D0 03 4C B5 F3 A9 E0 A2 FD 20 6D FA A2 00 +A9 01 4C FA F3 20 3D F5 A0 01 91 04 A0 01 A2 00 +B1 04 C9 02 20 2A FC D0 03 4C D3 F3 20 5A F5 A0 +01 91 04 A0 00 A2 00 18 A9 01 71 04 91 04 A0 01 +A2 00 B1 04 C9 00 20 0B FC D0 AC A9 01 20 2B FB +20 C3 F4 A2 00 A9 00 4C FA F3 20 01 FB 60 A2 00 +A9 00 20 8A FC A2 00 86 06 86 07 A9 00 20 5E FB +A2 00 A9 94 20 20 F1 4C 1A F4 60 20 A0 FC A2 00 +A9 FF 20 1C F2 A2 00 A9 00 20 10 F2 A2 00 A9 FF +20 1C F2 A2 00 A9 08 20 8A FC A2 01 A9 00 85 06 +A9 00 85 07 A9 AA 20 5E FB A2 00 A9 86 20 AB F0 +A0 01 20 11 FB 20 02 F1 A2 00 A9 FF 20 1C F2 A2 +00 A9 00 20 16 F2 A2 00 A9 FF 20 1C F2 20 E9 FA +60 20 A0 FC A2 00 A9 FF 20 1C F2 A2 00 A9 00 20 +10 F2 A2 00 A9 FF 20 1C F2 A2 00 A9 0D 20 8A FC +A2 00 86 06 86 07 A9 00 20 5E FB A2 00 A9 00 20 +AB F0 A0 01 20 11 FB 20 D7 F0 A2 00 A9 FF 20 1C +F2 A2 00 A9 00 20 16 F2 A2 00 A9 FF 20 1C F2 20 +E9 FA 60 20 A0 FC 20 A4 FA A2 00 A9 FF 20 1C F2 +A2 00 A9 00 20 10 F2 A2 00 A9 FF 20 1C F2 A0 00 +91 04 A0 00 A2 00 B1 04 C9 FF 20 0B FC D0 03 4C +03 F5 4C F5 F4 A2 00 A9 FF 20 1C F2 C9 FF 20 0B +FC D0 F2 A2 00 A9 3A 20 8A FC A2 00 86 06 86 07 +A9 00 20 5E FB A2 00 A9 00 20 AB F0 A0 02 20 11 +FB 20 02 F1 A2 00 A9 FF 20 1C F2 A2 00 A9 00 20 +16 F2 A2 00 A9 FF 20 1C F2 20 F7 FA 60 A2 00 A9 +37 20 8A FC A2 00 86 06 86 07 A9 00 20 5E FB A2 +00 A9 00 20 20 F1 4C 59 F5 60 A2 00 A9 29 20 8A +FC A2 00 86 06 A9 40 85 07 A9 00 20 5E FB A2 00 +A9 00 20 20 F1 4C 78 F5 60 20 A0 FC 20 C7 FA A0 +03 A2 00 B1 04 4C 88 F5 A0 0E 20 D8 F9 60 20 A0 +FC A9 00 20 8A FC 20 AD FA A2 00 A9 00 A0 00 20 +B8 FC A0 01 20 11 FB E0 02 20 2A FC F0 03 4C B4 +F5 4C 16 F6 A9 01 A2 FE 20 A0 FC A0 06 20 11 FB +A0 00 20 06 FB 20 A0 FC A0 07 A2 00 A9 01 20 C8 +F9 A0 04 20 39 FA A0 02 A2 00 B1 04 C9 1F 20 11 +FC D0 03 4C F8 F5 A9 05 A2 FE 20 6D FA A2 00 A9 +00 A0 02 91 04 4C 0A F6 A2 00 A9 20 20 68 F0 A0 +02 A2 00 18 A9 01 71 04 91 04 A0 00 A2 00 A9 01 +20 C8 F9 4C A2 F5 A9 05 A2 FE 20 6D FA 20 FC FA +60 A0 00 B1 1A E6 1A D0 02 E6 1B 60 AD 4A 92 8D +45 92 20 CD F6 A9 45 A2 92 20 A0 FC 20 81 FC 4C +02 92 A5 18 38 E9 02 85 18 B0 02 C6 19 60 AD 4F +92 D0 11 20 6B F6 4C EB F9 AD 4F 92 D0 06 20 6B +F6 4C E5 F9 20 6B F6 85 06 86 07 20 42 F6 A0 01 +B1 18 AA 88 B1 18 60 A0 00 84 0C 84 0D B1 1A 38 +E9 30 90 2C C9 0A B0 28 20 25 F6 48 A5 0C A6 0D +06 0C 26 0D 06 0C 26 0D 65 0C 85 0C 8A 65 0D 85 +0D 06 0C 26 0D 68 65 0C 85 0C 90 D1 E6 0D B0 CD +A5 0C A6 0D 60 AC 51 92 EE 51 92 99 52 92 60 A9 +52 A2 92 18 6D 51 92 90 01 E8 4C A0 FC A5 1C A6 +1D 4C A0 FC 20 2C F6 EE 4B 92 D0 F8 EE 4C 92 D0 +F3 60 20 CD F6 AD 66 92 AE 67 92 20 A0 FC AD 68 +92 AE 69 92 20 A0 FC 4C 02 92 84 0C 20 5E FB 20 +BF F6 A5 0C 4C 8E FB 84 0C 20 5E FB 20 BF F6 A5 +0C 4C CF FB 48 A0 05 B9 18 00 99 3F 92 88 10 F7 +68 85 18 86 19 20 E1 FA 85 1A 86 1B 20 E1 FA 85 +1C 86 1D A9 00 A8 91 1C C8 91 1C C8 B1 1C 8D 03 +92 C8 B1 1C 8D 04 92 A5 1A 85 0C A5 1B 85 0D A0 +00 B1 1A F0 0B C9 25 F0 07 C8 D0 F5 E6 1B D0 F1 +98 18 65 1A 85 1A 90 02 E6 1B 38 E5 0C 85 0E A5 +1B E5 0D 85 0F 05 0E F0 25 20 C7 FA A0 05 A5 1D +91 04 88 A5 1C 91 04 88 A5 0D 91 04 88 A5 0C 91 +04 88 A5 0F 91 04 88 A5 0E 91 04 20 02 92 20 21 +F6 AA D0 0B A2 05 BD 3F 92 95 18 CA 10 F8 60 C9 +25 D0 09 B1 1A C9 25 D0 09 20 25 F6 20 2F F6 4C +47 F7 A9 00 A2 0B 9D 46 92 CA 10 FA B1 1A C9 2D +D0 05 8E 46 92 F0 19 C9 2B D0 05 8E 47 92 F0 10 +C9 20 D0 05 8E 48 92 F0 07 C9 23 D0 09 8E 49 92 +20 25 F6 4C CC F7 A2 20 C9 30 D0 06 AA 20 25 F6 +B1 1A 8E 4A 92 C9 2A D0 09 20 25 F6 20 6B F6 4C +15 F8 20 77 F6 8D 4B 92 8E 4C 92 8C 4D 92 8C 4E +92 B1 1A C9 2E D0 1B 20 25 F6 B1 1A C9 2A D0 09 +20 25 F6 20 6B F6 4C 3C F8 20 77 F6 8D 4D 92 8E +4E 92 B1 1A C9 7A F0 19 C9 68 F0 15 C9 74 F0 11 +C9 6A F0 08 C9 4C F0 04 C9 6C D0 0B A9 FF 8D 4F +92 20 25 F6 4C 42 F8 8C 51 92 A2 52 8E 66 92 A2 +92 8E 67 92 20 25 F6 C9 63 D0 0E 20 6B F6 8D 52 +92 A9 00 8D 53 92 4C 66 F9 C9 64 F0 04 C9 69 D0 +2D A2 00 AD 48 92 F0 02 A2 20 AD 47 92 F0 02 A2 +2B 8E 50 92 20 59 F6 A4 07 30 0B AC 50 92 F0 06 +8C 52 92 EE 51 92 A0 0A 20 FA F6 4C 66 F9 C9 6E +D0 15 20 6B F6 85 0C 86 0D A0 00 B1 1C 91 0C C8 +B1 1C 91 0C 4C 47 F7 C9 6F D0 27 20 59 F6 AC 49 +92 F0 17 48 86 14 05 14 05 06 05 07 0D 4D 92 0D +4E 92 F0 06 A9 30 20 B5 F6 68 A0 08 20 FA F6 4C +66 F9 C9 70 D0 0D A2 00 8E 4F 92 E8 8E 49 92 A9 +78 D0 27 C9 73 D0 0C 20 6B F6 8D 66 92 8E 67 92 +4C 66 F9 C9 75 D0 0B 20 4E F6 A0 0A 20 07 F7 4C +66 F9 C9 78 F0 04 C9 58 D0 29 48 AD 49 92 F0 0A +A9 30 20 B5 F6 A9 58 20 B5 F6 20 4E F6 A0 10 20 +07 F7 68 C9 78 D0 09 AD 66 92 AE 67 92 20 F8 FC +4C 66 F9 4C 47 F7 AD 66 92 AE 67 92 20 E2 FC 8D +68 92 8E 69 92 AD 4D 92 0D 4E 92 F0 15 AE 4D 92 +EC 68 92 AD 4E 92 A8 ED 69 92 B0 06 8E 68 92 8C +69 92 38 AD 4B 92 ED 68 92 AA AD 4C 92 ED 69 92 +B0 03 A9 00 AA 49 FF 8D 4C 92 8A 49 FF 8D 4B 92 +AD 46 92 D0 03 20 D7 F6 20 E2 F6 AD 46 92 F0 03 +20 D7 F6 4C 47 F7 A0 00 18 71 04 91 04 48 C8 8A +71 04 91 04 AA 68 60 C8 48 18 98 65 04 85 04 90 +02 E6 05 68 60 A0 FF E0 80 B0 02 A0 00 84 06 84 +07 60 E0 00 D0 06 AA D0 03 A9 01 60 A2 00 8A 60 +A0 00 F0 07 A9 52 A2 F0 4C 05 92 60 A9 00 85 0C +A9 F0 85 0D A9 00 85 0E A9 92 85 0F A2 CD A9 FF +85 14 A0 00 E8 F0 0D B1 0C 91 0E C8 D0 F6 E6 0D +E6 0F D0 F0 E6 14 D0 EF 60 8C 6A 92 88 88 98 18 +65 04 85 0C A6 05 90 01 E8 86 0D A0 01 B1 0C AA +88 B1 0C 20 A0 FC A5 0C A6 0D 20 67 FD AC 6A 92 +4C D8 F9 85 0C 86 0D 20 75 F0 4C 71 FA 85 0C 86 +0D A0 00 B1 0C F0 0E C8 84 14 20 68 F0 A4 14 D0 +F2 E6 0D D0 EE 60 E0 00 D0 15 4A AA BD 2E FE 90 +05 4A 4A 4A 4A 18 29 0F AA BD 23 FE A2 00 60 38 +A9 00 AA 60 A4 04 D0 02 C6 05 C6 04 60 A5 04 38 +E9 02 85 04 90 01 60 C6 05 60 A5 04 38 E9 04 85 +04 90 01 60 C6 05 60 A5 04 38 E9 06 85 04 90 01 +60 C6 05 60 A5 04 38 E9 07 85 04 90 01 60 C6 05 +60 A0 01 B1 04 AA 88 B1 04 E6 04 F0 05 E6 04 F0 +03 60 E6 04 E6 05 60 A0 03 4C D8 F9 A0 05 4C D8 +F9 A0 08 4C D8 F9 85 0C 86 0D A2 00 B1 0C 60 A0 +01 B1 04 AA 88 B1 04 60 A0 03 B1 04 85 07 88 B1 +04 85 06 88 B1 04 AA 88 B1 04 60 A2 00 18 65 04 +48 8A 65 05 AA 68 60 18 49 FF 69 01 48 8A 49 FF +69 00 AA A5 06 49 FF 69 00 85 06 A5 07 49 FF 69 +00 85 07 68 60 A9 00 AA A0 00 84 06 84 07 48 20 +BA FA A0 03 A5 07 91 04 88 A5 06 91 04 88 8A 91 +04 68 88 91 04 60 85 14 20 E1 FA 85 0E 86 0F 85 +10 86 11 20 73 FC 20 E1 FA 85 06 86 07 60 20 76 +FB A6 07 A4 14 C0 0A D0 39 A5 06 05 0D 05 0C D0 +11 E0 80 D0 0D A0 0B B9 17 FE 91 0E 88 10 F8 4C +06 FC 8A 10 1D A9 2D A0 00 91 0E E6 0E D0 02 E6 +0F A5 0C A6 0D 20 37 FB 85 0C 86 0D 4C D2 FB 20 +76 FB A9 00 48 A0 20 A9 00 06 0C 26 0D 26 06 26 +07 2A C5 14 90 04 E5 14 E6 0C 88 D0 EC A8 B9 07 +FE 48 A5 0C 05 0D 05 06 05 07 D0 D9 A0 00 68 91 +0E F0 03 C8 D0 F8 A5 10 A6 11 60 D0 06 A2 00 8A +60 D0 FA A2 00 A9 01 60 F0 F9 30 F7 A2 00 8A 60 +F0 02 10 EF A2 00 8A 60 F0 E9 90 E7 A2 00 8A 60 +F0 DB A2 00 8A 2A 60 20 60 FC A6 11 F0 13 B1 0C +91 0E C8 B1 0C 91 0E C8 D0 F4 E6 0D E6 0F CA D0 +ED A6 10 F0 08 B1 0C 91 0E C8 CA D0 F8 4C E1 FA +85 10 86 11 20 73 FC C8 B1 04 AA 86 0F 88 B1 04 +85 0E 60 A0 01 B1 04 85 0D 88 B1 04 85 0C 4C E9 +FA A9 01 4C 9E FC A0 00 B1 04 A4 04 F0 07 C6 04 +A0 00 91 04 60 C6 05 C6 04 91 04 60 A9 00 A2 00 +48 A5 04 38 E9 02 85 04 B0 02 C6 05 A0 01 8A 91 +04 68 88 91 04 60 A0 00 91 04 C8 48 8A 91 04 68 +60 85 0E 86 0F 20 73 FC B1 0C D1 0E D0 0C AA F0 +10 C8 D0 F4 E6 0D E6 0F D0 EE B0 03 A2 FF 60 A2 +01 60 85 0E 86 0F A2 00 A0 00 B1 0E F0 08 C8 D0 +F9 E6 0F E8 D0 F4 98 60 85 0C 86 0D 85 0E 86 0F +A0 00 B1 0C F0 14 20 8A FA 29 02 F0 06 B1 0C 69 +20 91 0C C8 D0 EC E6 0D D0 E8 A5 0E A6 0F 60 20 +E1 FA 85 0E 86 0F E8 8E 31 92 AA E8 8E 30 92 20 +73 FC 20 E1 FA 85 10 86 11 A0 00 84 14 B1 10 18 +65 0E 91 10 C8 B1 10 65 0F 91 10 CE 30 92 F0 11 +A4 14 B1 0C C8 D0 02 E6 0D 84 14 20 68 F0 4C 4B +FD CE 31 92 D0 EA 60 85 0C 86 0D A9 00 8D 2A 92 +8D 2B 92 A0 01 B1 04 AA 88 B1 04 20 A0 FC A0 02 +A9 2A 91 04 C8 A9 92 91 04 A5 0C A6 0D 20 14 F7 +AD 2A 92 AE 2B 92 60 A9 32 85 0C A9 92 85 0D A9 +00 A8 A2 00 F0 0A 91 0C C8 D0 FB E6 0D CA D0 F6 +C0 39 F0 05 91 0C C8 D0 F7 60 62 61 64 20 74 6F +6B 65 6E 3A 20 25 78 0A 00 53 75 63 63 65 73 73 +0A 00 45 72 72 6F 72 0A 00 53 74 61 72 74 0A 00 +6F 70 5F 63 6F 6E 64 20 65 72 72 6F 72 0A 00 49 +46 20 43 6F 6E 64 0A 00 47 6F 20 49 44 4C 45 0A +00 25 32 78 00 0A 00 30 31 32 33 34 35 36 37 38 +39 41 42 43 44 45 46 2D 32 31 34 37 34 38 33 36 +34 38 00 00 01 02 0C 09 0A 10 40 50 A0 D0 66 66 +66 66 A6 88 88 66 66 66 66 66 66 66 66 66 09 00 +00 00 00 00 00 00 33 33 33 33 33 00 00 00 50 55 +55 25 22 22 22 22 22 22 22 22 22 02 00 00 40 44 +44 14 11 11 11 11 11 11 11 11 11 01 00 70 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 diff --git a/hw/efinix_fpga/simulation/Makefile b/hw/efinix_fpga/simulation/Makefile index b2d283c..63fa1ed 100644 --- a/hw/efinix_fpga/simulation/Makefile +++ b/hw/efinix_fpga/simulation/Makefile @@ -9,7 +9,7 @@ TEST_PROGRAM_NAME?=loop_test TEST_FOLDER?=$(REPO_TOP)/sw/test_code/$(TEST_PROGRAM_NAME) TEST_PROGRAM?=$(REPO_TOP)/sw/test_code/$(TEST_PROGRAM_NAME)/$(TEST_PROGRAM_NAME).hex -STANDALONE_TB= interrupt_controller_tb mapper_tb rtc_tb +STANDALONE_TB= interrupt_controller_tb mapper_tb rtc_tb uart_irq_tb CODE_TB= interrupt_controller_code_tb mapper_code_tb rtc_code_tb \ devices_setup_code_tb diff --git a/hw/efinix_fpga/simulation/tbs/uart_irq_tb.sv b/hw/efinix_fpga/simulation/tbs/uart_irq_tb.sv new file mode 100644 index 0000000..e6f3ea3 --- /dev/null +++ b/hw/efinix_fpga/simulation/tbs/uart_irq_tb.sv @@ -0,0 +1,15 @@ +`timescale 1ns/1ps + +module uart_irq_tb(); + +sim_top u_sim_top(); + +initial begin + u_sim_top.u_sim_uart.tx_en = 1; + @(posedge u_sim_top.r_clk_cpu); + u_sim_top.u_sim_uart.tx_data = 8'hAA; + repeat (100) @(posedge u_sim_top.r_clk_cpu); + $finish(); +end + +endmodule \ No newline at end of file diff --git a/hw/efinix_fpga/src/super6502.sv b/hw/efinix_fpga/src/super6502.sv index 14c04d1..d33827e 100644 --- a/hw/efinix_fpga/src/super6502.sv +++ b/hw/efinix_fpga/src/super6502.sv @@ -159,6 +159,24 @@ rom #(.DATA_WIDTH(8), .ADDR_WIDTH(12)) u_rom( .data(w_rom_data_out) ); +logic w_irq; +assign cpu_irqb = ~w_irq; +logic [127:0] w_int_in; + +assign w_int_in[127:2] = 0; + +interrupt_controller u_interrupt_controller( + .clk(clk_cpu), + .reset(~cpu_resb), + .i_data(cpu_data_in), + .o_data(w_irq_data_out), + .addr(w_mapped_addr[0]), + .cs(w_irq_cs), + .rwb(cpu_rwb), + .int_in(w_int_in), + .int_out(w_irq) +); + leds u_leds( .clk(clk_cpu), .i_data(cpu_data_in), @@ -213,7 +231,7 @@ divider_wrapper u_divider( .addr(w_mapped_addr[2:0]) ); -logic w_uart_irqb; +logic w_uart_irq; uart_wrapper u_uart( .clk(clk_cpu), @@ -226,9 +244,11 @@ uart_wrapper u_uart( .addr(w_mapped_addr[0]), .rx_i(uart_rx), .tx_o(uart_tx), - .irqb(w_uart_irqb) + .irq(w_uart_irq) ); +assign w_int_in[1] = w_uart_irq; + spi_controller spi_controller( .i_clk(clk_cpu), .i_rst(~cpu_resb), @@ -275,24 +295,6 @@ sdram_adapter u_sdram_adapter( .o_sdr_DQM(o_sdr_DQM) ); -logic w_irq; -assign cpu_irqb = ~w_irq; -logic [255:0] w_int_in; - -assign w_int_in[255:1] = 0; - -interrupt_controller u_interrupt_controller( - .clk(clk_cpu), - .reset(~cpu_resb), - .i_data(cpu_data_in), - .o_data(w_irq_data_out), - .addr(w_mapped_addr[0]), - .cs(w_irq_cs), - .rwb(cpu_rwb), - .int_in(w_int_in), - .int_out(w_irq) -); - rtc u_rtc( .clk(clk_cpu), .reset(~cpu_resb), diff --git a/hw/efinix_fpga/src/uart_wrapper.sv b/hw/efinix_fpga/src/uart_wrapper.sv index 3262233..3e033bd 100644 --- a/hw/efinix_fpga/src/uart_wrapper.sv +++ b/hw/efinix_fpga/src/uart_wrapper.sv @@ -11,7 +11,7 @@ module uart_wrapper( input rx_i, output tx_o, - output logic irqb + output logic irq ); logic [7:0] status, control; @@ -21,6 +21,8 @@ logic tx_busy, rx_busy; logic rx_data_valid, rx_error, rx_parity_error; logic baud_x16_ce; +assign irq = rx_data_valid; + logic tx_en; logic [7:0] tx_data, rx_data; @@ -47,7 +49,6 @@ enum bit [1:0] {READY, WAIT, TRANSMIT} state, next_state; always_ff @(posedge clk_50) begin if (reset) begin state <= READY; - irqb <= '1; end else begin state <= next_state; end From 102c4dfe8a53c030d1b6101681120c842d55610f Mon Sep 17 00:00:00 2001 From: Byron Lathi Date: Tue, 21 Nov 2023 18:53:17 -0800 Subject: [PATCH 06/10] Use vectors for irq and nmi --- hw/efinix_fpga/init_hex.mem | 458 +++++++++++------------ sw/bios/devices/interrupt.s | 83 +--- sw/bios/irq.c | 11 - sw/kernel/devices/interrupt_controller.s | 15 + sw/kernel/interrupts/interrupt.h | 3 - sw/kernel/interrupts/interrupt.s | 9 +- 6 files changed, 254 insertions(+), 325 deletions(-) delete mode 100644 sw/bios/irq.c diff --git a/hw/efinix_fpga/init_hex.mem b/hw/efinix_fpga/init_hex.mem index 7ef0d38..c926b37 100644 --- a/hw/efinix_fpga/init_hex.mem +++ b/hw/efinix_fpga/init_hex.mem @@ -1,235 +1,235 @@ @00000000 00 80 4C 00 00 8D 13 92 8E 14 92 8D 1A 92 8E 1B 92 88 B9 FF FF 8D 24 92 88 B9 FF FF 8D 23 92 8C -26 92 20 FF FF A0 FF D0 E8 60 00 00 1F FD 00 00 -00 00 A2 FF 9A D8 A9 00 85 04 A9 DF 85 05 20 97 -FD 20 0C FA 20 52 F0 58 20 45 F2 6C FC FF 20 00 +26 92 20 FF FF A0 FF D0 E8 60 00 00 21 FD 00 00 +00 00 A2 FF 9A D8 A9 00 85 04 A9 DF 85 05 20 99 +FD 20 0E FA 20 52 F0 58 20 47 F2 6C FC FF 20 02 FA 00 A0 00 F0 07 A9 52 A2 F0 4C 05 92 60 AD FF -EF A2 00 60 8D FF EF 60 20 2C F2 C9 0A D0 05 A9 -0D 20 2C F2 60 DA 5A A8 B2 04 AA A9 1B 20 2C F2 -A9 5B 20 2C F2 98 20 2C F2 A9 3B 20 2C F2 8A 20 -2C F2 A9 48 20 2C F2 7A FA 60 DA A9 1B 20 2C F2 -A9 63 20 2C F2 68 60 40 6C 20 02 48 A0 04 B1 04 -09 40 20 1C F2 88 B1 04 20 1C F2 88 10 F8 68 09 -01 20 1C F2 20 FC FA 60 A2 08 A9 FF 20 1C F2 C9 -FF D0 03 CA D0 F4 60 85 0C 86 0D 20 C8 F0 92 0C -A9 FF 20 1C F2 A0 01 91 0C 20 E9 FA 60 AA 20 73 -FC A9 FF 20 1C F2 92 0C E6 0C D0 02 E6 0D CA D0 -F0 60 85 0C 86 0D 20 C8 F0 C9 02 B0 12 E6 0C D0 -02 E6 0C A5 0C A6 0D 20 A0 FC A9 04 20 ED F0 60 -48 A9 FF 20 1C F2 A9 00 20 10 F2 A9 FF 20 1C F2 -68 20 AB F0 20 C8 F0 A8 A9 FF 20 1C F2 A9 00 20 -16 F2 A9 FF 20 1C F2 98 A2 00 60 A9 00 20 16 F2 -20 68 F1 A9 FF 20 1C F2 A9 00 20 16 F2 A2 50 A9 -FF 20 1C F2 CA D0 F8 60 A2 01 A9 C8 3A D0 FD CA -D0 F8 60 85 0E 86 0F A9 FF 92 0E 20 73 FC A5 04 -85 10 A5 05 85 11 20 A4 FA A0 00 B1 10 91 04 C8 -B1 10 91 04 C8 B1 10 91 04 C8 B1 10 91 04 A9 FF -20 1C F2 A9 00 20 10 F2 A9 FF 20 1C F2 A9 11 A0 -04 91 04 A9 00 20 AB F0 20 C8 F0 C9 FF F0 3F 85 -16 A0 00 A9 FF 20 1C F2 85 15 A5 15 C9 FF D0 05 -C8 D0 F0 80 23 A2 02 A0 00 A9 FF 20 1C F2 92 0C -E6 0C D0 02 E6 0D 88 D0 F0 A0 00 CA D0 EB A9 FF -20 1C F2 A9 FF 20 1C F2 A5 15 92 0E A5 16 48 A9 -FF 20 1C F2 A9 00 20 16 F2 A9 FF 20 1C F2 68 60 -A9 01 8D DB EF 60 9C DB EF 60 A9 00 8D DA EF AD -DB EF 30 FB AD D9 EF 60 8D E6 EF 60 48 8D E6 EF -AD E7 EF 89 02 D0 F9 68 60 AD E6 EF A2 00 60 AD -E7 EF A2 00 60 20 C7 FA A2 00 86 06 86 07 A9 00 -20 5E FB 20 AD FA A9 D9 A2 FD 20 6D FA 20 0D F3 -C9 00 20 0B FC D0 03 4C 74 F2 A9 D2 A2 FD 20 6D -FA 4C 01 F3 A9 C9 A2 FD 20 6D FA A0 05 20 1A FB -20 5E FB AD 00 92 AE 01 92 20 A0 FC A9 0C 20 2B -FB 20 73 F1 A0 07 91 04 A0 07 A2 00 B1 04 C9 00 -20 11 FC D0 03 4C B8 F2 A0 06 A2 00 B1 04 C9 FE -20 11 FC F0 03 4C C1 F2 A2 00 A9 00 D0 03 4C C5 -F2 A2 00 A9 01 D0 03 4C CD F2 4C FE F2 A0 06 A2 -00 B1 04 A2 00 29 F0 20 F2 F9 D0 03 4C E9 F2 A9 -D2 A2 FD 20 6D FA 4C FE F2 A9 BA A2 FD 20 A0 FC -A0 08 A2 00 B1 04 20 A0 FC A0 04 20 39 FA 6C 00 -92 4C 04 F3 4C 04 F3 A0 0C 20 D8 F9 60 20 D4 FA -A9 00 20 8A FC 20 4B F1 4C 44 F3 A0 00 A2 00 18 -A9 01 71 04 91 04 A0 00 A2 00 B1 04 C9 FF 20 11 -FC D0 03 4C 44 F3 A9 F8 A2 FD 20 6D FA A2 00 A9 -01 4C FA F3 20 FE F3 A0 01 91 04 C9 01 20 0B FC -D0 C9 A9 01 20 2B FB 20 1B F4 A0 01 A2 00 B1 04 -C9 01 20 0B FC D0 03 4C 78 F3 A9 EF A2 FD 20 6D -FA A2 00 A9 01 4C FA F3 A0 05 A2 00 B1 04 C9 AA -20 0B FC D0 03 4C 8F F3 A2 00 A9 01 4C FA F3 A2 -00 A9 00 A0 00 91 04 A0 00 A2 00 B1 04 C9 FF 20 -11 FC D0 03 4C B5 F3 A9 E0 A2 FD 20 6D FA A2 00 -A9 01 4C FA F3 20 3D F5 A0 01 91 04 A0 01 A2 00 -B1 04 C9 02 20 2A FC D0 03 4C D3 F3 20 5A F5 A0 -01 91 04 A0 00 A2 00 18 A9 01 71 04 91 04 A0 01 -A2 00 B1 04 C9 00 20 0B FC D0 AC A9 01 20 2B FB -20 C3 F4 A2 00 A9 00 4C FA F3 20 01 FB 60 A2 00 -A9 00 20 8A FC A2 00 86 06 86 07 A9 00 20 5E FB -A2 00 A9 94 20 20 F1 4C 1A F4 60 20 A0 FC A2 00 -A9 FF 20 1C F2 A2 00 A9 00 20 10 F2 A2 00 A9 FF -20 1C F2 A2 00 A9 08 20 8A FC A2 01 A9 00 85 06 -A9 00 85 07 A9 AA 20 5E FB A2 00 A9 86 20 AB F0 -A0 01 20 11 FB 20 02 F1 A2 00 A9 FF 20 1C F2 A2 -00 A9 00 20 16 F2 A2 00 A9 FF 20 1C F2 20 E9 FA -60 20 A0 FC A2 00 A9 FF 20 1C F2 A2 00 A9 00 20 -10 F2 A2 00 A9 FF 20 1C F2 A2 00 A9 0D 20 8A FC -A2 00 86 06 86 07 A9 00 20 5E FB A2 00 A9 00 20 -AB F0 A0 01 20 11 FB 20 D7 F0 A2 00 A9 FF 20 1C -F2 A2 00 A9 00 20 16 F2 A2 00 A9 FF 20 1C F2 20 -E9 FA 60 20 A0 FC 20 A4 FA A2 00 A9 FF 20 1C F2 -A2 00 A9 00 20 10 F2 A2 00 A9 FF 20 1C F2 A0 00 -91 04 A0 00 A2 00 B1 04 C9 FF 20 0B FC D0 03 4C -03 F5 4C F5 F4 A2 00 A9 FF 20 1C F2 C9 FF 20 0B -FC D0 F2 A2 00 A9 3A 20 8A FC A2 00 86 06 86 07 -A9 00 20 5E FB A2 00 A9 00 20 AB F0 A0 02 20 11 -FB 20 02 F1 A2 00 A9 FF 20 1C F2 A2 00 A9 00 20 -16 F2 A2 00 A9 FF 20 1C F2 20 F7 FA 60 A2 00 A9 -37 20 8A FC A2 00 86 06 86 07 A9 00 20 5E FB A2 -00 A9 00 20 20 F1 4C 59 F5 60 A2 00 A9 29 20 8A -FC A2 00 86 06 A9 40 85 07 A9 00 20 5E FB A2 00 -A9 00 20 20 F1 4C 78 F5 60 20 A0 FC 20 C7 FA A0 -03 A2 00 B1 04 4C 88 F5 A0 0E 20 D8 F9 60 20 A0 -FC A9 00 20 8A FC 20 AD FA A2 00 A9 00 A0 00 20 -B8 FC A0 01 20 11 FB E0 02 20 2A FC F0 03 4C B4 -F5 4C 16 F6 A9 01 A2 FE 20 A0 FC A0 06 20 11 FB -A0 00 20 06 FB 20 A0 FC A0 07 A2 00 A9 01 20 C8 -F9 A0 04 20 39 FA A0 02 A2 00 B1 04 C9 1F 20 11 -FC D0 03 4C F8 F5 A9 05 A2 FE 20 6D FA A2 00 A9 -00 A0 02 91 04 4C 0A F6 A2 00 A9 20 20 68 F0 A0 -02 A2 00 18 A9 01 71 04 91 04 A0 00 A2 00 A9 01 -20 C8 F9 4C A2 F5 A9 05 A2 FE 20 6D FA 20 FC FA -60 A0 00 B1 1A E6 1A D0 02 E6 1B 60 AD 4A 92 8D -45 92 20 CD F6 A9 45 A2 92 20 A0 FC 20 81 FC 4C -02 92 A5 18 38 E9 02 85 18 B0 02 C6 19 60 AD 4F -92 D0 11 20 6B F6 4C EB F9 AD 4F 92 D0 06 20 6B -F6 4C E5 F9 20 6B F6 85 06 86 07 20 42 F6 A0 01 -B1 18 AA 88 B1 18 60 A0 00 84 0C 84 0D B1 1A 38 -E9 30 90 2C C9 0A B0 28 20 25 F6 48 A5 0C A6 0D -06 0C 26 0D 06 0C 26 0D 65 0C 85 0C 8A 65 0D 85 -0D 06 0C 26 0D 68 65 0C 85 0C 90 D1 E6 0D B0 CD -A5 0C A6 0D 60 AC 51 92 EE 51 92 99 52 92 60 A9 -52 A2 92 18 6D 51 92 90 01 E8 4C A0 FC A5 1C A6 -1D 4C A0 FC 20 2C F6 EE 4B 92 D0 F8 EE 4C 92 D0 -F3 60 20 CD F6 AD 66 92 AE 67 92 20 A0 FC AD 68 -92 AE 69 92 20 A0 FC 4C 02 92 84 0C 20 5E FB 20 -BF F6 A5 0C 4C 8E FB 84 0C 20 5E FB 20 BF F6 A5 -0C 4C CF FB 48 A0 05 B9 18 00 99 3F 92 88 10 F7 -68 85 18 86 19 20 E1 FA 85 1A 86 1B 20 E1 FA 85 -1C 86 1D A9 00 A8 91 1C C8 91 1C C8 B1 1C 8D 03 -92 C8 B1 1C 8D 04 92 A5 1A 85 0C A5 1B 85 0D A0 -00 B1 1A F0 0B C9 25 F0 07 C8 D0 F5 E6 1B D0 F1 -98 18 65 1A 85 1A 90 02 E6 1B 38 E5 0C 85 0E A5 -1B E5 0D 85 0F 05 0E F0 25 20 C7 FA A0 05 A5 1D -91 04 88 A5 1C 91 04 88 A5 0D 91 04 88 A5 0C 91 -04 88 A5 0F 91 04 88 A5 0E 91 04 20 02 92 20 21 -F6 AA D0 0B A2 05 BD 3F 92 95 18 CA 10 F8 60 C9 -25 D0 09 B1 1A C9 25 D0 09 20 25 F6 20 2F F6 4C -47 F7 A9 00 A2 0B 9D 46 92 CA 10 FA B1 1A C9 2D -D0 05 8E 46 92 F0 19 C9 2B D0 05 8E 47 92 F0 10 -C9 20 D0 05 8E 48 92 F0 07 C9 23 D0 09 8E 49 92 -20 25 F6 4C CC F7 A2 20 C9 30 D0 06 AA 20 25 F6 -B1 1A 8E 4A 92 C9 2A D0 09 20 25 F6 20 6B F6 4C -15 F8 20 77 F6 8D 4B 92 8E 4C 92 8C 4D 92 8C 4E -92 B1 1A C9 2E D0 1B 20 25 F6 B1 1A C9 2A D0 09 -20 25 F6 20 6B F6 4C 3C F8 20 77 F6 8D 4D 92 8E -4E 92 B1 1A C9 7A F0 19 C9 68 F0 15 C9 74 F0 11 -C9 6A F0 08 C9 4C F0 04 C9 6C D0 0B A9 FF 8D 4F -92 20 25 F6 4C 42 F8 8C 51 92 A2 52 8E 66 92 A2 -92 8E 67 92 20 25 F6 C9 63 D0 0E 20 6B F6 8D 52 -92 A9 00 8D 53 92 4C 66 F9 C9 64 F0 04 C9 69 D0 -2D A2 00 AD 48 92 F0 02 A2 20 AD 47 92 F0 02 A2 -2B 8E 50 92 20 59 F6 A4 07 30 0B AC 50 92 F0 06 -8C 52 92 EE 51 92 A0 0A 20 FA F6 4C 66 F9 C9 6E -D0 15 20 6B F6 85 0C 86 0D A0 00 B1 1C 91 0C C8 -B1 1C 91 0C 4C 47 F7 C9 6F D0 27 20 59 F6 AC 49 -92 F0 17 48 86 14 05 14 05 06 05 07 0D 4D 92 0D -4E 92 F0 06 A9 30 20 B5 F6 68 A0 08 20 FA F6 4C -66 F9 C9 70 D0 0D A2 00 8E 4F 92 E8 8E 49 92 A9 -78 D0 27 C9 73 D0 0C 20 6B F6 8D 66 92 8E 67 92 -4C 66 F9 C9 75 D0 0B 20 4E F6 A0 0A 20 07 F7 4C -66 F9 C9 78 F0 04 C9 58 D0 29 48 AD 49 92 F0 0A -A9 30 20 B5 F6 A9 58 20 B5 F6 20 4E F6 A0 10 20 -07 F7 68 C9 78 D0 09 AD 66 92 AE 67 92 20 F8 FC -4C 66 F9 4C 47 F7 AD 66 92 AE 67 92 20 E2 FC 8D -68 92 8E 69 92 AD 4D 92 0D 4E 92 F0 15 AE 4D 92 -EC 68 92 AD 4E 92 A8 ED 69 92 B0 06 8E 68 92 8C -69 92 38 AD 4B 92 ED 68 92 AA AD 4C 92 ED 69 92 -B0 03 A9 00 AA 49 FF 8D 4C 92 8A 49 FF 8D 4B 92 -AD 46 92 D0 03 20 D7 F6 20 E2 F6 AD 46 92 F0 03 -20 D7 F6 4C 47 F7 A0 00 18 71 04 91 04 48 C8 8A -71 04 91 04 AA 68 60 C8 48 18 98 65 04 85 04 90 -02 E6 05 68 60 A0 FF E0 80 B0 02 A0 00 84 06 84 -07 60 E0 00 D0 06 AA D0 03 A9 01 60 A2 00 8A 60 -A0 00 F0 07 A9 52 A2 F0 4C 05 92 60 A9 00 85 0C -A9 F0 85 0D A9 00 85 0E A9 92 85 0F A2 CD A9 FF -85 14 A0 00 E8 F0 0D B1 0C 91 0E C8 D0 F6 E6 0D -E6 0F D0 F0 E6 14 D0 EF 60 8C 6A 92 88 88 98 18 -65 04 85 0C A6 05 90 01 E8 86 0D A0 01 B1 0C AA -88 B1 0C 20 A0 FC A5 0C A6 0D 20 67 FD AC 6A 92 -4C D8 F9 85 0C 86 0D 20 75 F0 4C 71 FA 85 0C 86 -0D A0 00 B1 0C F0 0E C8 84 14 20 68 F0 A4 14 D0 -F2 E6 0D D0 EE 60 E0 00 D0 15 4A AA BD 2E FE 90 -05 4A 4A 4A 4A 18 29 0F AA BD 23 FE A2 00 60 38 -A9 00 AA 60 A4 04 D0 02 C6 05 C6 04 60 A5 04 38 -E9 02 85 04 90 01 60 C6 05 60 A5 04 38 E9 04 85 -04 90 01 60 C6 05 60 A5 04 38 E9 06 85 04 90 01 -60 C6 05 60 A5 04 38 E9 07 85 04 90 01 60 C6 05 -60 A0 01 B1 04 AA 88 B1 04 E6 04 F0 05 E6 04 F0 -03 60 E6 04 E6 05 60 A0 03 4C D8 F9 A0 05 4C D8 -F9 A0 08 4C D8 F9 85 0C 86 0D A2 00 B1 0C 60 A0 -01 B1 04 AA 88 B1 04 60 A0 03 B1 04 85 07 88 B1 -04 85 06 88 B1 04 AA 88 B1 04 60 A2 00 18 65 04 -48 8A 65 05 AA 68 60 18 49 FF 69 01 48 8A 49 FF -69 00 AA A5 06 49 FF 69 00 85 06 A5 07 49 FF 69 -00 85 07 68 60 A9 00 AA A0 00 84 06 84 07 48 20 -BA FA A0 03 A5 07 91 04 88 A5 06 91 04 88 8A 91 -04 68 88 91 04 60 85 14 20 E1 FA 85 0E 86 0F 85 -10 86 11 20 73 FC 20 E1 FA 85 06 86 07 60 20 76 -FB A6 07 A4 14 C0 0A D0 39 A5 06 05 0D 05 0C D0 -11 E0 80 D0 0D A0 0B B9 17 FE 91 0E 88 10 F8 4C -06 FC 8A 10 1D A9 2D A0 00 91 0E E6 0E D0 02 E6 -0F A5 0C A6 0D 20 37 FB 85 0C 86 0D 4C D2 FB 20 -76 FB A9 00 48 A0 20 A9 00 06 0C 26 0D 26 06 26 -07 2A C5 14 90 04 E5 14 E6 0C 88 D0 EC A8 B9 07 -FE 48 A5 0C 05 0D 05 06 05 07 D0 D9 A0 00 68 91 -0E F0 03 C8 D0 F8 A5 10 A6 11 60 D0 06 A2 00 8A -60 D0 FA A2 00 A9 01 60 F0 F9 30 F7 A2 00 8A 60 -F0 02 10 EF A2 00 8A 60 F0 E9 90 E7 A2 00 8A 60 -F0 DB A2 00 8A 2A 60 20 60 FC A6 11 F0 13 B1 0C -91 0E C8 B1 0C 91 0E C8 D0 F4 E6 0D E6 0F CA D0 -ED A6 10 F0 08 B1 0C 91 0E C8 CA D0 F8 4C E1 FA -85 10 86 11 20 73 FC C8 B1 04 AA 86 0F 88 B1 04 -85 0E 60 A0 01 B1 04 85 0D 88 B1 04 85 0C 4C E9 -FA A9 01 4C 9E FC A0 00 B1 04 A4 04 F0 07 C6 04 -A0 00 91 04 60 C6 05 C6 04 91 04 60 A9 00 A2 00 -48 A5 04 38 E9 02 85 04 B0 02 C6 05 A0 01 8A 91 -04 68 88 91 04 60 A0 00 91 04 C8 48 8A 91 04 68 -60 85 0E 86 0F 20 73 FC B1 0C D1 0E D0 0C AA F0 -10 C8 D0 F4 E6 0D E6 0F D0 EE B0 03 A2 FF 60 A2 -01 60 85 0E 86 0F A2 00 A0 00 B1 0E F0 08 C8 D0 -F9 E6 0F E8 D0 F4 98 60 85 0C 86 0D 85 0E 86 0F -A0 00 B1 0C F0 14 20 8A FA 29 02 F0 06 B1 0C 69 -20 91 0C C8 D0 EC E6 0D D0 E8 A5 0E A6 0F 60 20 -E1 FA 85 0E 86 0F E8 8E 31 92 AA E8 8E 30 92 20 -73 FC 20 E1 FA 85 10 86 11 A0 00 84 14 B1 10 18 -65 0E 91 10 C8 B1 10 65 0F 91 10 CE 30 92 F0 11 -A4 14 B1 0C C8 D0 02 E6 0D 84 14 20 68 F0 4C 4B -FD CE 31 92 D0 EA 60 85 0C 86 0D A9 00 8D 2A 92 -8D 2B 92 A0 01 B1 04 AA 88 B1 04 20 A0 FC A0 02 -A9 2A 91 04 C8 A9 92 91 04 A5 0C A6 0D 20 14 F7 -AD 2A 92 AE 2B 92 60 A9 32 85 0C A9 92 85 0D A9 -00 A8 A2 00 F0 0A 91 0C C8 D0 FB E6 0D CA D0 F6 -C0 39 F0 05 91 0C C8 D0 F7 60 62 61 64 20 74 6F -6B 65 6E 3A 20 25 78 0A 00 53 75 63 63 65 73 73 -0A 00 45 72 72 6F 72 0A 00 53 74 61 72 74 0A 00 -6F 70 5F 63 6F 6E 64 20 65 72 72 6F 72 0A 00 49 -46 20 43 6F 6E 64 0A 00 47 6F 20 49 44 4C 45 0A -00 25 32 78 00 0A 00 30 31 32 33 34 35 36 37 38 -39 41 42 43 44 45 46 2D 32 31 34 37 34 38 33 36 -34 38 00 00 01 02 0C 09 0A 10 40 50 A0 D0 66 66 -66 66 A6 88 88 66 66 66 66 66 66 66 66 66 09 00 -00 00 00 00 00 00 33 33 33 33 33 00 00 00 50 55 -55 25 22 22 22 22 22 22 22 22 22 02 00 00 40 44 -44 14 11 11 11 11 11 11 11 11 11 01 00 70 00 00 +EF A2 00 60 8D FF EF 60 20 2E F2 C9 0A D0 05 A9 +0D 20 2E F2 60 DA 5A A8 B2 04 AA A9 1B 20 2E F2 +A9 5B 20 2E F2 98 20 2E F2 A9 3B 20 2E F2 8A 20 +2E F2 A9 48 20 2E F2 7A FA 60 DA A9 1B 20 2E F2 +A9 63 20 2E F2 68 60 6C 22 02 6C 20 02 48 A0 04 +B1 04 09 40 20 1E F2 88 B1 04 20 1E F2 88 10 F8 +68 09 01 20 1E F2 20 FE FA 60 A2 08 A9 FF 20 1E +F2 C9 FF D0 03 CA D0 F4 60 85 0C 86 0D 20 CA F0 +92 0C A9 FF 20 1E F2 A0 01 91 0C 20 EB FA 60 AA +20 75 FC A9 FF 20 1E F2 92 0C E6 0C D0 02 E6 0D +CA D0 F0 60 85 0C 86 0D 20 CA F0 C9 02 B0 12 E6 +0C D0 02 E6 0C A5 0C A6 0D 20 A2 FC A9 04 20 EF +F0 60 48 A9 FF 20 1E F2 A9 00 20 12 F2 A9 FF 20 +1E F2 68 20 AD F0 20 CA F0 A8 A9 FF 20 1E F2 A9 +00 20 18 F2 A9 FF 20 1E F2 98 A2 00 60 A9 00 20 +18 F2 20 6A F1 A9 FF 20 1E F2 A9 00 20 18 F2 A2 +50 A9 FF 20 1E F2 CA D0 F8 60 A2 01 A9 C8 3A D0 +FD CA D0 F8 60 85 0E 86 0F A9 FF 92 0E 20 75 FC +A5 04 85 10 A5 05 85 11 20 A6 FA A0 00 B1 10 91 +04 C8 B1 10 91 04 C8 B1 10 91 04 C8 B1 10 91 04 +A9 FF 20 1E F2 A9 00 20 12 F2 A9 FF 20 1E F2 A9 +11 A0 04 91 04 A9 00 20 AD F0 20 CA F0 C9 FF F0 +3F 85 16 A0 00 A9 FF 20 1E F2 85 15 A5 15 C9 FF +D0 05 C8 D0 F0 80 23 A2 02 A0 00 A9 FF 20 1E F2 +92 0C E6 0C D0 02 E6 0D 88 D0 F0 A0 00 CA D0 EB +A9 FF 20 1E F2 A9 FF 20 1E F2 A5 15 92 0E A5 16 +48 A9 FF 20 1E F2 A9 00 20 18 F2 A9 FF 20 1E F2 +68 60 A9 01 8D DB EF 60 9C DB EF 60 A9 00 8D DA +EF AD DB EF 30 FB AD D9 EF 60 8D E6 EF 60 48 8D +E6 EF AD E7 EF 89 02 D0 F9 68 60 AD E6 EF A2 00 +60 AD E7 EF A2 00 60 20 C9 FA A2 00 86 06 86 07 +A9 00 20 60 FB 20 AF FA A9 DB A2 FD 20 6F FA 20 +0F F3 C9 00 20 0D FC D0 03 4C 76 F2 A9 D4 A2 FD +20 6F FA 4C 03 F3 A9 CB A2 FD 20 6F FA A0 05 20 +1C FB 20 60 FB AD 00 92 AE 01 92 20 A2 FC A9 0C +20 2D FB 20 75 F1 A0 07 91 04 A0 07 A2 00 B1 04 +C9 00 20 13 FC D0 03 4C BA F2 A0 06 A2 00 B1 04 +C9 FE 20 13 FC F0 03 4C C3 F2 A2 00 A9 00 D0 03 +4C C7 F2 A2 00 A9 01 D0 03 4C CF F2 4C 00 F3 A0 +06 A2 00 B1 04 A2 00 29 F0 20 F4 F9 D0 03 4C EB +F2 A9 D4 A2 FD 20 6F FA 4C 00 F3 A9 BC A2 FD 20 +A2 FC A0 08 A2 00 B1 04 20 A2 FC A0 04 20 3B FA +6C 00 92 4C 06 F3 4C 06 F3 A0 0C 20 DA F9 60 20 +D6 FA A9 00 20 8C FC 20 4D F1 4C 46 F3 A0 00 A2 +00 18 A9 01 71 04 91 04 A0 00 A2 00 B1 04 C9 FF +20 13 FC D0 03 4C 46 F3 A9 FA A2 FD 20 6F FA A2 +00 A9 01 4C FC F3 20 00 F4 A0 01 91 04 C9 01 20 +0D FC D0 C9 A9 01 20 2D FB 20 1D F4 A0 01 A2 00 +B1 04 C9 01 20 0D FC D0 03 4C 7A F3 A9 F1 A2 FD +20 6F FA A2 00 A9 01 4C FC F3 A0 05 A2 00 B1 04 +C9 AA 20 0D FC D0 03 4C 91 F3 A2 00 A9 01 4C FC +F3 A2 00 A9 00 A0 00 91 04 A0 00 A2 00 B1 04 C9 +FF 20 13 FC D0 03 4C B7 F3 A9 E2 A2 FD 20 6F FA +A2 00 A9 01 4C FC F3 20 3F F5 A0 01 91 04 A0 01 +A2 00 B1 04 C9 02 20 2C FC D0 03 4C D5 F3 20 5C +F5 A0 01 91 04 A0 00 A2 00 18 A9 01 71 04 91 04 +A0 01 A2 00 B1 04 C9 00 20 0D FC D0 AC A9 01 20 +2D FB 20 C5 F4 A2 00 A9 00 4C FC F3 20 03 FB 60 +A2 00 A9 00 20 8C FC A2 00 86 06 86 07 A9 00 20 +60 FB A2 00 A9 94 20 22 F1 4C 1C F4 60 20 A2 FC +A2 00 A9 FF 20 1E F2 A2 00 A9 00 20 12 F2 A2 00 +A9 FF 20 1E F2 A2 00 A9 08 20 8C FC A2 01 A9 00 +85 06 A9 00 85 07 A9 AA 20 60 FB A2 00 A9 86 20 +AD F0 A0 01 20 13 FB 20 04 F1 A2 00 A9 FF 20 1E +F2 A2 00 A9 00 20 18 F2 A2 00 A9 FF 20 1E F2 20 +EB FA 60 20 A2 FC A2 00 A9 FF 20 1E F2 A2 00 A9 +00 20 12 F2 A2 00 A9 FF 20 1E F2 A2 00 A9 0D 20 +8C FC A2 00 86 06 86 07 A9 00 20 60 FB A2 00 A9 +00 20 AD F0 A0 01 20 13 FB 20 D9 F0 A2 00 A9 FF +20 1E F2 A2 00 A9 00 20 18 F2 A2 00 A9 FF 20 1E +F2 20 EB FA 60 20 A2 FC 20 A6 FA A2 00 A9 FF 20 +1E F2 A2 00 A9 00 20 12 F2 A2 00 A9 FF 20 1E F2 +A0 00 91 04 A0 00 A2 00 B1 04 C9 FF 20 0D FC D0 +03 4C 05 F5 4C F7 F4 A2 00 A9 FF 20 1E F2 C9 FF +20 0D FC D0 F2 A2 00 A9 3A 20 8C FC A2 00 86 06 +86 07 A9 00 20 60 FB A2 00 A9 00 20 AD F0 A0 02 +20 13 FB 20 04 F1 A2 00 A9 FF 20 1E F2 A2 00 A9 +00 20 18 F2 A2 00 A9 FF 20 1E F2 20 F9 FA 60 A2 +00 A9 37 20 8C FC A2 00 86 06 86 07 A9 00 20 60 +FB A2 00 A9 00 20 22 F1 4C 5B F5 60 A2 00 A9 29 +20 8C FC A2 00 86 06 A9 40 85 07 A9 00 20 60 FB +A2 00 A9 00 20 22 F1 4C 7A F5 60 20 A2 FC 20 C9 +FA A0 03 A2 00 B1 04 4C 8A F5 A0 0E 20 DA F9 60 +20 A2 FC A9 00 20 8C FC 20 AF FA A2 00 A9 00 A0 +00 20 BA FC A0 01 20 13 FB E0 02 20 2C FC F0 03 +4C B6 F5 4C 18 F6 A9 03 A2 FE 20 A2 FC A0 06 20 +13 FB A0 00 20 08 FB 20 A2 FC A0 07 A2 00 A9 01 +20 CA F9 A0 04 20 3B FA A0 02 A2 00 B1 04 C9 1F +20 13 FC D0 03 4C FA F5 A9 07 A2 FE 20 6F FA A2 +00 A9 00 A0 02 91 04 4C 0C F6 A2 00 A9 20 20 68 +F0 A0 02 A2 00 18 A9 01 71 04 91 04 A0 00 A2 00 +A9 01 20 CA F9 4C A4 F5 A9 07 A2 FE 20 6F FA 20 +FE FA 60 A0 00 B1 1A E6 1A D0 02 E6 1B 60 AD 4A +92 8D 45 92 20 CF F6 A9 45 A2 92 20 A2 FC 20 83 +FC 4C 02 92 A5 18 38 E9 02 85 18 B0 02 C6 19 60 +AD 4F 92 D0 11 20 6D F6 4C ED F9 AD 4F 92 D0 06 +20 6D F6 4C E7 F9 20 6D F6 85 06 86 07 20 44 F6 +A0 01 B1 18 AA 88 B1 18 60 A0 00 84 0C 84 0D B1 +1A 38 E9 30 90 2C C9 0A B0 28 20 27 F6 48 A5 0C +A6 0D 06 0C 26 0D 06 0C 26 0D 65 0C 85 0C 8A 65 +0D 85 0D 06 0C 26 0D 68 65 0C 85 0C 90 D1 E6 0D +B0 CD A5 0C A6 0D 60 AC 51 92 EE 51 92 99 52 92 +60 A9 52 A2 92 18 6D 51 92 90 01 E8 4C A2 FC A5 +1C A6 1D 4C A2 FC 20 2E F6 EE 4B 92 D0 F8 EE 4C +92 D0 F3 60 20 CF F6 AD 66 92 AE 67 92 20 A2 FC +AD 68 92 AE 69 92 20 A2 FC 4C 02 92 84 0C 20 60 +FB 20 C1 F6 A5 0C 4C 90 FB 84 0C 20 60 FB 20 C1 +F6 A5 0C 4C D1 FB 48 A0 05 B9 18 00 99 3F 92 88 +10 F7 68 85 18 86 19 20 E3 FA 85 1A 86 1B 20 E3 +FA 85 1C 86 1D A9 00 A8 91 1C C8 91 1C C8 B1 1C +8D 03 92 C8 B1 1C 8D 04 92 A5 1A 85 0C A5 1B 85 +0D A0 00 B1 1A F0 0B C9 25 F0 07 C8 D0 F5 E6 1B +D0 F1 98 18 65 1A 85 1A 90 02 E6 1B 38 E5 0C 85 +0E A5 1B E5 0D 85 0F 05 0E F0 25 20 C9 FA A0 05 +A5 1D 91 04 88 A5 1C 91 04 88 A5 0D 91 04 88 A5 +0C 91 04 88 A5 0F 91 04 88 A5 0E 91 04 20 02 92 +20 23 F6 AA D0 0B A2 05 BD 3F 92 95 18 CA 10 F8 +60 C9 25 D0 09 B1 1A C9 25 D0 09 20 27 F6 20 31 +F6 4C 49 F7 A9 00 A2 0B 9D 46 92 CA 10 FA B1 1A +C9 2D D0 05 8E 46 92 F0 19 C9 2B D0 05 8E 47 92 +F0 10 C9 20 D0 05 8E 48 92 F0 07 C9 23 D0 09 8E +49 92 20 27 F6 4C CE F7 A2 20 C9 30 D0 06 AA 20 +27 F6 B1 1A 8E 4A 92 C9 2A D0 09 20 27 F6 20 6D +F6 4C 17 F8 20 79 F6 8D 4B 92 8E 4C 92 8C 4D 92 +8C 4E 92 B1 1A C9 2E D0 1B 20 27 F6 B1 1A C9 2A +D0 09 20 27 F6 20 6D F6 4C 3E F8 20 79 F6 8D 4D +92 8E 4E 92 B1 1A C9 7A F0 19 C9 68 F0 15 C9 74 +F0 11 C9 6A F0 08 C9 4C F0 04 C9 6C D0 0B A9 FF +8D 4F 92 20 27 F6 4C 44 F8 8C 51 92 A2 52 8E 66 +92 A2 92 8E 67 92 20 27 F6 C9 63 D0 0E 20 6D F6 +8D 52 92 A9 00 8D 53 92 4C 68 F9 C9 64 F0 04 C9 +69 D0 2D A2 00 AD 48 92 F0 02 A2 20 AD 47 92 F0 +02 A2 2B 8E 50 92 20 5B F6 A4 07 30 0B AC 50 92 +F0 06 8C 52 92 EE 51 92 A0 0A 20 FC F6 4C 68 F9 +C9 6E D0 15 20 6D F6 85 0C 86 0D A0 00 B1 1C 91 +0C C8 B1 1C 91 0C 4C 49 F7 C9 6F D0 27 20 5B F6 +AC 49 92 F0 17 48 86 14 05 14 05 06 05 07 0D 4D +92 0D 4E 92 F0 06 A9 30 20 B7 F6 68 A0 08 20 FC +F6 4C 68 F9 C9 70 D0 0D A2 00 8E 4F 92 E8 8E 49 +92 A9 78 D0 27 C9 73 D0 0C 20 6D F6 8D 66 92 8E +67 92 4C 68 F9 C9 75 D0 0B 20 50 F6 A0 0A 20 09 +F7 4C 68 F9 C9 78 F0 04 C9 58 D0 29 48 AD 49 92 +F0 0A A9 30 20 B7 F6 A9 58 20 B7 F6 20 50 F6 A0 +10 20 09 F7 68 C9 78 D0 09 AD 66 92 AE 67 92 20 +FA FC 4C 68 F9 4C 49 F7 AD 66 92 AE 67 92 20 E4 +FC 8D 68 92 8E 69 92 AD 4D 92 0D 4E 92 F0 15 AE +4D 92 EC 68 92 AD 4E 92 A8 ED 69 92 B0 06 8E 68 +92 8C 69 92 38 AD 4B 92 ED 68 92 AA AD 4C 92 ED +69 92 B0 03 A9 00 AA 49 FF 8D 4C 92 8A 49 FF 8D +4B 92 AD 46 92 D0 03 20 D9 F6 20 E4 F6 AD 46 92 +F0 03 20 D9 F6 4C 49 F7 A0 00 18 71 04 91 04 48 +C8 8A 71 04 91 04 AA 68 60 C8 48 18 98 65 04 85 +04 90 02 E6 05 68 60 A0 FF E0 80 B0 02 A0 00 84 +06 84 07 60 E0 00 D0 06 AA D0 03 A9 01 60 A2 00 +8A 60 A0 00 F0 07 A9 52 A2 F0 4C 05 92 60 A9 00 +85 0C A9 F0 85 0D A9 00 85 0E A9 92 85 0F A2 CD +A9 FF 85 14 A0 00 E8 F0 0D B1 0C 91 0E C8 D0 F6 +E6 0D E6 0F D0 F0 E6 14 D0 EF 60 8C 6A 92 88 88 +98 18 65 04 85 0C A6 05 90 01 E8 86 0D A0 01 B1 +0C AA 88 B1 0C 20 A2 FC A5 0C A6 0D 20 69 FD AC +6A 92 4C DA F9 85 0C 86 0D 20 75 F0 4C 73 FA 85 +0C 86 0D A0 00 B1 0C F0 0E C8 84 14 20 68 F0 A4 +14 D0 F2 E6 0D D0 EE 60 E0 00 D0 15 4A AA BD 30 +FE 90 05 4A 4A 4A 4A 18 29 0F AA BD 25 FE A2 00 +60 38 A9 00 AA 60 A4 04 D0 02 C6 05 C6 04 60 A5 +04 38 E9 02 85 04 90 01 60 C6 05 60 A5 04 38 E9 +04 85 04 90 01 60 C6 05 60 A5 04 38 E9 06 85 04 +90 01 60 C6 05 60 A5 04 38 E9 07 85 04 90 01 60 +C6 05 60 A0 01 B1 04 AA 88 B1 04 E6 04 F0 05 E6 +04 F0 03 60 E6 04 E6 05 60 A0 03 4C DA F9 A0 05 +4C DA F9 A0 08 4C DA F9 85 0C 86 0D A2 00 B1 0C +60 A0 01 B1 04 AA 88 B1 04 60 A0 03 B1 04 85 07 +88 B1 04 85 06 88 B1 04 AA 88 B1 04 60 A2 00 18 +65 04 48 8A 65 05 AA 68 60 18 49 FF 69 01 48 8A +49 FF 69 00 AA A5 06 49 FF 69 00 85 06 A5 07 49 +FF 69 00 85 07 68 60 A9 00 AA A0 00 84 06 84 07 +48 20 BC FA A0 03 A5 07 91 04 88 A5 06 91 04 88 +8A 91 04 68 88 91 04 60 85 14 20 E3 FA 85 0E 86 +0F 85 10 86 11 20 75 FC 20 E3 FA 85 06 86 07 60 +20 78 FB A6 07 A4 14 C0 0A D0 39 A5 06 05 0D 05 +0C D0 11 E0 80 D0 0D A0 0B B9 19 FE 91 0E 88 10 +F8 4C 08 FC 8A 10 1D A9 2D A0 00 91 0E E6 0E D0 +02 E6 0F A5 0C A6 0D 20 39 FB 85 0C 86 0D 4C D4 +FB 20 78 FB A9 00 48 A0 20 A9 00 06 0C 26 0D 26 +06 26 07 2A C5 14 90 04 E5 14 E6 0C 88 D0 EC A8 +B9 09 FE 48 A5 0C 05 0D 05 06 05 07 D0 D9 A0 00 +68 91 0E F0 03 C8 D0 F8 A5 10 A6 11 60 D0 06 A2 +00 8A 60 D0 FA A2 00 A9 01 60 F0 F9 30 F7 A2 00 +8A 60 F0 02 10 EF A2 00 8A 60 F0 E9 90 E7 A2 00 +8A 60 F0 DB A2 00 8A 2A 60 20 62 FC A6 11 F0 13 +B1 0C 91 0E C8 B1 0C 91 0E C8 D0 F4 E6 0D E6 0F +CA D0 ED A6 10 F0 08 B1 0C 91 0E C8 CA D0 F8 4C +E3 FA 85 10 86 11 20 75 FC C8 B1 04 AA 86 0F 88 +B1 04 85 0E 60 A0 01 B1 04 85 0D 88 B1 04 85 0C +4C EB FA A9 01 4C A0 FC A0 00 B1 04 A4 04 F0 07 +C6 04 A0 00 91 04 60 C6 05 C6 04 91 04 60 A9 00 +A2 00 48 A5 04 38 E9 02 85 04 B0 02 C6 05 A0 01 +8A 91 04 68 88 91 04 60 A0 00 91 04 C8 48 8A 91 +04 68 60 85 0E 86 0F 20 75 FC B1 0C D1 0E D0 0C +AA F0 10 C8 D0 F4 E6 0D E6 0F D0 EE B0 03 A2 FF +60 A2 01 60 85 0E 86 0F A2 00 A0 00 B1 0E F0 08 +C8 D0 F9 E6 0F E8 D0 F4 98 60 85 0C 86 0D 85 0E +86 0F A0 00 B1 0C F0 14 20 8C FA 29 02 F0 06 B1 +0C 69 20 91 0C C8 D0 EC E6 0D D0 E8 A5 0E A6 0F +60 20 E3 FA 85 0E 86 0F E8 8E 31 92 AA E8 8E 30 +92 20 75 FC 20 E3 FA 85 10 86 11 A0 00 84 14 B1 +10 18 65 0E 91 10 C8 B1 10 65 0F 91 10 CE 30 92 +F0 11 A4 14 B1 0C C8 D0 02 E6 0D 84 14 20 68 F0 +4C 4D FD CE 31 92 D0 EA 60 85 0C 86 0D A9 00 8D +2A 92 8D 2B 92 A0 01 B1 04 AA 88 B1 04 20 A2 FC +A0 02 A9 2A 91 04 C8 A9 92 91 04 A5 0C A6 0D 20 +16 F7 AD 2A 92 AE 2B 92 60 A9 32 85 0C A9 92 85 +0D A9 00 A8 A2 00 F0 0A 91 0C C8 D0 FB E6 0D CA +D0 F6 C0 39 F0 05 91 0C C8 D0 F7 60 62 61 64 20 +74 6F 6B 65 6E 3A 20 25 78 0A 00 53 75 63 63 65 +73 73 0A 00 45 72 72 6F 72 0A 00 53 74 61 72 74 +0A 00 6F 70 5F 63 6F 6E 64 20 65 72 72 6F 72 0A +00 49 46 20 43 6F 6E 64 0A 00 47 6F 20 49 44 4C +45 0A 00 25 32 78 00 0A 00 30 31 32 33 34 35 36 +37 38 39 41 42 43 44 45 46 2D 32 31 34 37 34 38 +33 36 34 38 00 00 01 02 0C 09 0A 10 40 50 A0 D0 +66 66 66 66 A6 88 88 66 66 66 66 66 66 66 66 66 +09 00 00 00 00 00 00 00 33 33 33 33 33 00 00 00 +50 55 55 25 22 22 22 22 22 22 22 22 22 02 00 00 +40 44 44 14 11 11 11 11 11 11 11 11 11 01 00 70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 @@ -254,4 +254,4 @@ C0 39 F0 05 91 0C C8 D0 F7 60 62 61 64 20 74 6F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 A7 F0 32 F0 A8 F0 +00 00 00 00 00 00 00 00 00 00 A7 F0 32 F0 AA F0 diff --git a/sw/bios/devices/interrupt.s b/sw/bios/devices/interrupt.s index 862ae82..1de028b 100644 --- a/sw/bios/devices/interrupt.s +++ b/sw/bios/devices/interrupt.s @@ -6,12 +6,11 @@ ; ; Checks for a BRK instruction and returns from all valid interrupts. -.import _handle_irq -.import _cputc, _clrscr - .export _irq_int, _nmi_int -.include "io.inc65" + +IRQ_VECTOR = $220 +NMI_VECTOR = $222 .segment "CODE" @@ -20,81 +19,9 @@ ; --------------------------------------------------------------------------- ; Non-maskable interrupt (NMI) service routine -_nmi_int: RTI ; Return from all NMI interrupts +_nmi_int: jmp (NMI_VECTOR) ; --------------------------------------------------------------------------- ; Maskable interrupt (IRQ) service routine -_irq_int: PHX ; Save X register contents to stack - TSX ; Transfer stack pointer to X - PHA ; Save accumulator contents to stack - INX ; Increment X so it points to the status - INX ; register value saved on the stack - LDA $100,X ; Load status register contents - AND #$10 ; Isolate B status bit - BNE break ; If B = 1, BRK detected - -; --------------------------------------------------------------------------- -; IRQ detected, return - -irq: PLA ; Restore accumulator contents - PLX ; Restore X register contents - jsr _handle_irq ; Handle the IRQ - RTI ; Return from all IRQ interrupts - -; --------------------------------------------------------------------------- -; BRK detected, stop - -break: - pla - plx - jmp (bios_table,x) - - -bios_table: - .addr _console_clear - .addr _console_read_char - .addr _console_write_char - - -_console_clear: - jsr _clrscr - rti - -_console_read_char: - ; not supported - rti - -_console_write_char: - jsr _cputc - rti - - - -; What functions do we need? -; UART -; clear -; write character -; read character -; DISK -; init (or should it just init on boot?) -; read sector into memory -; FS -; init (if disk init succeeds, should it always try?) -; find add - -; I think that is all we need for now? -; How do we call the functions? - -; we have to call `brk` to trigger the interrupt -; in any of the three registers we can have arguments -; or we could have them pushed to the stack, assuming -; the stack is in the same location -; Or you could pass a pointer which points to an array -; of arguments - -; for things like clear, read/write character, and init you don't -; need any arguments. - -; jump table index needs to be in x, but also needs to be a multiple -; of 2. +_irq_int: jmp (IRQ_VECTOR) \ No newline at end of file diff --git a/sw/bios/irq.c b/sw/bios/irq.c deleted file mode 100644 index 9911f8d..0000000 --- a/sw/bios/irq.c +++ /dev/null @@ -1,11 +0,0 @@ - -#include -#include - -#include "devices/interrupt.h" -#include "devices/uart.h" - - - -void handle_irq() { -} \ No newline at end of file diff --git a/sw/kernel/devices/interrupt_controller.s b/sw/kernel/devices/interrupt_controller.s index a46c335..6441237 100644 --- a/sw/kernel/devices/interrupt_controller.s +++ b/sw/kernel/devices/interrupt_controller.s @@ -9,6 +9,8 @@ .export _disable_irq .export _send_eoi +.import irq_int, nmi_int + IRQ_CMD_ADDR = $effc IRQ_DAT_ADDR = $effd @@ -19,11 +21,24 @@ IRQ_CMD_ENABLE = $20 IRQ_CMD_TYPE = $40 IRQ_CMD_EOI = $ff +IRQ_VECTOR = $220 +NMI_VECTOR = $222 + .code ; void init_irq(); ; mask all IRQs, set all type to edge. .proc _init_interrupt_controller + lda #irq_int + sta IRQ_VECTOR+1 + + lda #nmi_int + sta NMI_VECTOR+1 + ldx #$20 ; enable ldy #00 jsr cmd_all diff --git a/sw/kernel/interrupts/interrupt.h b/sw/kernel/interrupts/interrupt.h index bce65d4..6aeadc2 100644 --- a/sw/kernel/interrupts/interrupt.h +++ b/sw/kernel/interrupts/interrupt.h @@ -6,9 +6,6 @@ #define BUTTON (1 << 0) #define UART (1 << 1) -void irq_int(); -void nmi_int(); - void register_irq(void* addr, uint8_t irqn); uint8_t irq_get_status(); diff --git a/sw/kernel/interrupts/interrupt.s b/sw/kernel/interrupts/interrupt.s index ac245cd..89e56ce 100644 --- a/sw/kernel/interrupts/interrupt.s +++ b/sw/kernel/interrupts/interrupt.s @@ -4,7 +4,7 @@ .import _enable_irq -.export _irq_int, _nmi_int +.export irq_int, nmi_int .export _register_irq IRQ_CMD_ADDR = $effc @@ -12,13 +12,14 @@ IRQ_DAT_ADDR = $effd IRQ_CMD_READIRQ = $00 -.proc _nmi_int + +.proc nmi_int rti .endproc -; _irq_int -.proc _irq_int +; irq_int +.proc irq_int ; Load IRQ number lda #IRQ_CMD_READIRQ sta IRQ_CMD_ADDR From b7b852ae4a9ea46dbc5d134f3389f3a072ce7595 Mon Sep 17 00:00:00 2001 From: Byron Lathi Date: Tue, 21 Nov 2023 20:04:06 -0800 Subject: [PATCH 07/10] Update irq test code --- hw/efinix_fpga/.gitignore | 1 + hw/efinix_fpga/init_hex.mem | 257 ----------------------- sw/test_code/devices_setup_test/Makefile | 6 +- sw/test_code/devices_setup_test/main.s | 6 +- 4 files changed, 7 insertions(+), 263 deletions(-) delete mode 100644 hw/efinix_fpga/init_hex.mem diff --git a/hw/efinix_fpga/.gitignore b/hw/efinix_fpga/.gitignore index ef0d6e8..849df8d 100644 --- a/hw/efinix_fpga/.gitignore +++ b/hw/efinix_fpga/.gitignore @@ -7,3 +7,4 @@ outflow *.gtkw *.vvp +.mem \ No newline at end of file diff --git a/hw/efinix_fpga/init_hex.mem b/hw/efinix_fpga/init_hex.mem deleted file mode 100644 index c926b37..0000000 --- a/hw/efinix_fpga/init_hex.mem +++ /dev/null @@ -1,257 +0,0 @@ -@00000000 -00 80 4C 00 00 8D 13 92 8E 14 92 8D 1A 92 8E 1B -92 88 B9 FF FF 8D 24 92 88 B9 FF FF 8D 23 92 8C -26 92 20 FF FF A0 FF D0 E8 60 00 00 21 FD 00 00 -00 00 A2 FF 9A D8 A9 00 85 04 A9 DF 85 05 20 99 -FD 20 0E FA 20 52 F0 58 20 47 F2 6C FC FF 20 02 -FA 00 A0 00 F0 07 A9 52 A2 F0 4C 05 92 60 AD FF -EF A2 00 60 8D FF EF 60 20 2E F2 C9 0A D0 05 A9 -0D 20 2E F2 60 DA 5A A8 B2 04 AA A9 1B 20 2E F2 -A9 5B 20 2E F2 98 20 2E F2 A9 3B 20 2E F2 8A 20 -2E F2 A9 48 20 2E F2 7A FA 60 DA A9 1B 20 2E F2 -A9 63 20 2E F2 68 60 6C 22 02 6C 20 02 48 A0 04 -B1 04 09 40 20 1E F2 88 B1 04 20 1E F2 88 10 F8 -68 09 01 20 1E F2 20 FE FA 60 A2 08 A9 FF 20 1E -F2 C9 FF D0 03 CA D0 F4 60 85 0C 86 0D 20 CA F0 -92 0C A9 FF 20 1E F2 A0 01 91 0C 20 EB FA 60 AA -20 75 FC A9 FF 20 1E F2 92 0C E6 0C D0 02 E6 0D -CA D0 F0 60 85 0C 86 0D 20 CA F0 C9 02 B0 12 E6 -0C D0 02 E6 0C A5 0C A6 0D 20 A2 FC A9 04 20 EF -F0 60 48 A9 FF 20 1E F2 A9 00 20 12 F2 A9 FF 20 -1E F2 68 20 AD F0 20 CA F0 A8 A9 FF 20 1E F2 A9 -00 20 18 F2 A9 FF 20 1E F2 98 A2 00 60 A9 00 20 -18 F2 20 6A F1 A9 FF 20 1E F2 A9 00 20 18 F2 A2 -50 A9 FF 20 1E F2 CA D0 F8 60 A2 01 A9 C8 3A D0 -FD CA D0 F8 60 85 0E 86 0F A9 FF 92 0E 20 75 FC -A5 04 85 10 A5 05 85 11 20 A6 FA A0 00 B1 10 91 -04 C8 B1 10 91 04 C8 B1 10 91 04 C8 B1 10 91 04 -A9 FF 20 1E F2 A9 00 20 12 F2 A9 FF 20 1E F2 A9 -11 A0 04 91 04 A9 00 20 AD F0 20 CA F0 C9 FF F0 -3F 85 16 A0 00 A9 FF 20 1E F2 85 15 A5 15 C9 FF -D0 05 C8 D0 F0 80 23 A2 02 A0 00 A9 FF 20 1E F2 -92 0C E6 0C D0 02 E6 0D 88 D0 F0 A0 00 CA D0 EB -A9 FF 20 1E F2 A9 FF 20 1E F2 A5 15 92 0E A5 16 -48 A9 FF 20 1E F2 A9 00 20 18 F2 A9 FF 20 1E F2 -68 60 A9 01 8D DB EF 60 9C DB EF 60 A9 00 8D DA -EF AD DB EF 30 FB AD D9 EF 60 8D E6 EF 60 48 8D -E6 EF AD E7 EF 89 02 D0 F9 68 60 AD E6 EF A2 00 -60 AD E7 EF A2 00 60 20 C9 FA A2 00 86 06 86 07 -A9 00 20 60 FB 20 AF FA A9 DB A2 FD 20 6F FA 20 -0F F3 C9 00 20 0D FC D0 03 4C 76 F2 A9 D4 A2 FD -20 6F FA 4C 03 F3 A9 CB A2 FD 20 6F FA A0 05 20 -1C FB 20 60 FB AD 00 92 AE 01 92 20 A2 FC A9 0C -20 2D FB 20 75 F1 A0 07 91 04 A0 07 A2 00 B1 04 -C9 00 20 13 FC D0 03 4C BA F2 A0 06 A2 00 B1 04 -C9 FE 20 13 FC F0 03 4C C3 F2 A2 00 A9 00 D0 03 -4C C7 F2 A2 00 A9 01 D0 03 4C CF F2 4C 00 F3 A0 -06 A2 00 B1 04 A2 00 29 F0 20 F4 F9 D0 03 4C EB -F2 A9 D4 A2 FD 20 6F FA 4C 00 F3 A9 BC A2 FD 20 -A2 FC A0 08 A2 00 B1 04 20 A2 FC A0 04 20 3B FA -6C 00 92 4C 06 F3 4C 06 F3 A0 0C 20 DA F9 60 20 -D6 FA A9 00 20 8C FC 20 4D F1 4C 46 F3 A0 00 A2 -00 18 A9 01 71 04 91 04 A0 00 A2 00 B1 04 C9 FF -20 13 FC D0 03 4C 46 F3 A9 FA A2 FD 20 6F FA A2 -00 A9 01 4C FC F3 20 00 F4 A0 01 91 04 C9 01 20 -0D FC D0 C9 A9 01 20 2D FB 20 1D F4 A0 01 A2 00 -B1 04 C9 01 20 0D FC D0 03 4C 7A F3 A9 F1 A2 FD -20 6F FA A2 00 A9 01 4C FC F3 A0 05 A2 00 B1 04 -C9 AA 20 0D FC D0 03 4C 91 F3 A2 00 A9 01 4C FC -F3 A2 00 A9 00 A0 00 91 04 A0 00 A2 00 B1 04 C9 -FF 20 13 FC D0 03 4C B7 F3 A9 E2 A2 FD 20 6F FA -A2 00 A9 01 4C FC F3 20 3F F5 A0 01 91 04 A0 01 -A2 00 B1 04 C9 02 20 2C FC D0 03 4C D5 F3 20 5C -F5 A0 01 91 04 A0 00 A2 00 18 A9 01 71 04 91 04 -A0 01 A2 00 B1 04 C9 00 20 0D FC D0 AC A9 01 20 -2D FB 20 C5 F4 A2 00 A9 00 4C FC F3 20 03 FB 60 -A2 00 A9 00 20 8C FC A2 00 86 06 86 07 A9 00 20 -60 FB A2 00 A9 94 20 22 F1 4C 1C F4 60 20 A2 FC -A2 00 A9 FF 20 1E F2 A2 00 A9 00 20 12 F2 A2 00 -A9 FF 20 1E F2 A2 00 A9 08 20 8C FC A2 01 A9 00 -85 06 A9 00 85 07 A9 AA 20 60 FB A2 00 A9 86 20 -AD F0 A0 01 20 13 FB 20 04 F1 A2 00 A9 FF 20 1E -F2 A2 00 A9 00 20 18 F2 A2 00 A9 FF 20 1E F2 20 -EB FA 60 20 A2 FC A2 00 A9 FF 20 1E F2 A2 00 A9 -00 20 12 F2 A2 00 A9 FF 20 1E F2 A2 00 A9 0D 20 -8C FC A2 00 86 06 86 07 A9 00 20 60 FB A2 00 A9 -00 20 AD F0 A0 01 20 13 FB 20 D9 F0 A2 00 A9 FF -20 1E F2 A2 00 A9 00 20 18 F2 A2 00 A9 FF 20 1E -F2 20 EB FA 60 20 A2 FC 20 A6 FA A2 00 A9 FF 20 -1E F2 A2 00 A9 00 20 12 F2 A2 00 A9 FF 20 1E F2 -A0 00 91 04 A0 00 A2 00 B1 04 C9 FF 20 0D FC D0 -03 4C 05 F5 4C F7 F4 A2 00 A9 FF 20 1E F2 C9 FF -20 0D FC D0 F2 A2 00 A9 3A 20 8C FC A2 00 86 06 -86 07 A9 00 20 60 FB A2 00 A9 00 20 AD F0 A0 02 -20 13 FB 20 04 F1 A2 00 A9 FF 20 1E F2 A2 00 A9 -00 20 18 F2 A2 00 A9 FF 20 1E F2 20 F9 FA 60 A2 -00 A9 37 20 8C FC A2 00 86 06 86 07 A9 00 20 60 -FB A2 00 A9 00 20 22 F1 4C 5B F5 60 A2 00 A9 29 -20 8C FC A2 00 86 06 A9 40 85 07 A9 00 20 60 FB -A2 00 A9 00 20 22 F1 4C 7A F5 60 20 A2 FC 20 C9 -FA A0 03 A2 00 B1 04 4C 8A F5 A0 0E 20 DA F9 60 -20 A2 FC A9 00 20 8C FC 20 AF FA A2 00 A9 00 A0 -00 20 BA FC A0 01 20 13 FB E0 02 20 2C FC F0 03 -4C B6 F5 4C 18 F6 A9 03 A2 FE 20 A2 FC A0 06 20 -13 FB A0 00 20 08 FB 20 A2 FC A0 07 A2 00 A9 01 -20 CA F9 A0 04 20 3B FA A0 02 A2 00 B1 04 C9 1F -20 13 FC D0 03 4C FA F5 A9 07 A2 FE 20 6F FA A2 -00 A9 00 A0 02 91 04 4C 0C F6 A2 00 A9 20 20 68 -F0 A0 02 A2 00 18 A9 01 71 04 91 04 A0 00 A2 00 -A9 01 20 CA F9 4C A4 F5 A9 07 A2 FE 20 6F FA 20 -FE FA 60 A0 00 B1 1A E6 1A D0 02 E6 1B 60 AD 4A -92 8D 45 92 20 CF F6 A9 45 A2 92 20 A2 FC 20 83 -FC 4C 02 92 A5 18 38 E9 02 85 18 B0 02 C6 19 60 -AD 4F 92 D0 11 20 6D F6 4C ED F9 AD 4F 92 D0 06 -20 6D F6 4C E7 F9 20 6D F6 85 06 86 07 20 44 F6 -A0 01 B1 18 AA 88 B1 18 60 A0 00 84 0C 84 0D B1 -1A 38 E9 30 90 2C C9 0A B0 28 20 27 F6 48 A5 0C -A6 0D 06 0C 26 0D 06 0C 26 0D 65 0C 85 0C 8A 65 -0D 85 0D 06 0C 26 0D 68 65 0C 85 0C 90 D1 E6 0D -B0 CD A5 0C A6 0D 60 AC 51 92 EE 51 92 99 52 92 -60 A9 52 A2 92 18 6D 51 92 90 01 E8 4C A2 FC A5 -1C A6 1D 4C A2 FC 20 2E F6 EE 4B 92 D0 F8 EE 4C -92 D0 F3 60 20 CF F6 AD 66 92 AE 67 92 20 A2 FC -AD 68 92 AE 69 92 20 A2 FC 4C 02 92 84 0C 20 60 -FB 20 C1 F6 A5 0C 4C 90 FB 84 0C 20 60 FB 20 C1 -F6 A5 0C 4C D1 FB 48 A0 05 B9 18 00 99 3F 92 88 -10 F7 68 85 18 86 19 20 E3 FA 85 1A 86 1B 20 E3 -FA 85 1C 86 1D A9 00 A8 91 1C C8 91 1C C8 B1 1C -8D 03 92 C8 B1 1C 8D 04 92 A5 1A 85 0C A5 1B 85 -0D A0 00 B1 1A F0 0B C9 25 F0 07 C8 D0 F5 E6 1B -D0 F1 98 18 65 1A 85 1A 90 02 E6 1B 38 E5 0C 85 -0E A5 1B E5 0D 85 0F 05 0E F0 25 20 C9 FA A0 05 -A5 1D 91 04 88 A5 1C 91 04 88 A5 0D 91 04 88 A5 -0C 91 04 88 A5 0F 91 04 88 A5 0E 91 04 20 02 92 -20 23 F6 AA D0 0B A2 05 BD 3F 92 95 18 CA 10 F8 -60 C9 25 D0 09 B1 1A C9 25 D0 09 20 27 F6 20 31 -F6 4C 49 F7 A9 00 A2 0B 9D 46 92 CA 10 FA B1 1A -C9 2D D0 05 8E 46 92 F0 19 C9 2B D0 05 8E 47 92 -F0 10 C9 20 D0 05 8E 48 92 F0 07 C9 23 D0 09 8E -49 92 20 27 F6 4C CE F7 A2 20 C9 30 D0 06 AA 20 -27 F6 B1 1A 8E 4A 92 C9 2A D0 09 20 27 F6 20 6D -F6 4C 17 F8 20 79 F6 8D 4B 92 8E 4C 92 8C 4D 92 -8C 4E 92 B1 1A C9 2E D0 1B 20 27 F6 B1 1A C9 2A -D0 09 20 27 F6 20 6D F6 4C 3E F8 20 79 F6 8D 4D -92 8E 4E 92 B1 1A C9 7A F0 19 C9 68 F0 15 C9 74 -F0 11 C9 6A F0 08 C9 4C F0 04 C9 6C D0 0B A9 FF -8D 4F 92 20 27 F6 4C 44 F8 8C 51 92 A2 52 8E 66 -92 A2 92 8E 67 92 20 27 F6 C9 63 D0 0E 20 6D F6 -8D 52 92 A9 00 8D 53 92 4C 68 F9 C9 64 F0 04 C9 -69 D0 2D A2 00 AD 48 92 F0 02 A2 20 AD 47 92 F0 -02 A2 2B 8E 50 92 20 5B F6 A4 07 30 0B AC 50 92 -F0 06 8C 52 92 EE 51 92 A0 0A 20 FC F6 4C 68 F9 -C9 6E D0 15 20 6D F6 85 0C 86 0D A0 00 B1 1C 91 -0C C8 B1 1C 91 0C 4C 49 F7 C9 6F D0 27 20 5B F6 -AC 49 92 F0 17 48 86 14 05 14 05 06 05 07 0D 4D -92 0D 4E 92 F0 06 A9 30 20 B7 F6 68 A0 08 20 FC -F6 4C 68 F9 C9 70 D0 0D A2 00 8E 4F 92 E8 8E 49 -92 A9 78 D0 27 C9 73 D0 0C 20 6D F6 8D 66 92 8E -67 92 4C 68 F9 C9 75 D0 0B 20 50 F6 A0 0A 20 09 -F7 4C 68 F9 C9 78 F0 04 C9 58 D0 29 48 AD 49 92 -F0 0A A9 30 20 B7 F6 A9 58 20 B7 F6 20 50 F6 A0 -10 20 09 F7 68 C9 78 D0 09 AD 66 92 AE 67 92 20 -FA FC 4C 68 F9 4C 49 F7 AD 66 92 AE 67 92 20 E4 -FC 8D 68 92 8E 69 92 AD 4D 92 0D 4E 92 F0 15 AE -4D 92 EC 68 92 AD 4E 92 A8 ED 69 92 B0 06 8E 68 -92 8C 69 92 38 AD 4B 92 ED 68 92 AA AD 4C 92 ED -69 92 B0 03 A9 00 AA 49 FF 8D 4C 92 8A 49 FF 8D -4B 92 AD 46 92 D0 03 20 D9 F6 20 E4 F6 AD 46 92 -F0 03 20 D9 F6 4C 49 F7 A0 00 18 71 04 91 04 48 -C8 8A 71 04 91 04 AA 68 60 C8 48 18 98 65 04 85 -04 90 02 E6 05 68 60 A0 FF E0 80 B0 02 A0 00 84 -06 84 07 60 E0 00 D0 06 AA D0 03 A9 01 60 A2 00 -8A 60 A0 00 F0 07 A9 52 A2 F0 4C 05 92 60 A9 00 -85 0C A9 F0 85 0D A9 00 85 0E A9 92 85 0F A2 CD -A9 FF 85 14 A0 00 E8 F0 0D B1 0C 91 0E C8 D0 F6 -E6 0D E6 0F D0 F0 E6 14 D0 EF 60 8C 6A 92 88 88 -98 18 65 04 85 0C A6 05 90 01 E8 86 0D A0 01 B1 -0C AA 88 B1 0C 20 A2 FC A5 0C A6 0D 20 69 FD AC -6A 92 4C DA F9 85 0C 86 0D 20 75 F0 4C 73 FA 85 -0C 86 0D A0 00 B1 0C F0 0E C8 84 14 20 68 F0 A4 -14 D0 F2 E6 0D D0 EE 60 E0 00 D0 15 4A AA BD 30 -FE 90 05 4A 4A 4A 4A 18 29 0F AA BD 25 FE A2 00 -60 38 A9 00 AA 60 A4 04 D0 02 C6 05 C6 04 60 A5 -04 38 E9 02 85 04 90 01 60 C6 05 60 A5 04 38 E9 -04 85 04 90 01 60 C6 05 60 A5 04 38 E9 06 85 04 -90 01 60 C6 05 60 A5 04 38 E9 07 85 04 90 01 60 -C6 05 60 A0 01 B1 04 AA 88 B1 04 E6 04 F0 05 E6 -04 F0 03 60 E6 04 E6 05 60 A0 03 4C DA F9 A0 05 -4C DA F9 A0 08 4C DA F9 85 0C 86 0D A2 00 B1 0C -60 A0 01 B1 04 AA 88 B1 04 60 A0 03 B1 04 85 07 -88 B1 04 85 06 88 B1 04 AA 88 B1 04 60 A2 00 18 -65 04 48 8A 65 05 AA 68 60 18 49 FF 69 01 48 8A -49 FF 69 00 AA A5 06 49 FF 69 00 85 06 A5 07 49 -FF 69 00 85 07 68 60 A9 00 AA A0 00 84 06 84 07 -48 20 BC FA A0 03 A5 07 91 04 88 A5 06 91 04 88 -8A 91 04 68 88 91 04 60 85 14 20 E3 FA 85 0E 86 -0F 85 10 86 11 20 75 FC 20 E3 FA 85 06 86 07 60 -20 78 FB A6 07 A4 14 C0 0A D0 39 A5 06 05 0D 05 -0C D0 11 E0 80 D0 0D A0 0B B9 19 FE 91 0E 88 10 -F8 4C 08 FC 8A 10 1D A9 2D A0 00 91 0E E6 0E D0 -02 E6 0F A5 0C A6 0D 20 39 FB 85 0C 86 0D 4C D4 -FB 20 78 FB A9 00 48 A0 20 A9 00 06 0C 26 0D 26 -06 26 07 2A C5 14 90 04 E5 14 E6 0C 88 D0 EC A8 -B9 09 FE 48 A5 0C 05 0D 05 06 05 07 D0 D9 A0 00 -68 91 0E F0 03 C8 D0 F8 A5 10 A6 11 60 D0 06 A2 -00 8A 60 D0 FA A2 00 A9 01 60 F0 F9 30 F7 A2 00 -8A 60 F0 02 10 EF A2 00 8A 60 F0 E9 90 E7 A2 00 -8A 60 F0 DB A2 00 8A 2A 60 20 62 FC A6 11 F0 13 -B1 0C 91 0E C8 B1 0C 91 0E C8 D0 F4 E6 0D E6 0F -CA D0 ED A6 10 F0 08 B1 0C 91 0E C8 CA D0 F8 4C -E3 FA 85 10 86 11 20 75 FC C8 B1 04 AA 86 0F 88 -B1 04 85 0E 60 A0 01 B1 04 85 0D 88 B1 04 85 0C -4C EB FA A9 01 4C A0 FC A0 00 B1 04 A4 04 F0 07 -C6 04 A0 00 91 04 60 C6 05 C6 04 91 04 60 A9 00 -A2 00 48 A5 04 38 E9 02 85 04 B0 02 C6 05 A0 01 -8A 91 04 68 88 91 04 60 A0 00 91 04 C8 48 8A 91 -04 68 60 85 0E 86 0F 20 75 FC B1 0C D1 0E D0 0C -AA F0 10 C8 D0 F4 E6 0D E6 0F D0 EE B0 03 A2 FF -60 A2 01 60 85 0E 86 0F A2 00 A0 00 B1 0E F0 08 -C8 D0 F9 E6 0F E8 D0 F4 98 60 85 0C 86 0D 85 0E -86 0F A0 00 B1 0C F0 14 20 8C FA 29 02 F0 06 B1 -0C 69 20 91 0C C8 D0 EC E6 0D D0 E8 A5 0E A6 0F -60 20 E3 FA 85 0E 86 0F E8 8E 31 92 AA E8 8E 30 -92 20 75 FC 20 E3 FA 85 10 86 11 A0 00 84 14 B1 -10 18 65 0E 91 10 C8 B1 10 65 0F 91 10 CE 30 92 -F0 11 A4 14 B1 0C C8 D0 02 E6 0D 84 14 20 68 F0 -4C 4D FD CE 31 92 D0 EA 60 85 0C 86 0D A9 00 8D -2A 92 8D 2B 92 A0 01 B1 04 AA 88 B1 04 20 A2 FC -A0 02 A9 2A 91 04 C8 A9 92 91 04 A5 0C A6 0D 20 -16 F7 AD 2A 92 AE 2B 92 60 A9 32 85 0C A9 92 85 -0D A9 00 A8 A2 00 F0 0A 91 0C C8 D0 FB E6 0D CA -D0 F6 C0 39 F0 05 91 0C C8 D0 F7 60 62 61 64 20 -74 6F 6B 65 6E 3A 20 25 78 0A 00 53 75 63 63 65 -73 73 0A 00 45 72 72 6F 72 0A 00 53 74 61 72 74 -0A 00 6F 70 5F 63 6F 6E 64 20 65 72 72 6F 72 0A -00 49 46 20 43 6F 6E 64 0A 00 47 6F 20 49 44 4C -45 0A 00 25 32 78 00 0A 00 30 31 32 33 34 35 36 -37 38 39 41 42 43 44 45 46 2D 32 31 34 37 34 38 -33 36 34 38 00 00 01 02 0C 09 0A 10 40 50 A0 D0 -66 66 66 66 A6 88 88 66 66 66 66 66 66 66 66 66 -09 00 00 00 00 00 00 00 33 33 33 33 33 00 00 00 -50 55 55 25 22 22 22 22 22 22 22 22 22 02 00 00 -40 44 44 14 11 11 11 11 11 11 11 11 11 01 00 70 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 A7 F0 32 F0 AA F0 diff --git a/sw/test_code/devices_setup_test/Makefile b/sw/test_code/devices_setup_test/Makefile index 2af39c8..6d86205 100644 --- a/sw/test_code/devices_setup_test/Makefile +++ b/sw/test_code/devices_setup_test/Makefile @@ -13,7 +13,7 @@ HEX=$(NAME).hex LISTS=lists KERNEL_SRCS=rtc.s interrupt_controller.s -KERNEL_OBJS=$(patsubst %.s,%.o,$(filter %s,$(KERNEL_SRCS))) +# KERNEL_OBJS=$(patsubst %.s,%.o,$(filter %s,$(KERNEL_SRCS))) SRCS=$(wildcard *.s) $(wildcard *.c) SRCS+=$(wildcard **/*.s) $(wildcard **/*.c) @@ -28,8 +28,8 @@ all: $(KERNEL_SRCS) $(HEX) $(HEX): $(BIN) objcopy --input-target=binary --output-target=verilog $(BIN) $(HEX) -$(BIN): $(OBJS) $(KERNEL_OBJS) - $(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) $(KERNEL_OBJS) -o $@ +$(BIN): $(OBJS) + $(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) -o $@ %.o: %.c $(LISTS) $(CC) $(CFLAGS) -l $(LISTS)/$<.list -c $< -o $@ diff --git a/sw/test_code/devices_setup_test/main.s b/sw/test_code/devices_setup_test/main.s index a380d19..74219b6 100644 --- a/sw/test_code/devices_setup_test/main.s +++ b/sw/test_code/devices_setup_test/main.s @@ -1,4 +1,4 @@ -.export _init, _nmi_int, _irq_int +.export _init, nmi_int, irq_int .autoimport @@ -11,8 +11,8 @@ finish: .res 1 .code -_nmi_int: -_irq_int: +nmi_int: +irq_int: lda #$6d sta $00 From 767742ab498d7a432fb61ef105a7688cff259338 Mon Sep 17 00:00:00 2001 From: Byron Lathi Date: Tue, 21 Nov 2023 20:14:04 -0800 Subject: [PATCH 08/10] Add init_hex.mem to artifacts for fpga build --- .gitlab-ci.yml | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e34f157..e1194ce 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -21,7 +21,8 @@ variables: stages: # List of stages for jobs, and their order of execution - toolchain - - build + - build_sw + - build_hw - simulate build toolchain: @@ -38,20 +39,13 @@ build toolchain: - sw/cc65/bin - sw/cc65/lib -build fpga: # This job runs in the build stage, which runs first. - tags: - - efinity - - linux - stage: build - script: - - source init_env.sh - - cd hw/efinix_fpga - - make - build bios: tags: - linux - stage: build + stage: build_sw + artifacts: + paths: + - hw/efinix_fpga/init_hex.mem script: - source init_env.sh - cd sw/ @@ -62,7 +56,7 @@ build bios: build kernel: tags: - linux - stage: build + stage: build_sw script: - source init_env.sh - cd sw/ @@ -70,6 +64,18 @@ build kernel: dependencies: - build toolchain +build fpga: # This job runs in the build stage, which runs first. + tags: + - efinity + - linux + stage: build_hw + dependencies: + - build bios + script: + - source init_env.sh + - cd hw/efinix_fpga + - make + full sim: when: manual From 0232d9c89f71c4b6c342e51f2d38d51a12d5ca8b Mon Sep 17 00:00:00 2001 From: Byron Lathi Date: Tue, 21 Nov 2023 20:20:25 -0800 Subject: [PATCH 09/10] Rename symbols again --- sw/test_code/devices_setup_test/vectors.s | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sw/test_code/devices_setup_test/vectors.s b/sw/test_code/devices_setup_test/vectors.s index 81ae6e0..73c2865 100644 --- a/sw/test_code/devices_setup_test/vectors.s +++ b/sw/test_code/devices_setup_test/vectors.s @@ -5,10 +5,10 @@ ; Defines the interrupt vector table. .import _init -.import _nmi_int, _irq_int +.import nmi_int, irq_int .segment "VECTORS" -.addr _nmi_int ; NMI vector +.addr nmi_int ; NMI vector .addr _init ; Reset vector -.addr _irq_int ; IRQ/BRK vector \ No newline at end of file +.addr irq_int ; IRQ/BRK vector \ No newline at end of file From 90e0708012b9574f1cef4f02e77851a0c9077009 Mon Sep 17 00:00:00 2001 From: Byron Lathi Date: Tue, 21 Nov 2023 20:29:21 -0800 Subject: [PATCH 10/10] update devices_setup_test makefile --- sw/test_code/devices_setup_test/Makefile | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/sw/test_code/devices_setup_test/Makefile b/sw/test_code/devices_setup_test/Makefile index 6d86205..8443644 100644 --- a/sw/test_code/devices_setup_test/Makefile +++ b/sw/test_code/devices_setup_test/Makefile @@ -5,25 +5,21 @@ LDFLAGS=-C link.ld -m $(NAME).map NAME=devices_setup_test -DEVICES=../../kernel/devices +DEVICES=$(REPO_TOP)/sw/kernel/devices BIN=$(NAME).bin HEX=$(NAME).hex LISTS=lists -KERNEL_SRCS=rtc.s interrupt_controller.s -# KERNEL_OBJS=$(patsubst %.s,%.o,$(filter %s,$(KERNEL_SRCS))) - -SRCS=$(wildcard *.s) $(wildcard *.c) +SRCS=$(wildcard *.s) $(wildcard *.c) +SRCS+=$(DEVICES)/rtc.s $(DEVICES)/interrupt_controller.s SRCS+=$(wildcard **/*.s) $(wildcard **/*.c) OBJS+=$(patsubst %.s,%.o,$(filter %s,$(SRCS))) OBJS+=$(patsubst %.c,%.o,$(filter %c,$(SRCS))) # Make sure the kernel linked to correct address, no relocation! -all: $(KERNEL_SRCS) $(HEX) - rm rtc.s - rm interrupt_controller.s +all: $(HEX) $(HEX): $(BIN) objcopy --input-target=binary --output-target=verilog $(BIN) $(HEX) @@ -40,15 +36,7 @@ $(BIN): $(OBJS) $(LISTS): mkdir -p $(addprefix $(LISTS)/,$(sort $(dir $(SRCS)))) -rtc.s: $(DEVICES)/rtc.s - cp $(DEVICES)/rtc.s . - -interrupt_controller.s: $(DEVICES)/interrupt_controller.s - cp $(DEVICES)/interrupt_controller.s . - .PHONY: clean clean: rm -rf $(OBJS) $(BIN) $(HEX) $(LISTS) $(NAME).map - rm -rf $(KERNEL_SRCS) - rm -rf $(KERNEL_OBJS)