%define DIV_ROUND(a, b) ((a) / (b) + ((a) % (b)) / ((b) / 2))
%macro setcursor 2
- mov dl, %1
- mov dh, %2
+ mov dx, %1 | (%2 << 8)
xor bx, bx
mov ah, 2
int 10h
out PIT_DATA0 + %1, al
%endmacro
-start: xor eax, eax
+start: xor ax, ax
mov ds, ax
mov es, ax
mov ss, ax
mainloop:
call drawbg
- mov dx, 3dah
-.invb: in al, dx
- and al, 8
- jnz mainloop
-.novb: in al, dx
- and al, 8
- jz .novb
-
push ds
push es
push es
xor di, di
xor si, si
mov cx, 32000
+
+ mov dx, 3dah
+.invb: in al, dx
+ and al, 8
+ jnz .invb
+.novb: in al, dx
+ and al, 8
+ jz .novb
+
rep movsw
pop es
pop ds
.fillgrad:
mov ax, bx
mov ah, al
- mov cx, 3680 ; 20 lines
+ mov cx, 2400 ; 15 lines
rep stosw
inc bx
cmp bx, 208
fiadd word [w5]
fimul word [w5]
fistp word [bp - 2]
- fistp word [bp - 4]
+ ;fistp word [bp - 4]
mov bx, [bp - 2]
add bx, 100
imul bx, bx, 320
add bx, cx
+.mntcol:
mov byte [es:bx], 0
+ add bx, 320
+ cmp bx, 64000
+ jb .mntcol
+
dec cx
jnz .mnt
timer_intr:
pusha
+ push ds
+ push word 0
+ pop ds
mov ax, [nticks]
inc ax
mov [nticks], ax
cmp ax, cx
jb .eoi
- inc dword [muscur]
+ inc word [muscur]
mov ax, [music + 2 + bx] ; event counter reload
test ax, ax
jz .off
.eoi: mov al, 20h
out 20h, al ; EOI
+ pop ds
popa
iret
str1: db 'message message blah',0
str2: db 'Michael & Athena',0
-G2 equ 24351/2
-C3 equ 18243/2
-D3 equ 16252/2
-B2 equ 19328/2
-F3 equ 13666/2
-E3 equ 14479/2
+G2 equ 12175
+C3 equ 9121
+D3 equ 8126
+B2 equ 9664
+F3 equ 6833
+E3 equ 7239
%define TM(x) (40 + (x) * 4)