77 lines
1.2 KiB
Plaintext
Executable file
77 lines
1.2 KiB
Plaintext
Executable file
:ASM textmode
|
|
MOV AX 0x03 #
|
|
INT 0x10 #
|
|
NEXT
|
|
|
|
0 VAR, textpageid
|
|
0 VAR, textpage
|
|
:t page! dup textpageid ! 12 << textpage ! ;
|
|
|
|
:ASM showpage
|
|
POP AX
|
|
MOV AH 0x05 #
|
|
INT 0x10 #
|
|
NEXT
|
|
|
|
:ASM movecursor ( xy -- )
|
|
MOV BH textpageid @+
|
|
MOV AH 0x02 #
|
|
POP DX
|
|
INT 0x10 #
|
|
NEXT
|
|
|
|
:ASM cursorshape! ( shape -- )
|
|
POP CX
|
|
MOV AH 0x01 #
|
|
INT 0x10 #
|
|
NEXT
|
|
|
|
:t hidecursor 0x2607 cursorshape! ;
|
|
:t showcursor 0x0607 cursorshape! ;
|
|
|
|
0x0f VAR, textpen
|
|
|
|
80 CONST pagew
|
|
25 CONST pageh
|
|
|
|
0xb800 CONST TEXTMEM
|
|
: PREP-TEXTCOPY
|
|
MOV ES t& TEXTMEM @+
|
|
MOV AH textpen @+
|
|
MOV DI textpage @+ ;
|
|
|
|
:ASM fill-page ( char -- )
|
|
INT 3 #
|
|
POP AX
|
|
PREP-TEXTCOPY
|
|
MOV CX pagew pageh * #
|
|
REPZ STOSW
|
|
NEXT
|
|
|
|
0 VAR, textpos
|
|
:t textx textpos @ 1 >> pagew % ;
|
|
:t texty textpos @ 1 >> pagew / ;
|
|
:t textx! texty pagew 1 << * + textpos ! ;
|
|
:t texty! pagew 1 << * textx + textpos ! ;
|
|
:t nextline texty 1+ pagew 1 << * textpos ! ;
|
|
|
|
: PREP-TEXTCOPY-XY
|
|
PREP-TEXTCOPY
|
|
ADD DI textpos @+ ;
|
|
|
|
:ASM draw-text ( s -- )
|
|
MOV BX SI
|
|
POP SI
|
|
PREP-TEXTCOPY-XY
|
|
L: draw-next-char
|
|
LODSB
|
|
OR AL AL
|
|
JZ 0 @>
|
|
STOSW
|
|
JMP draw-next-char
|
|
0 <:
|
|
SUB DI textpage @+
|
|
MOV textpos @+ DI
|
|
MOV SI BX
|
|
NEXT
|