Here are two small gems concerning video speed bootsup. One for Cirrus Logic and one for S3.
You can obtain better performance with a Cirrus Logic 542x, if you add these lines in your code (even with Mode X):
mov dx,3c4h mov al,0fh out dx,al inc dl in al,dx and al,NOT(8+16+32) or al,(6 SHL 3) ; 32 bit mode + CRT FIFO depth control out dx,al dec dl mov al,16h out dx,al inc dl in al,dx and al,15 or al,(0 SHL 4)+(2 SHL 6) ; delay for mem Write I/O out dx,alIt basically reduces the DRAMs wait states. I think that Complex used a similar trick in Dope. Normally there are no problems, but it's always a good idea to allow the user to disable the booster.
S3 cards can be accelerated by the following code:
; read(port, index, value) ; write(port, index, value) ; dx = port ; dx = port ; al = index ; al = index ; value -> ah ; ah = value PROC Read3D4 NEAR PROC Write3D4 NEAR mov dx,3d4h mov dx,3d4h out dx,al out dx,al mov ah,al xchg ah,al inc dx inc dx in al,dx out dx,al xchg ah,al xchg ah,al dec dx dec dx ret ret ENDP Read3D4 ENDP Write3D4 ENDP ; enable extensions PROC ExtON NEAR mov ax,4838h ; extensions enable (enable extended registers) call Write3D4 ; write(3d4h, 38h, 48h) mov ax,0A039h ; extensions enable2 call Write3D4 ; write(3d4h, 39h, a0h) ret ENDP ExtON ; disable extensions PROC ExtOFF NEAR mov ax,0038h ; disable extended registers call Write3D4 ; write(3d4h, 38h, 00h) mov ax,0039h ; disable2 call Write3D4 ; write(3d4h, 39h, 00h) ret ENDP ExtOFF ; enable linear and set vidmem to 0a0000h PROC MAP_A000H NEAR pusha mov bl,0ECh mov bh,10h mov cx,000Ah call ExtON ; enable extensions mov al,058h ; linear aperture options / bit 2 call Read3D4 ; ah = read(3d4h, 58h) and ah,0ECh ; clear bit 0,1 and 4 call Write3D4 ; write(3d4h, 58h, new AH) mov al,059h ; bit 0-1: linear memory address bit 8-9 mov ah,ch call Write3D4 ; write(3d4h, 59h, 00h) inc al ; 05Ah : bit 0-7 = linear mem address bit 0-7 mov ah,cl ; in 64k units ??? call Write3D4 ; write(3d4h, 5Ah, 0Ah) mov al,058h ; linear aperture options call Read3D4 ; ah = read(3d4h, 58h) and ah,bl ; and ah,ECh -> clear bit 0,1 and 4 or ah,bh ; or ah,10h (OR or ah,00h) -> set bit 4 call Write3D4 ; write(3d4h, 58h, new AH) call ExtOFF ; disable extensions popa ret ENDP MAP_A000H PROC FAST_WRITE_BUFFER_ON NEAR pusha call ExtON ; enable extensions mov al,40h ; bit 0: if set enables 8514/A mode call Read3D4 ; * 3: (801,805,928) Fast Write Buffer ON * or ah,08h ; 6: (801,805,928) Zero Wait State OFF (EISA) call Write3D4 ; set bit 3 to ON call ExtOFF ; disable extensions popa ret ENDP FAST_WRITE_BUFFER_ONIf you want to boost an SVGA mode banked, just type:
call MAP_A000h call FAST_WRITE_BUFFER_ONIf you want to boost an SVGA mode FLAT linear, just type:
call FAST_WRITE_BUFFER_ON