Back to home page

DOS ain't dead

Forum index page

Log in | Register

Back to the board
Thread view  Mix view  Order
rr

Homepage E-mail

Berlin, Germany,
13.02.2021, 21:58
 

INT 10 - VIDEO - SET TEXT-MODE CURSOR SHAPE (Developers)

Hi!

Int 10/AH=03h says: "A separate cursor is maintained for each of up to 8 display pages."
But specifying a display page (in BH) is not documented for Int 10/AH=01h.

Does anybody know, from his/her own experience (on hardware), if "Int 10/AH=01h" always works on the active/current page only?

(By the way: I'm not trying to control the shape itself, but the blinking/visibility via bits 5 & 6.)

Cheers,
Robert

---
Forum admin

tkchia

Homepage

14.02.2021, 13:15
(edited by tkchia, 14.02.2021, 13:59)

@ rr

INT 10 - VIDEO - SET TEXT-MODE CURSOR SHAPE

Hello Robert,

> Does anybody know, from his/her own experience (on hardware), if "Int
> 10/AH=01h" always works on the active/current page only?

It seems that there is only one cursor shape, which is "shared" by all the different display pages.

The IBM BIOS data area keeps track of different cursor positions for each page (0x40:0x50--0x40:0x5f), but only one cursor shape (0x40:0x60--0x61).

(Also, I looked at the original IBM PC BIOS listings. Apparently there is really only one hardware cursor, at least on the CGA --- and when you switch the active display page (via int 0x10, ah = 5), the BIOS will actually move the cursor to the correct place, according to what 0x40:0x50 etc. says.)

ACT_DISP_PAGE     PROC    NEAR
        MOV     ACTIVE_PAGE,AL          ; SAVE ACTIVE PAGE VALUE
        MOV     CX,CRT_LEN              ; GET SAVED LENGTH OF REGEN BUFFER
        CBW                             ; CONVERT AL TO WORD
        PUSH    AX                      ; SAVE PAGE VALUE
        MUL     CX                      ; DISPLAY PAGE TIMES REGEN LENGTH
        MOV     CRT_START,AX            ; SAVE START ADDRESS FOR
                                        ;  LATER REQUIREMENTS
        MOV     CX,AX                   ; START ADDRESS TO CX
        SAR     CX,1                    ; DIVIDE BY 2 FOR 6845 HANDLING
        MOV     AH,12                   ; 6845 REGISTER FOR START ADDRESS
        CALL    M16
        POP     BX                      ; RECOVER PAGE VALUE
        SAL     BX,1                    ; *2 FOR WORD OFFSET
        MOV     AX,[BX+OFFSET CURSOR_POSN]      ; GET CURSOR FOR THIS PAGE
        CALL    M18                     ; SET THE CURSOR POSITION
        JMP     SHORT VIDEO_RETURN
ACT_DISP_PAGE   ENDP


Thank you!

---
https://gitlab.com/tkchia · https://codeberg.org/tkchia · 😴 "MOV AX,0D500H+CMOS_REG_D+NMI"

Back to the board
Thread view  Mix view  Order
22049 Postings in 2034 Threads, 396 registered users, 189 users online (0 registered, 189 guests)
DOS ain't dead | Admin contact
RSS Feed
powered by my little forum