Comments 16
Заголовок вообще жжёт, я как питонист очень оценил ;)
Курсор можно прятать, позиционируя за пределами окна вывода.
А delay можно было через BIOS tick counter сделать, без дергания прерываний. Счетчик лежит в слове 0:46Ch вроде.
А delay можно было через BIOS tick counter сделать, без дергания прерываний. Счетчик лежит в слове 0:46Ch вроде.
Позабыл уже какое именно, но есть какая-то функция у какого-то прерывания чтоб просто тупо спрятать курсор.
Это чтобы спрятать при начале игры, а не при каждой отрисовке. Можно сэкономить несколько тактов, да ;-)
Ну и восстановить при выходе не забыть.
Это чтобы спрятать при начале игры, а не при каждой отрисовке. Можно сэкономить несколько тактов, да ;-)
Ну и восстановить при выходе не забыть.
Я уже мало что помню. Больше 10 лет прошло со времен bios и т.п. кодинга. Может и была такая функция…
p.s. Да и если уж гнаться за тактами, то вообще лучше сразу в память писать.
p.s. Да и если уж гнаться за тактами, то вообще лучше сразу в память писать.
Нашел =)
Для включения:
Для выключения:
mov ax,0100h
mov cx,0506h
int 33
Для выключения:
mov ax,0100h
mov cx,2607h
int 10
33h 01h — GRTMOUSE. это какая-то прям специфика.
Действительно у меня в старом коде какая-то то ли ошибка, то ли опечатка. Должно быть (судя по вики)
Спасибо.
Для включения:
mov ax,0100h
mov cx,0607h
int 10
Спасибо.
А теперь то же самое в консоли на винапи :)
Месье знает толк в заголовках!
Черт у самого уже черти сколько валяется недописанная змейка на NASM (Win32), спасибо что напомнили — допишу.
10 лет назад мы с братом соревновались, кто напишет меньшую по размерам змейку, ползущую по диагонали и отражающуюся от краёв экрана. Я победил. :)
Код
.286
CSEG Segment
ASSUME CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG
ORG 100h
Program:
mov ax,0500h ; Set video
int 10h
mov ah,02h
mov dl,' '
mov cx,80*50
Clean:
int 21h
loop Clean
mov ax,351Ch ; Set timer
int 21h
push es
push bx
mov bh,0
xor bp,bp
mov ah,25h
mov dx,offset Timer
int 21h
mov ah,0 ; Waiting for a key
int 16h
mov ax,251Ch ; Kill timer
pop dx
pop ds
int 21h
ret
; --==< Drawing Interrupting Function >==--
Timer:
cli
push cs
pop ds
push cs
pop es
mov cx,5
mov si,offset Coord5
mov di,offset Line
DrawSnake:
mov ah,2 ; Set coordinates
mov dx,cs:[si]
int 10h
dec si
dec si
mov ah,0Ah ; Draw character
mov al,cs:[di]
push cx
mov cl,1
int 10h
pop cx
inc di
loop DrawSnake
mov cx,4 ; Trail tail
mov si,offset Coord4
mov di,offset Coord5
std
rep movsw
cmp byte ptr Coord1,0 ; Horizontal/vertical rebounce
je HorFlip
cmp byte ptr Coord1,79
je HorFlip
jmp NoHorFlip
HorFlip:
xor bp,01h
NoHorFlip:
cmp byte ptr Coord1+1,0
je VerFlip
cmp byte ptr Coord1+1,24
je VerFlip
jmp NoVerFlip
VerFlip:
xor bp,10h
NoVerFlip:
test bp,01h ; Move head
jz HorInc
dec byte ptr Coord1
jmp HorMoved
HorInc:
inc byte ptr Coord1
HorMoved:
test bp,10h
jz VerInc
dec byte ptr Coord1+1
jmp VerMoved
VerInc:
inc byte ptr Coord1+1
VerMoved:
mov ah,0
iret
Line db ' ░▒▓█'
Coord1 dw 0108h
Coord2 dw 0007h
Coord3 dw 0007h
Coord4 dw 0007h
Coord5 dw 0007h
CSEG ends
END Program
Sign up to leave a comment.
Python на Assembler (Tasm)