📄 jimu_asm.txt
字号:
data segment
pcid = 0
partbc = 0000b
partfc = 1111b
poolfc = 0000b
poolbc = 0000b
rectw = 13
poolh = 25
poolw =16
spart struc
k db -1
rs db 0
db 0
db 0
db 0
db 0
db 0
x db 0
y db 0
spart ends
;---------------------
part0 spart <-1>
part1 spart <-1>
part2 spart <-1>
part3 spart <-1>
parts spart <0, 1,0, 0,1, 1,1, 4,0>
parts1 spart <1, -1,0, 1,0, 0,1, 4,0>
parts2 spart <2, -1,0, 1,0, 1,1, 4,0>
parts3 spart <3, -1,0, 1,0,1,1, 4,0>
parts4 spart <4, -1,0, 0,1, 1,1, 4,0>
parts5 spart <5, -1,0, 0,1, 1,1, 4,0>
parts6 spart <6, -1,0, 1,0, 2,0, 4,0>
parts7 spart <7, 0,1, 0,2, 0,3, 4,0>
map dw poolh dup(0),0
eline db 0, 4 dup (-1)
count db 0
ess dw ?
bxx dw ?
lowest db 0 ;no.of map
nrandax db ?
vicd db 0
noteadd dw ?
stepval db 19
key db -1
db -1
_px = 245
_py = 100
_lpx = 179;557
_lpy = 100
data ends
;**********************************************
code segment
;--------------------------------------
p2s macro ppx,ppy,ssx,ssy
push ax
push bx
mov al, ppx
mov bl, rectw
imul bl
add ax, _px
mov ssx, ax
mov al, ppy
mov bl, rectw
imul bl
add ax, _py
mov ssy, ax
pop bx
pop ax
endm
;--------------------------------------
initg macro mode
mov ah,0
mov al,mode
int 10h
;-----------
mov ah,0bh
mov bh,0
mov bl,poolbc
int 10h
;--------------
mov ah,0bh
mov bx,0100h
int 10h
endm
;--------------------------------------
drawbar macro ww,hh,col
local verte,horie
mov ax,col
mov ah,0ch
sub bx,bx
dec cx
dec dx
verte: inc bx
inc dx
push bx
sub bx,bx
horie: inc bx
inc cx
int 10h
cmp bx,ww
jb horie
pop bx
sub cx,ww
cmp bx,hh
jb verte
endm
;--------------------------------------
drawfra macro ww,hh,col
local htop,hbot,vrig,vlef
push si
push di
mov si,ww
mov di,hh
dec si
dec di
mov ah, 0ch
mov al, col
sub bx, bx
htop:inc bx
inc cx
int 10h
cmp bx, si
jb htop
sub bx, bx
vrig:mov ah,0ch
mov al,col
inc bx
inc dx
int 10h
cmp bx, di
jb vrig
sub bx, bx
hbot:inc bx
dec cx
int 10h
cmp bx, si
jb hbot
sub bx, bx
vlef:inc bx
dec dx
int 10h
cmp bx, di
jb vlef
pop di
pop si
endm
;--------------------------------------
;------------------------------------------
modmapm macro nnn
local hamp1, hamp2, jmpadd3, jmpadd4, modmap, hampn
mov di, 0
mov si, 1
hamp2:mov cl, byte ptr part&nnn[si] ; x :col
cmp si, 7
je jmpadd3
add cl, part&nnn.x
jmpadd3:mov bh, byte ptr part&nnn[si+1] ; y :row
cmp si, 7
je jmpadd4
add bh, part&nnn.y
jmpadd4:mov bl, poolh-1
sub bl, bh
sub bh, bh
shl bl, 1
cmp bl, lowest
jnl modmap
mov lowest, bl
modmap:;shr bl, 1
mov ax, 1
shl ax, cl
or ax, map[bx]
mov map[bx], ax
hampn:add si, 2
cmp si, 9
jl hamp2
endm
;mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
main proc far
assume cs:code, ds:data, es:data
start:
push ds
sub ax, ax
push ax
mov ax, data
mov ds, ax
mov es, ax
initg 12H
call setirq
resta:cli
mov cx, _px
mov dx, _py
call drawscr
cmp key[1], 1
je endmain
;init data
mov count, 0
sub si, si
mapnt:mov map[si], 0 ;0 => map[]
add si, 2
cmp si, poolh*2
jne mapnt
nostart:
call wreadk
mov key, -1
mov key[1], -1
call pdnew
while1:sti
cmp key, -1
jne stepkey
mov dl, count ;no key
cmp dl, stepval
jbe while1 ;not to time
mov count, 0
stepkey:
cmp key, 1bh ;esc
je endmain
call dealkey
call check
mov ax, map[2*poolh-2] ; is died?
mov cl, 4
shr ax, cl
jnc while1
jmp resta
endmain:
call quit
ret
main endp
;mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
;------------------------
setirq proc near
mov al, 1ch ;get irt vector
mov ah, 35h
int 21h
mov ess, es ;save irt vector
mov bxx, bx
push ds
mov dx, offset scankey ;irq function
mov ax, seg scankey
mov ds, ax
mov al, 1ch
mov ah, 25h
int 21h
cli
pop ds
in al, 21h ;set irq
and al, 0feh
out 21h,al
ret
setirq endp
;-----------------------------
scankey proc near
push ax
push ds
mov ax, data
mov ds, ax
sti
rekeyy:add count, 1
call nwreadk
cmp key, -1
je ireturn
ireturn:
cli
mov al, 20h ;EOI
out 20h,al
pop ds
pop ax
iret
scankey endp
;-------------------------------------
wreadk proc near ;readkey to al(ascii),ah(scan)
mov ah, 0
int 16h
mov key, al ;ascii
mov key[1], ah ;scan code
mov ax, 0c00h
int 21h ;clear buf
ret
wreadk endp
;-------------------------------------
nwreadk proc near
mov ah, 1
int 16h
jz nokeyin
mov key, al ;ascii
mov key[1], ah ;scan code
mov ax, 0c00h
int 21h
jmp endnwreadk
nokeyin:
mov key, -1
mov key[1], -1
endnwreadk:
ret
nwreadk endp
;-------------------------------------
drawscr proc near
;-------------------draw pool
mov cx, _px
mov dx, _py
drawbar poolw*rectw,poolh*rectw,poolfc
mov cx, _px-2
mov dx, _py-2
mov si, poolw*rectw
mov di, poolh*rectw
dsag: add si, 4
add di, 4
drawfra si,di,partbc
sub cx, 2
sub dx, 2
cmp si, poolw*rectw+20
jne dsag
mov cx,_lpx
mov dx,_lpy
;drawbar rectw+6,rectw*poolh,poolfc
mov cx, _lpx-1
mov dx, _lpy-1
mov si, rectw+6
mov di, rectw*poolh
ret
drawscr endp
;--------------------------------------
drawrect proc near
;transfer coeff: al(x),ah(y),bl(show)
;use ax,bx,cx,dx
push cx
push dx
push bx
mov bx, ax
p2s bl,bh,cx,dx
pop bx
push bx
cmp bl, 0
je erase
drawfra rectw,rectw,partbc
inc cx
inc dx
drawbar rectw-2,rectw-2,partfc
jmp enddr
erase:drawbar rectw,rectw,poolfc
enddr:pop bx
pop dx
pop cx
ret
drawrect endp
;--------------------------------------
drawpart proc near
push ax
push si
mov al, part0.k
cmp al, -1
je drawp2
;---------make p0 dispear
mov si, 0
mov bl, 0
dp11:mov al, part0.rs[si]
mov ah, part0.rs[si+1]
add al, part0.x
add ah, part0.y
call drawrect
add si, 2
cmp si, 6
jb dp11
mov al, part0.rs[si]
mov ah, part0.rs[si+1]
call drawrect
;-----------show part1
drawp2:mov al,part3.k
cmp al,-1
je drawp3
sub si, si
mov bl, 0
dp44:mov al, part3.rs[si]
mov ah, part3.rs[si+1]
add al, poolw+12
add ah, 0
call drawrect
add si, 2
cmp si, 6
jb dp44
mov al, poolw+12
mov ah, 0
call drawrect
drawp3:sub si, si
mov bl, 1
dp33:mov al, part2.rs[si]
mov ah, part2.rs[si+1]
add al, poolw+12
add ah, 0
call drawrect
add si, 2
cmp si, 6
jb dp33
mov al, poolw+12
mov ah, 0
call drawrect
drawp1:sub si, si
mov bl, 1
dp22:mov al, part1.rs[si]
mov ah, part1.rs[si+1]
add al, part1.x
add ah, part1.y
call drawrect
add si, 2
cmp si, 6
jb dp22
mov al, part1.rs[si]
mov ah, part1.rs[si+1]
call drawrect
pop si
pop ax
ret
drawpart endp
;--------------------------------------
dealkey proc near
push ax
push si
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -