Code: Select all
STATUS_ADDR EQU 03DAH
MISC_ADDR EQU 03C2H
SEQ_ADDR EQU 03C4H
GRACON_ADDR EQU 03CEH
CRTC_ADDR EQU 03D4H
ATTRCON_ADDR EQU 03C0H
MODEK DB 63H, 00H, 03H,01H,03H,00H,02H
DB 5FH,4FH,50H,82H,55H,81H,0BFH,1FH,00H,47H,06H,07H,00H,00H,00H
DB 00H,9CH,8EH,8FH,28H,1FH,96H,0B9H,0A3H,0FFH
DB 00H,00H,00H,00H,00H,10H,0EH,00H,0FFH
DB 00H,01H,02H,03H,04H,05H,14H,07H,10H,11H,3AH,3BH,3CH,3DH,3EH,3FH
DB 0CH,00H,0FH,00H,00H
SETMODE:
; Send MISC regs
MOV DX,MISC_ADDR
MOV AL,[SI]
OUT DX,AL
JMP $+2
INC SI
MOV DX,STATUS_ADDR
MOV AL,[SI]
OUT DX,AL
JMP $+2
INC SI
; Send SEQ regs
MOV CX,0
REG_LOOP:
MOV DX,SEQ_ADDR
MOV AL,CL
OUT DX,AL
JMP $+2
MOV DX,SEQ_ADDR
INC DX
MOV AL,[SI]
OUT DX,AL
JMP $+2
INC SI
INC CX
CMP CL,5
JL REG_LOOP
; Clear Protection bits
MOV AH,0EH
MOV AL,11H
AND AH,7FH
MOV DX,CRTC_ADDR
OUT DX,AX
JMP $+2
; Send CRTC regs
MOV CX,0
REG_LOOP2:
MOV DX,CRTC_ADDR
MOV AL,CL
OUT DX,AL
JMP $+2
MOV DX,CRTC_ADDR
INC DX
MOV AL,[SI]
OUT DX,AL
JMP $+2
INC SI
INC CX
CMP CL,25
JL REG_LOOP2
; Send GRAPHICS regs
MOV CX,0
REG_LOOP3:
MOV DX,GRACON_ADDR
MOV AL,CL
OUT DX,AL
JMP $+2
MOV DX,GRACON_ADDR
INC DX
MOV AL,[SI]
OUT DX,AL
JMP $+2
INC SI
INC CX
CMP CL,9
JL REG_LOOP3
MOV DX,STATUS_ADDR
IN AL,DX
JMP $+2
; Send ATTRCON regs
MOV CX,0
REG_LOOP4:
MOV DX,ATTRCON_ADDR
IN AX,DX
MOV AL,CL
OUT DX,AL
JMP $+2
MOV AL,[SI]
OUT DX,AL
JMP $+2
INC SI
INC CX
CMP CL,21
JL REG_LOOP4
MOV AL,20H
OUT DX,AL
JMP $+2
RET
...
YOURCODE:
MOV SI,OFFSET MODEK
CALL SETMODE
Then, immediately after that, you should set proper palette and load a 80x50 font, which isn't described in the code.