view fake_cpm.sz8 @ 1483:001120e91fed nuklear_ui

Skip loading menu ROM if Nuklear UI is enabled. Allow disabling Nuklear UI in favor of old menu ROM both at compile time and in config. Fall back to ROM UI if GL is unavailable
author Michael Pavone <pavone@retrodev.com>
date Sat, 25 Nov 2017 20:43:20 -0800
parents cf6149b7c6e5
children
line wrap: on
line source

CONSOLE_PORT equ 0
STATUS_PORT  equ 1
EXIT_PORT    equ 2
	org $E400
	jp handle_call
	ld a, (should_exit)
	dec a
	jr z, do_exit
	ld a, 1
	ld (should_exit), a
	jp $100
do_exit:
no_impl
	out (EXIT_PORT), a
should_exit:
	dc.b 0
	
console_in:
	in a, (CONSOLE_PORT)
	ld l, a
	ret
console_out:
	ld a, e
	out (CONSOLE_PORT), a
	ret
get_iobyte:
	ld a, (3)
	ld l, a
	ret
set_iobyte:
	ld a, e
	ld (3), a
	ret
write_string:
	ld c, '$'
	jp .start
.continue
	out (CONSOLE_PORT), a
	inc de
.start
	ld a, (de)
	cp c
	jr nz, .continue
	;flush output
	out (STATUS_PORT),a 
	ret
read_string:
	ld a, (de)
	ld c, a
	ld b, $A ;newline
	inc c
	inc de
	push de
	inc de
	jp .start
.continue
	in a, (CONSOLE_PORT)
	cp b
	jr z, .end
	ld (de), a
	inc de
.start
	dec c
	jr nz, .continue
	;todo: consume excess characters
.end
	pop hl
	ex de, hl
	sbc hl, de
	ld a, l
	ld (de), a
	ret

console_status:
	in a, (STATUS_PORT)
	ld l, a
	ret

handle_call:
	ld a, c
	or a
	jr z, do_exit
	dec a
	jr z, console_in
	dec a
	jr z, console_out
	dec a
	jr z, no_impl ;aux reader input
	dec a
	jr z, no_impl ;aux punch output
	dec a
	jr z, no_impl ;printer output
	dec a
	jr z, no_impl ;direct console IO
	dec a
	jr z, get_iobyte
	dec a
	jr z, set_iobyte
	dec a
	jr z, write_string
	dec a
	jr z, read_string
	dec a
	jr z, console_status
	jp no_impl