diff options
Diffstat (limited to 'sw')
-rw-r--r-- | sw/programmer/linux/src/flash.c | 2 | ||||
-rw-r--r-- | sw/z80/TODO.txt | 1 | ||||
-rw-r--r-- | sw/z80/arch/addresses.h (renamed from sw/z80_tests/usart/devices.h) | 4 | ||||
-rw-r--r-- | sw/z80/coding_rules.txt | 120 | ||||
-rw-r--r-- | sw/z80/crt0.rel | 86 | ||||
-rw-r--r-- | sw/z80/drivers/build/ctc.asm (renamed from sw/z80_tests/usart/build/ctc.asm) | 0 | ||||
-rw-r--r-- | sw/z80/drivers/build/ctc.lst (renamed from sw/z80_tests/usart/build/ctc.lst) | 0 | ||||
-rw-r--r-- | sw/z80/drivers/build/ctc.rel (renamed from sw/z80_tests/usart/build/ctc.rel) | 0 | ||||
-rw-r--r-- | sw/z80/drivers/build/ctc.sym (renamed from sw/z80_tests/usart/build/ctc.sym) | 0 | ||||
-rw-r--r-- | sw/z80/drivers/build/pio.asm (renamed from sw/z80_tests/usart/build/pio.asm) | 40 | ||||
-rw-r--r-- | sw/z80/drivers/build/pio.lst | 234 | ||||
-rw-r--r-- | sw/z80/drivers/build/pio.rel (renamed from sw/z80_tests/usart/build/pio.rel) | 18 | ||||
-rw-r--r-- | sw/z80/drivers/build/pio.sym (renamed from sw/z80_tests/usart/build/pio.sym) | 5 | ||||
-rw-r--r-- | sw/z80/drivers/build/usart.asm (renamed from sw/z80_tests/usart/build/usart.asm) | 29 | ||||
-rw-r--r-- | sw/z80/drivers/build/usart.lst (renamed from sw/z80_tests/usart/build/usart.lst) | 85 | ||||
-rw-r--r-- | sw/z80/drivers/build/usart.rel (renamed from sw/z80_tests/usart/build/usart.rel) | 26 | ||||
-rw-r--r-- | sw/z80/drivers/build/usart.sym (renamed from sw/z80_tests/usart/build/usart.sym) | 2 | ||||
-rw-r--r-- | sw/z80/drivers/ctc.c (renamed from sw/z80/kernel/drivers/ctc.c) | 2 | ||||
-rw-r--r-- | sw/z80/drivers/include/ctc.h (renamed from sw/z80/kernel/include/drivers/ctc.h) | 0 | ||||
-rw-r--r-- | sw/z80/drivers/include/pio.h (renamed from sw/z80/kernel/include/drivers/pio.h) | 7 | ||||
-rw-r--r-- | sw/z80/drivers/include/usart.h (renamed from sw/z80/kernel/include/drivers/usart.h) | 9 | ||||
-rw-r--r-- | sw/z80/drivers/makefile | 22 | ||||
-rw-r--r-- | sw/z80/drivers/pio.c (renamed from sw/z80/kernel/drivers/pio.c) | 14 | ||||
-rw-r--r-- | sw/z80/drivers/usart.c (renamed from sw/z80/kernel/drivers/usart.c) | 2 | ||||
-rw-r--r-- | sw/z80/kernel/crt0.s (renamed from sw/z80/crt0.s) | 0 | ||||
-rw-r--r-- | sw/z80/kernel/makefile (renamed from sw/z80/makefile) | 18 | ||||
-rw-r--r-- | sw/z80/libc/include/stdint.h (renamed from sw/z80_tests/usart/types.h) | 14 | ||||
-rw-r--r-- | sw/z80/libc/include/stdlib.h | 7 | ||||
-rw-r--r-- | sw/z80/libc/include/types.h | 60 | ||||
-rw-r--r-- | sw/z80/tests/pio/build/crt0.rel (renamed from sw/z80_tests/usart/build/crt0.rel) | 0 | ||||
-rw-r--r-- | sw/z80/tests/pio/build/main.asm (renamed from sw/z80_tests/usart/build/main.asm) | 54 | ||||
-rw-r--r-- | sw/z80/tests/pio/build/main.lst (renamed from sw/z80_tests/usart/build/main.lst) | 78 | ||||
-rw-r--r-- | sw/z80/tests/pio/build/main.rel | 29 | ||||
-rw-r--r-- | sw/z80/tests/pio/build/main.sym (renamed from sw/z80_tests/usart/build/main.sym) | 9 | ||||
-rw-r--r-- | sw/z80/tests/pio/build/pio_test.lk (renamed from sw/z80_tests/usart/build/sample.lk) | 5 | ||||
-rw-r--r-- | sw/z80/tests/pio/build/pio_test.map (renamed from sw/z80_tests/usart/build/sample.map) | 57 | ||||
-rw-r--r-- | sw/z80/tests/pio/build/pio_test.noi (renamed from sw/z80_tests/usart/build/sample.noi) | 41 | ||||
-rw-r--r-- | sw/z80/tests/pio/crt0.s (renamed from sw/z80_tests/usart/crt0.s) | 0 | ||||
-rw-r--r-- | sw/z80/tests/pio/main.c | 12 | ||||
-rw-r--r-- | sw/z80/tests/pio/makefile (renamed from sw/z80_tests/usart/makefile) | 22 | ||||
-rw-r--r-- | sw/z80/tests/ram/build/crt0.rel (renamed from sw/z80_tests/ram/build/crt0.rel) | 17 | ||||
-rw-r--r-- | sw/z80/tests/ram/build/main.asm (renamed from sw/z80_tests/ram/build/main.asm) | 0 | ||||
-rw-r--r-- | sw/z80/tests/ram/build/main.lst (renamed from sw/z80_tests/ram/build/main.lst) | 0 | ||||
-rw-r--r-- | sw/z80/tests/ram/build/main.rel (renamed from sw/z80_tests/ram/build/main.rel) | 0 | ||||
-rw-r--r-- | sw/z80/tests/ram/build/main.sym (renamed from sw/z80_tests/ram/build/main.sym) | 0 | ||||
-rw-r--r-- | sw/z80/tests/ram/build/ram_test.lk | 11 | ||||
-rw-r--r-- | sw/z80/tests/ram/build/ram_test.map | 174 | ||||
-rw-r--r-- | sw/z80/tests/ram/build/ram_test.noi | 50 | ||||
-rw-r--r-- | sw/z80/tests/ram/build/test.lk (renamed from sw/z80_tests/ram/build/test.lk) | 0 | ||||
-rw-r--r-- | sw/z80/tests/ram/build/test.map (renamed from sw/z80_tests/ram/build/test.map) | 0 | ||||
-rw-r--r-- | sw/z80/tests/ram/build/test.noi (renamed from sw/z80_tests/ram/build/test.noi) | 0 | ||||
-rw-r--r-- | sw/z80/tests/ram/build/test.z80 (renamed from sw/z80_tests/ram/build/test.z80) | 0 | ||||
-rw-r--r-- | sw/z80/tests/ram/crt0.s (renamed from sw/z80_tests/ram/crt0.s) | 1 | ||||
-rw-r--r-- | sw/z80/tests/ram/main.c (renamed from sw/z80_tests/ram/main.c) | 0 | ||||
-rw-r--r-- | sw/z80/tests/ram/makefile (renamed from sw/z80_tests/ram/makefile) | 2 | ||||
-rw-r--r-- | sw/z80_tests/usart/build/main.rel | 41 | ||||
-rw-r--r-- | sw/z80_tests/usart/build/pio.lst | 194 | ||||
-rw-r--r-- | sw/z80_tests/usart/build/sample.z80 | 558 | ||||
-rw-r--r-- | sw/z80_tests/usart/main.c | 11 | ||||
l--------- | sw/z80_tests/usart/usart.c | 1 | ||||
l--------- | sw/z80_tests/usart/usart.h | 1 |
61 files changed, 907 insertions, 1268 deletions
diff --git a/sw/programmer/linux/src/flash.c b/sw/programmer/linux/src/flash.c index 6fcd09f..24d5269 100644 --- a/sw/programmer/linux/src/flash.c +++ b/sw/programmer/linux/src/flash.c @@ -32,7 +32,7 @@ int flash_write(const char *romfile, void (*log)(const char *)) log("[!] Error while reading from file\n"); break; } - + head.addr = (uint16_t) lseek(romfd, 0, SEEK_CUR); written = write(flash_serial_fd, &head, sizeof(struct flash_blk)); diff --git a/sw/z80/TODO.txt b/sw/z80/TODO.txt new file mode 100644 index 0000000..67be671 --- /dev/null +++ b/sw/z80/TODO.txt @@ -0,0 +1 @@ +- fix kernel makefile (currently broken) diff --git a/sw/z80_tests/usart/devices.h b/sw/z80/arch/addresses.h index a846f9b..07ab473 100644 --- a/sw/z80_tests/usart/devices.h +++ b/sw/z80/arch/addresses.h @@ -1,5 +1,5 @@ -#ifndef __DEVICES_H__ -#define __DEVICES_H__ +#ifndef __ADDRESSES_H__ +#define __ADDRESSES_H__ #define ADDR_DEV_ROM_L 0x0000 #define ADDR_DEV_ROM_H 0x2000 diff --git a/sw/z80/coding_rules.txt b/sw/z80/coding_rules.txt deleted file mode 100644 index e5c11f0..0000000 --- a/sw/z80/coding_rules.txt +++ /dev/null @@ -1,120 +0,0 @@ -CODING STYLE FOR THIS PROJECT -============================= - -In order to have a consistent codebase, there are the following rules on -writing code in C (and assembly). For the most part they are similar to the -Linux kernel coding rules by Torvalds. - -PROGRAM LOGIC -------------- -I expect a certain level of common sense from people so I won't mention the -super-basic stuff. But I would like to point out a few thing I WON'T accept -(unless there is a valid reason and an explanation of why). First, I believe -that code has to be aesthetically pleasing to watch and with a clear logic -flow so: - - - Avoid deeply nested code and recursive black magic - - - No special cases: generally the code of a function should behave the - same with any argument. Avoid horrible exceptions for magic values - - - No extreme modularization: do not write code that is extremely - encapsulated with dozens of helper functions to control every signal - that runs through the damn motherboard - -EDITOR (SPACES > TABS) ----------------------- -You can use your favourite editor but spaces are better than tabs, no -discussion. For this project every source file must have an indent of 4 -spaces. Since 80 characters is the standard terminal width, the code has to be -hard wrapped at 80, 78 or 72 characters. Also there shouldn't be any markup on -the source code for your editor, not even in the comments; just the code. - - - use spaces, 1 indent - 4 spaces - - hard wrap at 80 / 78 / 72 characters - - no markup for folds or any other editor specific feature - - -C CODE INDENT AND BRACES ------------------------- -I personally prefer the K&R coding style because it was used in 'The C -Programming Language' book from Dennis Ritchie which is the 'standard' for -learning C. But I also like Linus' kernel coding rules, so sometimes I might -use some of his rules. Anyway, you can look them up if you want to or just -look at the following example that sums most of the important stuff. - - - K&R braces and function prototypes - - snake_case for variables and function names - - pointer asterisk in front of the variable ( ex: int *p; ) - -Here's a short example that uses most of the stuff: - - #include <stdio.h> - #include <stdlib.h> - - #define MY_DEVICE_MEMORY_ADDR 0x5020 - - #define MY_DEVICE_FLAG_RDY 1 - #define MY_DEVICE_FLAG_ERR 2 - - // same for unions - struct my_device - { - volatile uint8_t buffer; - volatile uint8_t flags; - } *_my_dev = (struct my_device *) MY_DEVICE_MEMORY_ADDR; - - - int my_device_write(uint8_t *data, size_t size); - - /* This is the main function - * and this is a multiline comment to explain something if needed - */ - int main(int argc, char *argv[]) - { - int i; - int j = 0; - uint8_t data[2] = { 0xFF, 0xAB }; - const char *string = "My magic string"; - - while (j < 100) { - j++; - } - - printf("%s\n", string); - - if (some_condition) { - // inline comment - } else { - my_device_write(data, 2); - } - - switch (i) { - case 0: - some_function(); - break; - - case 1: - // ... - break; - - default: - // ... - } - } - - int my_device_write(uint8_t *data, size_t size) - { - int i; - - for (i = 0; i < size; i++) { - _my_dev.buffer = data; - while (!(_my_dev.flags & (1<<MY_DEVICE_FLAG_RDY))); - - if (_my_dev.flags & (1<<MY_DEVICE_FLAG_ERR)) { - return -1; - } - } - - return i; - } diff --git a/sw/z80/crt0.rel b/sw/z80/crt0.rel deleted file mode 100644 index 880fd57..0000000 --- a/sw/z80/crt0.rel +++ /dev/null @@ -1,86 +0,0 @@ -XL2 -H 14 areas 5 global symbols -M crt0 -S .__.ABS. Def0000 -S _kmain Ref0000 -A _CODE size A flags 0 addr 0 -S __clock Def0000 -S _exit Def0004 -A _HEADER size 0 flags 8 addr 0 -A _HEADER0 size 3 flags 8 addr 0 -A _HEADER1 size 2 flags 8 addr 8 -A _HEADER2 size 2 flags 8 addr 10 -A _HEADER3 size 2 flags 8 addr 18 -A _HEADER4 size 2 flags 8 addr 20 -A _HEADER5 size 2 flags 8 addr 28 -A _HEADER6 size 2 flags 8 addr 30 -A _HEADER7 size 2 flags 8 addr 38 -A _HEADER8 size C flags 8 addr 100 -A _HOME size 0 flags 0 addr 0 -A _INITIALIZER size 0 flags 0 addr 0 -A _GSINIT size 6 flags 0 addr 0 -S gsinit Def0000 -A _GSFINAL size 1 flags 0 addr 0 -A _DATA size 0 flags 0 addr 0 -A _INITIALIZED size 0 flags 0 addr 0 -A _BSEG size 0 flags 0 addr 0 -A _BSS size 0 flags 0 addr 0 -A _HEAP size 0 flags 0 addr 0 -T 00 00 -R 00 00 02 00 -T 00 00 C3 00 01 -R 00 00 02 00 00 03 0A 00 -T 08 00 -R 00 00 03 00 -T 08 00 ED 4D -R 00 00 03 00 -T 10 00 -R 00 00 04 00 -T 10 00 ED 4D -R 00 00 04 00 -T 18 00 -R 00 00 05 00 -T 18 00 ED 4D -R 00 00 05 00 -T 20 00 -R 00 00 06 00 -T 20 00 ED 4D -R 00 00 06 00 -T 28 00 -R 00 00 07 00 -T 28 00 ED 4D -R 00 00 07 00 -T 30 00 -R 00 00 08 00 -T 30 00 ED 4D -R 00 00 08 00 -T 38 00 -R 00 00 09 00 -T 38 00 ED 4D -R 00 00 09 00 -T 00 01 -R 00 00 0A 00 -T 00 01 -R 00 00 0A 00 -T 00 01 31 FF FF CD 00 00 CD 00 00 C3 04 00 -R 00 00 0A 00 00 06 0D 00 02 09 01 00 00 0C 00 00 -T 00 00 -R 00 00 00 00 -T 00 00 3E 02 CF C9 -R 00 00 00 00 -T 04 00 -R 00 00 00 00 -T 04 00 3E 00 CF -R 00 00 00 00 -T 07 00 -R 00 00 00 00 -T 07 00 76 18 FD -R 00 00 00 00 -T 00 00 -R 00 00 0D 00 -T 00 00 78 B1 28 02 ED B0 -R 00 00 0D 00 -T 06 00 -R 00 00 0D 00 -T 00 00 C9 -R 00 00 0E 00 diff --git a/sw/z80_tests/usart/build/ctc.asm b/sw/z80/drivers/build/ctc.asm index 838756a..838756a 100644 --- a/sw/z80_tests/usart/build/ctc.asm +++ b/sw/z80/drivers/build/ctc.asm diff --git a/sw/z80_tests/usart/build/ctc.lst b/sw/z80/drivers/build/ctc.lst index e758d8a..e758d8a 100644 --- a/sw/z80_tests/usart/build/ctc.lst +++ b/sw/z80/drivers/build/ctc.lst diff --git a/sw/z80_tests/usart/build/ctc.rel b/sw/z80/drivers/build/ctc.rel index 50a8b42..50a8b42 100644 --- a/sw/z80_tests/usart/build/ctc.rel +++ b/sw/z80/drivers/build/ctc.rel diff --git a/sw/z80_tests/usart/build/ctc.sym b/sw/z80/drivers/build/ctc.sym index 82ca00e..82ca00e 100644 --- a/sw/z80_tests/usart/build/ctc.sym +++ b/sw/z80/drivers/build/ctc.sym diff --git a/sw/z80_tests/usart/build/pio.asm b/sw/z80/drivers/build/pio.asm index ee1fcc6..3045492 100644 --- a/sw/z80_tests/usart/build/pio.asm +++ b/sw/z80/drivers/build/pio.asm @@ -13,6 +13,8 @@ .globl _pio_set_mode .globl _pio_set_interrupts .globl _pio_set_interrupts_mask + .globl _pio_read + .globl _pio_write ;-------------------------------------------------------- ; special function registers ;-------------------------------------------------------- @@ -185,6 +187,44 @@ _pio_set_interrupts_mask:: ld (hl),c ;pio.c:39: _pio_control(port, mask); ret +;pio.c:42: uint8_t pio_read(int port) +; --------------------------------- +; Function pio_read +; --------------------------------- +_pio_read:: +;pio.c:44: return *(pio_port + port); + ld hl,#2 + add hl,sp + ld iy,#_pio_port + ld a,0 (iy) + add a, (hl) + ld c,a + ld a,1 (iy) + inc hl + adc a, (hl) + ld b,a + ld a,(bc) + ld l,a + ret +;pio.c:47: void pio_write(int port, uint8_t data) +; --------------------------------- +; Function pio_write +; --------------------------------- +_pio_write:: +;pio.c:49: _pio_data(port, data); + ld hl, #4+0 + add hl, sp + ld c, (hl) + pop de + pop hl + push hl + push de +;pio.c:8: *(pio_port + port) = data; + ld de,(_pio_port) + add hl,de + ld (hl),c +;pio.c:49: _pio_data(port, data); + ret .area _CODE .area _INITIALIZER __xinit__pio_port: diff --git a/sw/z80/drivers/build/pio.lst b/sw/z80/drivers/build/pio.lst new file mode 100644 index 0000000..0b83616 --- /dev/null +++ b/sw/z80/drivers/build/pio.lst @@ -0,0 +1,234 @@ + 1 ;-------------------------------------------------------- + 2 ; File Created by SDCC : free open source ANSI-C Compiler + 3 ; Version 3.6.0 #9615 (Linux) + 4 ;-------------------------------------------------------- + 5 .module pio + 6 .optsdcc -mz80 + 7 + 8 ;-------------------------------------------------------- + 9 ; Public variables in this module + 10 ;-------------------------------------------------------- + 11 .globl __pio_data + 12 .globl __pio_control + 13 .globl _pio_set_mode + 14 .globl _pio_set_interrupts + 15 .globl _pio_set_interrupts_mask + 16 .globl _pio_read + 17 .globl _pio_write + 18 ;-------------------------------------------------------- + 19 ; special function registers + 20 ;-------------------------------------------------------- + 21 ;-------------------------------------------------------- + 22 ; ram data + 23 ;-------------------------------------------------------- + 24 .area _DATA + 25 ;-------------------------------------------------------- + 26 ; ram data + 27 ;-------------------------------------------------------- + 28 .area _INITIALIZED + 0000 29 _pio_port: + 0000 30 .ds 2 + 0002 31 _pio_ctrl: + 0002 32 .ds 2 + 33 ;-------------------------------------------------------- + 34 ; absolute external ram data + 35 ;-------------------------------------------------------- + 36 .area _DABS (ABS) + 37 ;-------------------------------------------------------- + 38 ; global & static initialisations + 39 ;-------------------------------------------------------- + 40 .area _HOME + 41 .area _GSINIT + 42 .area _GSFINAL + 43 .area _GSINIT + 44 ;-------------------------------------------------------- + 45 ; Home + 46 ;-------------------------------------------------------- + 47 .area _HOME + 48 .area _HOME + 49 ;-------------------------------------------------------- + 50 ; code + 51 ;-------------------------------------------------------- + 52 .area _CODE + 53 ;pio.c:6: inline void _pio_data(int port, uint8_t data) + 54 ; --------------------------------- + 55 ; Function _pio_data + 56 ; --------------------------------- + 0000 57 __pio_data:: + 58 ;pio.c:8: *(pio_port + port) = data; + 0000 21 02 00 [10] 59 ld hl,#2 + 0003 39 [11] 60 add hl,sp + 0004 FD 21r00r00 [14] 61 ld iy,#_pio_port + 0008 FD 7E 00 [19] 62 ld a,0 (iy) + 000B 86 [ 7] 63 add a, (hl) + 000C 4F [ 4] 64 ld c,a + 000D FD 7E 01 [19] 65 ld a,1 (iy) + 0010 23 [ 6] 66 inc hl + 0011 8E [ 7] 67 adc a, (hl) + 0012 47 [ 4] 68 ld b,a + 0013 21 04 00 [10] 69 ld hl, #4+0 + 0016 39 [11] 70 add hl, sp + 0017 7E [ 7] 71 ld a, (hl) + 0018 02 [ 7] 72 ld (bc),a + 0019 C9 [10] 73 ret + 74 ;pio.c:11: inline void _pio_control(int port, uint8_t cmd) + 75 ; --------------------------------- + 76 ; Function _pio_control + 77 ; --------------------------------- + 001A 78 __pio_control:: + 79 ;pio.c:13: *(pio_ctrl + port) = cmd; + 001A 21 02 00 [10] 80 ld hl,#2 + 001D 39 [11] 81 add hl,sp + 001E FD 21r02r00 [14] 82 ld iy,#_pio_ctrl + 0022 FD 7E 00 [19] 83 ld a,0 (iy) + 0025 86 [ 7] 84 add a, (hl) + 0026 4F [ 4] 85 ld c,a + 0027 FD 7E 01 [19] 86 ld a,1 (iy) + 002A 23 [ 6] 87 inc hl + 002B 8E [ 7] 88 adc a, (hl) + 002C 47 [ 4] 89 ld b,a + 002D 21 04 00 [10] 90 ld hl, #4+0 + 0030 39 [11] 91 add hl, sp + 0031 7E [ 7] 92 ld a, (hl) + 0032 02 [ 7] 93 ld (bc),a + 0033 C9 [10] 94 ret + 95 ;pio.c:16: void pio_set_mode(int port, int mode, uint8_t io) + 96 ; --------------------------------- + 97 ; Function pio_set_mode + 98 ; --------------------------------- + 0034 99 _pio_set_mode:: + 100 ;pio.c:19: _pio_control(port, ((mode << 6) | 0x0F)); + 0034 21 04 00 [10] 101 ld hl, #4+0 + 0037 39 [11] 102 add hl, sp + 0038 7E [ 7] 103 ld a, (hl) + 0039 0F [ 4] 104 rrca + 003A 0F [ 4] 105 rrca + 003B E6 C0 [ 7] 106 and a,#0xc0 + 003D F6 0F [ 7] 107 or a, #0x0f + 003F 4F [ 4] 108 ld c,a + 0040 D1 [10] 109 pop de + 0041 E1 [10] 110 pop hl + 0042 E5 [11] 111 push hl + 0043 D5 [11] 112 push de + 113 ;pio.c:13: *(pio_ctrl + port) = cmd; + 0044 FD 2Ar02r00 [20] 114 ld iy,(_pio_ctrl) + 0048 5D [ 4] 115 ld e, l + 0049 54 [ 4] 116 ld d, h + 004A FD 19 [15] 117 add iy, de + 004C FD 71 00 [19] 118 ld 0 (iy), c + 119 ;pio.c:23: if (mode == PIO_MODE_BIT_IO) { + 004F FD 21 04 00 [14] 120 ld iy,#4 + 0053 FD 39 [15] 121 add iy,sp + 0055 FD 7E 00 [19] 122 ld a,0 (iy) + 0058 D6 03 [ 7] 123 sub a, #0x03 + 005A C0 [11] 124 ret NZ + 005B FD 7E 01 [19] 125 ld a,1 (iy) + 005E B7 [ 4] 126 or a, a + 005F C0 [11] 127 ret NZ + 128 ;pio.c:24: _pio_control(port, io); + 0060 FD 21 06 00 [14] 129 ld iy,#6 + 0064 FD 39 [15] 130 add iy,sp + 0066 FD 4E 00 [19] 131 ld c,0 (iy) + 132 ;pio.c:13: *(pio_ctrl + port) = cmd; + 0069 ED 5Br02r00 [20] 133 ld de,(_pio_ctrl) + 006D 19 [11] 134 add hl,de + 006E 71 [ 7] 135 ld (hl),c + 136 ;pio.c:24: _pio_control(port, io); + 006F C9 [10] 137 ret + 138 ;pio.c:28: void pio_set_interrupts(int port, int control) + 139 ; --------------------------------- + 140 ; Function pio_set_interrupts + 141 ; --------------------------------- + 0070 142 _pio_set_interrupts:: + 143 ;pio.c:31: _pio_control(port, (control | 0x07)); + 0070 21 04 00 [10] 144 ld hl, #4+0 + 0073 39 [11] 145 add hl, sp + 0074 7E [ 7] 146 ld a, (hl) + 0075 F6 07 [ 7] 147 or a, #0x07 + 0077 4F [ 4] 148 ld c,a + 0078 D1 [10] 149 pop de + 0079 E1 [10] 150 pop hl + 007A E5 [11] 151 push hl + 007B D5 [11] 152 push de + 153 ;pio.c:13: *(pio_ctrl + port) = cmd; + 007C ED 5Br02r00 [20] 154 ld de,(_pio_ctrl) + 0080 19 [11] 155 add hl,de + 0081 71 [ 7] 156 ld (hl),c + 157 ;pio.c:31: _pio_control(port, (control | 0x07)); + 0082 C9 [10] 158 ret + 159 ;pio.c:34: void pio_set_interrupts_mask(int port, int control, uint8_t mask) + 160 ; --------------------------------- + 161 ; Function pio_set_interrupts_mask + 162 ; --------------------------------- + 0083 163 _pio_set_interrupts_mask:: + 164 ;pio.c:38: _pio_control(port, (control | 0x17)); + 0083 21 04 00 [10] 165 ld hl, #4+0 + 0086 39 [11] 166 add hl, sp + 0087 7E [ 7] 167 ld a, (hl) + 0088 F6 17 [ 7] 168 or a, #0x17 + 008A 4F [ 4] 169 ld c,a + 008B D1 [10] 170 pop de + 008C E1 [10] 171 pop hl + 008D E5 [11] 172 push hl + 008E D5 [11] 173 push de + 174 ;pio.c:13: *(pio_ctrl + port) = cmd; + 008F FD 2Ar02r00 [20] 175 ld iy,(_pio_ctrl) + 0093 5D [ 4] 176 ld e, l + 0094 54 [ 4] 177 ld d, h + 0095 FD 19 [15] 178 add iy, de + 0097 FD 71 00 [19] 179 ld 0 (iy), c + 180 ;pio.c:39: _pio_control(port, mask); + 009A FD 21 06 00 [14] 181 ld iy,#6 + 009E FD 39 [15] 182 add iy,sp + 00A0 FD 4E 00 [19] 183 ld c,0 (iy) + 184 ;pio.c:13: *(pio_ctrl + port) = cmd; + 00A3 ED 5Br02r00 [20] 185 ld de,(_pio_ctrl) + 00A7 19 [11] 186 add hl,de + 00A8 71 [ 7] 187 ld (hl),c + 188 ;pio.c:39: _pio_control(port, mask); + 00A9 C9 [10] 189 ret + 190 ;pio.c:42: uint8_t pio_read(int port) + 191 ; --------------------------------- + 192 ; Function pio_read + 193 ; --------------------------------- + 00AA 194 _pio_read:: + 195 ;pio.c:44: return *(pio_port + port); + 00AA 21 02 00 [10] 196 ld hl,#2 + 00AD 39 [11] 197 add hl,sp + 00AE FD 21r00r00 [14] 198 ld iy,#_pio_port + 00B2 FD 7E 00 [19] 199 ld a,0 (iy) + 00B5 86 [ 7] 200 add a, (hl) + 00B6 4F [ 4] 201 ld c,a + 00B7 FD 7E 01 [19] 202 ld a,1 (iy) + 00BA 23 [ 6] 203 inc hl + 00BB 8E [ 7] 204 adc a, (hl) + 00BC 47 [ 4] 205 ld b,a + 00BD 0A [ 7] 206 ld a,(bc) + 00BE 6F [ 4] 207 ld l,a + 00BF C9 [10] 208 ret + 209 ;pio.c:47: void pio_write(int port, uint8_t data) + 210 ; --------------------------------- + 211 ; Function pio_write + 212 ; --------------------------------- + 00C0 213 _pio_write:: + 214 ;pio.c:49: _pio_data(port, data); + 00C0 21 04 00 [10] 215 ld hl, #4+0 + 00C3 39 [11] 216 add hl, sp + 00C4 4E [ 7] 217 ld c, (hl) + 00C5 D1 [10] 218 pop de + 00C6 E1 [10] 219 pop hl + 00C7 E5 [11] 220 push hl + 00C8 D5 [11] 221 push de + 222 ;pio.c:8: *(pio_port + port) = data; + 00C9 ED 5Br00r00 [20] 223 ld de,(_pio_port) + 00CD 19 [11] 224 add hl,de + 00CE 71 [ 7] 225 ld (hl),c + 226 ;pio.c:49: _pio_data(port, data); + 00CF C9 [10] 227 ret + 228 .area _CODE + 229 .area _INITIALIZER + 0000 230 __xinit__pio_port: + 0000 00 42 231 .dw #0x4200 + 0002 232 __xinit__pio_ctrl: + 0002 02 42 233 .dw #0x4202 + 234 .area _CABS (ABS) diff --git a/sw/z80_tests/usart/build/pio.rel b/sw/z80/drivers/build/pio.rel index 90210a9..d9b1ac3 100644 --- a/sw/z80_tests/usart/build/pio.rel +++ b/sw/z80/drivers/build/pio.rel @@ -1,13 +1,15 @@ XL2 -H 9 areas 6 global symbols +H 9 areas 8 global symbols M pio O -mz80 S .__.ABS. Def0000 -A _CODE size AA flags 0 addr 0 +A _CODE size D0 flags 0 addr 0 S _pio_set_interrupts Def0070 S _pio_set_mode Def0034 S _pio_set_interrupts_mask Def0083 +S _pio_read Def00AA S __pio_control Def001A +S _pio_write Def00C0 S __pio_data Def0000 A _DATA size 0 flags 0 addr 0 A _INITIALIZED size 4 flags 0 addr 0 @@ -63,6 +65,18 @@ T 91 00 02 00 5D 54 FD 19 FD 71 00 FD 21 06 00 FD R 00 00 00 00 00 02 02 00 T 9F 00 39 FD 4E 00 ED 5B 02 00 19 71 C9 R 00 00 00 00 00 08 02 00 +T AA 00 +R 00 00 00 00 +T AA 00 21 02 00 39 FD 21 00 00 FD 7E 00 86 4F FD +R 00 00 00 00 00 08 02 00 +T B8 00 7E 01 23 8E 47 0A 6F C9 +R 00 00 00 00 +T C0 00 +R 00 00 00 00 +T C0 00 21 04 00 39 4E D1 E1 E5 D5 ED 5B 00 00 19 +R 00 00 00 00 00 0D 02 00 +T CE 00 71 C9 +R 00 00 00 00 T 00 00 R 00 00 07 00 T 00 00 00 42 diff --git a/sw/z80_tests/usart/build/pio.sym b/sw/z80/drivers/build/pio.sym index 3cf582f..52f787c 100644 --- a/sw/z80_tests/usart/build/pio.sym +++ b/sw/z80/drivers/build/pio.sym @@ -13,17 +13,18 @@ Symbol Table 7 __xinit__pio_port 0000 R 2 _pio_ctrl 0002 R 2 _pio_port 0000 R + 0 _pio_read 00AA GR 0 _pio_set_interrupts 0070 GR 0 _pio_set_interrupts_mask 0083 GR 0 _pio_set_mode 0034 GR - + 0 _pio_write 00C0 GR ASxxxx Assembler V02.00 + NoICE + SDCC mods (Zilog Z80 / Hitachi HD64180), page 2. Hexadecimal [16-Bits] Area Table - 0 _CODE size AA flags 0 + 0 _CODE size D0 flags 0 1 _DATA size 0 flags 0 2 _INITIALIZED size 4 flags 0 3 _DABS size 0 flags 8 diff --git a/sw/z80_tests/usart/build/usart.asm b/sw/z80/drivers/build/usart.asm index 58d6fdf..fb65d62 100644 --- a/sw/z80_tests/usart/build/usart.asm +++ b/sw/z80/drivers/build/usart.asm @@ -366,14 +366,14 @@ _usart_read:: ld sp,hl ;usart.c:77: uint8_t *bp = buffer; ld a,4 (ix) - ld -6 (ix),a + ld -4 (ix),a ld a,5 (ix) - ld -5 (ix),a + ld -3 (ix),a ;usart.c:80: while (count--) { ld c,6 (ix) ld b,7 (ix) - ld -4 (ix),#0x00 - ld -3 (ix),#0x00 + ld hl,#0x0000 + ex (sp), hl 00105$: ld e, c ld d, b @@ -384,12 +384,12 @@ _usart_read:: ;usart.c:81: *(bp++) = _usart->buffer; ld hl,(__usart) ld e,(hl) - pop hl - push hl + ld l,-4 (ix) + ld h,-3 (ix) ld (hl),e - inc -6 (ix) + inc -4 (ix) jr NZ,00123$ - inc -5 (ix) + inc -3 (ix) 00123$: ld de,(__usart) ;usart.c:83: if (_usart->LSR.framing_error || _usart->LSR.parity_error) { @@ -414,23 +414,22 @@ _usart_read:: jr Z,00102$ 00101$: ;usart.c:84: bp--; // delete last byte (?) - pop hl - push hl + ld l,-4 (ix) + ld h,-3 (ix) dec hl - ex (sp), hl + ld -4 (ix),l + ld -3 (ix),h jr 00105$ 00102$: ;usart.c:86: read_count++; - inc -4 (ix) + inc -6 (ix) jr NZ,00105$ - inc -3 (ix) + inc -5 (ix) jr 00105$ 00107$: ;usart.c:90: return read_count; - pop bc pop hl push hl - push bc ld sp, ix pop ix ret diff --git a/sw/z80_tests/usart/build/usart.lst b/sw/z80/drivers/build/usart.lst index 7706cff..65365fe 100644 --- a/sw/z80_tests/usart/build/usart.lst +++ b/sw/z80/drivers/build/usart.lst @@ -366,30 +366,30 @@ 01A4 F9 [ 6] 366 ld sp,hl 367 ;usart.c:77: uint8_t *bp = buffer; 01A5 DD 7E 04 [19] 368 ld a,4 (ix) - 01A8 DD 77 FA [19] 369 ld -6 (ix),a + 01A8 DD 77 FC [19] 369 ld -4 (ix),a 01AB DD 7E 05 [19] 370 ld a,5 (ix) - 01AE DD 77 FB [19] 371 ld -5 (ix),a + 01AE DD 77 FD [19] 371 ld -3 (ix),a 372 ;usart.c:80: while (count--) { 01B1 DD 4E 06 [19] 373 ld c,6 (ix) 01B4 DD 46 07 [19] 374 ld b,7 (ix) - 01B7 DD 36 FC 00 [19] 375 ld -4 (ix),#0x00 - 01BB DD 36 FD 00 [19] 376 ld -3 (ix),#0x00 - 01BF 377 00105$: - 01BF 59 [ 4] 378 ld e, c - 01C0 50 [ 4] 379 ld d, b - 01C1 0B [ 6] 380 dec bc - 01C2 7A [ 4] 381 ld a,d - 01C3 B3 [ 4] 382 or a,e - 01C4 28 48 [12] 383 jr Z,00107$ + 01B7 21 00 00 [10] 375 ld hl,#0x0000 + 01BA E3 [19] 376 ex (sp), hl + 01BB 377 00105$: + 01BB 59 [ 4] 378 ld e, c + 01BC 50 [ 4] 379 ld d, b + 01BD 0B [ 6] 380 dec bc + 01BE 7A [ 4] 381 ld a,d + 01BF B3 [ 4] 382 or a,e + 01C0 28 55 [12] 383 jr Z,00107$ 384 ;usart.c:81: *(bp++) = _usart->buffer; - 01C6 2Ar00r00 [16] 385 ld hl,(__usart) - 01C9 5E [ 7] 386 ld e,(hl) - 01CA E1 [10] 387 pop hl - 01CB E5 [11] 388 push hl + 01C2 2Ar00r00 [16] 385 ld hl,(__usart) + 01C5 5E [ 7] 386 ld e,(hl) + 01C6 DD 6E FC [19] 387 ld l,-4 (ix) + 01C9 DD 66 FD [19] 388 ld h,-3 (ix) 01CC 73 [ 7] 389 ld (hl),e - 01CD DD 34 FA [23] 390 inc -6 (ix) + 01CD DD 34 FC [23] 390 inc -4 (ix) 01D0 20 03 [12] 391 jr NZ,00123$ - 01D2 DD 34 FB [23] 392 inc -5 (ix) + 01D2 DD 34 FD [23] 392 inc -3 (ix) 01D5 393 00123$: 01D5 ED 5Br00r00 [20] 394 ld de,(__usart) 395 ;usart.c:83: if (_usart->LSR.framing_error || _usart->LSR.parity_error) { @@ -411,31 +411,30 @@ 01F8 0F [ 4] 411 rrca 01F9 0F [ 4] 412 rrca 01FA E6 01 [ 7] 413 and a,#0x01 - 01FC 28 06 [12] 414 jr Z,00102$ + 01FC 28 0F [12] 414 jr Z,00102$ 01FE 415 00101$: 416 ;usart.c:84: bp--; // delete last byte (?) - 01FE E1 [10] 417 pop hl - 01FF E5 [11] 418 push hl - 0200 2B [ 6] 419 dec hl - 0201 E3 [19] 420 ex (sp), hl - 0202 18 BB [12] 421 jr 00105$ - 0204 422 00102$: - 423 ;usart.c:86: read_count++; - 0204 DD 34 FC [23] 424 inc -4 (ix) - 0207 20 B6 [12] 425 jr NZ,00105$ - 0209 DD 34 FD [23] 426 inc -3 (ix) - 020C 18 B1 [12] 427 jr 00105$ - 020E 428 00107$: - 429 ;usart.c:90: return read_count; - 020E C1 [10] 430 pop bc - 020F E1 [10] 431 pop hl - 0210 E5 [11] 432 push hl - 0211 C5 [11] 433 push bc - 0212 DD F9 [10] 434 ld sp, ix - 0214 DD E1 [14] 435 pop ix - 0216 C9 [10] 436 ret - 437 .area _CODE - 438 .area _INITIALIZER - 0000 439 __xinit___usart: - 0000 00 40 440 .dw #0x4000 - 441 .area _CABS (ABS) + 01FE DD 6E FC [19] 417 ld l,-4 (ix) + 0201 DD 66 FD [19] 418 ld h,-3 (ix) + 0204 2B [ 6] 419 dec hl + 0205 DD 75 FC [19] 420 ld -4 (ix),l + 0208 DD 74 FD [19] 421 ld -3 (ix),h + 020B 18 AE [12] 422 jr 00105$ + 020D 423 00102$: + 424 ;usart.c:86: read_count++; + 020D DD 34 FA [23] 425 inc -6 (ix) + 0210 20 A9 [12] 426 jr NZ,00105$ + 0212 DD 34 FB [23] 427 inc -5 (ix) + 0215 18 A4 [12] 428 jr 00105$ + 0217 429 00107$: + 430 ;usart.c:90: return read_count; + 0217 E1 [10] 431 pop hl + 0218 E5 [11] 432 push hl + 0219 DD F9 [10] 433 ld sp, ix + 021B DD E1 [14] 434 pop ix + 021D C9 [10] 435 ret + 436 .area _CODE + 437 .area _INITIALIZER + 0000 438 __xinit___usart: + 0000 00 40 439 .dw #0x4000 + 440 .area _CABS (ABS) diff --git a/sw/z80_tests/usart/build/usart.rel b/sw/z80/drivers/build/usart.rel index 480c037..29ad600 100644 --- a/sw/z80_tests/usart/build/usart.rel +++ b/sw/z80/drivers/build/usart.rel @@ -3,7 +3,7 @@ H 9 areas B global symbols M usart O -mz80 S .__.ABS. Def0000 -A _CODE size 217 flags 0 addr 0 +A _CODE size 21E flags 0 addr 0 S _usart_read Def0198 S _usart_set_autoflow Def00CE S _usart_word_length Def00B5 @@ -146,15 +146,15 @@ T 98 01 R 00 00 00 00 T 98 01 DD E5 DD 21 00 00 DD 39 21 FA FF 39 F9 DD R 00 00 00 00 -T A6 01 7E 04 DD 77 FA DD 7E 05 DD 77 FB DD 4E 06 +T A6 01 7E 04 DD 77 FC DD 7E 05 DD 77 FD DD 4E 06 R 00 00 00 00 -T B4 01 DD 46 07 DD 36 FC 00 DD 36 FD 00 +T B4 01 DD 46 07 21 00 00 E3 R 00 00 00 00 -T BF 01 +T BB 01 R 00 00 00 00 -T BF 01 59 50 0B 7A B3 28 48 2A 00 00 5E E1 E5 73 +T BB 01 59 50 0B 7A B3 28 55 2A 00 00 5E DD 6E FC R 00 00 00 00 00 0A 02 00 -T CD 01 DD 34 FA 20 03 DD 34 FB +T C9 01 DD 66 FD 73 DD 34 FC 20 03 DD 34 FD R 00 00 00 00 T D5 01 R 00 00 00 00 @@ -162,19 +162,21 @@ T D5 01 ED 5B 00 00 21 0D 00 19 DD 75 FE DD 74 FF R 00 00 00 00 00 04 02 00 T E3 01 DD 6E FE DD 66 FF 7E 0F 0F 0F E6 01 20 0D R 00 00 00 00 -T F1 01 DD 6E FE DD 66 FF 7E 0F 0F E6 01 28 06 +T F1 01 DD 6E FE DD 66 FF 7E 0F 0F E6 01 28 0F R 00 00 00 00 T FE 01 R 00 00 00 00 -T FE 01 E1 E5 2B E3 18 BB +T FE 01 DD 6E FC DD 66 FD 2B DD 75 FC DD 74 FD 18 R 00 00 00 00 -T 04 02 +T 0C 02 AE R 00 00 00 00 -T 04 02 DD 34 FC 20 B6 DD 34 FD 18 B1 +T 0D 02 R 00 00 00 00 -T 0E 02 +T 0D 02 DD 34 FA 20 A9 DD 34 FB 18 A4 R 00 00 00 00 -T 0E 02 C1 E1 E5 C5 DD F9 DD E1 C9 +T 17 02 +R 00 00 00 00 +T 17 02 E1 E5 DD F9 DD E1 C9 R 00 00 00 00 T 00 00 R 00 00 07 00 diff --git a/sw/z80_tests/usart/build/usart.sym b/sw/z80/drivers/build/usart.sym index a6e3c38..71004e3 100644 --- a/sw/z80_tests/usart/build/usart.sym +++ b/sw/z80/drivers/build/usart.sym @@ -26,7 +26,7 @@ Hexadecimal [16-Bits] Area Table - 0 _CODE size 217 flags 0 + 0 _CODE size 21E flags 0 1 _DATA size 0 flags 0 2 _INITIALIZED size 2 flags 0 3 _DABS size 0 flags 8 diff --git a/sw/z80/kernel/drivers/ctc.c b/sw/z80/drivers/ctc.c index 841202a..5ac4254 100644 --- a/sw/z80/kernel/drivers/ctc.c +++ b/sw/z80/drivers/ctc.c @@ -1,4 +1,4 @@ -#include "drivers/ctc.h" +#include "ctc.h" void ctc_control() { diff --git a/sw/z80/kernel/include/drivers/ctc.h b/sw/z80/drivers/include/ctc.h index 80e8b4b..80e8b4b 100644 --- a/sw/z80/kernel/include/drivers/ctc.h +++ b/sw/z80/drivers/include/ctc.h diff --git a/sw/z80/kernel/include/drivers/pio.h b/sw/z80/drivers/include/pio.h index 0df2ed0..e91029c 100644 --- a/sw/z80/kernel/include/drivers/pio.h +++ b/sw/z80/drivers/include/pio.h @@ -1,8 +1,8 @@ #ifndef __PIO_H__ #define __PIO_H__ -#include "devices.h" -#include "types.h" +#include "addresses.h" +#include <stdint.h> #define PIO_A 0 #define PIO_B 1 @@ -20,6 +20,7 @@ inline void _pio_data(int port, uint8_t data); inline void _pio_control(int port, uint8_t cmd); +/* the last argument is needed only for IO mode */ void pio_set_mode(int port, int mode, uint8_t io); void pio_set_interrupts(int port, int control); @@ -34,4 +35,4 @@ inline void pio_write_pin(int port, uint8_t pin); // TODO: implement mode (in/out/both) and interrupt vector -#endif // __PIO_H__ +#endif /* __PIO_H__ */ diff --git a/sw/z80/kernel/include/drivers/usart.h b/sw/z80/drivers/include/usart.h index b85ee3e..bb06aab 100644 --- a/sw/z80/kernel/include/drivers/usart.h +++ b/sw/z80/drivers/include/usart.h @@ -1,10 +1,10 @@ #ifndef __USART_H__ #define __USART_H__ -#include "types.h" -#include "devices.h" +#include "addresses.h" -#include "string.h" +#include <stdint.h> +#include <string.h> // baudrate clock divisors // values from TL16C550C datasheet (table 9 for 1.8432 MHz crystal) @@ -48,6 +48,9 @@ #define USART_AUTOFLOW_CTS 2 #define USART_AUTOFLOW_OFF 0 +typedef unsigned int uint; +typedef uint8_t register_t; + /* stuctures for usart registers */ struct IER { diff --git a/sw/z80/drivers/makefile b/sw/z80/drivers/makefile new file mode 100644 index 0000000..5d6d8ee --- /dev/null +++ b/sw/z80/drivers/makefile @@ -0,0 +1,22 @@ +# Drivers library + +LIB := build/drivers.a +SOURCES := $(wildcard *.c) +OBJECTS := $(patsubst %.c,build/%.rel,$(SOURCES)) + +CC := sdcc +AR := sdar +CFLAGS := -mz80 -Iinclude -I../arch -DDEBUG + +.PHONY: dirs clean +$(LIB): $(OBJECTS) + $(AR) rcs $@ $(OBJECTS) + +$(OBJECTS): build/%.rel: %.c $(SOURCES) dirs + $(CC) $(CFLAGS) -c $< -o $@ + +dirs: + mkdir -p build + +clean: + - rm -rd build/* diff --git a/sw/z80/kernel/drivers/pio.c b/sw/z80/drivers/pio.c index 4321fb8..bdbe1c3 100644 --- a/sw/z80/kernel/drivers/pio.c +++ b/sw/z80/drivers/pio.c @@ -1,4 +1,4 @@ -#include "drivers/pio.h" +#include "pio.h" static uint8_t *pio_port = (uint8_t *) ADDR_DEV_PIO; static uint8_t *pio_ctrl = (uint8_t *) (ADDR_DEV_PIO + 2); @@ -34,7 +34,17 @@ void pio_set_interrupts(int port, int control) void pio_set_interrupts_mask(int port, int control, uint8_t mask) { // 0x17 is a control sequence to set interrupts - // and to interpret the next byte as a mask + // AND interpret the next byte as a bitmask _pio_control(port, (control | 0x17)); _pio_control(port, mask); } + +uint8_t pio_read(int port) +{ + return *(pio_port + port); +} + +void pio_write(int port, uint8_t data) +{ + _pio_data(port, data); +} diff --git a/sw/z80/kernel/drivers/usart.c b/sw/z80/drivers/usart.c index c54fe37..9ec6dbd 100644 --- a/sw/z80/kernel/drivers/usart.c +++ b/sw/z80/drivers/usart.c @@ -1,4 +1,4 @@ -#include "drivers/usart.h" +#include "usart.h" static struct _usart_device *_usart = (struct _usart_device *) ADDR_DEV_USART; diff --git a/sw/z80/crt0.s b/sw/z80/kernel/crt0.s index 00c7da1..00c7da1 100644 --- a/sw/z80/crt0.s +++ b/sw/z80/kernel/crt0.s diff --git a/sw/z80/makefile b/sw/z80/kernel/makefile index 5ab7e93..be8eed4 100644 --- a/sw/z80/makefile +++ b/sw/z80/kernel/makefile @@ -3,9 +3,8 @@ # OSNAME := helvetiOS -CSOURCES := $(wildcard kernel/*.c) \ - $(wildcard kernel/drivers/*.c) \ - $(wildcard libc/*.c) +CSOURCES := $(wildcard *.c) \ + $(wildcard drivers/*.c) OBJECTS := $(patsubst %.c,build/%.rel,$(CSOURCES)) HEXFILE := build/$(OSNAME).hex @@ -17,13 +16,13 @@ BINARY := build/$(OSNAME).bin CC := sdcc CFLAGS := -mz80 \ - -I kernel/include \ - -I kernel/include/drivers \ + -I include \ + -I include/drivers \ -I libc/include \ --opt-code-size \ -DDEBUG -LDFLAGS := -mz80 --no-std-crt0 crt0.rel \ +LDFLAGS := -mz80 --no-std-crt0 build/crt0.rel \ --std-c89 -pedantic \ --code-loc 0x0800 --data-loc 0x8000 @@ -33,21 +32,20 @@ all: $(BINARY) # build binary $(BINARY): $(OBJECTS) dirs $(CC) $(LDFLAGS) $(OBJECTS) -o $(HEXFILE) - @# xxd -r -p $(HEXFILE) $(BINARY) makebin -s 16384 $(HEXFILE) $(BINARY) -$(OBJECTS): build/%.rel : %.c $(CSOURCES) dirs crt0.rel +$(OBJECTS): build/%.rel : %.c $(CSOURCES) dirs build/crt0.rel @printf "\n" $(CC) $(CFLAGS) -c $< -o $@ -crt0.rel: crt0.s +build/crt0.rel: crt0.s sdasz80 -o $< + @mv crt0.rel build dirs: mkdir -p build build/kernel build/libc build/kernel/drivers dis: $(BINARY) - @# z80dasm -a -l -g 0h $< -o build/$(OSNAME).s dz80 -b -n $< clean: diff --git a/sw/z80_tests/usart/types.h b/sw/z80/libc/include/stdint.h index 815fc68..5e8caf3 100644 --- a/sw/z80_tests/usart/types.h +++ b/sw/z80/libc/include/stdint.h @@ -1,13 +1,13 @@ -#ifndef __TYPES_H__ -#define __TYPES_H__ - -/* only types from primitive types are defined in this file */ - -typedef volatile unsigned char register_t; +#ifndef __STDINT_H__ +#define __STDINT_H__ typedef unsigned int uint; + typedef char int8_t; typedef unsigned char uint8_t; typedef int int16_t; typedef unsigned int uint16_t; -#endif +typedef long int int32_t; +typedef unsigned long int uint32_t; + +#endif // __STDINT_H__
\ No newline at end of file diff --git a/sw/z80/libc/include/stdlib.h b/sw/z80/libc/include/stdlib.h new file mode 100644 index 0000000..c69f573 --- /dev/null +++ b/sw/z80/libc/include/stdlib.h @@ -0,0 +1,7 @@ +#ifndef __STDLIB_H__ +#define __STDLIB_H__ + +#include "stdint.h" + + +#endif // __STDLIB_H__
\ No newline at end of file diff --git a/sw/z80/libc/include/types.h b/sw/z80/libc/include/types.h new file mode 100644 index 0000000..a083bfe --- /dev/null +++ b/sw/z80/libc/include/types.h @@ -0,0 +1,60 @@ +#ifndef __TYPES_H__ +#define __TYPES_H__ + +/* only types from primitive types are defined in this file */ + +typedef volatile unsigned char register_t; + +typedef unsigned int uint; + +typedef char int8_t; +typedef unsigned char uint8_t; +typedef int int16_t; +typedef unsigned int uint16_t; +typedef long int int32_t; +typedef unsigned long int uint32_t; + +typedef uint16_t size_t; +typedef int16_t ssize_t; + +typedef uint8_t pid_t; +typedef uint16_t ino_t; + +typedef uint8_t dev_t; +typedef uint32_t devsize_t; +typedef uint8_t fd_t; +typedef uint16_t blk_t; +typedef uint8_t user_t; +typedef struct { + uint8_t member[3]; +} uint24_t; + +typedef uint32_t fsize_t; + +typedef struct +{ + dev_t dev; // device id, global in the fs + ino_t inode; // inode id relative to the volume + +} inode_t; + +typedef struct time_s +{ + struct + { + uint minutes :6; + uint hour :5; + + } time; + + struct + { + uint day :5; + uint month :4; + uint year :12; + + } date; + +} time_t; + +#endif diff --git a/sw/z80_tests/usart/build/crt0.rel b/sw/z80/tests/pio/build/crt0.rel index 809c0e6..809c0e6 100644 --- a/sw/z80_tests/usart/build/crt0.rel +++ b/sw/z80/tests/pio/build/crt0.rel diff --git a/sw/z80_tests/usart/build/main.asm b/sw/z80/tests/pio/build/main.asm index 44f199a..453eead 100644 --- a/sw/z80_tests/usart/build/main.asm +++ b/sw/z80/tests/pio/build/main.asm @@ -9,8 +9,8 @@ ; Public variables in this module ;-------------------------------------------------------- .globl _main - .globl _usart_write - .globl _usart_init + .globl _pio_write + .globl _pio_set_mode ;-------------------------------------------------------- ; special function registers ;-------------------------------------------------------- @@ -47,44 +47,34 @@ ; Function main ; --------------------------------- _main:: -;main.c:5: usart_init(USART_BAUDRATE_1200, USART_PARITY_EVEN, USART_STOP_BITS_1); - ld hl,#0x000a +;main.c:7: pio_set_mode(PIO_A, PIO_MODE_BYTE_OUT, 0); + xor a, a + push af + inc sp + ld hl,#0x0001 push hl - ld l, #0x01 + ld l, #0x00 push hl - ld l, #0x60 - push hl - call _usart_init - ld hl,#6 - add hl,sp - ld sp,hl -;main.c:6: usart_write("Hello, World!\n", 13); - ld hl,#0x000d - push hl - ld hl,#___str_0 - push hl - call _usart_write + call _pio_set_mode pop af pop af -;main.c:8: while(1) { + inc sp +;main.c:9: while (1) { + ld c,#0x00 00102$: -;main.c:9: usart_write("done\n", 5); - ld hl,#0x0005 +;main.c:10: pio_write(PIO_A, j++); + ld b,c + inc c + push bc + push bc + inc sp + ld hl,#0x0000 push hl - ld hl,#___str_1 - push hl - call _usart_write - pop af + call _pio_write pop af + inc sp + pop bc jr 00102$ -___str_0: - .ascii "Hello, World!" - .db 0x0a - .db 0x00 -___str_1: - .ascii "done" - .db 0x0a - .db 0x00 .area _CODE .area _INITIALIZER .area _CABS (ABS) diff --git a/sw/z80_tests/usart/build/main.lst b/sw/z80/tests/pio/build/main.lst index c7b4201..4a1a872 100644 --- a/sw/z80_tests/usart/build/main.lst +++ b/sw/z80/tests/pio/build/main.lst @@ -9,8 +9,8 @@ 9 ; Public variables in this module 10 ;-------------------------------------------------------- 11 .globl _main - 12 .globl _usart_write - 13 .globl _usart_init + 12 .globl _pio_write + 13 .globl _pio_set_mode 14 ;-------------------------------------------------------- 15 ; special function registers 16 ;-------------------------------------------------------- @@ -47,46 +47,34 @@ 47 ; Function main 48 ; --------------------------------- 0000 49 _main:: - 50 ;main.c:5: usart_init(USART_BAUDRATE_1200, USART_PARITY_EVEN, USART_STOP_BITS_1); - 0000 21 0A 00 [10] 51 ld hl,#0x000a - 0003 E5 [11] 52 push hl - 0004 2E 01 [ 7] 53 ld l, #0x01 - 0006 E5 [11] 54 push hl - 0007 2E 60 [ 7] 55 ld l, #0x60 - 0009 E5 [11] 56 push hl - 000A CDr00r00 [17] 57 call _usart_init - 000D 21 06 00 [10] 58 ld hl,#6 - 0010 39 [11] 59 add hl,sp - 0011 F9 [ 6] 60 ld sp,hl - 61 ;main.c:6: usart_write("Hello, World!\n", 13); - 0012 21 0D 00 [10] 62 ld hl,#0x000d - 0015 E5 [11] 63 push hl - 0016 21r2Er00 [10] 64 ld hl,#___str_0 - 0019 E5 [11] 65 push hl - 001A CDr00r00 [17] 66 call _usart_write - 001D F1 [10] 67 pop af - 001E F1 [10] 68 pop af - 69 ;main.c:8: while(1) { - 001F 70 00102$: - 71 ;main.c:9: usart_write("done\n", 5); - 001F 21 05 00 [10] 72 ld hl,#0x0005 - 0022 E5 [11] 73 push hl - 0023 21r3Dr00 [10] 74 ld hl,#___str_1 - 0026 E5 [11] 75 push hl - 0027 CDr00r00 [17] 76 call _usart_write - 002A F1 [10] 77 pop af - 002B F1 [10] 78 pop af - 002C 18 F1 [12] 79 jr 00102$ - 002E 80 ___str_0: - 002E 48 65 6C 6C 6F 2C 81 .ascii "Hello, World!" - 20 57 6F 72 6C 64 - 21 - 003B 0A 82 .db 0x0a - 003C 00 83 .db 0x00 - 003D 84 ___str_1: - 003D 64 6F 6E 65 85 .ascii "done" - 0041 0A 86 .db 0x0a - 0042 00 87 .db 0x00 - 88 .area _CODE - 89 .area _INITIALIZER - 90 .area _CABS (ABS) + 50 ;main.c:7: pio_set_mode(PIO_A, PIO_MODE_BYTE_OUT, 0); + 0000 AF [ 4] 51 xor a, a + 0001 F5 [11] 52 push af + 0002 33 [ 6] 53 inc sp + 0003 21 01 00 [10] 54 ld hl,#0x0001 + 0006 E5 [11] 55 push hl + 0007 2E 00 [ 7] 56 ld l, #0x00 + 0009 E5 [11] 57 push hl + 000A CDr00r00 [17] 58 call _pio_set_mode + 000D F1 [10] 59 pop af + 000E F1 [10] 60 pop af + 000F 33 [ 6] 61 inc sp + 62 ;main.c:9: while (1) { + 0010 0E 00 [ 7] 63 ld c,#0x00 + 0012 64 00102$: + 65 ;main.c:10: pio_write(PIO_A, j++); + 0012 41 [ 4] 66 ld b,c + 0013 0C [ 4] 67 inc c + 0014 C5 [11] 68 push bc + 0015 C5 [11] 69 push bc + 0016 33 [ 6] 70 inc sp + 0017 21 00 00 [10] 71 ld hl,#0x0000 + 001A E5 [11] 72 push hl + 001B CDr00r00 [17] 73 call _pio_write + 001E F1 [10] 74 pop af + 001F 33 [ 6] 75 inc sp + 0020 C1 [10] 76 pop bc + 0021 18 EF [12] 77 jr 00102$ + 78 .area _CODE + 79 .area _INITIALIZER + 80 .area _CABS (ABS) diff --git a/sw/z80/tests/pio/build/main.rel b/sw/z80/tests/pio/build/main.rel new file mode 100644 index 0000000..bc2bd98 --- /dev/null +++ b/sw/z80/tests/pio/build/main.rel @@ -0,0 +1,29 @@ +XL2 +H 9 areas 4 global symbols +M main +O -mz80 +S _pio_set_mode Ref0000 +S .__.ABS. Def0000 +S _pio_write Ref0000 +A _CODE size 23 flags 0 addr 0 +S _main Def0000 +A _DATA size 0 flags 0 addr 0 +A _INITIALIZED size 0 flags 0 addr 0 +A _DABS size 0 flags 8 addr 0 +A _HOME size 0 flags 0 addr 0 +A _GSINIT size 0 flags 0 addr 0 +A _GSFINAL size 0 flags 0 addr 0 +A _INITIALIZER size 0 flags 0 addr 0 +A _CABS size 0 flags 8 addr 0 +T 00 00 +R 00 00 00 00 +T 00 00 AF F5 33 21 01 00 E5 2E 00 E5 CD 00 00 F1 +R 00 00 00 00 02 0D 00 00 +T 0E 00 F1 33 0E 00 +R 00 00 00 00 +T 12 00 +R 00 00 00 00 +T 12 00 41 0C C5 C5 33 21 00 00 E5 CD 00 00 F1 33 +R 00 00 00 00 02 0C 02 00 +T 20 00 C1 18 EF +R 00 00 00 00 diff --git a/sw/z80_tests/usart/build/main.sym b/sw/z80/tests/pio/build/main.sym index df02e0d..08d28a3 100644 --- a/sw/z80_tests/usart/build/main.sym +++ b/sw/z80/tests/pio/build/main.sym @@ -7,18 +7,17 @@ Symbol Table .__.ABS. = 0000 G .__.CPU. = 0000 L .__.H$L. = 0000 L - 0 ___str_0 002E R - 0 ___str_1 003D R 0 _main 0000 GR - _usart_init **** GX - _usart_write **** GX + _pio_set_mode **** GX + _pio_write **** GX + ASxxxx Assembler V02.00 + NoICE + SDCC mods (Zilog Z80 / Hitachi HD64180), page 2. Hexadecimal [16-Bits] Area Table - 0 _CODE size 43 flags 0 + 0 _CODE size 23 flags 0 1 _DATA size 0 flags 0 2 _INITIALIZED size 0 flags 0 3 _DABS size 0 flags 8 diff --git a/sw/z80_tests/usart/build/sample.lk b/sw/z80/tests/pio/build/pio_test.lk index dc99ff1..20c32cc 100644 --- a/sw/z80_tests/usart/build/sample.lk +++ b/sw/z80/tests/pio/build/pio_test.lk @@ -1,12 +1,13 @@ -mjwx --i build/sample.hex +-i build/pio_test.hex -b _CODE = 0x0800 -b _DATA = 0x2000 +-k ../../drivers/build/ -k /usr/libexec/../share/sdcc/lib/z80 -k /usr/share/sdcc/lib/z80 +-l drivers.a -l z80 build/crt0.rel build/main.rel -build/usart.rel -e diff --git a/sw/z80_tests/usart/build/sample.map b/sw/z80/tests/pio/build/pio_test.map index e812f09..e91ef69 100644 --- a/sw/z80_tests/usart/build/sample.map +++ b/sw/z80/tests/pio/build/pio_test.map @@ -7,7 +7,7 @@ Area Addr Size Decimal Bytes (A Value Global Global Defined In Module ----- -------------------------------- ------------------------ - 00000000 .__.ABS. usart + 00000000 .__.ABS. pio 00000000 l__BSEG 00000000 l__BSS 00000000 l__CABS @@ -36,44 +36,41 @@ Area Addr Size Decimal Bytes (A 00000002 l__HEADER5 00000002 l__HEADER6 00000002 l__HEADER7 - 00000002 l__INITIALIZED - 00000002 l__INITIALIZER 00000003 l__HEADER0 + 00000004 l__INITIALIZED + 00000004 l__INITIALIZER 00000006 l__GSINIT 0000000C l__HEADER8 - 00000264 l__CODE + 000000FD l__CODE 00000800 s__CODE - 00000A64 s__HOME - 00000A64 s__INITIALIZER - 00000A66 s__GSINIT - 00000A6C s__GSFINAL + 000008FD s__HOME + 000008FD s__INITIALIZER + 00000901 s__GSINIT + 00000907 s__GSFINAL 00002000 s__DATA 00002000 s__INITIALIZED - 00002002 s__BSEG - 00002002 s__BSS - 00002002 s__HEAP + 00002004 s__BSEG + 00002004 s__BSS + 00002004 s__HEAP ASxxxx Linker V03.00 + NoICE + sdld, page 2. Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) -------------------------------- ---- ---- ------- ----- ------------ -_CODE 00000800 00000264 = 612. bytes (REL,CON) +_CODE 00000800 000000FD = 253. bytes (REL,CON) Value Global Global Defined In Module ----- -------------------------------- ------------------------ 00000800 __clock crt0 00000804 _exit crt0 0000080A _main main - 0000084D _usart_set_baudrate usart - 00000881 _usart_set_parity usart - 000008D5 _usart_set_stop_bits usart - 00000902 _usart_word_length usart - 0000091B _usart_set_autoflow usart - 00000955 _usart_init usart - 0000097E _usart_transmit usart - 00000999 _usart_receive usart - 0000099E _usart_write usart - 000009E5 _usart_read usart + 0000082D __pio_data pio + 00000847 __pio_control pio + 00000861 _pio_set_mode pio + 0000089D _pio_set_interrupts pio + 000008B0 _pio_set_interrupts_mask pio + 000008D7 _pio_read pio + 000008ED _pio_write pio ASxxxx Linker V03.00 + NoICE + sdld, page 3. Hexadecimal [32-Bits] @@ -161,7 +158,7 @@ Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) -------------------------------- ---- ---- ------- ----- ------------ -_INITIALIZER 00000A64 00000002 = 2. bytes (REL,CON) +_INITIALIZER 000008FD 00000004 = 4. bytes (REL,CON) Value Global Global Defined In Module ----- -------------------------------- ------------------------ @@ -170,18 +167,18 @@ Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) -------------------------------- ---- ---- ------- ----- ------------ -_GSINIT 00000A66 00000006 = 6. bytes (REL,CON) +_GSINIT 00000901 00000006 = 6. bytes (REL,CON) Value Global Global Defined In Module ----- -------------------------------- ------------------------ - 00000A66 gsinit crt0 + 00000901 gsinit crt0 ASxxxx Linker V03.00 + NoICE + sdld, page 14. Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) -------------------------------- ---- ---- ------- ----- ------------ -_GSFINAL 00000A6C 00000001 = 1. bytes (REL,CON) +_GSFINAL 00000907 00000001 = 1. bytes (REL,CON) Value Global Global Defined In Module ----- -------------------------------- ------------------------ @@ -190,7 +187,7 @@ Hexadecimal [32-Bits] Area Addr Size Decimal Bytes (Attributes) -------------------------------- ---- ---- ------- ----- ------------ -_INITIALIZED 00002000 00000002 = 2. bytes (REL,CON) +_INITIALIZED 00002000 00000004 = 4. bytes (REL,CON) Value Global Global Defined In Module ----- -------------------------------- ------------------------ @@ -200,7 +197,11 @@ Files Linked [ module(s) ] build/crt0.rel [ crt0 ] build/main.rel [ main ] -build/usart.rel [ usart ] + + +Libraries Linked [ object file ] + +../../drivers/build/drivers.a [ pio.rel ] ASxxxx Linker V03.00 + NoICE + sdld, page 17. diff --git a/sw/z80_tests/usart/build/sample.noi b/sw/z80/tests/pio/build/pio_test.noi index 6d97288..3ddefe7 100644 --- a/sw/z80_tests/usart/build/sample.noi +++ b/sw/z80/tests/pio/build/pio_test.noi @@ -27,34 +27,31 @@ DEF l__HEADER4 0x2 DEF l__HEADER5 0x2 DEF l__HEADER6 0x2 DEF l__HEADER7 0x2 -DEF l__INITIALIZED 0x2 -DEF l__INITIALIZER 0x2 DEF l__HEADER0 0x3 +DEF l__INITIALIZED 0x4 +DEF l__INITIALIZER 0x4 DEF l__GSINIT 0x6 DEF l__HEADER8 0xC -DEF l__CODE 0x264 +DEF l__CODE 0xFD DEF s__CODE 0x800 -DEF s__HOME 0xA64 -DEF s__INITIALIZER 0xA64 -DEF s__GSINIT 0xA66 -DEF s__GSFINAL 0xA6C +DEF s__HOME 0x8FD +DEF s__INITIALIZER 0x8FD +DEF s__GSINIT 0x901 +DEF s__GSFINAL 0x907 DEF s__DATA 0x2000 DEF s__INITIALIZED 0x2000 -DEF s__BSEG 0x2002 -DEF s__BSS 0x2002 -DEF s__HEAP 0x2002 +DEF s__BSEG 0x2004 +DEF s__BSS 0x2004 +DEF s__HEAP 0x2004 DEF __clock 0x800 DEF _exit 0x804 DEF _main 0x80A -DEF _usart_set_baudrate 0x84D -DEF _usart_set_parity 0x881 -DEF _usart_set_stop_bits 0x8D5 -DEF _usart_word_length 0x902 -DEF _usart_set_autoflow 0x91B -DEF _usart_init 0x955 -DEF _usart_transmit 0x97E -DEF _usart_receive 0x999 -DEF _usart_write 0x99E -DEF _usart_read 0x9E5 -DEF gsinit 0xA66 -LOAD build/sample.ihx +DEF __pio_data 0x82D +DEF __pio_control 0x847 +DEF _pio_set_mode 0x861 +DEF _pio_set_interrupts 0x89D +DEF _pio_set_interrupts_mask 0x8B0 +DEF _pio_read 0x8D7 +DEF _pio_write 0x8ED +DEF gsinit 0x901 +LOAD build/pio_test.ihx diff --git a/sw/z80_tests/usart/crt0.s b/sw/z80/tests/pio/crt0.s index c272f06..c272f06 100644 --- a/sw/z80_tests/usart/crt0.s +++ b/sw/z80/tests/pio/crt0.s diff --git a/sw/z80/tests/pio/main.c b/sw/z80/tests/pio/main.c new file mode 100644 index 0000000..4b0bcdb --- /dev/null +++ b/sw/z80/tests/pio/main.c @@ -0,0 +1,12 @@ +#include "pio.h" + +void main(void) +{ + uint8_t j = 0; + + pio_set_mode(PIO_A, PIO_MODE_BYTE_OUT, 0); + + while (1) { + pio_write(PIO_A, j++); + } +} diff --git a/sw/z80_tests/usart/makefile b/sw/z80/tests/pio/makefile index 080f41c..bd9d5bf 100644 --- a/sw/z80_tests/usart/makefile +++ b/sw/z80/tests/pio/makefile @@ -1,13 +1,13 @@ #### # source code settings # -OSNAME := sample +NAME := pio_test -CSOURCES := $(wildcard *.c) +CSOURCES := $(wildcard *.c) OBJECTS := $(patsubst %.c,build/%.rel,$(CSOURCES)) -HEXFILE := build/$(OSNAME).hex -BINARY := build/$(OSNAME).bin +HEXFILE := build/$(NAME).hex +BINARY := build/$(NAME).bin ### # compiler settings @@ -15,12 +15,18 @@ BINARY := build/$(OSNAME).bin CC := sdcc CFLAGS := -mz80 \ + -pedantic \ -I . \ + -I ../../arch \ + -I ../../drivers/include \ -DDEBUG -LDFLAGS := -mz80 --no-std-crt0 build/crt0.rel \ - --std-c89 -pedantic \ - --code-loc 0x0800 --data-loc 0x2000 +LDFLAGS := -mz80 \ + -L ../../drivers/build/ \ + -l drivers.a \ + --no-std-crt0 build/crt0.rel \ + --code-loc 0x0800 \ + --data-loc 0x2000 .PHONY: dirs dis clean all: $(BINARY) @@ -28,8 +34,6 @@ all: $(BINARY) # build binary $(BINARY): $(OBJECTS) dirs $(CC) $(LDFLAGS) $(OBJECTS) -o $(HEXFILE) - @# xxd -r -p $(HEXFILE) $(BINARY) - @# makebin -s 16384 $(HEXFILE) $(BINARY) makebin -s 8192 $(HEXFILE) $(BINARY) $(OBJECTS): build/%.rel : %.c $(CSOURCES) dirs build/crt0.rel diff --git a/sw/z80_tests/ram/build/crt0.rel b/sw/z80/tests/ram/build/crt0.rel index cce6a25..b9ed132 100644 --- a/sw/z80_tests/ram/build/crt0.rel +++ b/sw/z80/tests/ram/build/crt0.rel @@ -1,5 +1,5 @@ XL2 -H 14 areas 3 global symbols +H 15 areas 3 global symbols M crt0 S _main Ref0000 S .__.ABS. Def0000 @@ -14,7 +14,8 @@ A _HEADER4 size 2 flags 8 addr 20 A _HEADER5 size 2 flags 8 addr 28 A _HEADER6 size 2 flags 8 addr 30 A _HEADER7 size 2 flags 8 addr 38 -A _HEADER8 size 9 flags 8 addr 100 +A _HEADER8 size 2 flags 8 addr 66 +A _HEADER9 size 9 flags 8 addr 100 A _HOME size 0 flags 0 addr 0 A _INITIALIZER size 0 flags 0 addr 0 A _GSINIT size 0 flags 0 addr 0 @@ -27,7 +28,7 @@ A _HEAP size 0 flags 0 addr 0 T 00 00 R 00 00 02 00 T 00 00 C3 00 01 -R 00 00 02 00 00 03 0A 00 +R 00 00 02 00 00 03 0B 00 T 08 00 R 00 00 03 00 T 08 00 ED 4D @@ -56,12 +57,16 @@ T 38 00 R 00 00 09 00 T 38 00 ED 4D R 00 00 09 00 -T 00 01 +T 66 00 R 00 00 0A 00 -T 00 01 +T 66 00 ED 4D R 00 00 0A 00 +T 00 01 +R 00 00 0B 00 +T 00 01 +R 00 00 0B 00 T 00 01 31 FF FF CD 00 00 C3 00 00 -R 00 00 0A 00 02 06 00 00 00 09 00 00 +R 00 00 0B 00 02 06 00 00 00 09 00 00 T 00 00 R 00 00 00 00 T 00 00 diff --git a/sw/z80_tests/ram/build/main.asm b/sw/z80/tests/ram/build/main.asm index f3b8add..f3b8add 100644 --- a/sw/z80_tests/ram/build/main.asm +++ b/sw/z80/tests/ram/build/main.asm diff --git a/sw/z80_tests/ram/build/main.lst b/sw/z80/tests/ram/build/main.lst index 17142d4..17142d4 100644 --- a/sw/z80_tests/ram/build/main.lst +++ b/sw/z80/tests/ram/build/main.lst diff --git a/sw/z80_tests/ram/build/main.rel b/sw/z80/tests/ram/build/main.rel index cad7a3c..cad7a3c 100644 --- a/sw/z80_tests/ram/build/main.rel +++ b/sw/z80/tests/ram/build/main.rel diff --git a/sw/z80_tests/ram/build/main.sym b/sw/z80/tests/ram/build/main.sym index d81bdc8..d81bdc8 100644 --- a/sw/z80_tests/ram/build/main.sym +++ b/sw/z80/tests/ram/build/main.sym diff --git a/sw/z80/tests/ram/build/ram_test.lk b/sw/z80/tests/ram/build/ram_test.lk new file mode 100644 index 0000000..724eb89 --- /dev/null +++ b/sw/z80/tests/ram/build/ram_test.lk @@ -0,0 +1,11 @@ +-mjwx +-i build/ram_test.hex +-b _CODE = 0x0000 +-b _DATA = 0x2000 +-k /usr/libexec/../share/sdcc/lib/z80 +-k /usr/share/sdcc/lib/z80 +-l z80 +build/crt0.rel +build/main.rel + +-e diff --git a/sw/z80/tests/ram/build/ram_test.map b/sw/z80/tests/ram/build/ram_test.map new file mode 100644 index 0000000..0d36247 --- /dev/null +++ b/sw/z80/tests/ram/build/ram_test.map @@ -0,0 +1,174 @@ +ASxxxx Linker V03.00 + NoICE + sdld, page 1. +Hexadecimal [32-Bits] + +Area Addr Size Decimal Bytes (Attributes) +-------------------------------- ---- ---- ------- ----- ------------ +. .ABS. 00000000 00000000 = 0. bytes (ABS,CON) + + Value Global Global Defined In Module + ----- -------------------------------- ------------------------ + 00000000 .__.ABS. main + 00000000 l__BSEG + 00000000 l__BSS + 00000000 l__CABS + 00000000 l__DABS + 00000000 l__DATA + 00000000 l__GSFINAL + 00000000 l__GSINIT + 00000000 l__HEADER + 00000000 l__HEAP + 00000000 l__HOME + 00000000 l__INITIALIZED + 00000000 l__INITIALIZER + 00000000 s__CABS + 00000000 s__CODE + 00000000 s__DABS + 00000000 s__HEADER + 00000000 s__HEADER0 + 00000000 s__HEADER1 + 00000000 s__HEADER2 + 00000000 s__HEADER3 + 00000000 s__HEADER4 + 00000000 s__HEADER5 + 00000000 s__HEADER6 + 00000000 s__HEADER7 + 00000000 s__HEADER8 + 00000000 s__HEADER9 + 00000002 l__HEADER1 + 00000002 l__HEADER2 + 00000002 l__HEADER3 + 00000002 l__HEADER4 + 00000002 l__HEADER5 + 00000002 l__HEADER6 + 00000002 l__HEADER7 + 00000002 l__HEADER8 + 00000003 l__HEADER0 + 00000009 l__HEADER9 + 0000000D l__CODE + 0000000D s__GSFINAL + 0000000D s__GSINIT + 0000000D s__HOME + 0000000D s__INITIALIZER + 00002000 s__BSEG + 00002000 s__BSS + 00002000 s__DATA + 00002000 s__HEAP + 00002000 s__INITIALIZED + +ASxxxx Linker V03.00 + NoICE + sdld, page 2. +Hexadecimal [32-Bits] + +Area Addr Size Decimal Bytes (Attributes) +-------------------------------- ---- ---- ------- ----- ------------ +_CODE 00000000 0000000D = 13. bytes (REL,CON) + + Value Global Global Defined In Module + ----- -------------------------------- ------------------------ + 00000000 _exit crt0 + 00000003 _main main + +ASxxxx Linker V03.00 + NoICE + sdld, page 3. +Hexadecimal [32-Bits] + +Area Addr Size Decimal Bytes (Attributes) +-------------------------------- ---- ---- ------- ----- ------------ +_HEADER0 00000000 00000003 = 3. bytes (ABS,CON) + + Value Global Global Defined In Module + ----- -------------------------------- ------------------------ +ASxxxx Linker V03.00 + NoICE + sdld, page 4. +Hexadecimal [32-Bits] + +Area Addr Size Decimal Bytes (Attributes) +-------------------------------- ---- ---- ------- ----- ------------ +_HEADER1 00000000 00000002 = 2. bytes (ABS,CON) + + Value Global Global Defined In Module + ----- -------------------------------- ------------------------ +ASxxxx Linker V03.00 + NoICE + sdld, page 5. +Hexadecimal [32-Bits] + +Area Addr Size Decimal Bytes (Attributes) +-------------------------------- ---- ---- ------- ----- ------------ +_HEADER2 00000000 00000002 = 2. bytes (ABS,CON) + + Value Global Global Defined In Module + ----- -------------------------------- ------------------------ +ASxxxx Linker V03.00 + NoICE + sdld, page 6. +Hexadecimal [32-Bits] + +Area Addr Size Decimal Bytes (Attributes) +-------------------------------- ---- ---- ------- ----- ------------ +_HEADER3 00000000 00000002 = 2. bytes (ABS,CON) + + Value Global Global Defined In Module + ----- -------------------------------- ------------------------ +ASxxxx Linker V03.00 + NoICE + sdld, page 7. +Hexadecimal [32-Bits] + +Area Addr Size Decimal Bytes (Attributes) +-------------------------------- ---- ---- ------- ----- ------------ +_HEADER4 00000000 00000002 = 2. bytes (ABS,CON) + + Value Global Global Defined In Module + ----- -------------------------------- ------------------------ +ASxxxx Linker V03.00 + NoICE + sdld, page 8. +Hexadecimal [32-Bits] + +Area Addr Size Decimal Bytes (Attributes) +-------------------------------- ---- ---- ------- ----- ------------ +_HEADER5 00000000 00000002 = 2. bytes (ABS,CON) + + Value Global Global Defined In Module + ----- -------------------------------- ------------------------ +ASxxxx Linker V03.00 + NoICE + sdld, page 9. +Hexadecimal [32-Bits] + +Area Addr Size Decimal Bytes (Attributes) +-------------------------------- ---- ---- ------- ----- ------------ +_HEADER6 00000000 00000002 = 2. bytes (ABS,CON) + + Value Global Global Defined In Module + ----- -------------------------------- ------------------------ +ASxxxx Linker V03.00 + NoICE + sdld, page 10. +Hexadecimal [32-Bits] + +Area Addr Size Decimal Bytes (Attributes) +-------------------------------- ---- ---- ------- ----- ------------ +_HEADER7 00000000 00000002 = 2. bytes (ABS,CON) + + Value Global Global Defined In Module + ----- -------------------------------- ------------------------ +ASxxxx Linker V03.00 + NoICE + sdld, page 11. +Hexadecimal [32-Bits] + +Area Addr Size Decimal Bytes (Attributes) +-------------------------------- ---- ---- ------- ----- ------------ +_HEADER8 00000000 00000002 = 2. bytes (ABS,CON) + + Value Global Global Defined In Module + ----- -------------------------------- ------------------------ +ASxxxx Linker V03.00 + NoICE + sdld, page 12. +Hexadecimal [32-Bits] + +Area Addr Size Decimal Bytes (Attributes) +-------------------------------- ---- ---- ------- ----- ------------ +_HEADER9 00000000 00000009 = 9. bytes (ABS,CON) + + Value Global Global Defined In Module + ----- -------------------------------- ------------------------ +ASxxxx Linker V03.00 + NoICE + sdld, page 13. + +Files Linked [ module(s) ] + +build/crt0.rel [ crt0 ] +build/main.rel [ main ] + +ASxxxx Linker V03.00 + NoICE + sdld, page 14. + +User Base Address Definitions + +_CODE = 0x0000 +_DATA = 0x2000 + +
\ No newline at end of file diff --git a/sw/z80/tests/ram/build/ram_test.noi b/sw/z80/tests/ram/build/ram_test.noi new file mode 100644 index 0000000..94266c5 --- /dev/null +++ b/sw/z80/tests/ram/build/ram_test.noi @@ -0,0 +1,50 @@ +DEF .__.ABS. 0x0 +DEF l__BSEG 0x0 +DEF l__BSS 0x0 +DEF l__CABS 0x0 +DEF l__DABS 0x0 +DEF l__DATA 0x0 +DEF l__GSFINAL 0x0 +DEF l__GSINIT 0x0 +DEF l__HEADER 0x0 +DEF l__HEAP 0x0 +DEF l__HOME 0x0 +DEF l__INITIALIZED 0x0 +DEF l__INITIALIZER 0x0 +DEF s__CABS 0x0 +DEF s__CODE 0x0 +DEF s__DABS 0x0 +DEF s__HEADER 0x0 +DEF s__HEADER0 0x0 +DEF s__HEADER1 0x0 +DEF s__HEADER2 0x0 +DEF s__HEADER3 0x0 +DEF s__HEADER4 0x0 +DEF s__HEADER5 0x0 +DEF s__HEADER6 0x0 +DEF s__HEADER7 0x0 +DEF s__HEADER8 0x0 +DEF s__HEADER9 0x0 +DEF l__HEADER1 0x2 +DEF l__HEADER2 0x2 +DEF l__HEADER3 0x2 +DEF l__HEADER4 0x2 +DEF l__HEADER5 0x2 +DEF l__HEADER6 0x2 +DEF l__HEADER7 0x2 +DEF l__HEADER8 0x2 +DEF l__HEADER0 0x3 +DEF l__HEADER9 0x9 +DEF l__CODE 0xD +DEF s__GSFINAL 0xD +DEF s__GSINIT 0xD +DEF s__HOME 0xD +DEF s__INITIALIZER 0xD +DEF s__BSEG 0x2000 +DEF s__BSS 0x2000 +DEF s__DATA 0x2000 +DEF s__HEAP 0x2000 +DEF s__INITIALIZED 0x2000 +DEF _exit 0x0 +DEF _main 0x3 +LOAD build/ram_test.ihx diff --git a/sw/z80_tests/ram/build/test.lk b/sw/z80/tests/ram/build/test.lk index 03a8db4..03a8db4 100644 --- a/sw/z80_tests/ram/build/test.lk +++ b/sw/z80/tests/ram/build/test.lk diff --git a/sw/z80_tests/ram/build/test.map b/sw/z80/tests/ram/build/test.map index 07b953f..07b953f 100644 --- a/sw/z80_tests/ram/build/test.map +++ b/sw/z80/tests/ram/build/test.map diff --git a/sw/z80_tests/ram/build/test.noi b/sw/z80/tests/ram/build/test.noi index 403beda..403beda 100644 --- a/sw/z80_tests/ram/build/test.noi +++ b/sw/z80/tests/ram/build/test.noi diff --git a/sw/z80_tests/ram/build/test.z80 b/sw/z80/tests/ram/build/test.z80 index 25a162a..25a162a 100644 --- a/sw/z80_tests/ram/build/test.z80 +++ b/sw/z80/tests/ram/build/test.z80 diff --git a/sw/z80_tests/ram/crt0.s b/sw/z80/tests/ram/crt0.s index ac0698f..d775e66 100644 --- a/sw/z80_tests/ram/crt0.s +++ b/sw/z80/tests/ram/crt0.s @@ -21,7 +21,6 @@ .org 0x38 reti .org 0x66 - ld hl,#BEEF reti .org 0x100 diff --git a/sw/z80_tests/ram/main.c b/sw/z80/tests/ram/main.c index 581072b..581072b 100644 --- a/sw/z80_tests/ram/main.c +++ b/sw/z80/tests/ram/main.c diff --git a/sw/z80_tests/ram/makefile b/sw/z80/tests/ram/makefile index 35d7419..b8435a7 100644 --- a/sw/z80_tests/ram/makefile +++ b/sw/z80/tests/ram/makefile @@ -1,7 +1,7 @@ #### # source code settings # -OSNAME := test +OSNAME := ram_test CSOURCES := $(wildcard *.c) diff --git a/sw/z80_tests/usart/build/main.rel b/sw/z80_tests/usart/build/main.rel deleted file mode 100644 index 2557016..0000000 --- a/sw/z80_tests/usart/build/main.rel +++ /dev/null @@ -1,41 +0,0 @@ -XL2 -H 9 areas 4 global symbols -M main -O -mz80 -S _usart_write Ref0000 -S .__.ABS. Def0000 -S _usart_init Ref0000 -A _CODE size 43 flags 0 addr 0 -S _main Def0000 -A _DATA size 0 flags 0 addr 0 -A _INITIALIZED size 0 flags 0 addr 0 -A _DABS size 0 flags 8 addr 0 -A _HOME size 0 flags 0 addr 0 -A _GSINIT size 0 flags 0 addr 0 -A _GSFINAL size 0 flags 0 addr 0 -A _INITIALIZER size 0 flags 0 addr 0 -A _CABS size 0 flags 8 addr 0 -T 00 00 -R 00 00 00 00 -T 00 00 21 0A 00 E5 2E 01 E5 2E 60 E5 CD 00 00 21 -R 00 00 00 00 02 0D 02 00 -T 0E 00 06 00 39 F9 21 0D 00 E5 21 2E 00 E5 CD -R 00 00 00 00 00 0B 00 00 -T 1B 00 00 00 F1 F1 -R 00 00 00 00 02 02 00 00 -T 1F 00 -R 00 00 00 00 -T 1F 00 21 05 00 E5 21 3D 00 E5 CD 00 00 F1 F1 18 -R 00 00 00 00 00 07 00 00 02 0B 00 00 -T 2D 00 F1 -R 00 00 00 00 -T 2E 00 -R 00 00 00 00 -T 2E 00 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 0A -R 00 00 00 00 -T 3C 00 00 -R 00 00 00 00 -T 3D 00 -R 00 00 00 00 -T 3D 00 64 6F 6E 65 0A 00 -R 00 00 00 00 diff --git a/sw/z80_tests/usart/build/pio.lst b/sw/z80_tests/usart/build/pio.lst deleted file mode 100644 index fcafc2a..0000000 --- a/sw/z80_tests/usart/build/pio.lst +++ /dev/null @@ -1,194 +0,0 @@ - 1 ;-------------------------------------------------------- - 2 ; File Created by SDCC : free open source ANSI-C Compiler - 3 ; Version 3.6.0 #9615 (Linux) - 4 ;-------------------------------------------------------- - 5 .module pio - 6 .optsdcc -mz80 - 7 - 8 ;-------------------------------------------------------- - 9 ; Public variables in this module - 10 ;-------------------------------------------------------- - 11 .globl __pio_data - 12 .globl __pio_control - 13 .globl _pio_set_mode - 14 .globl _pio_set_interrupts - 15 .globl _pio_set_interrupts_mask - 16 ;-------------------------------------------------------- - 17 ; special function registers - 18 ;-------------------------------------------------------- - 19 ;-------------------------------------------------------- - 20 ; ram data - 21 ;-------------------------------------------------------- - 22 .area _DATA - 23 ;-------------------------------------------------------- - 24 ; ram data - 25 ;-------------------------------------------------------- - 26 .area _INITIALIZED - 0000 27 _pio_port: - 0000 28 .ds 2 - 0002 29 _pio_ctrl: - 0002 30 .ds 2 - 31 ;-------------------------------------------------------- - 32 ; absolute external ram data - 33 ;-------------------------------------------------------- - 34 .area _DABS (ABS) - 35 ;-------------------------------------------------------- - 36 ; global & static initialisations - 37 ;-------------------------------------------------------- - 38 .area _HOME - 39 .area _GSINIT - 40 .area _GSFINAL - 41 .area _GSINIT - 42 ;-------------------------------------------------------- - 43 ; Home - 44 ;-------------------------------------------------------- - 45 .area _HOME - 46 .area _HOME - 47 ;-------------------------------------------------------- - 48 ; code - 49 ;-------------------------------------------------------- - 50 .area _CODE - 51 ;pio.c:6: inline void _pio_data(int port, uint8_t data) - 52 ; --------------------------------- - 53 ; Function _pio_data - 54 ; --------------------------------- - 0000 55 __pio_data:: - 56 ;pio.c:8: *(pio_port + port) = data; - 0000 21 02 00 [10] 57 ld hl,#2 - 0003 39 [11] 58 add hl,sp - 0004 FD 21r00r00 [14] 59 ld iy,#_pio_port - 0008 FD 7E 00 [19] 60 ld a,0 (iy) - 000B 86 [ 7] 61 add a, (hl) - 000C 4F [ 4] 62 ld c,a - 000D FD 7E 01 [19] 63 ld a,1 (iy) - 0010 23 [ 6] 64 inc hl - 0011 8E [ 7] 65 adc a, (hl) - 0012 47 [ 4] 66 ld b,a - 0013 21 04 00 [10] 67 ld hl, #4+0 - 0016 39 [11] 68 add hl, sp - 0017 7E [ 7] 69 ld a, (hl) - 0018 02 [ 7] 70 ld (bc),a - 0019 C9 [10] 71 ret - 72 ;pio.c:11: inline void _pio_control(int port, uint8_t cmd) - 73 ; --------------------------------- - 74 ; Function _pio_control - 75 ; --------------------------------- - 001A 76 __pio_control:: - 77 ;pio.c:13: *(pio_ctrl + port) = cmd; - 001A 21 02 00 [10] 78 ld hl,#2 - 001D 39 [11] 79 add hl,sp - 001E FD 21r02r00 [14] 80 ld iy,#_pio_ctrl - 0022 FD 7E 00 [19] 81 ld a,0 (iy) - 0025 86 [ 7] 82 add a, (hl) - 0026 4F [ 4] 83 ld c,a - 0027 FD 7E 01 [19] 84 ld a,1 (iy) - 002A 23 [ 6] 85 inc hl - 002B 8E [ 7] 86 adc a, (hl) - 002C 47 [ 4] 87 ld b,a - 002D 21 04 00 [10] 88 ld hl, #4+0 - 0030 39 [11] 89 add hl, sp - 0031 7E [ 7] 90 ld a, (hl) - 0032 02 [ 7] 91 ld (bc),a - 0033 C9 [10] 92 ret - 93 ;pio.c:16: void pio_set_mode(int port, int mode, uint8_t io) - 94 ; --------------------------------- - 95 ; Function pio_set_mode - 96 ; --------------------------------- - 0034 97 _pio_set_mode:: - 98 ;pio.c:19: _pio_control(port, ((mode << 6) | 0x0F)); - 0034 21 04 00 [10] 99 ld hl, #4+0 - 0037 39 [11] 100 add hl, sp - 0038 7E [ 7] 101 ld a, (hl) - 0039 0F [ 4] 102 rrca - 003A 0F [ 4] 103 rrca - 003B E6 C0 [ 7] 104 and a,#0xc0 - 003D F6 0F [ 7] 105 or a, #0x0f - 003F 4F [ 4] 106 ld c,a - 0040 D1 [10] 107 pop de - 0041 E1 [10] 108 pop hl - 0042 E5 [11] 109 push hl - 0043 D5 [11] 110 push de - 111 ;pio.c:13: *(pio_ctrl + port) = cmd; - 0044 FD 2Ar02r00 [20] 112 ld iy,(_pio_ctrl) - 0048 5D [ 4] 113 ld e, l - 0049 54 [ 4] 114 ld d, h - 004A FD 19 [15] 115 add iy, de - 004C FD 71 00 [19] 116 ld 0 (iy), c - 117 ;pio.c:23: if (mode == PIO_MODE_BIT_IO) { - 004F FD 21 04 00 [14] 118 ld iy,#4 - 0053 FD 39 [15] 119 add iy,sp - 0055 FD 7E 00 [19] 120 ld a,0 (iy) - 0058 D6 03 [ 7] 121 sub a, #0x03 - 005A C0 [11] 122 ret NZ - 005B FD 7E 01 [19] 123 ld a,1 (iy) - 005E B7 [ 4] 124 or a, a - 005F C0 [11] 125 ret NZ - 126 ;pio.c:24: _pio_control(port, io); - 0060 FD 21 06 00 [14] 127 ld iy,#6 - 0064 FD 39 [15] 128 add iy,sp - 0066 FD 4E 00 [19] 129 ld c,0 (iy) - 130 ;pio.c:13: *(pio_ctrl + port) = cmd; - 0069 ED 5Br02r00 [20] 131 ld de,(_pio_ctrl) - 006D 19 [11] 132 add hl,de - 006E 71 [ 7] 133 ld (hl),c - 134 ;pio.c:24: _pio_control(port, io); - 006F C9 [10] 135 ret - 136 ;pio.c:28: void pio_set_interrupts(int port, int control) - 137 ; --------------------------------- - 138 ; Function pio_set_interrupts - 139 ; --------------------------------- - 0070 140 _pio_set_interrupts:: - 141 ;pio.c:31: _pio_control(port, (control | 0x07)); - 0070 21 04 00 [10] 142 ld hl, #4+0 - 0073 39 [11] 143 add hl, sp - 0074 7E [ 7] 144 ld a, (hl) - 0075 F6 07 [ 7] 145 or a, #0x07 - 0077 4F [ 4] 146 ld c,a - 0078 D1 [10] 147 pop de - 0079 E1 [10] 148 pop hl - 007A E5 [11] 149 push hl - 007B D5 [11] 150 push de - 151 ;pio.c:13: *(pio_ctrl + port) = cmd; - 007C ED 5Br02r00 [20] 152 ld de,(_pio_ctrl) - 0080 19 [11] 153 add hl,de - 0081 71 [ 7] 154 ld (hl),c - 155 ;pio.c:31: _pio_control(port, (control | 0x07)); - 0082 C9 [10] 156 ret - 157 ;pio.c:34: void pio_set_interrupts_mask(int port, int control, uint8_t mask) - 158 ; --------------------------------- - 159 ; Function pio_set_interrupts_mask - 160 ; --------------------------------- - 0083 161 _pio_set_interrupts_mask:: - 162 ;pio.c:38: _pio_control(port, (control | 0x17)); - 0083 21 04 00 [10] 163 ld hl, #4+0 - 0086 39 [11] 164 add hl, sp - 0087 7E [ 7] 165 ld a, (hl) - 0088 F6 17 [ 7] 166 or a, #0x17 - 008A 4F [ 4] 167 ld c,a - 008B D1 [10] 168 pop de - 008C E1 [10] 169 pop hl - 008D E5 [11] 170 push hl - 008E D5 [11] 171 push de - 172 ;pio.c:13: *(pio_ctrl + port) = cmd; - 008F FD 2Ar02r00 [20] 173 ld iy,(_pio_ctrl) - 0093 5D [ 4] 174 ld e, l - 0094 54 [ 4] 175 ld d, h - 0095 FD 19 [15] 176 add iy, de - 0097 FD 71 00 [19] 177 ld 0 (iy), c - 178 ;pio.c:39: _pio_control(port, mask); - 009A FD 21 06 00 [14] 179 ld iy,#6 - 009E FD 39 [15] 180 add iy,sp - 00A0 FD 4E 00 [19] 181 ld c,0 (iy) - 182 ;pio.c:13: *(pio_ctrl + port) = cmd; - 00A3 ED 5Br02r00 [20] 183 ld de,(_pio_ctrl) - 00A7 19 [11] 184 add hl,de - 00A8 71 [ 7] 185 ld (hl),c - 186 ;pio.c:39: _pio_control(port, mask); - 00A9 C9 [10] 187 ret - 188 .area _CODE - 189 .area _INITIALIZER - 0000 190 __xinit__pio_port: - 0000 00 42 191 .dw #0x4200 - 0002 192 __xinit__pio_ctrl: - 0002 02 42 193 .dw #0x4202 - 194 .area _CABS (ABS) diff --git a/sw/z80_tests/usart/build/sample.z80 b/sw/z80_tests/usart/build/sample.z80 deleted file mode 100644 index 965a0d8..0000000 --- a/sw/z80_tests/usart/build/sample.z80 +++ /dev/null @@ -1,558 +0,0 @@ -; -; DZ80 V3.4.1 Z80 Disassembly of build/sample.bin -; 2017/09/25 17:08 -; - org 0x0 -; -X0000: jp X0100 -; - org 0x4 -; -X0004: rst 0x38 -X0005: rst 0x38 -X0006: rst 0x38 -; - org 0x8 -; - reti -; -X000a: rst 0x38 -; - org 0xc -; -X000c: rst 0x38 -X000d: rst 0x38 -; - org 0x10 -; - reti -; - rst 0x38 -; - org 0x18 -; - reti -; - rst 0x38 -; - org 0x20 -; - reti -; - rst 0x38 -; - org 0x28 -; - reti -; - rst 0x38 -; - org 0x30 -; - reti -; - rst 0x38 -; - org 0x38 -; - reti -; - rst 0x38 -; - org 0x100 -; -X0100: ld sp,X0000 - call X0b15 - call X08b4 - jp X0804 -; - org 0x800 -; - ld a,0x2 - rst 8 - ret -; -X0804: ld a,0x0 - rst 8 -X0807: halt -; - jr X0807 -; - ld hl,X0002 - add hl,sp - ld iy,X2000 - ld a,(iy+0x0) - add a,(hl) - ld c,a - ld a,(iy+0x1) - inc hl - adc a,(hl) - ld b,a - ld hl,X0004 - add hl,sp - ld a,(hl) - ld (bc),a - ret -; - ld hl,X0002 - add hl,sp - ld iy,X2002 - ld a,(iy+0x0) - add a,(hl) - ld c,a - ld a,(iy+0x1) - inc hl - adc a,(hl) - ld b,a - ld hl,X0004 - add hl,sp - ld a,(hl) - ld (bc),a - ret -; - ld hl,X0004 - add hl,sp - ld a,(hl) - rrca - rrca - and 0xc0 - or 0xf - ld c,a - pop de - pop hl - push hl - push de - ld iy,(X2002) - ld e,l - ld d,h - add iy,de - ld (iy+0x0),c - ld iy,X0004 - add iy,sp - ld a,(iy+0x0) - sub 0x3 - ret nz - ld a,(iy+0x1) - or a - ret nz - ld iy,X0006 - add iy,sp - ld c,(iy+0x0) - ld de,(X2002) - add hl,de - ld (hl),c - ret -; - ld hl,X0004 - add hl,sp - ld a,(hl) - or 0x7 - ld c,a - pop de - pop hl - push hl - push de - ld de,(X2002) - add hl,de - ld (hl),c - ret -; - ld hl,X0004 - add hl,sp - ld a,(hl) - or 0x17 - ld c,a - pop de - pop hl - push hl - push de - ld iy,(X2002) - ld e,l - ld d,h - add iy,de - ld (iy+0x0),c - ld iy,X0006 - add iy,sp - ld c,(iy+0x0) - ld de,(X2002) - add hl,de - ld (hl),c - ret -; -X08b4: ld hl,X000a - push hl - ld l,0x1 - push hl - ld l,0x60 - push hl - call X0a00 - ld hl,X0006 - add hl,sp - ld sp,hl - ld hl,X000d - push hl - ld hl,X08e2 - push hl - call X0a49 - pop af - pop af -X08d3: ld hl,X0005 - push hl - ld hl,X08f1 - push hl - call X0a49 - pop af - pop af - jr X08d3 -; -X08e2: ld c,b - ld h,l - ld l,h - ld l,h - ld l,a - inc l - jr nz,X0941 - ld l,a - ld (hl),d - ld l,h - ld h,h - ld hl,X000a -X08f1: ld h,h - ld l,a - ld l,(hl) - ld h,l - ld a,(bc) - nop - ret -; -X08f8: push ix - ld ix,X0000 - add ix,sp - ld hl,(X2004) - ld bc,X0004 - add hl,bc - ld a,(hl) - or 0x80 - ld (hl),a - ld hl,(X2004) - ld c,(ix+0x4) - ld (hl),c - ld de,(X2004) - inc de - ld l,(ix+0x5) - ld h,0x0 - ld a,(hl) - ld (de),a - ld hl,(X2004) - ld bc,X0004 - add hl,bc - ld a,(hl) - and 0x7f - ld (hl),a - pop ix - ret -; -X092c: ld hl,(X2004) - ld bc,X0004 - add hl,bc - ld iy,X0002 - add iy,sp - ld a,(iy+0x0) - dec a - jr nz,X094b - ld a,(iy+0x1) - or a - jr nz,X094b - ld a,(hl) - or 0x10 - ld (hl),a - jr X0962 -; -X094b: ld iy,X0002 - add iy,sp - ld a,(iy+0x0) - sub 0x2 - jr nz,X0962 - ld a,(iy+0x1) - or a - jr nz,X0962 - ld a,(hl) - and 0xef - ld (hl),a -X0962: ld hl,(X2004) - ld bc,X0004 - add hl,bc - ld iy,X0002 - add iy,sp - ld a,(iy+0x0) - rlca - rlca - rlca - and 0xf8 - and 0x8 - ld c,a - ld a,(hl) - and 0xf7 - or c - ld (hl),a - ret -; -X0980: ld bc,(X2004) - inc bc - inc bc - inc bc - inc bc - ld iy,X0002 - add iy,sp - ld a,(iy+0x0) - sub 0xa - jr nz,X099f - ld a,(iy+0x1) - or a - jr nz,X099f - ld a,0x1 - jr X09a0 -; -X099f: xor a -X09a0: xor 0x1 - add a,a - add a,a - and 0x4 - ld l,a - ld a,(bc) - and 0xfb - or l - ld (bc),a - ret -; - ld hl,(X2004) - ld bc,X0004 - add hl,bc - ld iy,X0002 - add iy,sp - ld a,(iy+0x0) - and 0x3 - ld c,a - ld a,(hl) - and 0xfc - or c - ld (hl),a - ret -; -X09c6: ld hl,(X2004) - ld bc,X000c - add hl,bc - ld iy,X0002 - add iy,sp - ld a,(iy+0x0) - and 0x1 - ld c,a - ld a,(hl) - and 0xfe - or c - ld (hl),a - ld hl,(X2004) - ld bc,X0005 - add hl,bc - ld a,(iy+0x0) - sub 0x3 - jr nz,X09f6 - ld a,(iy+0x1) - or a - jr nz,X09f6 - ld a,0x1 - jr X09f7 -; -X09f6: xor a -X09f7: and 0x1 - ld c,a - ld a,(hl) - and 0xfe - or c - ld (hl),a - ret -; -X0a00: pop bc - pop hl - push hl - push bc - push hl - call X08f8 - pop af - ld hl,X0004 - add hl,sp - ld c,(hl) - inc hl - ld b,(hl) - push bc - call X092c - pop af - ld hl,X0006 - add hl,sp - ld c,(hl) - inc hl - ld b,(hl) - push bc - call X0980 - ld hl,X0000 - ex (sp),hl - call X09c6 - pop af - ret -; - ld hl,(X2004) - ld iy,X0002 - add iy,sp - ld a,(iy+0x0) - ld (hl),a -X0a36: ld hl,(X2004) - ld bc,X000d - add hl,bc - ld a,(hl) - rlca - rlca - rlca - jr nc,X0a36 - ret -; - ld hl,(X2004) - ld l,(hl) - ret -; -X0a49: push ix - ld ix,X0000 - add ix,sp - push af - ld a,(ix+0x4) - ld (ix+0xfe),a - ld a,(ix+0x5) - ld (ix+0xff),a - ld c,(ix+0x6) - ld b,(ix+0x7) -X0a64: ld e,c - ld d,b - dec bc - ld a,d - or e - jr z,X0a89 - ld de,(X2004) - pop hl - push hl - ld a,(hl) - inc (ix+0xfe) - jr nz,X0a7a - inc (ix+0xff) -X0a7a: ld (de),a -X0a7b: ld hl,(X2004) - ld de,X000d - add hl,de - ld a,(hl) - rlca - rlca - jr nc,X0a64 - jr X0a7b -; -X0a89: ld l,c - ld h,b - ld sp,ix - pop ix - ret -; - push ix - ld ix,X0000 - add ix,sp - ld hl,Xfffa - add hl,sp - ld sp,hl - ld a,(ix+0x4) - ld (ix+0xfa),a - ld a,(ix+0x5) - ld (ix+0xfb),a - ld c,(ix+0x6) - ld b,(ix+0x7) - ld (ix+0xfc),0x0 - ld (ix+0xfd),0x0 -X0ab7: ld e,c - ld d,b - dec bc - ld a,d - or e - jr z,X0b06 - ld hl,(X2004) - ld e,(hl) - pop hl - push hl - ld (hl),e - inc (ix+0xfa) - jr nz,X0acd - inc (ix+0xfb) -X0acd: ld de,(X2004) - ld hl,X000d - add hl,de - ld (ix+0xfe),l - ld (ix+0xff),h - ld l,(ix+0xfe) - ld h,(ix+0xff) - ld a,(hl) - rrca - rrca - rrca - and 0x1 - jr nz,X0af6 - ld l,(ix+0xfe) - ld h,(ix+0xff) - ld a,(hl) - rrca - rrca - and 0x1 - jr z,X0afc -X0af6: pop hl - push hl - dec hl - ex (sp),hl - jr X0ab7 -; -X0afc: inc (ix+0xfc) - jr nz,X0ab7 - inc (ix+0xfd) - jr X0ab7 -; -X0b06: pop bc - pop hl - push hl - push bc - ld sp,ix - pop ix - ret -; -X0b0f: nop - ld b,d - ld (bc),a - ld b,d - nop - ld b,b -X0b15: ld bc,X0006 - ld a,b - or c - jr z,X0b24 - ld de,X2000 - ld hl,X0b0f - ldir -X0b24: ret -; - rst 0x38 -; -; Miscellaneous equates -; -; These are addresses referenced in the code but -; which are in the middle of a multibyte instruction -; or are addresses outside the initialized space -; -X0002 equ 0x2 -X2002 equ 0x2002 -X2004 equ 0x2004 -Xfffa equ 0xfffa -; - end -; - diff --git a/sw/z80_tests/usart/main.c b/sw/z80_tests/usart/main.c deleted file mode 100644 index d2e1d8e..0000000 --- a/sw/z80_tests/usart/main.c +++ /dev/null @@ -1,11 +0,0 @@ -#include "usart.h" - -void main(void) -{ - usart_init(USART_BAUDRATE_1200, USART_PARITY_EVEN, USART_STOP_BITS_1); - usart_write("Hello, World!\n", 13); - - while(1) { - usart_write("done\n", 5); - } -} diff --git a/sw/z80_tests/usart/usart.c b/sw/z80_tests/usart/usart.c deleted file mode 120000 index 2927470..0000000 --- a/sw/z80_tests/usart/usart.c +++ /dev/null @@ -1 +0,0 @@ -../../z80/kernel/drivers/usart.c
\ No newline at end of file diff --git a/sw/z80_tests/usart/usart.h b/sw/z80_tests/usart/usart.h deleted file mode 120000 index 84ee24d..0000000 --- a/sw/z80_tests/usart/usart.h +++ /dev/null @@ -1 +0,0 @@ -../../z80/kernel/include/drivers/usart.h
\ No newline at end of file |