Mercurial > repos > blastem
view fake_cpm.sz8 @ 1925:039553703c20
Don't apply address and cd register changes to the 'live' registers until pending flag is cleared, but do preserve the upper address bits in the latch. Fixes regression in Overdrive 2 while preserving fix to Mona in 344 bytes
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 13 Apr 2020 20:43:25 -0700 |
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