Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fgetc_cons() on ZX81/LAMBDA: display visible in FAST mode #2396

Merged
merged 5 commits into from
Sep 29, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions lib/config/lambda.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ CLIB default -llambda_clib -lndos -lgfxlambda -LDESTDIR/lib/clibs/ixiy

SUBTYPE none
SUBTYPE default -startup=102 -Cz+zx81 -Cz--lambda
SUBTYPE fast -startup=101 -Cz+zx81 -Cz--lambda
SUBTYPE fast -startup=101 -Cz+zx81 -Cz--lambda -pragma-redirect:fgetc_cons=fgetc_cons_fast
SUBTYPE mono -startup=202 -Cz+zx81 -Cz--lambda
SUBTYPE monofast -startup=201 -Cz+zx81 -Cz--lambda
SUBTYPE monofast -startup=201 -Cz+zx81 -Cz--lambda -pragma-redirect:fgetc_cons=fgetc_cons_fast
SUBTYPE cac3 -startup=302 -Cz+zx81 -Cz--lambda
SUBTYPE cac3fast -startup=301 -Cz+zx81 -Cz--lambda
SUBTYPE cac3fast -startup=301 -Cz+zx81 -Cz--lambda -pragma-redirect:fgetc_cons=fgetc_cons_fast

INCLUDE alias.inc
2 changes: 1 addition & 1 deletion lib/config/zx81.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ CLIB mt64ansi -pragma-need=ansiterminal -D__CONIO_VT100 -lzx81_clib -lndos

SUBTYPE none
SUBTYPE default -startup=2
SUBTYPE fast
SUBTYPE fast -pragma-redirect:fgetc_cons=fgetc_cons_fast
SUBTYPE wrx -startup=3
SUBTYPE wrx64 -startup=5
SUBTYPE _wrx -startup=4
Expand Down
4 changes: 4 additions & 0 deletions lib/target/zx81/classic/zx81_crt0.asm
Original file line number Diff line number Diff line change
Expand Up @@ -408,6 +408,7 @@ IF (startup>100)
PUBLIC __lambda_find_int
PUBLIC __lambda_scanning
PUBLIC __lambda_strs_add
PUBLIC __lambda_syncvideo ; entry for fgetc_cons_fast

; Color Lambda ROM
IF ((startup=101) | (startup=102))
Expand All @@ -428,6 +429,7 @@ IF ((startup=101) | (startup=102))
defc __lambda_find_int = $1509
defc __lambda_scanning = $0806
defc __lambda_strs_add = $189B
defc __lambda_syncvideo = $131B
ENDIF

; Monochrome Lambda ROM (earlier version)
Expand All @@ -449,6 +451,7 @@ IF ((startup=201) | (startup=202))
defc __lambda_find_int = $1088
defc __lambda_scanning = $114A
defc __lambda_strs_add = $1D57
defc __lambda_syncvideo = $02F8
ENDIF

; CAC-3 and NF300
Expand All @@ -470,6 +473,7 @@ IF ((startup=301) | (startup=302))
defc __lambda_find_int = $167C
defc __lambda_scanning = $08AB
defc __lambda_strs_add = $1A68
defc __lambda_syncvideo = $1434
ENDIF

ENDIF
Expand Down
62 changes: 62 additions & 0 deletions libsrc/target/zx81/stdio/fgetc_cons_fast.asm
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
;
; ZX81 Stdio
;
; getkey() Wait for keypress
; FAST mode, it takes care of polling the ROM
; for keeping the display visible
;
; Stefano Bodrato - Sep. 2023
;
;
; $Id: fgetc_cons_fast.asm $
;

SECTION code_clib

PUBLIC fgetc_cons_fast
PUBLIC _fgetc_cons_fast
EXTERN zx81toasc

EXTERN restore81

.fgetc_cons_fast
._fgetc_cons_fast
call restore81
xor a
ld ($4025),a ; LAST_K. The ZX80 worked directly on CH_ADD
.fgetc_cons2
ld a,($4025)
ex af,af

; call $0196 ; zx80

IF FORlambda
EXTERN __lambda_syncvideo
call __lambda_syncvideo
ELSE
call 631 ; $277, equivalent to $229 on a ZX80.
; Forces a whole display retrace skipping a bit of code to reduce glitches
ENDIF

ld a,($4025)
ld e,a
ex af,af
cp e
jr z,fgetc_cons2

; jp zx80_decode_keys

ld bc,($4025)

IF FORlambda
EXTERN __lambda_decode
call __lambda_decode
ELSE
call 1981
ENDIF

call zx81toasc
ld l,a
ld h,0
ret

1 change: 1 addition & 0 deletions libsrc/target/zx81/zx81.lst
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
@target/zx81/input_zx81.lst
target/zx81/stdio/fgetc_cons
target/zx81/stdio/fgetc_cons_fast
target/zx81/stdio/getk
target/zx81/stdio/fputc_cons
target/zx81/stdio/generic_console
Expand Down
Loading