1
2    MODULE  generic_console_ioctl
3    PUBLIC  generic_console_ioctl
4
5    SECTION code_clib
6
7    EXTERN  generic_console_cls
8    EXTERN  __console_h
9    EXTERN  __console_w
10    EXTERN  __mode
11    EXTERN  generic_console_font32
12    EXTERN  generic_console_udg32
13    EXTERN  generic_console_caps
14    EXTERN  tmode
15    EXTERN  tmode_load_udgs
16    EXTERN  gmode
17    EXTERN  asm_load_z88dk_font
18    EXTERN  asm_load_z88dk_udg
19    EXTERN  l_jphl
20
21    INCLUDE	"ioctl.def"
22
23    PUBLIC  CLIB_GENCON_CAPS
24    defc    CLIB_GENCON_CAPS = CAP_MODE0
25    defc    CAP_MODE0 = CAP_GENCON_FG_COLOUR | CAP_GENCON_BG_COLOUR | CAP_GENCON_CUSTOM_FONT | CAP_GENCON_UDGS
26    defc    CAP_MODE1 = CAP_GENCON_FG_COLOUR | CAP_GENCON_BG_COLOUR | CAP_GENCON_CUSTOM_FONT | CAP_GENCON_UDGS | CAP_GENCON_INVERSE | CAP_GENCON_BOLD | CAP_GENCON_UNDERLINE
27
28; Entry:
29; a = ioctl
30; de = &arg
31; Exit: nc=success, c=failure
32generic_console_ioctl:
33    ld      h,d
34    ld      l,e
35    ld	    c,(hl)	;bc = where we point to
36    inc	    hl
37    ld	    b,(hl)
38    cp      IOCTL_GENCON_SET_FONT32
39    jr      nz,check_set_udg
40    ld      hl,generic_console_font32
41    ld      (hl),c
42    inc     hl
43    ld      (hl),b
44    ld      a,(__mode)
45    dec     a
46    call    nz,asm_load_z88dk_font      ; We only need to load them in text mode
47    and     a
48    ret
49check_set_udg:
50    cp      IOCTL_GENCON_SET_UDGS
51    jr      nz,check_mode
52    ld      hl,generic_console_udg32
53    ld      (hl),c
54    inc     hl
55    ld      (hl),b
56    ld      a,(__mode)
57    dec     a
58    call    nz,asm_load_z88dk_udg      ; We only need to load them in text mode
59    and     a
60    ret
61check_mode:
62    cp	    IOCTL_GENCON_SET_MODE
63    scf
64    ret     nz
65    ld      d,CAP_MODE1
66    ld	    a,c		; The mode
67    ld	    hl,gmode
68    cp	    1		; Drawing mode
69    jr	    z,set_mode
70    ld      d,CAP_MODE0
71    ld	    hl,tmode	; Otherwise it's text mode...
72set_mode:
73    ld      a,d
74    ld      (generic_console_caps),a
75    call    l_jphl		; Initialise the mode
76    call    generic_console_cls
77    and	    a
78    ret
79