terminal junk
This commit is contained in:
parent
c81b6906c6
commit
db6c547aa0
|
@ -0,0 +1,46 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
from select import select
|
||||||
|
from subprocess import Popen, PIPE, STDOUT
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# TODO: byte-by-byte I/O is painful. figure out better buffering
|
||||||
|
# that doesn't break everything
|
||||||
|
|
||||||
|
# currently line-buffered
|
||||||
|
def run(args):
|
||||||
|
#return Popen(args, stdin=PIPE, stdout=PIPE, stderr=STDOUT, bufsize=1, universal_newlines=True)
|
||||||
|
return Popen(args, stdin=PIPE, stdout=PIPE, stderr=STDOUT, bufsize=0)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
args = sys.argv[1:]
|
||||||
|
if len(args) < 2:
|
||||||
|
print('usage: %s ROM SHELL')
|
||||||
|
print('')
|
||||||
|
print('execute the given uxn terminal program (ROM)')
|
||||||
|
print('and start a shell process (SHELL).')
|
||||||
|
sys.exit(1)
|
||||||
|
rom = args[0]
|
||||||
|
shell = args[1]
|
||||||
|
|
||||||
|
term = run(['uxnemu', rom])
|
||||||
|
term_out = term.stdout.fileno()
|
||||||
|
|
||||||
|
shell = run([shell])
|
||||||
|
shell_out = shell.stdout.fileno()
|
||||||
|
|
||||||
|
while shell.poll() is None and term.poll() is None:
|
||||||
|
# wait 100ms to see if anything is ready to write
|
||||||
|
ns, _, _ = select([term_out, shell_out], [], [], 0.1)
|
||||||
|
for n in ns:
|
||||||
|
if n == term_out:
|
||||||
|
shell.stdin.write(term.stdout.read(1))
|
||||||
|
shell.stdin.flush()
|
||||||
|
elif n == shell_out:
|
||||||
|
term.stdin.write(shell.stdout.read(1))
|
||||||
|
term.stdin.flush()
|
||||||
|
else:
|
||||||
|
raise Exception('unexpected fileno: %d (expected %d or %d)' % (n, term_out, shell_out))
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
111
term.tal
111
term.tal
|
@ -13,8 +13,9 @@
|
||||||
@cur-x $2 ( cursor x: 0 <= cur-x < cols )
|
@cur-x $2 ( cursor x: 0 <= cur-x < cols )
|
||||||
@cur-y $2 ( cursor y: 0 <= cur-y < rows )
|
@cur-y $2 ( cursor y: 0 <= cur-y < rows )
|
||||||
|
|
||||||
@bg-frame $2
|
@buffer $80 ( input buffer )
|
||||||
@bg-counter $1
|
@pos $1 ( buffer position )
|
||||||
|
@subinput $1 ( reading from subprocess? )
|
||||||
|
|
||||||
|0100
|
|0100
|
||||||
( 32 characters = 256 pixels )
|
( 32 characters = 256 pixels )
|
||||||
|
@ -26,72 +27,25 @@
|
||||||
.cols LDZ2 #30 SFT2 .Screen/w DEO2
|
.cols LDZ2 #30 SFT2 .Screen/w DEO2
|
||||||
|
|
||||||
( set colors )
|
( set colors )
|
||||||
#0ff3 .System/r DEO2
|
#08f3 .System/r DEO2
|
||||||
#0fd5 .System/g DEO2
|
|
||||||
#2f66 .System/b DEO2
|
|
||||||
( #08f3 .System/r DEO2
|
|
||||||
#0cd5 .System/g DEO2
|
#0cd5 .System/g DEO2
|
||||||
#0b66 .System/b DEO2 )
|
#0b66 .System/b DEO2
|
||||||
|
|
||||||
|
( set pos, subinput flag )
|
||||||
|
.buffer .pos STZ
|
||||||
|
#00 .subinput STZ
|
||||||
|
|
||||||
( clear screen for initial draw )
|
( clear screen for initial draw )
|
||||||
;clear-screen JSR2
|
;clear-screen JSR2
|
||||||
|
|
||||||
( draw background )
|
|
||||||
#0000 .bg-frame STZ2
|
|
||||||
#00 .bg-counter STZ
|
|
||||||
( #0000 ;draw-background JSR2 )
|
|
||||||
|
|
||||||
( set up interrupts )
|
( set up interrupts )
|
||||||
;redraw .Screen/vect DEO2 ( set up screen )
|
;redraw .Screen/vect DEO2 ( set up screen )
|
||||||
;on-key .Controller/vect DEO2 ( set up keyboard )
|
;on-key .Controller/vect DEO2 ( set up keyboard )
|
||||||
|
;on-input .Console/vect DEO2 ( set up stdin )
|
||||||
|
|
||||||
( return )
|
( return )
|
||||||
BRK
|
BRK
|
||||||
|
|
||||||
@draw-background ( frame* -> )
|
|
||||||
STH2
|
|
||||||
|
|
||||||
STH2kr #70 SFT2 ;cyber ADD2 #0048 ADD2 .Screen/addr DEO2
|
|
||||||
LIT2r 000f LIT2 0000
|
|
||||||
&loop1
|
|
||||||
DUP2 #30 SFT2 .Screen/y DEO2
|
|
||||||
DUP2 .cols LDZ2 OVR2 SUB2 ,hline JSR
|
|
||||||
INC2 DUP2 STH2kr LTH2 ,&loop1 JCN
|
|
||||||
POP2 POP2r
|
|
||||||
|
|
||||||
STH2kr #70 SFT2 ;cyber ADD2 #0040 ADD2 .Screen/addr DEO2
|
|
||||||
LIT2r 0020 LIT2 0011
|
|
||||||
&loop2
|
|
||||||
DUP2 #30 SFT2 .Screen/y DEO2
|
|
||||||
.rows LDZ2 OVR2 INC2 SUB2 .cols LDZ2 OVR2 SUB2 ,hline JSR
|
|
||||||
INC2 DUP2 STH2kr LTH2 ,&loop2 JCN
|
|
||||||
POP2 POP2r
|
|
||||||
|
|
||||||
POP2r JMP2r
|
|
||||||
|
|
||||||
@dline ( n -> )
|
|
||||||
#0000 SWP2 SUB2 STH2
|
|
||||||
&loop
|
|
||||||
.Screen/x DEI2 #0008 ADD2 .Screen/x DEO2
|
|
||||||
.Screen/y DEI2 #0008 ADD2 .Screen/y DEO2
|
|
||||||
#02 .Screen/sprite DEO
|
|
||||||
INC2r STH2kr ORA ,&loop JCN
|
|
||||||
POP2r JMP2r
|
|
||||||
|
|
||||||
@hline ( x1 x2 -> )
|
|
||||||
STH2 &loop
|
|
||||||
DUP2 #30 SFT2 .Screen/x DEO2
|
|
||||||
#02 .Screen/sprite DEO
|
|
||||||
INC2 DUP2 STH2kr LTH2 ,&loop JCN
|
|
||||||
POP2 POP2r JMP2r
|
|
||||||
|
|
||||||
@vline ( y1 y2 -> )
|
|
||||||
STH2 &loop
|
|
||||||
DUP2 #30 SFT2 .Screen/y DEO2
|
|
||||||
#02 .Screen/sprite DEO
|
|
||||||
INC2 DUP2 STH2kr LTH2 ,&loop JCN
|
|
||||||
POP2 POP2r JMP2r
|
|
||||||
|
|
||||||
@clear-screen
|
@clear-screen
|
||||||
#01 .dirty STZ
|
#01 .dirty STZ
|
||||||
;screen STH2
|
;screen STH2
|
||||||
|
@ -105,14 +59,6 @@
|
||||||
JMP2r
|
JMP2r
|
||||||
|
|
||||||
@redraw
|
@redraw
|
||||||
.bg-counter LDZ DUP ,&done-bg JCN
|
|
||||||
.bg-frame LDZ2
|
|
||||||
( DUP2 NIP LIT "a ADD #18 DEO #0a #18 DEO )
|
|
||||||
DUP2 ;draw-background JSR2
|
|
||||||
INC2 #0007 AND2 .bg-frame STZ2
|
|
||||||
&done-bg
|
|
||||||
INC #03 AND .bg-counter STZ
|
|
||||||
|
|
||||||
#41 .tint STZ
|
#41 .tint STZ
|
||||||
.dirty LDZ #00 EQU ,&done JCN
|
.dirty LDZ #00 EQU ,&done JCN
|
||||||
;screen STH2
|
;screen STH2
|
||||||
|
@ -135,11 +81,12 @@
|
||||||
&done BRK
|
&done BRK
|
||||||
|
|
||||||
@hide-cursor
|
@hide-cursor
|
||||||
|
.tint LDZ
|
||||||
#41 .tint STZ
|
#41 .tint STZ
|
||||||
;draw-cursor JMP2
|
;draw-cursor JSR2
|
||||||
|
.tint STZ JMP2r
|
||||||
|
|
||||||
@show-cursor
|
@show-cursor
|
||||||
#44 .tint STZ
|
|
||||||
;draw-cursor JMP2
|
;draw-cursor JMP2
|
||||||
|
|
||||||
@draw-cursor
|
@draw-cursor
|
||||||
|
@ -150,9 +97,18 @@
|
||||||
|
|
||||||
@on-key
|
@on-key
|
||||||
.Controller/key DEI #00 EQU ,&skip JCN
|
.Controller/key DEI #00 EQU ,&skip JCN
|
||||||
|
#00 .subinput STZ
|
||||||
|
#41 .tint STZ
|
||||||
.Controller/key DEI ;read JSR2
|
.Controller/key DEI ;read JSR2
|
||||||
&skip BRK
|
&skip BRK
|
||||||
|
|
||||||
|
@on-input
|
||||||
|
.Console/r DEI #00 EQU ,&skip JCN
|
||||||
|
#01 .subinput STZ
|
||||||
|
#41 .tint STZ
|
||||||
|
.Console/r DEI ;read JSR2
|
||||||
|
&skip BRK
|
||||||
|
|
||||||
@read ( byte^ -> )
|
@read ( byte^ -> )
|
||||||
DUP #07 EQU ;read-bel JCN2
|
DUP #07 EQU ;read-bel JCN2
|
||||||
DUP #08 EQU ;read-bs JCN2
|
DUP #08 EQU ;read-bs JCN2
|
||||||
|
@ -164,12 +120,21 @@
|
||||||
;read-normal JMP2
|
;read-normal JMP2
|
||||||
|
|
||||||
@read-bel JMP2r
|
@read-bel JMP2r
|
||||||
@read-bs POP ;scroll JMP2
|
@read-bs POP ;scroll JMP2 ( FIXME )
|
||||||
@read-tab POP POP2r #0000 DIV
|
@read-tab POP POP2r #0000 DIV
|
||||||
@read-esc JMP2r
|
@read-esc JMP2r
|
||||||
@read-del JMP2r
|
@read-del JMP2r
|
||||||
|
|
||||||
|
@write-line ( -> )
|
||||||
|
.pos LDZ .buffer
|
||||||
|
&loop GTHk ,&next JCN ,&done JMP
|
||||||
|
&next LDZk .Console/w DEO INC ,&loop JMP
|
||||||
|
&done #0a .Console/w DEO .buffer .pos STZ JMP2r
|
||||||
|
|
||||||
@read-cr ( 0d -> )
|
@read-cr ( 0d -> )
|
||||||
|
.subinput LDZ ,&display JCN
|
||||||
|
;write-line JSR2
|
||||||
|
&display
|
||||||
POP
|
POP
|
||||||
;hide-cursor JSR2
|
;hide-cursor JSR2
|
||||||
#0000 .cur-x STZ2
|
#0000 .cur-x STZ2
|
||||||
|
@ -207,6 +172,9 @@
|
||||||
JMP2r
|
JMP2r
|
||||||
|
|
||||||
@read-normal ( c -> )
|
@read-normal ( c -> )
|
||||||
|
.subinput LDZ ,&display JCN
|
||||||
|
.pos LDZ STZk INC .pos STZ
|
||||||
|
&display
|
||||||
;hide-cursor JSR2
|
;hide-cursor JSR2
|
||||||
DUP ;cursor-addr JSR2 STA
|
DUP ;cursor-addr JSR2 STA
|
||||||
;draw-tile JSR2
|
;draw-tile JSR2
|
||||||
|
@ -240,15 +208,6 @@
|
||||||
@ascii
|
@ascii
|
||||||
~chr/ascii.tal
|
~chr/ascii.tal
|
||||||
|
|
||||||
( cyber background )
|
|
||||||
@cyber
|
|
||||||
~chr/cyber.tal
|
|
||||||
|
|
||||||
( screen to store characters for redraw, etc. )
|
( screen to store characters for redraw, etc. )
|
||||||
@screen $0800 ( 64 x 32 )
|
@screen $0800 ( 64 x 32 )
|
||||||
@end-screen
|
@end-screen
|
||||||
|
|
||||||
( northwest=10 north=40 northeast=28 )
|
|
||||||
( west=30 center=56 east=38 )
|
|
||||||
( southwest=20 south=48 southeast=08 )
|
|
||||||
@bg-layout $0800
|
|
||||||
|
|
Loading…
Reference in New Issue