I am a beginner at Assembly. I am trying to make a DDR like game. Can someone please help me call the audio (SONG1 PROC) properly in the play window alongside with the graphics? The graphics are messed up whenever I try to call the audio. I cannot post the code since it's 1000+ lines. I'm not allowed to post asm file either so I posted it as txt. I run it with MASM. Thank you.
digifort 0 Newbie Poster
The attachment preview is chopped off after the first 10 KB. Please download the entire file.
.MODEL SMALL
.STACK 64
.DATA
;main menu
PLAY DB "PLAY", "$" ;play option
SETTINGS DB "SETTINGS", "$" ;settings option
HELP DB "HELP", "$" ;help option
EXIT DB "EXIT","$" ;exit option
HELPMSG DB "Just beat it!", "$" ;message contained in help
GOBACK DB "GO BACK", "$" ;go back option
LEVELMSG DB "LEVEL: ", "$" ;current level label
LIFEBARMSG DB "LIFE: ", "$" ;life status label
SCOREMSG DB "SCORE: ", "$" ;score label
EASYMSG DB "EASY", "$" ;easy level
MEDMSG DB "MEDIUM", "$" ;medium level
DIFFMSG DB "DIFFICULT", "$" ;difficult level
EASYSONG DB "SILENT NIGHT", "$" ;easy song
MEDSONG DB "THE SNOW MAN", "$" ;medium song
DIFFSONG DB "JINGLE BELLS", "$" ;difficult song
;performance messages
EXCMSG DB "EXCELLENT!", "$" ;print excellent
VGMSG DB "GREAT! ", "$" ;print great
BOOMSG DB "BAD! ", "$" ;print bad
MISSMSG DB "MISS! ", "$" ;print miss
GAMEOVER DB "GAME OVER! " , "S" ;print game over
;borders
ROW DB 10 ;row
COL DB 34 ;column
BROW DB 0 ;border row
BCOL DB 0 ;border column
MROW DB ? ;message row
MCOL DB ? ;message column
LEVEL DB 1 ;level
REMARKS DB 0 ;remarks
LIMCOL DB ?
LIMROW DB ?
ORIGBCOL DB ?
ORIGBROW DB ?
TOPEDGE DB 10
BOTTOMEDGE DB 16
BLANK DB " ", "$"
STATUS DB ?
COMBO DB 0
comboA DB 0
comboB DB 0
comboC DB 0
SCORE DB 0
scoreA DB 0
scoreB DB 0
scoreC DB 0
LIFE DB 10
LIFECTR DB 0
BALL1 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
RAND DB ?
B1D DB 0 ;Added delay for ball 1
B2D DB 0 ;Added delay for ball 2
B3D DB 0 ;Added delay for ball 3
B4D DB 0 ;Added delay for ball 4
TEMP DB ?
TEMPCTR DB ?
DEAD DB 0
DEADCTR DB 0
.CODE
STORE DW 0 ;our memory location storage (needed in sounds code)
;cursor in the main menu
DISPLAYCURSOR PROC NEAR
MOV AH, 02h ;place cursor on defined position
MOV BH, 0h
MOV DH, ROW ;set row position of cursor
MOV DL, COL ;set column position of cursor
INT 10h
MOV AH, 9 ;display the cursor
MOV AL, 16 ;character
MOV BL, 0Eh ;color of char in cursor
MOV BH, 0
MOV CX, 1
INT 10h
MOV AH, 08h ;keyboard input
INT 21h
CMP AL, 72 ;72, ASCII code for up arrow key in dec
JE @MOVEUP
CMP AL, 119 ;119, ASCII code for 'w' in dec
JE @MOVEUP
CMP AL, 80 ;80, ASCII code for down arrow key in dec
JE @MOVEDOWN
CMP AL, 115 ;115, ASCII code for 's' in dec
JE @MOVEDOWN
CMP STATUS, 2
JNE @RET
MOV CH, TOPEDGE
CMP ROW, CH
JNE @RET
CMP AL, 77
JE @MOVELEVEL
CMP AL, 100
JE @MOVELEVEL
JMP @RET
@MOVELEVEL:
CMP LEVEL, 3
JL @INCLEVEL
MOV LEVEL, 1
JMP @RET
@INCLEVEL:
INC LEVEL
JMP @RET
@MOVEUP: ; Arrow Up ('w' or up arrow key pressed)
MOV CH, TOPEDGE
CMP ROW, CH ;if row is less than 0, it means the cursor is already 'outside' the screen at its leftmost
JE @TOPEDGE
SUB ROW, 2
CMP STATUS, 2
JNE @RET
CMP ROW, 12
JNE @RET
SUB ROW, 2
JMP @RET
@MOVEDOWN: ; Arrow Down ('s' or down arrow key pressed)
MOV CH, BOTTOMEDGE
CMP ROW, CH ;if row is equal to 25, it means the cursor is already 'outside' the screen at its bottommost
JE @BOTTOMEDGE
ADD ROW, 2
CMP STATUS, 2
JNE @RET
CMP ROW, 12
JNE @RET
ADD ROW, 2
JMP @RET
@TOPEDGE:
MOV CH, BOTTOMEDGE
MOV ROW, CH
JMP @RET
@BOTTOMEDGE:
MOV CH, TOPEDGE
MOV ROW, CH
JMP @RET
@RET:
RET
DISPLAYCURSOR ENDP
;exit message
EXITMESSAGE PROC NEAR
MOV AH , 02h
MOV BH , 0h
MOV DH , MROW
MOV DL , 36
INT 10H
MOV AH , 9
MOV DX , offset EXIT
INT 21H
RET
EXITMESSAGE ENDP
;go back message
GOBACKMESSAGE PROC NEAR
MOV AH , 02h
MOV BH , 0h
MOV DH , MROW
MOV DL , 36
INT 10H
MOV AH , 9
MOV DX , offset GOBACK
INT 21H
RET
GOBACKMESSAGE ENDP
;help message
HELPMESSAGE PROC NEAR
MOV AH , 02h
MOV BH , 0h
MOV DH , MROW
MOV DL , 36
INT 10H
MOV AH , 9
MOV DX , offset HELP
INT 21H
RET
HELPMESSAGE ENDP
;horizontal border
HORBORDER PROC NEAR
MOV CH, BCOL
MOV ORIGBCOL, CH
@HORBORDER:
MOV BH, 0
MOV DH, BROW
MOV DL, BCOL
MOV AH, 02H
INT 10H
MOV AH, 9
MOV AL, 09
MOV BL, 0Ch
MOV BH, 0
MOV CX, 1
INT 10H
ADD BCOL, 2
MOV CH, LIMCOL
CMP BCOL, CH
JL @HORBORDER
MOV CH, ORIGBCOL
ADD CH, 1
MOV BCOL, CH
@HORBORDER2:
MOV BH, 0
MOV DH, BROW
MOV DL, BCOL
MOV AH, 02H
INT 10H
MOV AH, 9
MOV AL, 09
MOV BL, 0Ah
MOV BH, 0
MOV CX, 1
INT 10H
ADD BCOL, 2
MOV CH, LIMCOL
CMP BCOL, CH
JL @HORBORDER2
MOV BCOL, 0
RET
HORBORDER ENDP
;level message
LEVELMESSAGE PROC NEAR
MOV AH , 02h
MOV BH , 0h
MOV DH , MROW
MOV DL , MCOL
INT 10H
MOV AH , 9
MOV DX , offset LEVELMSG
INT 21H
RET
LEVELMESSAGE ENDP
;play message
PLAYMESSAGE PROC NEAR
MOV AH , 02h
MOV BH , 0h
MOV DH , MROW
MOV DL , 36
INT 10H
MOV AH , 9
MOV DX , offset PLAY
INT 21H
RET
PLAYMESSAGE ENDP
;arrow
ARROW PROC NEAR
MOV BH, 0
MOV DH, MROW
MOV DL, MCOL
MOV AH, 02H
INT 10H
MOV AH, 9
RET
ARROW ENDP
;space
SPACE PROC NEAR
MOV BH, 0
MOV DH, MROW
MOV DL, MCOL
MOV AH, 02H
INT 10H
MOV AH, 9
MOV AL, ' '
MOV BX, 00010111b
MOV CX, 5
INT 10H
RET
SPACE ENDP
;print arrows
PRINTARROWS PROC NEAR
CALL ARROW ;first arrow
MOV AL, 27
MOV BX, 00010111b
MOV CX, 1
INT 10H
INC MCOL
CALL SPACE
ADD MCOL, 4 ;column size of the blue one that receives particular arrows
CALL ARROW ;second arrow
MOV AL, 24
MOV BX, 00010111b
MOV CX, 1
INT 10H
INC MCOL
CALL SPACE
ADD MCOL, 4
CALL ARROW ;third arrow
MOV AL, 25
MOV BX, 00010111b
MOV CX, 1
INT 10H
INC MCOL
CALL SPACE
ADD MCOL, 4
CALL ARROW ;fourth arrow
MOV AL, 26
MOV BX, 00010111b
MOV CX, 1
INT 10H
RET
PRINTARROWS ENDP
;print borders
PRINTBORDER PROC NEAR
MOV AX, 600h
MOV BH, 7
MOV CH , 1
MOV CL , 0
MOV DX, 184fh
INT 10h
MOV BROW, 0
MOV BCOL, 0
MOV LIMROW, 25
CALL VERBORDER
MOV BROW, 0
MOV BCOL, 79
MOV LIMROW, 25
CALL VERBORDER
MOV BROW, 0
MOV BCOL, 1
MOV LIMCOL, 79
CALL HORBORDER
MOV BROW, 24
MOV BCOL, 1
MOV LIMCOL, 79
CALL HORBORDER
RET
PRINTBORDER ENDP
PRINTCOMBO PROC NEAR
MOV BH, 0
MOV DH, 23
MOV DL, 52
MOV AH, 02H
INT 10H
MOV AH, 9
MOV AL, 'x'
MOV BL, 0Eh
MOV BH, 0
MOV CX, 1
INT 10H
MOV BH, 0
MOV DH, 23
MOV DL, 54
MOV AH, 02H
INT 10H
MOV AL, 00
MOV AH, 00
MOV AL, COMBO
MOV CH, 100
DIV CH
MOV comboC, AL
MOV comboB, AH
MOV AL, 00
MOV AH, 00
MOV AL, comboB
MOV CH, 10
DIV CH
MOV comboB, AL
MOV comboA, AH
CMP comboC, 0
JNE @printComboC
CMP comboB, 0
JNE @printComboB
JMP @printComboA
@printComboC:
ADD comboC, '0'
MOV DL, comboC
MOV AH, 02H
INT 21H
SUB comboC, '0'
@printComboB:
ADD comboB, '0'
MOV DL, comboB
MOV AH, 02H
INT 21H
SUB comboB, '0'
@printComboA:
ADD comboA, '0'
MOV DL, comboA
MOV AH, 02H
INT 21H
SUB comboA, '0'
RET
PRINTCOMBO ENDP
PRINTLEVEL PROC NEAR
MOV AH , 02h
MOV BH , 0h
MOV DH , MROW
MOV DL , MCOL
INT 10H
MOV AH , 9
CMP LEVEL, 1
JE @PRINTEASY
CMP LEVEL, 2
JE @PRINTMED
MOV DX , offset DIFFMSG
JMP @RET
@PRINTEASY:
MOV DX , offset EASYMSG
JMP @RET
@PRINTMED:
MOV DX , offset MEDMSG
@RET:
INT 21h
RET
PRINTLEVEL ENDP
PRINTLIFE PROC NEAR
MOV AH, 02h
MOV BH, 0h
MOV DH, MROW
MOV DL, MCOL
INT 10H
MOV AH, 9
MOV DX, offset LIFEBARMSG
INT 21H
ADD MCOL, 7
; Print life
MOV DH, MROW ;set row number
MOV DL, MCOL ;set col number
MOV AH, 02h ;position char at row,col
MOV BH, 0 ;video page 0
INT 10h ;video BIOS call
MOV AH, 9
MOV AL, 219 ;#219 ASCII character
CMP DEAD, 4
JL @COLORGREEN
CMP DEAD, 7
JL @COLORYELLOW
MOV BL, 04h ;color of char
@CONTINUE:
MOV BH, 0
MOV CX, 10 ;number of copies of character
INT 10h
JMP @GO
@COLORGREEN:
MOV BL, 02h
JMP @CONTINUE
@COLORYELLOW:
MOV BL, 06h
JMP @CONTINUE
@GO:
ADD MCOL, 10
@AGAIN:
MOV CH, DEADCTR
CMP DEAD, CH
JG @MINUSLIFE
JMP @RET
@MINUSLIFE:
MOV DH, MROW ;set row number
MOV DL, MCOL ;set col number
MOV AH, 02h ;position char at row,col
MOV BH, 0 ;video page 0
INT 10h ;video BIOS call
MOV AH, 9
MOV AL, 219 ;character
MOV BL, 0h ;color of char
MOV BH, 0
MOV CX, 1 ;number of copies of character
INT 10h
DEC MCOL
INC DEADCTR
JMP @AGAIN
@RET:
MOV DEADCTR, 0
RET
PRINTLIFE ENDP
PRINTPLAYBORDER PROC NEAR
CALL PRINTBORDER
MOV BROW, 3
MOV BCOL, 0
MOV LIMCOL, 79
CALL HORBORDER
MOV BROW, 6
MOV BCOL, 0
MOV LIMCOL, 58
CALL HORBORDER
MOV BROW, 21
MOV BCOL, 0
MOV LIMCOL, 58
CALL HORBORDER
MOV BROW, 4
MOV BCOL, 19
MOV LIMROW, 6
CALL VERBORDER
MOV BROW, 4
MOV BCOL, 38
MOV LIMROW, 6
CALL VERBORDER
MOV BROW, 22
MOV BCOL, 30
MOV LIMROW, 25
CALL VERBORDER
MOV BROW, 22
MOV BCOL, 50
MOV LIMROW, 25
CALL VERBORDER
MOV BROW, 1
MOV BCOL, 58
MOV LIMROW, 25
CALL VERBORDER
RET
PRINTPLAYBORDER ENDP
PRINTREMARKS PROC NEAR
MOV AH , 02h
MOV BH , 0h
MOV DH , 23
MOV DL , 32
INT 10H
MO
- 1 Contributor
- 0 Replies
- 205 Views
Be a part of the DaniWeb community
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.