Code refactoring, working char read and print, working line print, not working line read
This commit is contained in:
parent
33fd225a0f
commit
4d74b03e3f
@ -37,6 +37,9 @@ Passarne il puntatore ad una funzione:
|
|||||||
ld bc, myVar
|
ld bc, myVar
|
||||||
call lcd_print
|
call lcd_print
|
||||||
```
|
```
|
||||||
|
### Segmentation fault
|
||||||
|
Controllare che non si stia puntando ad un registro con le parentesi:
|
||||||
|
`ld (ix), a`
|
||||||
|
|
||||||
# C
|
# C
|
||||||
## Deploy
|
## Deploy
|
||||||
|
@ -5,8 +5,8 @@
|
|||||||
DATA_REG: EQU IO_0
|
DATA_REG: EQU IO_0
|
||||||
|
|
||||||
; variables
|
; variables
|
||||||
LCD_VAR_SPACE: EQU DRV_VAR_SPACE + 128
|
TERM_VAR_SPACE: EQU DRV_VAR_SPACE + 128
|
||||||
incoming_string: EQU LCD_VAR_SPACE
|
incoming_string: EQU TERM_VAR_SPACE
|
||||||
|
|
||||||
; functions
|
; functions
|
||||||
|
|
||||||
@ -29,29 +29,29 @@ Term_printc:
|
|||||||
; Reads a single character
|
; Reads a single character
|
||||||
; @return A The read character
|
; @return A The read character
|
||||||
Term_readc:
|
Term_readc:
|
||||||
in a, (IO_0) ; reads a character
|
in a, (DATA_REG) ; reads a character
|
||||||
cp 0
|
add a, 0
|
||||||
jp z, Term_readline ; if NULL, ignores it and waits for another character
|
jp z, Term_readc ; if char is 0 (NULL), ignores it and waits for another character
|
||||||
ret ; if not NULL, returns it in the a register
|
ret ; if not NULL, returns it in the a register
|
||||||
|
|
||||||
; Reads a line
|
; Reads a line
|
||||||
; @return BC The pointer to a null-terminated read string
|
; @return BC The pointer to a null-terminated read string
|
||||||
Term_readline:
|
Term_readline:
|
||||||
ld ix, incoming_string ; this array will contain read string
|
ld bc, incoming_string ; this array will contain read string
|
||||||
in a, (IO_0) ; reads a character
|
in a, (DATA_REG) ; reads a character
|
||||||
; if char is 0 (ascii NULL), ignore it
|
; if char is 0 (ascii NULL), ignore it
|
||||||
cp 0
|
add a, 0
|
||||||
jp z, Term_readline ; if 0 (= ascii NULL), ignores it and waits for another character
|
jp z, Term_readline ; if 0 (= ascii NULL), ignores it and waits for another character
|
||||||
; if char is a newline (CR or LF), line is finished.
|
; if char is a newline (CR or LF), line is finished.
|
||||||
cp 10 ; CR
|
cp 10 ; CR
|
||||||
jp z, term_readline_foundcr ; Found newline. Jump to term_readline_foundcr
|
jp z, term_readline_foundcr ; Found newline. Jump to term_readline_foundcr
|
||||||
cp 13 ; LF
|
cp 13 ; LF
|
||||||
jp z, term_readline_foundcr ; Found newline. Jump to term_readline_foundcr
|
jp z, term_readline_foundcr ; Found newline. Jump to term_readline_foundcr
|
||||||
; At this point the read character is a valid ascii character
|
; At this point the read character is a valid ascii character
|
||||||
ld (ix), a ; adds char to the read string
|
ld (bc), a ; adds char to the read string
|
||||||
inc ix ; point to next array position
|
inc bc ; point to next array position
|
||||||
jp Term_readline
|
jp Term_readline
|
||||||
term_readline_foundcr: ; called when carriage return was found (end of line)
|
term_readline_foundcr: ; called when carriage return was found (end of line)
|
||||||
ld (ix), 0 ; Null-terminate string
|
ld (bc), 0 ; Null-terminate string
|
||||||
ld bc, incoming_string ; Returns read string
|
ld bc, incoming_string ; Returns read string pointer
|
||||||
ret
|
ret
|
||||||
|
@ -1,5 +1,11 @@
|
|||||||
; HD44780 20x4 characters LCD display driver
|
; HD44780 20x4 characters LCD display driver
|
||||||
; @author Daniele Verducci
|
; @author Daniele Verducci
|
||||||
|
;
|
||||||
|
; USAGE:
|
||||||
|
; STR: DB "Hello world!",0 <-- null terminated string
|
||||||
|
; call Lcd_init <-- inits hd44780 controller
|
||||||
|
; ld bc, STR <-- load pointer to string's first char in reg BC
|
||||||
|
; call Lcd_print <-- this function will print the string
|
||||||
|
|
||||||
; LCD config (IO port 0)
|
; LCD config (IO port 0)
|
||||||
LCD_INSTR_REG: EQU IO_0
|
LCD_INSTR_REG: EQU IO_0
|
||||||
|
@ -2,7 +2,7 @@ jp Sysinit ; Startup vector: DO NOT MOVE! Must be the first instruction
|
|||||||
|
|
||||||
; Pat80 BIOS v0.01
|
; Pat80 BIOS v0.01
|
||||||
; @author: Daniele Verducci
|
; @author: Daniele Verducci
|
||||||
;
|
;
|
||||||
; MEMORY MAP
|
; MEMORY MAP
|
||||||
; ROM is at 0x0000
|
; ROM is at 0x0000
|
||||||
; RAM is at 0x8000
|
; RAM is at 0x8000
|
||||||
@ -78,30 +78,23 @@ Readline:
|
|||||||
|
|
||||||
; System initialization
|
; System initialization
|
||||||
Sysinit:
|
Sysinit:
|
||||||
;call Lcd_init
|
|
||||||
|
|
||||||
; position to line 2 char 3
|
|
||||||
;ld b, 1
|
|
||||||
;ld c, 1
|
|
||||||
;call Lcd_locate
|
|
||||||
|
|
||||||
; I/O TEST
|
|
||||||
|
|
||||||
; write characters to display
|
|
||||||
ld bc, SYSINIT_GREETING
|
ld bc, SYSINIT_GREETING
|
||||||
call Lcd_print ; write string to screen
|
call Print
|
||||||
_io_test_loop:
|
|
||||||
in a, (IO_0) ; legge dal terminale
|
_io_test_loop:
|
||||||
cp 0
|
call Readline
|
||||||
jp z, _io_test_loop
|
call Print
|
||||||
;sub a, 32 ; trasforma in maiuscola (ascii - 32)
|
|
||||||
out (IO_0), a ; scrive la lettera trasformata
|
; call Printc
|
||||||
|
; call Readline
|
||||||
|
; ld a, (bc)
|
||||||
|
; cp a, 0
|
||||||
|
; jp z, _io_test_loop
|
||||||
|
; ld (APP_VAR_SPACE), bc
|
||||||
|
; ld bc, SAYS
|
||||||
|
; call Print
|
||||||
|
; ld bc, (APP_VAR_SPACE)
|
||||||
|
; call Print
|
||||||
jp _io_test_loop
|
jp _io_test_loop
|
||||||
|
|
||||||
halt
|
|
||||||
|
|
||||||
; poll keyboard
|
|
||||||
;_poll_keyb:
|
|
||||||
;call Keyb_read
|
|
||||||
;jp _poll_keyb
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user