2022-03-23 00:52:01 +00:00
|
|
|
; Prog8 definitions for the Text I/O console routines for the Virtual Machine
|
2022-03-18 23:57:35 +00:00
|
|
|
|
2022-04-23 00:15:51 +00:00
|
|
|
%import conv
|
2022-03-18 23:57:35 +00:00
|
|
|
|
|
|
|
txt {
|
|
|
|
|
|
|
|
sub clear_screen() {
|
2022-04-30 22:09:03 +00:00
|
|
|
str @shared sequence = "\x1b[2J\x1B[H"
|
2022-09-30 12:05:11 +00:00
|
|
|
%ir {{
|
2022-11-06 11:40:39 +00:00
|
|
|
load.w r65500,txt.clear_screen.sequence
|
2022-04-30 22:09:03 +00:00
|
|
|
syscall 3
|
|
|
|
}}
|
2022-03-18 23:57:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
sub nl() {
|
|
|
|
txt.chrout('\n')
|
|
|
|
}
|
|
|
|
|
|
|
|
sub spc() {
|
|
|
|
txt.chrout(' ')
|
|
|
|
}
|
|
|
|
|
2022-03-27 15:46:15 +00:00
|
|
|
sub lowercase() {
|
|
|
|
; not supported
|
|
|
|
}
|
|
|
|
|
|
|
|
sub uppercase() {
|
|
|
|
; not supported
|
|
|
|
}
|
|
|
|
|
2022-03-18 23:57:35 +00:00
|
|
|
sub chrout(ubyte char) {
|
2022-09-30 12:05:11 +00:00
|
|
|
%ir {{
|
2022-11-06 11:40:39 +00:00
|
|
|
loadm.b r65500,txt.chrout.char
|
2022-04-30 22:09:03 +00:00
|
|
|
syscall 2
|
|
|
|
}}
|
2022-03-18 23:57:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
sub print (str text) {
|
2022-09-30 12:05:11 +00:00
|
|
|
%ir {{
|
2022-11-06 11:40:39 +00:00
|
|
|
loadm.w r65500,txt.print.text
|
2022-04-30 22:09:03 +00:00
|
|
|
syscall 3
|
|
|
|
}}
|
2022-03-18 23:57:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
sub print_ub0 (ubyte value) {
|
2022-03-23 00:52:01 +00:00
|
|
|
; ---- print the ubyte in A in decimal form, with left padding 0s (3 positions total)
|
2022-04-23 00:15:51 +00:00
|
|
|
conv.str_ub0(value)
|
|
|
|
print(conv.string_out)
|
2022-03-18 23:57:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
sub print_ub (ubyte value) {
|
2022-03-23 00:52:01 +00:00
|
|
|
; ---- print the ubyte in decimal form, without left padding 0s
|
2022-04-23 00:15:51 +00:00
|
|
|
conv.str_ub(value)
|
|
|
|
print(conv.string_out)
|
2022-03-18 23:57:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
sub print_b (byte value) {
|
2022-03-23 00:52:01 +00:00
|
|
|
; ---- print the byte in decimal form, without left padding 0s
|
2022-04-23 00:15:51 +00:00
|
|
|
conv.str_b(value)
|
|
|
|
print(conv.string_out)
|
2022-03-18 23:57:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
sub print_ubhex (ubyte value, ubyte prefix) {
|
2022-03-23 00:52:01 +00:00
|
|
|
; ---- print the ubyte in hex form
|
2022-03-27 13:23:32 +00:00
|
|
|
if prefix
|
|
|
|
chrout('$')
|
2022-04-23 00:15:51 +00:00
|
|
|
conv.str_ubhex(value)
|
|
|
|
print(conv.string_out)
|
2022-03-18 23:57:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
sub print_ubbin (ubyte value, ubyte prefix) {
|
2022-03-23 00:52:01 +00:00
|
|
|
; ---- print the ubyte in binary form
|
2022-04-08 22:49:23 +00:00
|
|
|
if prefix
|
|
|
|
chrout('%')
|
2022-04-23 00:15:51 +00:00
|
|
|
conv.str_ubbin(value)
|
|
|
|
print(conv.string_out)
|
2022-03-18 23:57:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
sub print_uwbin (uword value, ubyte prefix) {
|
2022-03-23 00:52:01 +00:00
|
|
|
; ---- print the uword in binary form
|
2022-04-08 22:49:23 +00:00
|
|
|
if prefix
|
|
|
|
chrout('%')
|
2022-04-23 00:15:51 +00:00
|
|
|
conv.str_uwbin(value)
|
|
|
|
print(conv.string_out)
|
2022-03-18 23:57:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
sub print_uwhex (uword value, ubyte prefix) {
|
2022-03-23 00:52:01 +00:00
|
|
|
; ---- print the uword in hexadecimal form (4 digits)
|
2022-04-23 00:15:51 +00:00
|
|
|
if prefix
|
|
|
|
chrout('$')
|
|
|
|
conv.str_uwhex(value)
|
|
|
|
print(conv.string_out)
|
2022-03-18 23:57:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
sub print_uw0 (uword value) {
|
2022-03-23 00:52:01 +00:00
|
|
|
; ---- print the uword value in decimal form, with left padding 0s (5 positions total)
|
2022-04-23 00:15:51 +00:00
|
|
|
conv.str_uw0(value)
|
|
|
|
print(conv.string_out)
|
2022-03-18 23:57:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
sub print_uw (uword value) {
|
2022-03-23 00:52:01 +00:00
|
|
|
; ---- print the uword in decimal form, without left padding 0s
|
2022-04-23 00:15:51 +00:00
|
|
|
conv.str_uw(value)
|
|
|
|
print(conv.string_out)
|
2022-03-18 23:57:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
sub print_w (word value) {
|
2022-03-23 00:52:01 +00:00
|
|
|
; ---- print the (signed) word in decimal form, without left padding 0's
|
2022-04-23 00:15:51 +00:00
|
|
|
conv.str_w(value)
|
|
|
|
print(conv.string_out)
|
2022-03-18 23:57:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
sub input_chars (uword buffer) -> ubyte {
|
2022-03-23 00:52:01 +00:00
|
|
|
; ---- Input a string (max. 80 chars) from the keyboard. Returns length of input. (string is terminated with a 0 byte as well)
|
|
|
|
; It assumes the keyboard is selected as I/O channel!
|
2022-09-30 12:05:11 +00:00
|
|
|
%ir {{
|
2022-11-06 11:40:39 +00:00
|
|
|
loadm.w r65500,txt.input_chars.buffer
|
2022-04-30 22:09:03 +00:00
|
|
|
syscall 6
|
|
|
|
return
|
|
|
|
}}
|
2022-03-18 23:57:35 +00:00
|
|
|
}
|
|
|
|
|
2022-09-25 18:21:35 +00:00
|
|
|
sub plot (ubyte col, ubyte row) {
|
|
|
|
; use ANSI escape sequence to position the cursor
|
|
|
|
txt.chrout(27)
|
|
|
|
txt.chrout('[')
|
|
|
|
txt.print_ub(row)
|
|
|
|
txt.chrout(';')
|
|
|
|
txt.print_ub(col)
|
|
|
|
txt.chrout('H')
|
|
|
|
}
|
|
|
|
|
|
|
|
sub setchr (ubyte col, ubyte row, ubyte char) {
|
|
|
|
plot(col, row)
|
|
|
|
txt.chrout(char)
|
|
|
|
}
|
|
|
|
|
2022-03-18 23:57:35 +00:00
|
|
|
}
|