-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathsc.asm
464 lines (360 loc) · 16.7 KB
/
sc.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
;Deklarasi Model Program yang Digunakan
.MODEL SMALL
;Inisialisasi Stack yang akan digunakan
.STACK 100H
.DATA
;Segment Data
;DEKLARASI JUDUL
TIT1 db 13,10, 13, 10, 13,10 , 13,10, 13, 10, 13, 10, 13, 10, ' ___ _____ _ _ ______ _' , 13, 10, '$'
TIT2 db ' / _ \ / ___|| | | | | ___ (_)' , '$'
TIT3 db 13,10, ' / /_\ \\ `--. | | | |_ __ | |_/ /_ __ _ _ __ ___' , '$'
TIT4 db 13,10, ' | _ | `--. \| | | | __| | __/| |/ _ | _ \ / _ \' , '$'
TIT5 db 13,10, ' | | | |/\__/ /\ \_/ / | | | | | (_| | | | | (_) |' , '$'
TIT6 db 13,10, ' \_| |_/\____/ \___/|_| \_| |_|\__,_|_| |_|\___/' , '$'
TIT7 db 13,10,13, 10, 13, 10, ' Virtual Piano ASCII BASED Graphic ' , '$'
TIT8 db 13,10,13, 10, 13, 10, ' Press any Key to continue.... ' , '$'
;MAIN INTERFACE
PIN1 db 13,10, 13, 10, 13,10 , 13,10, 13, 10, 13, 10, ' _________________________________________________________' , 13, 10, '$'
PIN2 db ' X+++++++++++++++++++++++++++++++++++++++++++++++++++++++X' , '$'
PIN3 db 13,10, ' X | | | | | | | | | | | | | | | | | | X' , '$'
PIN4 db 13,10, ' X | | | | | | | | | | | | | | | | | | X' , '$'
PIN5 db 13,10, ' X | |2| |3| | |5| |6| |7| | |9| |0| | X' , '$'
PIN6 db 13,10, ' X | |_| |_| | |_| |_| |_| | |_| |_| | X' , '$'
PIN7 db 13,10, ' X | | | | | | | | | | | X' , '$'
PIN8 db 13,10, ' X | q | w | e | r | t | y | u | i | o | p | X' , '$'
PIN9 db 13,10, ' X |___|___|___|___|___|___|___|___|___|___| X' , '$'
PIN0 db 13,10, ' X X' , '$'
PINA db 13,10, ' XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' , '$'
PINB db 13,10,13,10,13,10, ' Press v to EXIT' , '$'
;EXIT INTERFACE
EXT1 db 13,10, 13, 10, 13,10 , 13,10, 13, 10, ' ENVERIESAGE STUDIOS' , 13, 10, '$'
EXT2 db 13,10, ' @2019' , '$'
EXT3 db 13,10, ' __________________________________' , '$'
EXT4 db 13,10, ' / o oooo ooo oooo o o o /\ ' , '$'
EXT5 db 13,10, ' / oo ooo oo oooo o o o / / ' , '$'
EXT6 db 13,10, ' / _________________________ / / ' , '$'
EXT7 db 13,10, ' / // / // /// // /// // /// / / / / ' , '$'
EXT8 db 13,10, ' /___ //////////////////////////___/ / ' , '$'
EXT9 db 13,10, ' \____\________________________\___\/ ' , '$'
EXTB db 13,10,13,10,13,10, ' Press any Key to continue....' , '$'
;Input Variable
INPUT DB 128 (?)
PETUN DB 'A = DO; S = MI; D = SOL; >> 0 UNTUK KELUAR' ,13,10, '$'
STOR DW 0 ;MEMORY
.CODE
.STARTUP
JMP FIRST
;FUNGSI MATIKAN CURSOR
CURS_OFF PROC NEAR
MOV CH, 10h ;SET BIT UNTUK MATIKAN CURSOR
MOV AH, 01H ;MASUKAN FUNGSI KURSOR
INT 10h ;PANGGIL ROM BIOS VIDEO SERVICE
RET
CURS_OFF ENDP
CLR_KEYB PROC NEAR
PUSH ES ;SIMPAN ES
PUSH DI ;SIMPAN DI
MOV AX, 40H ;BIOS SEGMEN DIDALAM AX
MOV ES, AX ;TRANSFER KE ES
MOV AX, 1AH ;KEYBOARD POINTER DIDALAM AX
MOV DI, AX ;MASUKAN KE DI
MOV AX, 1EH ;KEYBOARD BUFFER MULAI DARI AX
MOV ES: WORD PTR [DI], AX ;PINDAHKAN KE HEAD POINTER
INC DI ;PINDAHKAN POINTER KE KEYBOARD TAIL POINTER
INC DI
MOV ES: WORD PTR [DI], AX ;PINDAHKAN KE TAIL POINTER
POP DI ;RESTORE DI
POP ES ;RESTORE ES
RET
CLR_KEYB ENDP
;GENERATE SOUND
SOUNDER PROC NEAR
MOV AL, 0B6H ;LOAD CONTROL
OUT 43H, Al ;SEND
MOV AX, STOR ;MASUKAN FREKUENSI KE AX
OUT 42H, AL ;SEND LSB
MOV AL, AH ;MOVE MSB KE AL
OUT 42H, AL ;SEND MSB
IN AL, 061H ;DAPATKAN STATE PORT 61H
OR AL, 03H ;NYALAKAN SPEAKER
OUT 61H, AL ;SPEAKER MENYALA
CALL DELAY ;DELAY
AND AL, 0FCH ;MATIKAN SPEAKER
OUT 61H, AL ;SPEAKER MATI
CALL CLR_KEYB ;PANGGIL FUNGSI CLEAR KEYBOARD
RET
SOUNDER ENDP
;FUNGSI NYALAKAN CURSOR
CURS_ON PROC NEAR
MOV CX, 0506h ;SET BIT UNTUK NYALAKAN CURSOR
MOV AH, 01H ;MASUKAN FUNGSI KURSOR
INT 10H ;PANGGIL ROM BIOS VIDEO SERVICE
RET
CURS_ON ENDP
;DELAY NADA
DELAY:
MOV AH, 00H ;FUNGSI 0H - DAPATKAN SYSTEM TIMER
INT 01AH ;PANGIL ROM BIOS TIME-OF-DAY SERVICES
ADD DX, 4 ;MASUKAN NILAI DELAY
MOV BX, DX ;STORE HASILNYA KE BX
PZ PROC
INT 01AH ;PANGGIL ROM BIOS TIME-OF-DAY SERVICES
CMP DX, BX ;COMPARE DENGAN BX, APAKAH SUDAH SELESAI DELAY ?
JL PZ ;JIKA BELUM LOOPING
RET
PZ ENDP
MAIN:
MOV AX, 0003h
MOV BX, 0000h
MOV DX, 0000h
INT 10H
MOV AX, @DATA
MOV DS, AX
CALL CURS_OFF
;ASCII Penampilan
LEA DX, PIN1
MOV AH, 09H
INT 21H
LEA DX, PIN2
MOV AH, 09H
INT 21H
LEA DX, PIN3
MOV AH, 09H
INT 21H
LEA DX, PIN4
MOV AH, 09H
INT 21H
LEA DX, PIN5
MOV AH, 09H
INT 21H
LEA DX, PIN6
MOV AH, 09H
INT 21H
LEA DX, PIN7
MOV AH, 09H
INT 21H
LEA DX, PIN8
MOV AH, 09H
INT 21H
LEA DX, PIN9
MOV AH, 09H
INT 21H
LEA DX, PIN0
MOV AH, 09H
INT 21H
LEA DX, PINA
MOV AH, 09H
INT 21H
LEA DX, PINB
MOV AH, 09H
INT 21H
JMP GETIN
;SCAN INPUT KEYBOARD
GETIN:
MOV AH, 08H ;SCAN IMPUT USER
MOV INPUT, AL
INT 21H
JMP X
NDO:
MOV AX, 2280 ;NILAI DO
MOV STOR, AX
CALL SOUNDER ;PUTAR NADA
JMP GETIN
NRE:
MOV AX, 2031 ;NILAI RE
MOV STOR, AX
CALL SOUNDER ;PUTAR NADA
JMP GETIN
NMI:
MOV AX, 1809 ;NILAI MI
MOV STOR, AX
CALL SOUNDER ;PUTAR NADA
JMP GETIN
NFA:
MOV AX, 1715 ;NILAI FA
MOV STOR, AX
CALL SOUNDER ;PUTAR NADA
JMP GETIN
NSOL:
MOV AX, 1521 ;NILAI SOL
MOV STOR, AX
CALL SOUNDER ;PUTAR NADA
JMP GETIN
NLA:
MOV AX, 1355 ;NILAI LA
MOV STOR, AX
CALL SOUNDER ;PUTAR NADA
JMP GETIN
NSI:
MOV AX, 1207 ;NILAI SI
MOV STOR, AX
CALL SOUNDER ;PUTAR NADA
JMP GETIN
NDOH:
MOV AX, 1140 ;NILAI DO TINGGI
MOV STOR, AX
CALL SOUNDER ;PUTAR NADA
JMP GETIN
NREH:
MOV AX, 1015 ;NILAI RE TINGGI
MOV STOR, AX
CALL SOUNDER ;PUTAR NADA
JMP GETIN
NMIH:
MOV AX, 0905 ;NILAI MI TINGGI
MOV STOR, AX
CALL SOUNDER ;PUTAR NADA
JMP GETIN
X:
CMP AL,"q" ;JIKA USER MASUKAN a > DO
JE NDO
CMP AL,"2" ;JIKA USER MASUKAN 2 > DOS
JE NDOS
CMP AL,"w" ;JIKA USER MASUKAN w > RE
JE NRE
CMP AL,"3" ;JIKA USER MASUKAN 3 > DOS
JE NRES
CMP AL,"e" ;JIKA USER MASUKAN e > MI
JE NMI
CMP AL,"r" ;JIKA USER MASUKAN r > FA
JE NFA
CMP AL,"t" ;JIKA USER MASUKAN t > SOL
JE NSOL
CMP AL,"y" ;JIKA USER MASUKAN y > LA
JE NLA
CMP AL,"u" ;JIKA USER MASUKAN u > SI
JE NSI
CMP AL,"i" ;JIKA USER MASUKAN o > DO HIGH
JE NDOH
CMP AL,"o" ;JIKA USER MASUKAN p > RE HIGH
JE NREH
CMP AL,"p" ;JIKA USER MASUKAN p > MI HIGH
JE NMIH
JMP Y
NDOS:
MOV AX, 2152 ;NILAI DOS
MOV STOR, AX
CALL SOUNDER ;PUTAR NADA
JMP Y
NRES:
MOV AX, 1917 ;NILAI RES
MOV STOR, AX
CALL SOUNDER ;PUTAR NADA
JMP Y
NFAS:
MOV AX, 1612 ;NILAI FAS
MOV STOR, AX
CALL SOUNDER ;PUTAR NADA
JMP Y
NSOLS:
MOV AX, 1436 ;NILAI SOLS
MOV STOR, AX
CALL SOUNDER ;PUTAR NADA
JMP Y
NLAS:
MOV AX, 1292 ;NILAI LAS
MOV STOR, AX
CALL SOUNDER ;PUTAR NADA
JMP Y
NDOHS:
MOV AX, 1076 ;NILAI NDOHS
MOV STOR, AX
CALL SOUNDER ;PUTAR NADA
JMP Y
NREHS:
MOV AX, 0958 ;NILAI NDOHS
MOV STOR, AX
CALL SOUNDER ;PUTAR NADA
JMP Y
Y :
CMP AL,"2"
JE NDOS
CMP AL,"3"
JE NRES
CMP AL,"5"
JE NFAS
CMP AL,"6"
JE NSOLS
CMP AL,"7"
JE NLAS
CMP AL,"9"
JE NDOHS
CMP AL,"0"
JE NREHS
CMP AL,"v" ;JIKA USER MASUKAN v > EXIT
JE BREAK
JMP GETIN ;LOOPING AMBIL INPUT SELANJUTNYA
FIRST:
MOV AX, 0003h
MOV BX, 0
MOV DX, 0000h
INT 10H
;PRINT EXIT
LEA DX, TIT1
MOV AH, 09H
INT 21H
LEA DX, TIT2
MOV AH, 09H
INT 21H
LEA DX, TIT3
MOV AH, 09H
INT 21H
LEA DX, TIT4
MOV AH, 09H
INT 21H
LEA DX, TIT5
MOV AH, 09H
INT 21H
LEA DX, TIT6
MOV AH, 09H
INT 21H
LEA DX, TIT7
MOV AH, 09H
INT 21H
LEA DX, TIT8
MOV AH, 09H
INT 21H
MOV AH, 08H
INT 21H
JMP MAIN
BREAK:
MOV AX, 0003h
MOV BX, 0000h
MOV DX, 0000h
INT 10H
CALL CURS_ON
;PRINT JUDUL
LEA DX, EXT1
MOV AH, 09H
INT 21H
LEA DX, EXT2
MOV AH, 09H
INT 21H
LEA DX, EXT3
MOV AH, 09H
INT 21H
LEA DX, EXT4
MOV AH, 09H
INT 21H
LEA DX, EXT5
MOV AH, 09H
INT 21H
LEA DX, EXT6
MOV AH, 09H
INT 21H
LEA DX, EXT7
MOV AH, 09H
INT 21H
LEA DX, EXT8
MOV AH, 09H
INT 21H
LEA DX, EXT9
MOV AH, 09H
INT 21H
LEA DX, EXTB
MOV AH, 09H
INT 21H
MOV AH, 08H
INT 21H
.EXIT
END